View Categories

NTC термистор

Термистор (терморезистор) – электронный компонент, меняющий своё сопротивление в зависимости от температуры, что позволяет использовать его как датчик температуры в самых разных сценариях. Термисторы существуют в разных корпусах, имеют разные сопротивления, 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);
}

Полезные страницы #

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх