Термостат на Arduino: датчик температуры, реле и управление нагрузкой
Как сделать термостат на Arduino для управления вентилятором, нагревателем или другой нагрузкой. Разбираем датчик температуры DS18B20 или NTC, пороги включения, гистерезис, реле, MOSFET, индикацию, отказ датчика и питание схемы.
Назначение термостата на Arduino
Термостат на Arduino используют там, где нагрузка должна включаться или выключаться по температуре. Это может быть вентилятор охлаждения, нагреватель, насос, сигнализация перегрева, небольшой шкаф автоматики, инкубатор, термокамера, блок питания, корпус с электроникой или другой узел, где температура влияет на работу устройства.
Arduino в такой схеме не измеряет температуру “для интереса”. Она принимает решение: температура выше порога - включить охлаждение, температура ниже порога - включить нагрев, датчик неисправен - отключить опасную нагрузку и показать ошибку. Поэтому термостат лучше сразу рассматривать как блок управления, а не как демонстрацию датчика температуры.
В простой схеме есть датчик температуры, контроллер, исполнительный элемент и нагрузка. Датчик передает значение, Arduino сравнивает его с заданным порогом, реле или MOSFET включает нагрузку. Если добавить индикацию, ручную настройку и защиту от отказа датчика, схема становится уже похожа на нормальный небольшой контроллер температуры.
Термостат должен управлять нагрузкой по устойчивому условию, а не дергать реле при каждом небольшом изменении показаний датчика. Для этого нужны пороги, гистерезис и проверка поведения в реальном режиме.
Датчик температуры DS18B20 или NTC
Для термостата на Arduino часто используют DS18B20 или NTC-термистор. DS18B20 удобен тем, что выдает цифровое значение температуры и может быть установлен в герметичном металлическом щупе. Такой датчик подходит для воды, воздуха, корпуса, трубки, радиатора или другого места, где удобно закрепить выносной датчик. Для подключения нужен один сигнальный провод, питание и общий минус, а на линии данных обычно ставят подтягивающий резистор.
NTC-термистор работает иначе. Его сопротивление меняется с температурой, а Arduino считывает напряжение с делителя через аналоговый вход. Такой вариант дешевый и компактный, но требует калибровки, правильного делителя и учета нелинейности. Если нужен просто грубый порог, NTC может быть достаточным. Если нужна более удобная работа с числом температуры, DS18B20 часто проще.
Место установки датчика не менее важно, чем его тип. Если датчик стоит далеко от нагревающегося элемента, термостат будет реагировать с задержкой. Если датчик прижат к радиатору, он покажет температуру радиатора, а не воздуха внутри корпуса. Если датчик находится в потоке вентилятора, показания будут отличаться от температуры в неподвижной зоне.
Калибровка датчиков в термостате нужна для понимания реального порога. Даже исправный датчик может показывать не ту температуру, которая важна для нагрузки, если он установлен в неправильной точке.
| Датчик | Преимущество | Что учитывать |
|---|---|---|
| DS18B20 | Цифровой выход и удобный щуп | Подтяжка линии данных и задержка измерения |
| NTC | Дешевый и компактный | Делитель, АЦП и калибровка |
| Датчик на плате | Простая установка | Измеряет температуру платы, а не объекта |
| Выносной щуп | Можно поставить в нужную точку | Провод, крепление и защита |
Порог включения и гистерезис
Если термостат включает нагрузку строго при одном пороге, реле может часто щелкать возле границы. Например, вентилятор включается при 40 градусах. Он немного охлаждает датчик, температура падает до 39.9, вентилятор выключается. Через несколько секунд температура снова поднимается, и реле включается опять. Такой режим вреден для контактов, вентилятора, блока питания и всей логики устройства.
Гистерезис решает эту проблему. Для охлаждения можно включать вентилятор при 40 градусах, а выключать только после снижения до 36-37 градусов. Для нагревателя наоборот: включать при падении ниже нижнего порога и выключать после достижения верхнего. Между этими точками нагрузка сохраняет состояние, поэтому система не реагирует на мелкие колебания.
Ширина гистерезиса зависит от объекта. Для воздуха в корпусе можно сделать несколько градусов. Для жидкости, радиатора или инкубатора диапазон выбирают осторожнее. Слишком маленький гистерезис даст частые включения. Слишком большой - заметные перепады температуры.
Полезно также добавить минимальное время работы и минимальную паузу. Например, вентилятор не выключается раньше чем через 30 секунд после запуска, даже если температура быстро упала. Это защищает нагрузку от коротких циклов и делает поведение термостата спокойнее.
Порог задает момент реакции, а гистерезис задает устойчивость работы. Без гистерезиса термостат часто превращается в щелкающий пороговый датчик.
Управление реле или MOSFET
Arduino не должна включать вентилятор, нагреватель, насос или другую нагрузку напрямую с вывода. GPIO дает логический сигнал, а исполнительная часть должна коммутировать ток нагрузки. Для этого используют реле, MOSFET, транзисторный ключ, твердотельное реле или готовый модуль.
Реле удобно, когда нужно коммутировать отдельную цепь, особенно если нагрузка питается от другого напряжения. Но реле имеет механические контакты, щелкает и изнашивается при частом переключении. Для нагревателя или вентилятора, который включается редко, реле может быть нормальным решением. Если переключения частые, стоит подумать о MOSFET или другом электронном ключе.
MOSFET подходит для постоянного тока: вентиляторы 12 В, светодиодные ленты, небольшие нагреватели постоянного тока, клапаны, насосы. Он не щелкает и может работать часто, но его нужно выбирать по току, напряжению, сопротивлению открытого канала и уровню управления затвором. Не каждый MOSFET нормально открывается от 5 В Arduino, а для 3.3 В контроллеров выбор еще строже.
Если нагрузка индуктивная, например реле, клапан, вентилятор или насос постоянного тока, нужна защита от выбросов. Диод, TVS или другая защита ставится не для красоты, а чтобы ключ и контроллер не ловили импульс при отключении нагрузки. Диод в цепи питания и защиты платы особенно важен рядом с катушками и двигателями.
Нагрузка термостата
Термостат может управлять разными нагрузками, и для каждой нагрузки важны свои ограничения. Вентилятор имеет пусковой ток и создает помехи при включении. Нагреватель потребляет заметную мощность и требует контроля температуры корпуса. Насос может работать с водой и иметь риск сухого хода. Реле может коммутировать внешнюю цепь, но само требует защиты катушки. Сигнализация или светодиодная индикация проще, но тоже должна иметь правильное питание.
Если нагрузка питается от 12 В, а Arduino от 5 В, нужно разделить силовую и логическую часть. Это не значит, что они полностью изолированы, но ток нагрузки не должен идти через плату контроллера. Общий минус для управления MOSFET обычно нужен, но силовой путь должен быть отдельным.
Для сетевого напряжения требования строже. Если термостат управляет нагрузкой 220 В, нужна изоляция, корпус, клеммы, зазоры, защита, предохранитель и понимание электробезопасности. В таком случае готовое реле или твердотельный модуль должны соответствовать нагрузке, а сборка не должна оставаться на макетной плате.
Мощность элементов в цепи нагрузки нужно учитывать так же внимательно, как и температуру. Если нагреватель, вентилятор или ключ работают на пределе, термостат может сам стать источником перегрева.
Индикация и настройка порога
Термостату нужна понятная индикация состояния. Минимально полезно показывать питание, состояние нагрузки и ошибку датчика. Если есть дисплей, можно вывести текущую температуру, порог включения, порог выключения и режим работы. Без индикации сложно понять, почему нагрузка не включилась: температура ниже порога, датчик не отвечает, питание просело или включен ручной запрет.
Порог можно задавать в прошивке, подстроечным резистором, кнопками, энкодером или через интерфейс. Для простого устройства фиксированного порога достаточно. Если термостат будут настраивать под разные условия, лучше предусмотреть нормальный способ изменения значения без перепрошивки.
Подстроечный резистор кажется простым вариантом, но его нужно читать через АЦП и фильтровать показания. Кнопки и дисплей дают более понятную настройку, но усложняют корпус и интерфейс. Энкодер удобен для меню, если устройство должно часто перенастраиваться.
Подстроечный резистор полезен для простой регулировки порога, но в готовом устройстве нужно учитывать доступ к нему, фиксацию настройки и защиту от случайного изменения.
Настройка порога должна быть понятной тому, кто будет пользоваться термостатом после сборки. Если для изменения температуры каждый раз нужен компьютер, это уже не самостоятельный блок управления.
Отказ датчика температуры
Термостат должен иметь понятное поведение при отказе датчика. Если DS18B20 не отвечает, линия оборвана, NTC отключился или аналоговый вход показывает невозможное значение, контроллер не должен продолжать управлять нагрузкой как будто все нормально. Для нагревателя это особенно важно: при потере датчика безопаснее отключить нагрев и показать ошибку.
Для вентилятора логика может быть другой. Если термостат защищает электронику от перегрева, при отказе датчика иногда безопаснее включить вентилятор постоянно или перейти в аварийный режим. Для насоса, клапана или другой нагрузки решение зависит от риска. В любом случае ошибка датчика должна быть отдельным состоянием, а не случайным числом в расчетах.
Признаки отказа можно проверять программно. DS18B20 может вернуть ошибочное значение или не ответить на запрос. NTC может дать напряжение за пределами допустимого диапазона при обрыве или коротком замыкании. Аналоговый вход можно проверять на слишком низкое, слишком высокое или неподвижное значение.
Питание контроллера и нагрузки
Питание термостата нужно проектировать с учетом нагрузки. Arduino может потреблять немного, но вентилятор, реле, нагреватель, насос или дисплей добавляют ток и помехи. Если все питается от одного слабого адаптера, при включении нагрузки напряжение может просесть, контроллер перезагрузится, а термостат потеряет управление.
Для 12-вольтовой системы часто удобно использовать один источник 12 В для нагрузки и понижающий DC-DC преобразователь до 5 В для Arduino. Тогда силовая нагрузка получает свое питание, а контроллер - стабильную линию. При этом общий минус и разводка должны быть сделаны так, чтобы ток нагрузки не проходил через чувствительную часть датчика.
Линейный стабилизатор может подойти для маленького тока, но если из 12 В делать 5 В для контроллера, дисплея, реле и датчиков, он может греться. LM7805 в реальной схеме питания требует расчета рассеиваемой мощности, особенно если устройство работает долго и находится в корпусе.
Питание датчика температуры желательно держать стабильным. Для DS18B20 важна нормальная линия данных и подтяжка. Для NTC важна стабильность опорного напряжения АЦП и аккуратная земля. Если нагрузка создает просадки, аналоговое измерение может начать плавать.
Корпус и размещение датчика
Корпус термостата должен разделять электронику, нагрузку и датчик. Если датчик измеряет воздух, ему нужен доступ к воздуху, а не закрытая зона рядом с горячим стабилизатором. Если датчик прижимается к радиатору, нужно обеспечить нормальный тепловой контакт. Если щуп идет наружу, провод должен быть закреплен и защищен от перегиба.
Нельзя размещать датчик рядом с элементами, которые греются сами: линейный стабилизатор, силовой резистор, реле, MOSFET, клемма нагрузки, блок питания. В таком случае термостат будет измерять температуру собственной платы, а не объекта. Иногда это нужно, например для защиты блока питания, но тогда это должно быть осознанным решением.
Для нагрузки 220 В корпус становится частью безопасности. Клеммы должны быть закрыты, провода зафиксированы, а пользователь не должен иметь доступ к опасным точкам при настройке. Макетная плата и свободные перемычки не подходят для готового термостата с сетевой нагрузкой.
Корпус электронного устройства в термостате влияет не только на внешний вид. Он определяет охлаждение, безопасность, место датчика, доступ к настройке и защиту проводов.
Проверка работы термостата
Проверять термостат нужно не только по включению реле. Система должна пройти несколько режимов: температура ниже порога, температура выше порога, возврат после охлаждения или нагрева, отказ датчика, включение нагрузки, длительная работа и поведение после перезапуска питания.
Сначала проверяют датчик без нагрузки. Нужно убедиться, что температура меняется плавно и значения похожи на реальные. Затем проверяют пороги и гистерезис. Нагрузка должна включаться и выключаться не возле одной точки, а в заданном диапазоне. После этого подключают реальную нагрузку и смотрят питание контроллера при включении.
Минимальная проверка:
- питание Arduino без нагрузки;
- показания датчика при комнатной температуре;
- реакция датчика на нагрев или охлаждение;
- включение нагрузки по верхнему или нижнему порогу;
- выключение нагрузки по порогу возврата;
- отсутствие частого щелканья реле;
- поведение при отключении датчика;
- просадка питания при включении нагрузки;
- нагрев ключа, реле, стабилизатора и клемм;
- работа в корпусе;
- повторный запуск после отключения питания.
Термостат как небольшой блок управления
Термостат на Arduino может быть простым, но в нем уже есть все признаки реального устройства: датчик, логика, исполнительный ключ, нагрузка, питание, корпус и аварийные режимы. Если сделать только измерение температуры и включение реле, схема будет работать на демонстрации. Если добавить гистерезис, защиту от отказа датчика, нормальное питание и проверку нагрузки, получится полезный блок управления.
Главное - не считать термостат отдельной программой для Arduino. Это связка датчика, места установки, нагрузки и условий работы. Вентилятор, нагреватель, насос или сигнализация требуют разного подхода к ключу, питанию и безопасному состоянию.
Нормальный термостат не щелкает реле возле порога, не зависает при просадке питания, не оставляет нагреватель включенным при отказе датчика и не требует компьютера для каждой настройки. Именно эти детали отличают рабочее устройство от временной схемы на столе.

Комментарии (0)