Опубликовано: 27.08.2018
Терморезистор (или термистор) — это такой резистор, который меняет свое электрическое сопротивление в зависимости от температуры.
Существует два вида термисторов: PTC — с положительным температурным коэффициентом, и NTC — с отрицательным. Положительный коэффициент означает, что с повышением температуры сопротивление термистора растёт. NTC-термистор ведет себя противоположным способом.
Также термисторы отличаются номинальным сопротивлением, которое соответствует комнатной температуре — 25 C°. Например, популярными являются термисторы с номиналом 100 кОм и 10 кОм. Такие термисторы часто используют в 3D-принтерах.
В этом уроке мы будет использовать термистор NTC 100K в стеклянном корпусе. Вот такой:
Чтобы измерить сопротивление термистора, подключим его в качестве нижнего плеча делителя напряжения. Среднюю же точку делителя подключим к аналоговому входу Ардуино — A0. Подобный способ использовался в уроке про фоторезистор .
Подробно об аналоговых входах Ардуино мы говорили на уроке: Аналого-цифровые преобразования — АЦП
Принципиальная схема
Внешний вид макета
Какое сопротивление должен иметь резистор в верхнем плече делителя? Как правило, используют резистор с сопротивлением, совпадающим по порядку с номиналом термистора. В нашем уроке мы используем резистор на R1 = 102 кОм, его легко получить последовательным соединением двух резисторов на 51 кОм.
Первая программа, которую мы напишем, будет вычислять сопротивление термистора в Омах.
#define SERIAL_R 102000 // сопротивление последовательного резистора, 102 кОм const byte tempPin = A0; void setup() { Serial.begin( 9600 ); pinMode( tempPin, INPUT ); } void loop() { int t = analogRead( tempPin ); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial.println(tr); delay(100); }Результат работы программы:
Можно заметить, что измеренное сопротивление термистора меньше 100 кОм, значит температура окружающей среды ниже 25 C°. Следующий шаг — вычисление температуры в градусах Цельсия.
Чтобы вычислить значение температуры используют формулу Стейнхарта — Харта:
Уравнение имеет параметры A,B и C, которые нужно брать из спецификации к датчику. Так как нам не требуется большой точности, можно воспользоваться модифицированным уравнением (B-уравнение):
В этом уравнении неизвестным остается только параметр B, который для NTC термистора равен 3950. Остальные параметры нам уже известны:
T0 — комнатная температура в Кельвинах, для которой указывается номинал термистора; T0 = 25 + 273.15; T — искомая температура, в Кельвинах; R — измеренное сопротивление термистора в Омах; R0 — номинальное сопротивление термистора в Омах.Модифицируем программу для Ардуино, добавив расчет температуры:
#define B 3950 // B-коэффициент #define SERIAL_R 102000 // сопротивление последовательного резистора, 102 кОм #define THERMISTOR_R 100000 // номинальное сопротивления термистора, 100 кОм #define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм) const byte tempPin = A0; void setup() { Serial.begin( 9600 ); pinMode( tempPin, INPUT ); } void loop() { int t = analogRead( tempPin ); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial.print("R="); Serial.print(tr); Serial.print(", t="); float steinhart; steinhart = tr / THERMISTOR_R; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= B; // 1/B * ln(R/Ro) steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= 273.15; Serial.println(steinhart); delay(100); }Результат:
Уже лучше! Программа показывает нам температуру в градусах Цельсия. Как и ожидалось, она немного ниже 25 C°.
Карта