Skip to content Skip to main navigation Skip to footer

Arduino и термистор

Описание


Термистор (терморезистор) – электронный компонент, меняющий своё сопротивление в зависимости от температуры. Термисторы существуют в разных корпусах, имеют разные сопротивления, B (beta) коэффициент, а также бывают NTC и PTC типа (отрицательный и положительный температурный коэффициент сопротивления). В наборе GyverKIT идёт термистор в герметичном исполнении, как на картинке справа:

  • Тип: NTC
  • Сопротивление при 25 °С: 10 кОм
  • B коэффициент: 3950
  • Измеряемый диапазон: -20.. 105 °С
  • Точность: 1%
  • Реальная точность: я сравнивал несколько термисторов с ds18b20, на участке 15.. 80 °С термисторы стабильно показывали на 0.5 °С больше. Между собой термисторы показывали одинаковое значение. Таким образом штука довольно точная и поддаётся простой калибровке.
  • Разрешение (при 10 бит АЦП): ~0.1 °С в диапазоне -10.. 60 °С и ~0.5 °С в остальных случаях

 

Подключение


Arduino сама по себе не умеет измерять сопротивление, поэтому термистор подключается фактически так же, как потенциометр: по схеме делителя напряжения центральной точкой на аналоговый пин с дополнительным резистором к VCC. Для этого в наборе идут резисторы на 10 кОм:

 

Библиотеки


В примерах на этом сайте мы будем использовать библиотеку GyverNTC. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverNTC. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Примеры


Читаем температуру

Читаем и выводим температуру в порт:

#include <GyverNTC.h>

// термистор на пине А0
// сопротивление резистора 10к
// тепловой коэффициент 3950
GyverNTC therm(0, 10000, 3950);

void setup() {
  Serial.begin(9600);
}

void loop() {
  // вывести температуру (чтение с усреднением)
  Serial.println(therm.getTempAverage());
  delay(500);
}
Фильтруем показания

Температура будет немного “шуметь”, несмотря на чтение с усреднением. Для более точных измерений можно использовать простейший фильтр – экспоненциальное скользящее среднее, которое реализуется так: filt_val += (new_val - filt_val) * k, где k – число от 0.0 до 1.0. Фильтр даёт плавное изменение, что позволяет получать максимально точное значение с течением времени. Результат работы данной программы лучше наблюдать во встроенном плоттере графиков:

// пример выводит температуру в COM порт
#include <GyverNTC.h>
GyverNTC therm(0, 10000, 3950);

void setup() {
  Serial.begin(9600);
}

float filT = 0;
void loop() {
  // получаем новые данные и фильтруем
  filT += (therm.getTemp() - filT) * 0.1;

  // выводим температуру
  Serial.println(filT);
  delay(200);
}
Несколько термисторов

Термисторы подключаются на разные аналоговые пины, каждый пин подтягивается резистором к VCC. GND у всех общая:

 

В программе создаём ещё один экземпляр класса и точно так же с ним работаем:

// пример выводит температуру в COM порт
#include <GyverNTC.h>

// термистор на пине А3
// сопротивление резистора 10к
// тепловой коэффициент 3950
GyverNTC therm1(0, 10000, 3950);
GyverNTC therm2(1, 10000, 3950);

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print(therm1.getTempAverage());
  Serial.print(',');
  Serial.println(therm2.getTempAverage());
  delay(500);
}

Видео


Домашнее задание


  • Подключить два термистора и вывести разность их показаний
  • Поиграться с коэффициентом фильтрации и временем между измерениями, сделать вывод

 

Полезный пример?

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