Датчик температуры в автомобиле

miskam2259
Offline
Зарегистрирован: 06.11.2015

Доброго времени суток всем.

У меня возник вопрос: можно ли не зная какой у меня в автомобиле термистор стоит, но зная зависимость сопротивления датчика от температуры охлаждающей жидкости, организовать управление цифровыми выходами в зависимости от заданной температуры.

Зависимость представленна в виде таблицы:

Температура                    Сопротивление

100                                         176

90                                           246

80                                           327

70                                           441

60                                           603

50                                           837

40                                          1180

30                                          1700

20                                          2500

.......

.......

-40                                       45300

Температуру планирую задавать в диапазоне от 30 до 70 градусов с шагом в 10 градусов.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

без проблем

miskam2259
Offline
Зарегистрирован: 06.11.2015

А точнее? )). На сколько я понимаю, аналоговый вход будет передовать в контроллер не сопротивление термистора, а некое число от 0 до 1023. Вопрос в том как сопоставить эти данные с моим термистором?

bwn
Offline
Зарегистрирован: 25.08.2014

Закон дяди Ома в помощь. В первой табличке вместо сопротивления получится напряжение, выраженное в условных аналоговых ардуинах.

miskam2259
Offline
Зарегистрирован: 06.11.2015

Получается, что бы откалибровать датчик, мне надо его подключить к контроллеру, и снять показания входа на определённой температуре.(ещё и температуру надо измерять). Так?  А если у меня нет возможности подключить этот датчик к контроллеру на этапе программирования? ( Он у меня в блоке цилиндров стоит, а новый покупать жаба душит). Как мне найти зависимость цифр на аналоговом входе от температуры?

Araris
Offline
Зарегистрирован: 09.11.2012

Вместо датчика контроллер можно откалибровать сопротивлениями на 176,246,327,441,603,837,1180,1700,2500 Ом, (реальнее, конечно же, выставлять нужные сопротивления на потенциометре, выверяя омметром). Ну а дальше, имея "опорные точки", аппроксимировать, интерполировать, или как там оно правильно называется )).

bwn
Offline
Зарегистрирован: 25.08.2014

А можно калькулятором попробовать. Выходное напряжение не должно превышать максимально допустимое для аналогового входа.

miskam2259
Offline
Зарегистрирован: 06.11.2015

Araris пишет:

Вместо датчика контроллер можно откалибровать сопротивлениями на 176,246,327,441,603,837,1180,1700,2500 Ом, (реальнее, конечно же, выставлять нужные сопротивления на потенциометре, выверяя омметром). Ну а дальше, имея "опорные точки", аппроксимировать, интерполировать, или как там оно правильно называется )).

Это первое, что мне пришло в голову. А потом я подумал вот о чём: когда я переключу уже откалиброваный ардуино на терморезистор, у него максимальные и минимальные значения будут не те, что у патенциометра, из-за этого и промежуточные значения (в условных единицах) на входе уже не будут соответствовать нужному сопротивлению. Или я ошибаюсь? Как вообще работает этот АЦП?

miskam2259
Offline
Зарегистрирован: 06.11.2015

bwn пишет:

А можно калькулятором попробовать. Выходное напряжение не должно превышать максимально допустимое для аналогового входа.

Наверно я совсем туп. Я не понимаю что вы мне пытаетесь сказать.

bwn
Offline
Зарегистрирован: 25.08.2014

miskam2259 пишет:

Наверно я совсем туп. Я не понимаю что вы мне пытаетесь сказать.

Чтобы получить напряжение, которое вы собираетесь измерять, нужен делитель этого напряжения, состоящий из  датчика и резистора.
Правда как это будет работать на нестабилизированной системе электропитания автомобиля, сказать затрудняюсь. Скорее всего, ставить на этот узел отделный стабилизатор иначе значения будут прыгать очень значительно.

miskam2259
Offline
Зарегистрирован: 06.11.2015

bwn пишет:

Чтобы получить напряжение, которое вы собираетесь измерять, нужен делитель этого напряжения, состоящий из  датчика и резистора.
Правда как это будет работать на нестабилизированной системе электропитания автомобиля, сказать затрудняюсь. Скорее всего, ставить на этот узел отделный стабилизатор иначе значения будут прыгать очень значительно.

Во время работы устройства автомобиль вапще будет не заведен.  Термистор, с помощью релюшек, контроллер переведет на свое митание (5 В). Но проблема то в другом, я не понимаю как мне померить НАПРЯЖЕНИЕ.  Функция analogRead() выдает условные значения, которые (как я понимаю) зависят от максимального и минимального  значения патенциометра (вот щас написал и сам в этих словах засомнивался... скорее зависит от Вольт-амперной характеристики). Объясните как мне от условных значений перейти к напрряжению?

bwn
Offline
Зарегистрирован: 25.08.2014

Цена деления = Uопорное/1024. При 5В опорного, 1 единица примерно 0,00488 вольта. Из за погрешностей датчика, резистора и наводок естественно будет отличаться.

P/S Второе предложение не совсем корректно написал, будет отличаться расчетный результат, цена деления не изменится.

miskam2259
Offline
Зарегистрирован: 06.11.2015

И всё так просто... Себе голову заморочил и другим тоже мозги пудрю))))

Спасибо за ответы. Щас я его откалибрую...

bwn
Offline
Зарегистрирован: 25.08.2014

miskam2259 пишет:

И всё так просто... Себе голову заморочил и другим тоже мозги пудрю))))

Спасибо за ответы. Щас я его откалибрую...

Вы как его калибровать собираетесь без расчетов? Теперь я вас не очень понимаю.

miskam2259
Offline
Зарегистрирован: 06.11.2015

на сколько я понял из вышесказанного все-таки прав был Araris.

Araris пишет:

Вместо датчика контроллер можно откалибровать сопротивлениями на 176,246,327,441,603,837,1180,1700,2500 Ом, (реальнее, конечно же, выставлять нужные сопротивления на потенциометре, выверяя омметром). Ну а дальше, имея "опорные точки", аппроксимировать, интерполировать, или как там оно правильно называется )).

т.е. получаем данные при каждом сопротивлении (мне их ножно только 5) они и будут соответствовать сопротивлениям как на потенциометре, так и на терморезисторе.

bwn
Offline
Зарегистрирован: 25.08.2014

Общее сопротивление потенциометра неизменно, меняется соотношение плеч. В вашем случае изменяется и общее сопротивление, за счет изменения одного плеча (датчика).
Думаю, что Araris имел в виду, что общий делитель вами уже посчитан, а этими сопротивлениями вы получите конкретные значения на ардуине.

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Я так измеряю. Код не мой гдето в сети сдул.

float temp;//переменная для температуры

//Схема  делителя для терморезистора
//   (GND)---R(termistor)------R(10kOm)---(+5V)
//                         |
//                         V
//                    (analog in)

float addr[25][2] = {//соответствие температура, сопротивление
  {
    0,32.0                                                    }
  ,
  {
    5,25.5                                                    }
  ,
  {
    10,20.0                                                    }
  ,
  {
    15,15.7                                                    }
  ,
  {
    20,12.62                                                    }
  ,
  {
    25,10.0                                                    }
  ,
  {
    30,8.24                                                    }
  ,
  {
    35,6.63                                                    }
  ,
  {
    40,5.41                                                    }
  ,
  {
    45,4.41                                                    }
  ,
  {
    50,3.62                                                    }
  ,
  {
    55,2.99                                                    }
  ,
  {
    60,2.48                                                    }
  ,
  {
    65,2.08                                                    }
  ,
  {
    70,1.75                                                    }
  ,
  {
    75,1.47                                                    }
  ,
  {
    80,1.258                                                    }
  ,
  {
    85,1.063                                                    }
  ,
  {
    90,0.905                                                    }
  ,
  {
    95,0.776                                                    }
  ,
  {
    100,0.669                                                    }
  ,
  {
    105,0.581                                                    }
  ,
  {
    110,0.505                                                    }
  ,
  {
    115,0.442                                                    }
  ,
  {
    120,0.387                                                    }
  ,
};


//
void setup()
{
//
}
void loop()
{
//
    temp=getTemp(t);
}

//------------------замер температуры----------------------
double getTemp(float V)
{
  float R;
  R=getR(V);
  int i=0;
  while (addr[i][1] >R)
  {
    i++;
  }
  double result;
  result=(R-addr[i][1])*(addr[i-1][0]-addr[i][0])/(addr[i-1][1]-addr[i][1])+addr[i][0];
  return result;
}
float getR(float V)
{
  float result;
  result=-10*V/(V-1024);
  return result;
}

 

miskam2259
Offline
Зарегистрирован: 06.11.2015

Вот теперь точно всем спасибо. Въехал в тему. Но на сегодня пора завязывать.

Araris
Offline
Зарегистрирован: 09.11.2012

bwn пишет:

Общее сопротивление потенциометра неизменно, меняется соотношение плеч. В вашем случае изменяется и общее сопротивление, за счет изменения одного плеча (датчика).
Думаю, что Araris имел в виду, что общий делитель вами уже посчитан, а этими сопротивлениями вы получите конкретные значения на ардуине.

Да, конечно, без делителя не будет падения напряжения, каковое, собственно, и измеряем.