Использование терморезистора (термистора) – один из самых простых и дешевых способов измерения температуры. Для точного измерения температуры с помощью терморезистора необходим микроконтроллер, в качестве которого в нашем проекте мы будем использовать плату Arduino. Измеренное значение температуры будет отображаться на экране ЖК дисплея. Подобная схема может найти применение в удаленных метеорологических станциях, проектах автоматизации (умного) дома, управления электронным и промышленным оборудованием.
Необходимые компоненты
- Плата Arduino (любая модель) (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- NTC thermistor 10 кОм (терморезистор с отрицательным температурным коэффициентом) (купить на AliExpress).
- Резистор 10 кОм (купить на AliExpress).
- Соединительные провода.
Работа схемы
Схема устройства представлена на следующем рисунке.
При изменении температуры изменяется сопротивление терморезистора (термистора). Но в нашей схеме мы не будем измерять сопротивление термистора напрямую, вместо этого мы использовали делитель напряжения, одним из резисторов которого является известное сопротивление 10 кОм, а вторым – наш терморезистор. Средняя точка делителя напряжения подключена к аналоговому входу A0 платы Arduino, поэтому при помощи аналогово-цифрового преобразования (АЦП) на этом контакте мы можем определить падение напряжение на терморезисторе в любой момент времени и, следовательно, и его сопротивление. Благодаря этим данным мы по формулам, приведенным ниже в данной статье, можем определить значение температуры.
Терморезистор
Ключевым компонентом нашей схемы является терморезистор, который используется для определения температуры. Термистор представляет собой резистор, сопротивление которого изменяется в зависимости от температуры. Существует два типа подобных термисторов: NTC (Negative Temperature Co-efficient - с отрицательным температурным коэффициентом) и PTC (Positive Temperature Co-efficient - с положительным температурным коэффициентом). Мы в нашем проекте будем использовать терморезистор NTC типа – его сопротивление уменьшается с повышением температуры. На следующих рисунках приведены график зависимости сопротивления подобного терморезистора от температуры и его типовой внешний вид.
Расчет температуры с помощью терморезистора
Схема используемого нами делителя напряжения представлена на следующем рисунке.
Напряжение на терморезисторе в этой схеме можно определить из известного напряжения:
Vout=(Vin*Rt)/(R+Rt).
Из этой формулы можно выразить значение сопротивления терморезистора Rt (R – известное сопротивление 10 кОм):
Rt=R(Vin/Vout)-1.
Значение Vout мы затем будем определять в коде программы с помощью считывания значения на выходе АЦП на контакте A0 платы Arduino.
Математически, сопротивление терморезистора можно вычислить с помощью известного уравнения Стейнхарта-Харта (Stein-Hart equation).
T = 1/(A + B*ln(Rt) + C*ln(Rt)3).
В этой формуле A, B и C - константы, Rt – сопротивление терморезистора, ln - натуральный логарифм.
Мы для проекта использовали терморезистор со следующими константами: A = 1.009249522×10−3, B = 2.378405444×10−4, C = 2.019202697×10−7. Эти константы можно определить с помощью данного калькулятора, введя в нем значения сопротивления терморезистора при трех значениях температуры или вы их можете непосредственно узнать из даташита на ваш терморезистор.
Таким образом, для определения значения температуры нам будет нужно только значение сопротивления терморезистора – после его определения мы просто подставляем его значение в уравнение Стейнхарта-Харта и с его помощью рассчитываем значением температуры в кельвинах. Алгоритм определения температуры в нашем проекте представлен на следующем рисунке.
Исходный код программы
Полный код программы представлен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.
Для выполнения математических операций в программе мы должны подключить заголовочный файл библиотеки “#include <math.h>”, а для работы с ЖК дисплеем – подключить библиотеку “#include <LiquidCrystal.h>". Далее в функции setup() мы должны инициализировать ЖК дисплей.
1 2 3 4 |
Void setup(){ lcd.begin(16,2); lcd.clear(); } |
Значение температуры мы будем рассчитывать в программе с помощью рассмотренного выше уравнения Стейнхарта-Харта.
1 2 3 4 5 6 7 8 9 |
float a = 1.009249522e-03, b = 2.378405444e-04, c = 2.019202697e-07; float T,logRt,Tf,Tc; float Thermistor(int Vo) { logRt = log(10000.0*((1024.0/Vo-1))); T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Stein-Hart Tc = T - 273.15; // переводим температуру из кельвинов в градусы Цельсия Tf = (Tc * 1.8) + 32.0; // переводим температуру в шкалу Фаренгейта return T; } |
Также в программе мы считываем значение с аналогового входа платы Arduino.
1 |
lcd.print((Thermistor(analogRead(0)))); |
Внешний вид работы нашего проекта показан на следующем рисунке – на ЖК дисплее выводятся значения температуры в кельвинах, градусах Цельсия и по шкале Фаренгейта.
Схему можно запитать по кабелю USB или использовать адаптер на 12 В.
Далее представлен полный текст программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <math.h> #include "LiquidCrystal.h" LiquidCrystal lcd(44,46,40,52,50,48); float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07; float T,logRt,Tf,Tc; float Thermistor(int Vo) { // функция для расчета значения температуры logRt = log(10000.0*((1024.0/Vo-1))); T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt)); // рассчитываем значение температуры в кельвинах по формуле Стейнхарта-Харта Tc = T - 273.15; // переводим температуру из кельвинов в градусы Tf = (Tc * 1.8) + 32.0; // переводим температуру в шкалу Фаренгейта return T; } void setup(){ lcd.begin(16,2); lcd.clear(); } void loop() { lcd.setCursor(0,0); lcd.print("Temp:"); lcd.print((Thermistor(analogRead(0)))); lcd.print("k "); lcd.setCursor(0,1); lcd.print((Tc)); lcd.print(" C ;"); lcd.setCursor(9,1); lcd.print((Tf)); lcd.print(" F"); delay(800); } |
Очень рад, что нашел ваш ресурс:) Мне 72, раньше (помоложе был) занимался с ардуино, всё получалось. Теперь вот возникла необходимость сделать терморегулятор для отопления. Всё, что было найдено из продаваемых образцов разных производителей - не подходит. Просто у меня свой алгоритм, свои хотелки и, соответственно, свои требования к устройству. Необходимо делать своё. И спасибо вам, что вы есть. Теперь я быстро и без труда смогу вновь войти в среду программирования этого замечательного устройства - Ардуино. Будьте здоровы и удачи вам!
Спасибо. И вам удачи.
можно поинтересоваться этим вашим алгоритмом ?
Андрей, к сожалению, вероятность мала что Юрий вам здесь ответит. Если хотите, я могу вам на ваш email прислать адрес его электронной почты (если, конечно, он его указал корректный при написании комментария). А там вы сами попробуете с ним связаться
Здравствуйте. Подскажите а для датчика пт100 такое подключение, и расчет формулы пройдет?
Датчик Темосопротивление, при 0° - 100ом.
Добрый вечер. К сожалению, не подскажу - не очень силен в этих вопросах, поэтому боюсь направить вас по "ложному следу"