Помогите с уравнением или решением

Тема в разделе "Arduino & Shields", создана пользователем Александртмн, 23 июн 2017.

  1. Я подключил к ардуине датчик давления масла в авто. Датчик давления три провода. Плюс-модкл на 5 вольт, минус-на минус и на третьем меняется напряжение А1 пин. Сделал замеры мультиметром
    0 бара 0.51 вольт
    1 - 0.61
    2- 1.05
    3- 1.45
    4- 1.90
    5- 2.30
    6 2.75
    проверял компрессором, больше надуть не смог.
    Сделал вывод показаний напряжения на дисплей.

    но вот ума не хватает как прописать это теперь в бары учитывая мои замеры. Ну не мое это)

    Может кто подскажет, только языком для тупых)
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    ну у тебя практически линейная функция получается:
    2017-06-23_09-37-18.png
    Если промежуток 0...1 бар не очень критичен, то просто используй функцию map для всего диапазона.
    Если критичен, то сначала надо находить границы (например, значение 1,14 приходится на диапазон 2..3 бар), и уже для найденного диапазона взять функцию map - будет чуть точнее.
    Либо еще вариант - сделать более подробную таблицу(с шагом 0,5 или 0,25), загнать ее в массив и выбирать ближайшее значение.
     
  3. mcureenab

    mcureenab Гуру

    мультиметр - хорошо. только при чем тут Arduino?

    Скетч получает напряжения с пина A1 функцией в У.Е.
    int v = analogRead(A1);

    получи график давления от v.

    если на рабочем участке функция получится не линейная, можно применить кусочно - линейную аппроксимацию.
     
  4. Roman84

    Roman84 Нуб

    Если обозначить полученное напряжение переменной V (или какая там у вас в скетче), то давление можно вычислить следующим образом (исходя из ваших замеров):
    Код (C++):
    bar = map(V, 0.51, 2.75, 0, 6);
    Должно получится близко к правде, так как разница между соседними значениями приблизительно одинакова (0.4В-0.45В)
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    map не работает с дробными числами.
    Код (C++):
    float bar = map(V, 51, 275, 0, 600) / 100;
     
  6. Roman84

    Roman84 Нуб

    Ну да, простите, тогда конечно же старое доброе умножение в помощь.