Показания температуры с термистора
- Войдите на сайт для отправки комментариев
Пнд, 17/08/2020 - 21:02
Кодер из меня никакой, поэтому ищу человека который напишет мне правильный скетч за вознаграждение. Табличка с соотношениями сопротивлений к температурам есть в даташите этого термистора.
Напишу. Подробности на почту
barmaley2m@yandex.ru
01
//Значения из даташита
02
#define RT0 10000 // Ом
03
#define B 3977 // K
04
//--------------------------------------
05
#define VCC 5.0 //Напр-е питания
06
#define R 10000 //R=10 КОм
07
08
//переменные
09
float
RT, VR, ln, TX, T0, VRT;
10
11
void
setup
() {
12
Serial
.begin(9600);
13
T0 = 25 + 273.15;
//Температура T0 из даташита, преобразуем из цельсиев в кельвины
14
}
15
16
void
loop
() {
17
VRT = analogRead(A0);
//Считываем аналоговое значение VRT
18
VRT = (VCC / 1023.00) * VRT;
//Преобразуем в напряжение
19
VR = VCC - VRT;
20
RT = VRT / (VR / R);
//Сопротивление RT
21
22
ln = log(RT / RT0);
23
TX = (1 / ((ln / B) + (1 / T0)));
//Температура с термистора
24
25
TX = TX - 273.15;
//Преобразуем в цельсии
26
27
Serial
.print(
"Temperature:"
);
28
Serial
.print(
"\t"
);
29
Serial
.print(TX);
30
Serial
.print(
"C\t\t"
);
31
Serial
.print(TX + 273.15);
//Преобразуем в кельвины
32
Serial
.print(
"K\t\t"
);
33
Serial
.print((TX * 1.8) + 32);
//Преобразуем в фаренгейты
34
Serial
.println(
"F"
);
35
delay(1000);
36
37
}
Сделаю максимально точно, обращайтесь: petrovskyi.rv@gmail.com
а у зверя не точно ?
там зависимость от напряжения питания.
код не мой, это 15 секунд гугления на тему.
Пишите nemohack@yandex.ru
Пишите nemohack@yandex.ru
уже два месяца прошло.....
Для "точности", предлагаю правки в аналогичном стиле :) На канал A1 прицепить делитель из двух прецизионных резисторов 10 ком.
01
//Значения из даташита
02
#define RT0 10000 // Ом
03
#define B 3977 // K
04
//--------------------------------------
05
#define VCC 5.0 //Напр-е питания
06
#define R 10000 //R=10 КОм
07
//--------------------------------------
08
#define ROP 10000 // Ом, опорный резистор в аналогичном делителе
09
10
//переменные
11
float
RT, VR, ln, TX, T0, VRT, VRO, RO;
12
13
void
setup
() {
14
Serial
.begin(9600);
15
T0 = 25 + 273.15;
//Температура T0 из даташита, преобразуем из цельсиев в кельвины
16
}
17
18
void
loop
() {
19
VRT = analogRead(A0);
//Считываем аналоговое значение VRT
20
VRO = analogRead(A1);
//Считываем опорные показатели
21
22
VRO = (VCC / 1023.00) * VRO;
//Преобразуем в напряжение
23
VR = VCC - VRO;
24
RO = VRO / (VR / R);
//Сопротивление RO
25
26
VRT = (VCC / 1023.00) * VRT;
//Преобразуем в напряжение
27
VR = VCC - VRT;
28
RT = VRT / (VR / R);
//Сопротивление RT
29
30
RT= (RT*RO)/ROP;
//Корректировка по опорному резистору
31
32
ln = log(RT / RT0);
33
TX = (1 / ((ln / B) + (1 / T0)));
//Температура с термистора
34
35
TX = TX - 273.15;
//Преобразуем в цельсии
36
37
Serial
.print(
"Temperature:"
);
38
Serial
.print(
"\t"
);
39
Serial
.print(TX);
40
Serial
.print(
"C\t\t"
);
41
Serial
.print(TX + 273.15);
//Преобразуем в кельвины
42
Serial
.print(
"K\t\t"
);
43
Serial
.print((TX * 1.8) + 32);
//Преобразуем в фаренгейты
44
Serial
.println(
"F"
);
45
delay(1000);
46
}
Не проверял, мог и накосячить.
Зачем подняли эту некротему ? На дату внимания не обратил :)
А смысл мерить на делителях? Если резисторы строго одинаковые, будет 512 при любом напряжении. Проверил. То есть, напряжение мы не определим.
Напишите сразу VRO = 512.
Ну а тогда и от напряжения питания погрешности не будет. О какой погрешности разговор ? Правда в жизни это будет не совсем так, но это тема другого разговора.