Датчик температуры в автомобиле
- Войдите на сайт для отправки комментариев
Доброго времени суток всем.
У меня возник вопрос: можно ли не зная какой у меня в автомобиле термистор стоит, но зная зависимость сопротивления датчика от температуры охлаждающей жидкости, организовать управление цифровыми выходами в зависимости от заданной температуры.
Зависимость представленна в виде таблицы:
Температура Сопротивление
100 176
90 246
80 327
70 441
60 603
50 837
40 1180
30 1700
20 2500
.......
.......
-40 45300
Температуру планирую задавать в диапазоне от 30 до 70 градусов с шагом в 10 градусов.
без проблем
А точнее? )). На сколько я понимаю, аналоговый вход будет передовать в контроллер не сопротивление термистора, а некое число от 0 до 1023. Вопрос в том как сопоставить эти данные с моим термистором?
Закон дяди Ома в помощь. В первой табличке вместо сопротивления получится напряжение, выраженное в условных аналоговых ардуинах.
Получается, что бы откалибровать датчик, мне надо его подключить к контроллеру, и снять показания входа на определённой температуре.(ещё и температуру надо измерять). Так? А если у меня нет возможности подключить этот датчик к контроллеру на этапе программирования? ( Он у меня в блоке цилиндров стоит, а новый покупать жаба душит). Как мне найти зависимость цифр на аналоговом входе от температуры?
Вместо датчика контроллер можно откалибровать сопротивлениями на 176,246,327,441,603,837,1180,1700,2500 Ом, (реальнее, конечно же, выставлять нужные сопротивления на потенциометре, выверяя омметром). Ну а дальше, имея "опорные точки", аппроксимировать, интерполировать, или как там оно правильно называется )).
А можно калькулятором попробовать. Выходное напряжение не должно превышать максимально допустимое для аналогового входа.
Вместо датчика контроллер можно откалибровать сопротивлениями на 176,246,327,441,603,837,1180,1700,2500 Ом, (реальнее, конечно же, выставлять нужные сопротивления на потенциометре, выверяя омметром). Ну а дальше, имея "опорные точки", аппроксимировать, интерполировать, или как там оно правильно называется )).
Это первое, что мне пришло в голову. А потом я подумал вот о чём: когда я переключу уже откалиброваный ардуино на терморезистор, у него максимальные и минимальные значения будут не те, что у патенциометра, из-за этого и промежуточные значения (в условных единицах) на входе уже не будут соответствовать нужному сопротивлению. Или я ошибаюсь? Как вообще работает этот АЦП?
А можно калькулятором попробовать. Выходное напряжение не должно превышать максимально допустимое для аналогового входа.
Наверно я совсем туп. Я не понимаю что вы мне пытаетесь сказать.
Наверно я совсем туп. Я не понимаю что вы мне пытаетесь сказать.
Чтобы получить напряжение, которое вы собираетесь измерять, нужен делитель этого напряжения, состоящий из датчика и резистора.
Правда как это будет работать на нестабилизированной системе электропитания автомобиля, сказать затрудняюсь. Скорее всего, ставить на этот узел отделный стабилизатор иначе значения будут прыгать очень значительно.
Чтобы получить напряжение, которое вы собираетесь измерять, нужен делитель этого напряжения, состоящий из датчика и резистора.
Правда как это будет работать на нестабилизированной системе электропитания автомобиля, сказать затрудняюсь. Скорее всего, ставить на этот узел отделный стабилизатор иначе значения будут прыгать очень значительно.
Во время работы устройства автомобиль вапще будет не заведен. Термистор, с помощью релюшек, контроллер переведет на свое митание (5 В). Но проблема то в другом, я не понимаю как мне померить НАПРЯЖЕНИЕ. Функция analogRead() выдает условные значения, которые (как я понимаю) зависят от максимального и минимального значения патенциометра (вот щас написал и сам в этих словах засомнивался... скорее зависит от Вольт-амперной характеристики). Объясните как мне от условных значений перейти к напрряжению?
Цена деления = Uопорное/1024. При 5В опорного, 1 единица примерно 0,00488 вольта. Из за погрешностей датчика, резистора и наводок естественно будет отличаться.
P/S Второе предложение не совсем корректно написал, будет отличаться расчетный результат, цена деления не изменится.
И всё так просто... Себе голову заморочил и другим тоже мозги пудрю))))
Спасибо за ответы. Щас я его откалибрую...
И всё так просто... Себе голову заморочил и другим тоже мозги пудрю))))
Спасибо за ответы. Щас я его откалибрую...
Вы как его калибровать собираетесь без расчетов? Теперь я вас не очень понимаю.
на сколько я понял из вышесказанного все-таки прав был Araris.
Вместо датчика контроллер можно откалибровать сопротивлениями на 176,246,327,441,603,837,1180,1700,2500 Ом, (реальнее, конечно же, выставлять нужные сопротивления на потенциометре, выверяя омметром). Ну а дальше, имея "опорные точки", аппроксимировать, интерполировать, или как там оно правильно называется )).
т.е. получаем данные при каждом сопротивлении (мне их ножно только 5) они и будут соответствовать сопротивлениям как на потенциометре, так и на терморезисторе.
Общее сопротивление потенциометра неизменно, меняется соотношение плеч. В вашем случае изменяется и общее сопротивление, за счет изменения одного плеча (датчика).
Думаю, что Araris имел в виду, что общий делитель вами уже посчитан, а этими сопротивлениями вы получите конкретные значения на ардуине.
Я так измеряю. Код не мой гдето в сети сдул.
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; }Вот теперь точно всем спасибо. Въехал в тему. Но на сегодня пора завязывать.
Общее сопротивление потенциометра неизменно, меняется соотношение плеч. В вашем случае изменяется и общее сопротивление, за счет изменения одного плеча (датчика).
Думаю, что Araris имел в виду, что общий делитель вами уже посчитан, а этими сопротивлениями вы получите конкретные значения на ардуине.
Да, конечно, без делителя не будет падения напряжения, каковое, собственно, и измеряем.