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 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
// термистор на пине А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);
}
Скетч управления светодиодом от термистора
#define B 3950 // ntc коэффициент
#define RESISTOR 200000 // сопротивление резистора в омах
#define THERMISTOR 100000 // сопротивление термистора в омах
#define NOMINAL 25 // номинальная температура
#define NTC A1 // пин подключения терморезистора
#define BLU 10
#define RED 12
void setup() {
Serial.begin(9600);
pinMode(NTC, INPUT);
pinMode(BLU, OUTPUT);
pinMode(RED, OUTPUT);
}
void loop() {
int t = analogRead(NTC);
float tr = 1023.0 / t - 1;
tr = RESISTOR / tr;
Serial.print("R=");
Serial.print(tr);
Serial.print(", t=");
float steinhart;
steinhart = tr / THERMISTOR;
steinhart = log(steinhart);
steinhart /= B;
steinhart += 1.0 / (NOMINAL + 273.15);
steinhart = 1.0 / steinhart;
steinhart -= 273.15;
Serial.println(steinhart);
if (steinhart < 24) { digitalWrite(BLU, HIGH); digitalWrite(RED, LOW); }
if (steinhart >= 24) { digitalWrite(BLU, LOW); digitalWrite(RED, HIGH); }
delay(1000);
}
Дата: 2023-06-02   Автор: Админ   Просмотров: 1070
Контакты
Если у Вас есть вопросы, мы с удовольствием на них ответим.
Адрес:
Мурманская область, г.Полярный ул. Красный Горн, д.16, 3-й этаж, 34 каб.
Почта:
komarov.1988@inbox.ru
Телефон:
+7 9646829261



