Термистор (терморезистор) – электронный компонент, меняющий своё сопротивление в зависимости от температуры, что позволяет использовать его как датчик температуры в самых разных сценариях. Термисторы существуют в разных корпусах, имеют разные сопротивления, B (beta) коэффициент, а также бывают NTC и PTC типа (отрицательный и положительный температурный коэффициент сопротивления).
![]() |
В наборе GyverKIT | START | IOT | EXTRA |
---|---|---|---|---|
Термистор | ✔ | ✔ |
Характеристики термистора из набора (на картинке справа):
- Тип: NTC
- Сопротивление при 25 °С: 10 кОм
- B коэффициент: 3950
- Измеряемый диапазон: -20.. 105 °С
- Точность: 1%
- Реальная точность: я сравнивал несколько термисторов с ds18b20, на участке 15.. 80 °С термисторы стабильно показывали на 0.5 °С больше. Между собой термисторы показывали одинаковое значение. Таким образом штука довольно точная и поддаётся простой калибровке
- Разрешение (при 10 бит АЦП): ~0.1 °С в диапазоне -10.. 60 °С и ~0.5 °С в остальных случаях
Подключение к Arduino #
Arduino сама по себе не умеет измерять сопротивление, поэтому термистор подключается фактически так же, как потенциометр: по схеме делителя напряжения центральной точкой на аналоговый пин с дополнительным резистором на верхнее плечо. Можно использовать резистор на 10 кОм из набора GyverKIT:
Программирование #
Опрос температуры сводится к чтению аналогового сигнала и преобразованию его к температуре - точность показаний будет зависеть от точности указанного значения резистора, точности и линейности АЦП, качества питания, длины проводов и наличия внешних помех. Значения всё равно могут "шуметь", но шум можно отфильтровать программно.
Термистор меняет своё сопротивление по нелинейному закону, для перевода "сигнала" в градусы используется уравнение Стейнхарта-Харта. Для удобства можно использовать библиотеку GyverNTC - её можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverNTC. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Измерение напрямую
#include <GyverNTC.h>
#define NTC_PIN 0 // пин A0
#define RES_RES 10000 // резистор делителя 10 кОм
#define NTC_B 3950 // Бета коэф. термистора
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println(NTC_compute(analogRead(NTC_PIN), RES_RES, NTC_B));
delay(100);
}
Усреднение через класс
#include <GyverNTC.h>
#define NTC_PIN 0 // пин A0
#define RES_RES 10000 // резистор делителя 10 кОм
#define NTC_B 3950 // Бета коэф. термистора
GyverNTC ntc(NTC_PIN, RES_RES, NTC_B);
void setup() {
Serial.begin(115200);
}
void loop() {
// библиотека сама вызовет analogRead несколько раз и усреднит
Serial.println(ntc.getTempAverage());
delay(100);
}
Фильтрация скользящим средним
#include <GyverNTC.h>
#define NTC_PIN 0 // пин A0
#define RES_RES 10000 // резистор делителя 10 кОм
#define NTC_B 3950 // Бета коэф. термистора
void setup() {
Serial.begin(115200);
}
void loop() {
static float filtTemp;
filtTemp += (NTC_compute(analogRead(NTC_PIN), RES_RES, NTC_B) - filtTemp) * 0.2;
Serial.println(filtTemp);
delay(100);
}
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками