Показания температуры с термистора
- Войдите на сайт для отправки комментариев
Пнд, 17/08/2020 - 21:02
Кодер из меня никакой, поэтому ищу человека который напишет мне правильный скетч за вознаграждение. Табличка с соотношениями сопротивлений к температурам есть в даташите этого термистора.
Напишу. Подробности на почту
barmaley2m@yandex.ru
//Значения из даташита #define RT0 10000 // Ом #define B 3977 // K //-------------------------------------- #define VCC 5.0 //Напр-е питания #define R 10000 //R=10 КОм //переменные float RT, VR, ln, TX, T0, VRT; void setup() { Serial.begin(9600); T0 = 25 + 273.15; //Температура T0 из даташита, преобразуем из цельсиев в кельвины } void loop() { VRT = analogRead(A0); //Считываем аналоговое значение VRT VRT = (VCC / 1023.00) * VRT; //Преобразуем в напряжение VR = VCC - VRT; RT = VRT / (VR / R); //Сопротивление RT ln = log(RT / RT0); TX = (1 / ((ln / B) + (1 / T0))); //Температура с термистора TX = TX - 273.15; //Преобразуем в цельсии Serial.print("Temperature:"); Serial.print("\t"); Serial.print(TX); Serial.print("C\t\t"); Serial.print(TX + 273.15); //Преобразуем в кельвины Serial.print("K\t\t"); Serial.print((TX * 1.8) + 32); //Преобразуем в фаренгейты Serial.println("F"); delay(1000); }Сделаю максимально точно, обращайтесь: petrovskyi.rv@gmail.com
а у зверя не точно ?
там зависимость от напряжения питания.
код не мой, это 15 секунд гугления на тему.
Пишите nemohack@yandex.ru
Пишите nemohack@yandex.ru
уже два месяца прошло.....
Для "точности", предлагаю правки в аналогичном стиле :) На канал A1 прицепить делитель из двух прецизионных резисторов 10 ком.
//Значения из даташита #define RT0 10000 // Ом #define B 3977 // K //-------------------------------------- #define VCC 5.0 //Напр-е питания #define R 10000 //R=10 КОм //-------------------------------------- #define ROP 10000 // Ом, опорный резистор в аналогичном делителе //переменные float RT, VR, ln, TX, T0, VRT, VRO, RO; void setup() { Serial.begin(9600); T0 = 25 + 273.15; //Температура T0 из даташита, преобразуем из цельсиев в кельвины } void loop() { VRT = analogRead(A0); //Считываем аналоговое значение VRT VRO = analogRead(A1); //Считываем опорные показатели VRO = (VCC / 1023.00) * VRO; //Преобразуем в напряжение VR = VCC - VRO; RO = VRO / (VR / R); //Сопротивление RO VRT = (VCC / 1023.00) * VRT; //Преобразуем в напряжение VR = VCC - VRT; RT = VRT / (VR / R); //Сопротивление RT RT= (RT*RO)/ROP; //Корректировка по опорному резистору ln = log(RT / RT0); TX = (1 / ((ln / B) + (1 / T0))); //Температура с термистора TX = TX - 273.15; //Преобразуем в цельсии Serial.print("Temperature:"); Serial.print("\t"); Serial.print(TX); Serial.print("C\t\t"); Serial.print(TX + 273.15); //Преобразуем в кельвины Serial.print("K\t\t"); Serial.print((TX * 1.8) + 32); //Преобразуем в фаренгейты Serial.println("F"); delay(1000); }Не проверял, мог и накосячить.
Зачем подняли эту некротему ? На дату внимания не обратил :)
А смысл мерить на делителях? Если резисторы строго одинаковые, будет 512 при любом напряжении. Проверил. То есть, напряжение мы не определим.
Напишите сразу VRO = 512.
Ну а тогда и от напряжения питания погрешности не будет. О какой погрешности разговор ? Правда в жизни это будет не совсем так, но это тема другого разговора.