NTC терморезистор – напівпровідниковий резистор, електричний опір якого істотно змінюється залежино від температури. Основними параметрами терморезистора є: номінальний опір, температурний коефіцієнт опору, інтервал робочих температур та розсіювана потужність. Технічно терморезистор це звичайни резистор, тільки у звичайних зміна опору при зміні температури незначна, тому виміряти зміну опору дуже важко.
Існує два види терморезисторів NTC та PTC, перші частіши використовуються для вимірювання температури, а другі використовуються як запобіжники. При протіканні великого струму, PTC резистор нагрівається, збільшує свій опір і цим самим розриває подачу живлення, після остигання повертається до звичайного стану.
Свою популярність NTC терморезистори набули через свою невибагливість, дешевизну та простоту використання.
Терморезистори характерезуються не лінійною зміною опору до температури. Тому для точних вимірювань температури в широкому діапазоні найчастіше використовуєтиься рівняння Стейнхарта i Харта, яке дає наближення третього порядку. Це рівняння є емпіричним виразом, який, як було визначено, є найкращим математичним виразом для температурного співвідношення опору NTC терморезисторів.
Рівняння Стейнхарта і Харта
Схема підключення
Опір R1 резистора, для максимального діапазону вимірювання має приблизно дорівнювати опору NTC при 25 °C. В нашому випадку 100кОм.
Код програми
#include <Arduino.h>
#define R_NTC 100000 // Опір терморезитора в оМ при 25 °C
#define B 3950 // 'В' кофіцієнт з даташита на терморезистор
#define SAMPLES 20 // Кількість разів зчитування
#define VCC 5.0 // Напруга живлення
#define R1 100000 // Опір резистора верхньго плеча в оМ
#define NOMINAL_T 25
#define KELVIN_T 273.15
#define NTC_PIN A0 // Пін терморезистора
void setup()
{
Serial.begin(9600);
}
float read_ntc()
{
int raw = 0;
for (int i = 0; i < SAMPLES; i++)
{
raw += analogRead(NTC_PIN);
}
raw = raw / SAMPLES;
float Vread = (VCC / 1023.00) * raw;
float R_ntc = ((VCC / (VCC - Vread)) -1) * R1;
float steinhart;
steinhart = log(R_ntc / R_NTC);
steinhart = steinhart / B;
steinhart = steinhart + 1.0 / (NOMINAL_T + KELVIN_T);
steinhart = 1.0 / steinhart;
float temperature = steinhart - KELVIN_T; // келівін -> цельсій
return temperature;
}
void loop()
{
Serial.print("Temperature: ");
Serial.println(read_ntc());
delay(2000);
}
Як розраховуємо
З схеми вище зрозуміло, що це резестивний подільник напруги в якому нам потрібно знайти R2, опір якого змінюється зі зміною температури.
Uout = Uin * (R2 / (R1 + R2))
Uin – Vcc
Uout – Vread
R1 – наш постійний резистор
R2 – NTC
Щоб знайти R2 використовуєм наступну формулу.
R2 = R1 * ((Uin / Uout) – 1)
Знаходимо Uout
float Vread = (VCC / 1023.00) * raw;
Знаходимо опір терморезитстора
float R_ntc = ((VCC / (VCC - Vread)) -1) * R1;
Тепер за допомогою спрощеного рівняння Стейнхарта і харта, вирахуєм температуру. Спрщене рівняння потребує тільки один кофіцієнт ‘B‘, замість трьох ‘A‘, ‘B‘, ‘С‘.
T = 1 / (((ln(RT / R0)) / B) + (1 / T0))
RT – виміряний опір
R0 – опір терморезистора про 25°C
B – кофіцієнт з даташита на терморезистор
T0 – 298,15 К (кельвін) 25°C (25 + 273.15)
float steinhart;
steinhart = log(R_ntc / R_NTC);
steinhart = steinhart / B;
steinhart = steinhart + 1.0 / (NOMINAL_T + KELVIN_T);
steinhart = 1.0 / steinhart;
float temperature = steinhart - KELVIN_T; // келівін -> цельсій
Термостат на Arduino з налаштуванням режиму роботи нагрівання/охолодження.