Как получить температуру от автомобильного датчика ОЖ ?
- Войдите на сайт для отправки комментариев
Чт, 15/10/2015 - 14:27
Здравсвуйте, подскажите каким образом можно перевести показания автомобильного датчика температуры ОЖ в градусы?
Пример брал отсюда http://greenoakst.blogspot.ru/2012/03/arduino.html
Сам датчик подключен к 3,3В через делитель 2000 Ом
Сопротивление датчика очень не линейное
Для расчета коэффициентов Стейнхарца-Харца сделал три замера
при -15 14000 Ом
при 18 1800 Ом
при 52 840 Ом
#include <math.h> //подключаем свою библиотеку с блэкджэком и логарифмами double Steinhart(int value) { double Temp; //в итоге эта переменная станет температурой Temp = log((2048000/value-2000)); //считаем логарифм 2000 Ом это сопротивление делителя //считаем температуру из уравнения Стейнхарта-Харта Temp = 1/(0.001768+0.00005719*Temp+0.000001354*Temp*Temp*Temp); Temp = Temp-273.15;//переводим температуру в градусы Цельсия return Temp; //передаем температуру обратно в loop } void setup() { Serial.begin(9600); //стартуем последовательное соединение } void loop() { //передаем в функцию Steinhart измеренное значение и выводим температуру, которую она вернет Serial.println(int(Steinhart(analogRead(0)))); delay(5000); }
В итоге получил погоду на марсе.
Каким образом можно привязать сопротивление к градусам?
Я правильно нарисовал схему с ваших слов?
Если да то на вход ардуино пойдет 0,97Вольт.
Если ваша ардуино работаетот 5В(опорное напряжение)
Могу предложить такой простой код, но у меня работает.
Код без оверсемплинга, но думаю для того чтоб понять кипит авто или нет +/-1градус не помешают)))
Есть более точные методы, но они посложнее нужно строить кривую или искать коэфициенты в книгах.
Но это для инкубатора или чего-то требующего погрешность не более 0,1градуса.
Да, схема такая.
За пример спасибо, чуть позже попробую.
Я, например, сделал калибровку и занес результаты в двумерную матрицу. Между точками линейная апроксимация функцией map.
Этот код у меня на 5 вольтах показывает 180 градусов вместо комнатной.
Вот небольшой кусок характеристик датчика снятых с порта вот этим
В этом диапазоне зависимость достаточно ровная.
Подскажите как тперь эти данные отразить в коде?
Temp = map(R2, 870, 1765, 50, 30); это будет корректно работать на всем диапазоне измерений?
Постройте график по приведеным точкам. Соедините крайние прямой линией и все сами увидите.
Вот кривая измеренная от 3 до 50 градусов.
uragan, Можно по подробнее про двумерную матрицу? Очень бы хотелось взглянуть на пример кода. Я не программер просто. А то в голове только вариант - Разбивать кривую на мелкие кусочки и if -ами определять в какой диапазон попало значение а дальше через map ? Наверняка же есть вменяемые решения ) У математиков еще есть вариант с интерполированием функции но мне он кажется сложным.
...) У математиков еще есть вариант с интерполированием функции но мне он кажется сложным.
Вот вам формула по вашим данным полиномная для нахождения температуры зная сопротивление.
Степень приближения очень высокая в пределах кривой 0,99 почти единица!!!
Т=0,00001R^2-0.047R+83.10
(формула выведенна только для вашей кривой другим не подойдет!!!!)
Интерполированием тоже можно. Но кусочками прямых тоже ничего сложного. И если умеешь, то достаточно просто. И точность - проводишь прямые на предложенном графике и все видно. Выложить кусочки кода длч меня сложно. Ни разу не программист.
Вот как считает формула что я вам дал.