Если вы хотите измерять температуру в своём Arduino-проекте, но не хотите связываться с цифровыми датчиками вроде DS18B20 — термистор NTC отличный вариант. Он дёшевый, простой в подключении и даёт достаточно точные показания для большинства задач: от контроля нагревателя до термостата для инкубатора. Ниже — шесть реальных схем, которые я использовал в проектах и которые действительно работают.
- Как вообще работает NTC-термистор с Arduino
- Схема 1. Простейший термометр на одном термисторе
- Схема 2. Термостат с гистерезисом
- Схема 3. Измерение температуры с повышенной точностью (опорное напряжение и фильтрация)
- Схема 4. Мультиканальный термометр (несколько термисторов)
- Схема 5. Защита от перегрева с аварийным отключением
- Схема 6. Термометр с передачей данных по Bluetooth
- Сравнение схем: что выбрать под вашу задачу
- Частые ошибки при работе с NTC-термисторами
- Практические рекомендации
- Что делать дальше
Как вообще работает NTC-термистор с Arduino
NTC (Negative Temperature Coefficient) — это резистор, сопротивление которого падает при нагреве. Всё, что нужно для измерения — собрать делитель напряжения из термистора и резистора с известным номиналом, подать опорное напряжение и считать аналоговый сигнал через АЦП Arduino.
Базовая схема выглядит так: 5V → резистор известного номинала → точка измерения (аналоговый пин) → NTC-термистор → GND. Напряжение в точке измерения меняется в зависимости от температуры, и по формуле Штейнхарта-Харта можно вычислить точное значение в градусах.
Для большинства проектов достаточно упрощённой формулы с одним коэффициентом Бета. Если нужна высокая точность — используют полную формулу Штейнхарта-Харта с тремя коэффициентами, которые указываются в даташите на конкретный термистор.
Схема 1. Простейший термометр на одном термисторе
Самая базовая схема — для тех, кому нужно просто знать температуру воздуха или жидкости без особых требований к точности.
Что понадобится:
- NTC-термистор 10 кОм при 25°C
- Резистор 10 кОм (обычный, с допуском 1–5%)
- Arduino (Uno, Nano, Mega — любой)
Подключение:
- Один вывод резистора 10 кОм — к 5V Arduino
- Второй вывод резистора — к аналоговому пину A0 и одному выводу термистора
- Второй вывод термистора — к GND
В коде считываете значение analogRead(A0), пересчитываете через формулу Бета-уравнения и получаете температуру. Погрешность будет около 1–2°C в диапазоне от 0 до 70°C — для комнатного термометра более чем достаточно.
Главный подводный камень — если резистор в делителе будет сильно отличаться от сопротивления термистора при целевой температуре, диапазон измерений сузится. Поэтому номинал резистора лучше брать близким к сопротивлению термистора при той температуре, которую вы измеряете чаще всего.
Схема 2. Термостат с гистерезисом
Это одна из самых частых практических задач: включить нагреватель или вентилятор при достижении определённой температуры и выключить при другой. Без гистерезиса реле будет дёргаться каждую секунду у порогового значения.
Добавляем к базовой схеме:
- Реле модульное (5V) или MOSFET (IRLZ44N для низковольтных нагрузок)
- Диод 1N4007 параллельно обмотке реле (от помех при коммутации)
Логика работы:
- Считываем температуру с термистора
- Если температура ниже нижнего порога (например, 22°C) — включаем нагреватель
- Если температура выше верхнего порога (например, 25°C) — выключаем
- Между порогами — сохраняем текущее состояние
Разница между верхним и нижним порогом — это и есть гистерезис. Для комнатного термостата обычно достаточно 2–3°C. Для инкубатора или термобокса — 0,5–1°C, но тогда уже стоит задуматься о более точном АЦП и калибровке.
Практический совет: не ставьте реле на прямую от пина Arduino, если используете механическое реле. Ток может превысить 40 мА на пин. Лучше использовать транзистор (например, 2N2222) с базовым резистором 1 кОм.
Схема 3. Измерение температуры с повышенной точностью (опорное напряжение и фильтрация)
Стандартный АЦП Arduino работает с опорным напряжением 5V (или 3.3V на некоторых платах), и его точность — около 4,9 мВ на шаг (при 10-битном разрешении). Для термистора это даёт шаг примерно в 0,5°C. Если нужно точнее — есть несколько приёмов.
Приём 1: Внутреннее опорное напряжение 1,1V (ATmega328)
Вызываете analogReference(INTERNAL) в setup(), и АЦП начинает работать в диапазоне 0–1,1V. Шаг становится около 1 мВ — точность измерения температуры вырастает примерно в 5 раз. Но учтите: напряжение на выходе делителя не должно превышать 1,1V, значит резистор в делителе нужно пересчитать.
Приём 2: Программное усреднение
Делаете 100–200 последовательных измерений и усредняете результат. Это убирает случайный шум. Простое скользящее среднее из 10–20 последних значений тоже хорошо сглаживает показания, если температура меняется плавно.
Приём 3: Внешний АЦП (ADS1115)
Если нужна реальная точность до 0,1°C — подключайте ADS1115 (16-битный АЦП по I2C). Стоит копейки, но даёт разрешение около 0,01 мВ при соответствующей настройке. С ним вы упрётесь не в точность АЦП, а в стабильность самого термистора и опорного резистора.
Схема 4. Мультиканальный термометр (несколько термисторов)
Часто нужно измерять температуру в нескольких точках: например, внутри и снаружи корпуса, или в разных зонах теплицы. Arduino Uno имеет 6 аналоговых входов — этого достаточно для большинства задач.
Подключение:
Каждый термистор подключается по стандартной схеме делителя напряжения к своему аналоговому пину. Опорные резисторы — отдельные для каждого канала (не делите один резистор между несколькими термисторами — это даст перекрёстные помехи).
Важный момент: при переключении между аналоговыми пинами АЦП нужна задержка в несколько микросекунд, чтобы вход успел стабилизироваться. На практике — после analogRead() одного пина, перед чтением следующего подождите хотя бы 100 мкс, или просто прочитайте каждый канал дважды и используйте второй результат.
В коде удобно хранить параметры каждого термистора (сопротивление при 25°C, бета-коэффициент, номинал опорного резистора) в отдельных структурах или массивах. Это позволяет использовать разные термисторы на разных каналах без переписывания логики.
Схема 5. Защита от перегрева с аварийным отключением
Это не просто термометр, а полноценная система безопасности. Используется для защиты мощных нагревателей, блоков питания, двигателей — везде, где перегрев может привести к повреждению или пожару.
Схема:
- Термистор NTC 10 кОм + резистор 10 кОм → аналоговый вход A0
- MOSFET (IRFZ44N или аналог) управляет нагревателем
- Второй независимый порог — аварийный (например, 80°C)
- Светодиод и пищалка (бuzzer) для индикации аварии
Логика:
- Рабочий диапазон: включаем нагреватель при 20°C, выключаем при 30°C
- Если температура превышает аварийный порог — немедленно отключаем нагреватель, включаем сигнализацию
- Аварийное состояние сбрасывается только вручную (кнопкой) после того, как температура вернётся в безопасный диапазон
Критически важно: в аварийной схеме не полагайтесь только на программную логику. Если Arduino зависнет, нагреватель останется включённым. Для серьёзных проектов добавьте аппаратный компаратор (LM393), который физически разцепит цепь при превышении порога, независимо от микроконтроллера.
Схема 6. Термометр с передачей данных по Bluetooth
Полезная схема для беспроводного мониторинга температуры: в гараже, погребе, на чердаке — везде, где тянуть провода неудобно.
Компоненты:
- Arduino Nano или Pro Mini (3,3V версия)
- HC-05 или HC-06 Bluetooth-модуль
- NTC-термистор 10 кОм + резистор 10 кОм
- Батарейка 9V или Li-ion аккумулятор с повышающим преобразователем
Подключение:
Термистор — к A0 по стандартной схеме. Bluetooth-модуль — к RX/TX (аппаратный UART) или к пинам 2/3 через SoftwareSerial, если нужен программируемый UART.
Питание:
Для автономной работы важно снизить энергопотребление. Используйте режим сна Arduino (SLEEP_MODE_IDLE или SLEEP_MODE_ADC), просыпайтесь по таймеру, измеряйте температуру, отправляйте данные и снова засыпайте. При таком подходе от одного аккумулятора 18650 (2500 мАч) устройство работает несколько дней при измерении раз в минуту.
На принимающей стороне — любой смартфон с приложением Serial Bluetooth Terminal или самописное приложение на MIT App Inventor. Данные приходят в виде простой строки: «T:23.5» — легко парсится и отображается.
Сравнение схем: что выбрать под вашу задачу
| Схема | Точность | Сложность | Стоимость доп. компонентов | Для чего подходит |
|---|---|---|---|---|
| 1. Простой термометр | ±1–2°C | Минимальная | ~50 руб | Комнатный термометр, индикатор |
| 2. Термостат с гистерезисом | ±1–2°C | Низкая | ~100–200 руб | Контроль нагревателя/вентилятора |
| 3. Повышенная точность | ±0,2–0,5°C | Средняя | ~150–300 руб (ADS1115) | Лабораторные измерения, калибровка |
| 4. Мультиканальная | ±1–2°C на канал | Средняя | ~50 руб за канал | Мониторинг нескольких точек |
| 5. Защита от перегрева | ±1–2°C | Средняя | ~200–400 руб | Промышленная защита, мощные нагрузки |
| 6. Bluetooth-термометр | ±1–2°C | Высокая | ~400–600 руб | Беспроводной мониторинг |
Частые ошибки при работе с NTC-термисторами
Ошибка 1: Использование термистора без калибровки.
Допуск сопротивления у дешёвых термисторов может быть 5–10%. Если вы просто взяли номинал «10 кОм» из заголовка лота на маркетплейсе — реальное сопротивление при 25°C может быть 8 кОм или 12 кОм. Отсюда систематическая ошибка в несколько градусов. Решение: измерьте реальное сопротивление термистора при комнатной температуре мультиметром и подставьте в код.
Ошибка 2: Самогрев термистора.
Через термистор течёт ток, и он немного греется сам. При использовании резистора 10 кОм и напряжения 5V ток около 0,25 мА — самогрев минимален. Но если поставить резистор 1 кОм для увеличения диапазона напряжений, ток вырастет до 2,5 мА, и самогрев уже даёт заметную погрешность. Держите ток через термистор не выше 0,1–0,2 мА для точных измерений.
Ошибка 3: Забывают про длинные провода.
Если термистоит на расстоянии больше 30 см от Arduino, провода работают как антенна и собирают помехи. Решение — экранированный кабель или хотя бы витая пара. Ещё лучше — поставить конденсатор 100 нФ между аналоговым входом и прямо у пина Arduino.
Ошибка 4: Неправильный выбор опорного резистора.
Если вы измеряете температуру в диапазоне 0–100°C, а резистор в делителе сильно отличается от сопротивления термистора в этом диапазоне — чувствительность будет низкой на краях диапазона. Оптимально: номинал резистора равен сопротивлению термистора при средней рабочей температуре.
Ошибка 5: Использование delay() в цикле измерений.
Если вы ставите delay(1000) после каждого измерения — Arduino не делает ничего полезную целую секунду. Используйте millis() для неблокирующего кода, особенно если одновременно управляете реле, дисплеем или Bluetooth.
Практические рекомендации
Выбор термистора: для Arduino-проектов самый распространённый — 10 кОм при 25°C с бета-коэффициентом 3950. Его легко найти, и для него много готовых библиотек. Если нужен более широкий диапазон — берите 100 кОм, но тогда следите за самогревом.
Библиотеки: не пишите формулу Штейнхарта-Харта с нуля, если не хотите отладывать математику. Готовые библиотеки SteinhartHart или Thermistor уже содержат рабочий код. Главное — подставьте правильные коэффициенты для вашего термистора.
Опорный резистор: берите с допуском 1% (металлоплёночный). Дешёвые углеродистые резисторы с допуском 5–10% сведут на нет всю точность измерения. Разница в цене — копейки, а эффект значительный.
Защита входа: если термистор находится вне корпуса и возможны скачки напряжения или статические разряды — поставьте стабилитрон на 5,1V между аналоговым входом и GND. Он защитит пин Arduino от выхода из строя.
Что делать дальше
Начните со схемы 1 — простого термометра. Соберите делитель, загрузите код, убедитесь, что показания более-менее соответствуют реальной температуре. Затем уже наращивайте функциональность: добавьте гистерезис для управления реле, фильтрацию для стабильности, Bluetooth для беспроводного мониторинга.
Если проект ответственный — с мощной нагрузкой или в доступных для людей местах — обязательно добавьте аппаратную защиту, независимую от кода Arduino. Программа может зависнуть, а аппаратный компаратор — нет.
И главное: не гонитесь за точностью в десятые доли градуса, если она не нужна. Для 90% любительских и домашних проектов точность ±1°C более чем достаточна, и её можно получить без внешних АЦП и сложной калибровки.



