Добавить в корзинуПозвонить
Найти в Дзене

Универсальный регулятор температуры на Arduino Uno

Как собрать своими руками из готовых модулей, программа универсального терморегулятора на Arduino Uno. Идея собрать такой прибор возникла у меня по необходимости. Мне по роду работы нужно нагревать различные вещества с некоторой заданной, постоянной скоростью. Это так называемый линейный нагрев. Такой способ используется, например, при исследовании процессов "теплового взрыва" и дифференциального термического анализа. Конечно, такие терморегуляторы уже существуют. Но, во-первых, такие приборы достаточно сложны в управлении и настройке, они не универсальны. Получить от них зависимость температуры от времени невозможно. А для проведения экспериментов это принципиально важно. Кроме того, такой прибор стоит денег и что делать с ним, если необходимость в терморегуляторе пропадет? Поэтому я решил собрать свой терморегулятор, которым я мог бы управлять так, как хочу. Примерно полгода тому назад я заказывал с Aliexpress стартовый набор Arduino Uno. Ну и как обычно, поигрался, собрал с десяток

Как собрать своими руками из готовых модулей, программа универсального терморегулятора на Arduino Uno.

Идея собрать такой прибор возникла у меня по необходимости. Мне по роду работы нужно нагревать различные вещества с некоторой заданной, постоянной скоростью. Это так называемый линейный нагрев.

Такой способ используется, например, при исследовании процессов "теплового взрыва" и дифференциального термического анализа. Конечно, такие терморегуляторы уже существуют. Но, во-первых, такие приборы достаточно сложны в управлении и настройке, они не универсальны.

Получить от них зависимость температуры от времени невозможно. А для проведения экспериментов это принципиально важно. Кроме того, такой прибор стоит денег и что делать с ним, если необходимость в терморегуляторе пропадет?

Поэтому я решил собрать свой терморегулятор, которым я мог бы управлять так, как хочу. Примерно полгода тому назад я заказывал с Aliexpress стартовый набор Arduino Uno. Ну и как обычно, поигрался, собрал с десяток разных устройств и забросил.

И тут я подумал, почему бы не собрать на плате Arduino Uno свой терморегулятор. В наборе кроме самой платы были модуль реле и часов реального времени. Реле - для включения и выключения электропечи а часы для того, чтобы знать, какая температура должна быть в данный момент времени, сравнивать с текущей и управлять реле.

Внешний вид прибора
Внешний вид прибора

Температуру можно рассчитать по формуле: T = T0 + V * t, где T - текущая, T0 - начальная температура, V - скорость нагрева а t - время в секундах, которое прошло с момента включения программы нагрева. Алгоритм простой и надежный.

Осталось решить, как измерять температуру. Температура в печи у меня будет до 1000 С, поэтому для измерения вполне подойдет термопара типа К (хромель-алюмелевая). Термопар у меня скопилось несколько от мультиметров, так что проблем нет.

Для того, чтобы преобразовать напряжение с термопары в температуру я использовал модуль на основе микросхемы MAX6675. Микросхема содержит термопарный усилитель с компенсацией температуры холодного спая, аналого-цифровой преобразователь и драйвер SPI интерфейса для подключения к микроконтроллеру.

Выводы D0 (S0), CS, CLK (SCK) подключаются к портам 12, 10, 13 соответственно. Впрочем, это могут быть и другие цифровые выводы, их можно назначить в скетче. Выводы питания подключаются непосредственно к плате. Для работы с модулем нужно скачать и установить библиотеку MAX6675.h.

Модуль цифровых часов тоже работает по SPI интерфейсу и подключается к портам 3,4,5. Работу с модулем обеспечивает библиотека iarduino_RTC.h. Модуль реле подключается к порту 7 и питанию платы. Следует учитывать, что вход реле инверсный. То есть контакты реле замыкаются при лог. "0" на входе. Впрочем это не проблема, так как у реле есть и нормально замкнутые и нормально разомкнутые контакты.

Реле рассчитано на ток до 10 А при напряжении 220 В, поэтому печь я подключил непосредственно к контактам реле. Рабочий ток печи 1-2 А при напряжении 150-200 В.

Вид изнутри
Вид изнутри

Как видите, ничего сложного нет и такой термоконтроллер может собрать даже ребенок. Осталось только написать скетч для управления устройством. Прибор не имеет никаких органов управления. Настройка, запуск и останов программы осуществляется с компьютера через COM - порт с помощью специальных текстовых команд.

Особенность платы Arduino Uno в том, что содержит эмулятор COM порта, который работает через USB интерфейс. То есть достаточно подключить плату к USB разъему компьютера мы автоматически получаем доступ к COM порту. Кроме того, с USB разъема мы получаем еще и питание прибора. Это очень удобно.

Ну и наконец сам скетч. Строки 1-40 это инициализация модулей, описание и инициализация COM порта, переменных и т.д. Подпрограмма void HeatherStat(boolean Stat, boolean Echo) управляет нагревателем. Stat = true для включения и false для выключения. В ней предусмотрена возможность вывода в порт состояния нагревателя (ON/OFF) для удобства.

Подпрограмма void ParseCommand() "разбирает" команду, полученную с порта на составные части. Сама команда состоит из тела и параметров. Составные части разделяются символом "пробел". Например у команды "start", которая запускает программу нагрева тело - "start" и нет параметров.

А у команды "velosity", которая устанавливает скорость нагрева, один параметр - значение скорости. То есть для того, чтобы установить скорость нагрева 10 градусов в минуту, в порт следует послать "velosity 10". То же относится и ко всем остальным командам.

Такой способ "общения" удобен тем, что управлять устройством можно с помощью стандартной программы монитора порта, которая есть в любой версии Windows. Кроме того, монитор порта есть и в оболочке Arduino. Так что писать специальную программу для работы с прибором нет нужды.

Основной цикл программы - это последовательное чтение команда из порта, ее парсинга и отработки. Обратите внимание, что в Arduino буфер порта не очищается, и посланная команда навсегда "застревает". То есть отправив команду "gettherm" прибор будет бесконечно посылать в порт значение текущей температуры.

Поэтому, чтобы получить только одно значение температуры, нужно подать последовательно две команды "gettherm" и "nop", которая ничего не делает но "выталкивает" предыдущую команду из буфера.

Команда "Start" запускает программу линейного нагрева. Вначале определяется, прошла ли 1 секунда с момента предыдущего цикла (if(millis()%1000==0){ // если прошла 1 секунда). И если секунда прошла, то из модуля MAX6675 считываем текущее значение температуры, определяем сколько секунд прошло с момента старта.

Потом рассчитываем, какая температура должна быть с учетом скорости нагрева и сравниваем с текущей. Если вычисленная температура больше текущей, включаем печь, если наоборот, выключаем. В порт выводим текущую температуру, вычисленную и состояние нагревателя. Для безопасности проверяем не превышена ли максимальная температура в этом случае останавливаем программу и выключаем печь.

Выход из программы осуществляется по команде "stop". Остальные команды служат для тестирования и диагностики прибора.

Если от прибора требуются какие то другие функции, например поддержание температуры, то достаточно ввести в программу обработчик нужной команды и прибор будет работать так, как вам нужно. Поэтому мой терморегулятор можно смело назвать универсальным.

Если вы захотите повторить мое устройство, ссылки на сам скетч, библиотеки я выложу в конце статьи. Авторских прав на него не предъявляю.

Как собирать и программировать подобные устройства я буду обучать детей в своей онлайн-школе для юных радиолюбителей.

Познакомиться с моим проектом на платформе Airfunding вы можете перейдя по этой ссылке. А если вам нравится моя идея и вы готовы хотя бы морально поддержать мой проект, поставьте ЛАЙК!

Я надеюсь, что вы поделитесь с моим проектом в соцсетях. Для этого перейдите по ссылке на проект и нажмите на кнопку [Помоги при помощи распространения].

Ну а если вы готовы сделать реальный вклад в создание школы, нажмите кнопку [поддержать] и перечислить на счет проекта любую, даже самую минимальную сумму денег!

Поставьте ЛАЙК если статья была для вас полезна!

Напишите свое мнение в комментариях!

Подпишитесь на канал!

Здесь можно взять скетч устройства, библиотеку MAX6675.h и iarduino_RTC.h.