Для поддержания заданной температуры, заведомо более высокой, чем окружающая, достаточно одного канала управления нагревателем. Измерение температуры с точностью до десятых долей градуса тоже излишне, вполне достаточно целых значений, для отображения которых хватит двухразрядного индикатора. Управление терморегулятором должно быть предельно простым, желательно, с помощью единственной кнопки. В итоге родилась описываемая ниже конструкция.
Аквариумные рыбки, как правило, обитатели теплых мест, поэтому комфортная для них - температура - +26...+28 °С.
В наших жилищах температура обычно ниже, поэтому необходимо подогревать воду в аквариуме, контролируя ее температуру, чтобы не допустить перегрева. Исходя из этого, можно сформулировать алгоритм работы терморегулятора: датчик температуры периодически измеряет ее, микроконтроллер выводит на цифровой индикатор результат и сравнивает его с заданным значением, принимая в зависимости от знака их разности решение о включении или выключении нагревателя.
Датчик температуры ВК1 - компактный, широко распространенный и недорогой DS18B20 с цифровым интерфейсом 1-Wire. Этот интерфейс программно и аппаратно легко реализуем с помощью любого микроконтроллера. Преимущество датчика DS18B20 еще и в том, что он калиброван изготовителем и не требует какой-либо дополнительной калибровки при эксплуатации.
Тактовую частоту микроконтроллера ATmega8A-AU (DD1) задает кварцевый резонатор ZQ1. Индикатор HG1 - светодиодный двухразрядный семиэлементный с общими катодами. Допустимый выходной ток портов микроконт-220 В роллера вполне достаточен, чтобы без дополнительных усилителей управлять светодиодным индикатором. Для упрощения вместо восьми токоограничительных резисторов в цепях анода каждого элемента индикатора установлены только два (R5 и R6) в цепях общих катодов каждого разряда. Плата за это - зависимость яркости отображаемой цифры от числа образующих ее светящихся элементов индикатора.
Управление нагревателем происходит по сигналам, формируемым микроконтроллером на выходе РСЗ. Они поступают через оптрон U1, обеспечивающий изоляцию микроконтроллерного узла от сети 220 В, на управляющий электрод симистора VS1. Соединенный последовательно с излучающим диодом оптрона светодиод HL1 служит индикатором включения нагревателя.
Напряжение питания 8 В я подавал на терморегулятор от зарядного устройства для сотового телефона Siemens. Можно использовать и другие с выходным напряжением не менее 7 В. Приобретенный интегральный стабилизатор напряжения в Екатеринбурге DA1 понижает его до 5 В.
Кнопка SB1 служит для управления регулятором. В микроконтроллере программно включен внутренний резистор, соединяющий с плюсом питания вход РВ1, к которому подключена кнопка.
Алгоритм работы терморегулятора преобразован в программу микроконтроллера с помощью среды разработки Algorithm Builder for AVR . После подачи питания на индикаторе кратковременно отображается номер версии программы. Затем с периодичностью около секунды датчик DS18B20 измеряет температуру. Результат (целое число градусов) появляется на индикаторе. После сравнения измеренной температуры с заданным пороговым значением подается или снимается сигнал включения нагревательного элемента.
Нажатием на кнопку SB1 регулятор переводят в режим индикации и регулировки порогового значения температуры. Признак этого режима - включенная в младшем разряде индикатора десятичная точка. Кратковременными нажатиями на кнопку значение на индикаторе увеличивают каждый раз на единицу. При нажатии продолжительностью более 3 с программа заносит установленное значение в энергонезависимую память микроконтроллера, а на индикатор возвращает измеренное значение температуры. Точка в младшем разряде гаснет. То же самое, но без записи нового порога в память, произойдет, если в течение 3 с нажатий на кнопку не будет.
Интервал возможных значений пороговой температуры - от 5 до 35 °С. Если по достижении числа 35 продолжать короткие нажатия на кнопку, на индикатор будут поочередно выведены буквы С (Control) и Р (Power).
Длительное нажатие на кнопку при букве С на индикаторе вызовет переход в режим индикации и установки способа управления нагревателем. Их два:
СН (Control Hot) и СС (Control Cold). В режиме СН нагреватель включен, когда температура воды ниже пороговой. Например, температура воды - 24 °С, пороговое значение - 27 °С. Нагреватель будет работать, пока температура воды не достигнет 28 °С. Затем, когда температура опустится до 26 °С, он будет выключен и вновь включен.
Если для достижения заданной температуры воду требуется охлаждать, используют режим СС. В этом случае вместо нагревателя к терморегулятору должно быть подключено охлаждающее устройство, например, обдувающий аквариум вентилятор. В этом случае при пороге 27 °С и температуре воды 28 °С вентилятор будет включен и выключен, когда температура воды упадет до 26 °С.
Если кнопку длительно удерживать нажатой при букве Р на индикаторе, терморегулятор перейдет в режим индикации и установки относительной длительности открытого и закрытого состояния симистора VS1 при работе нагревателя. Возможны режимы от Р1 (включенный нагреватель работает непрерывно до выключения) до Р9 (включенный нагреватель работает один такт из каждых девяти). Длительность такта - 0,25 с. Прерывистый режим позволяет подогревать воду не специализированным аквариумным водонагревателем мощностью около 50 Вт, а, например, обычным бытовым кипятильником мощностью 500 Вт.
Запись выбранных параметров режимов С и Р в энергонезависимую память и возвращение в основной режим происходят точно так же, как и после установки пороговой температуры.
Выводимые на индикатор измеренные значения температуры программно ограничены интервалом-9...59°С. Более низкая температура отображается как Lo, более высокая - как Hi.
В программе используются два таймера микроконтроллера. По прерываниям от TimerO с периодом около миллисекунды организованы динамическая индикация и опрос состояния кнопки SB1. По прерываниям от Timerl с периодом около 0,25 с программа отсчитывает интервалы времени и организует прерывистую работу нагревателя.
Конфигурация микроконтроллера должна соответствовать таблице.
Терморегулятор собран на плате SEM0010M-8A с установленными на заводе-изготовителе микроконтроллером ATmega8A-AU, кварцевым резонатором ZQ1, конденсаторами С2 и СЗ и не показанным на схеме разъемом программирования. Размеры платы - 42x42 мм.
Как видно, на ее свободном макетном поле смонтированы остальные детали терморегулятора, кроме датчика температуры, вынесенного в аквариум и соединенного с платой отрезком четырехпроводного телефонного кабеля. Для подключения нагревателя предусмотрена колодка с двумя винтовыми зажимами.
Вместо указанного на схеме индикатора (он снят с отслужившего свой срок системного блока компьютера) можно использовать любой семиэлементный светодиодный с общим катодом и номинальным током 5...15 мА на элемент. Для достижения приемлемой яркости придется, возможно, подобрать резисторы R5 и R6. Использование индикатора с общим анодом не исключено, но это потребует небольшого изменения программы микроконтроллера.
Оптрон МОС3062 можно заменить на МОС3162. Подойдут и подобные им с другой последней цифрой в обозначении (например, МОСЗОбЗ, МОС3163). Для них, возможно, придется изменить номинал резистора R4. Симистор VS1 может быть любого типа с соответствующим мощности нагревателя коммутируемым током и предельным напряжением в закрытом состоянии не менее 600 В.
От стабилизатора DA1 можно отказаться, если внешнее напряжение питания не превышает 5,5 В (например, используется зарядное устройство для сотовых телефонов LG). Отказаться можно и от кварцевого резонатора - в терморегуляторе нет элементов, требующих точного выдерживания интервалов времени. Некоторое исключение - датчик DS18B20, но и у него допустимый интервал длительности импульсов достаточно широк. Но чтобы перейти на использование вместо кварцевого встроенного в микроконтроллер RC-генератора на 4 МГц, потребуется скорректировать программу в части настройки таймеров и формирования программных задержек.
Налаживания устройства при правильном монтаже, как правило, не требуется. В случае отсутствия индикации температуры следует проверить питающее напряжение на входе и выходе стабилизатора DA1. Также следует проверить настройки программатора.
Плата помещена в корпус размерами 75x75x13 мм (полупрозрачную коробку для хранения мелких предметов), укрепленный на боковой стенке аквариума. В качестве нагревателя использован бытовой электрокипятильник мощностью 500 Вт (режим работы терморегулятора - Р9). Датчик DS18B20 защищен от воды обычным скотчем и погружен в нее недалеко (в 5...10 см) от нагревателя в верхней части аквариума. Желательно - в струе течения, создаваемого фильтром-аэратором. Это обеспечит равномерный прогрев толщи воды.
При программировании микроконтроллера запись в его энергонезависимую память информации о пороговой температуре и заданных режимах работы терморегулятора не предусмотрена. Поэтому первое включение следует производить, не подсоединяя к нему нагреватель. После появления на индикаторе измеренной температуры необходимо установить нужные параметры режимов С и Р. Например, СН и Р9. Затем установить требуемое пороговое значение температуры. После этого следует отключить устройство от сети, опустить нагревательный элемент в аквариум, закрепить рядом датчик температуры, соединить нагревательный элемент с терморегулятором и вновь включить его.
Пример: объем аквариума - 50 л, температура в помещении - 25 °С, нагреватель - электрокипятильник мощностью 500 Вт, установлены режимы СН и Р9, пороговая температура - 27 °С. Прогрев воды до температуры отключения нагревателя (28 °С) занял полтора часа, далее нагреватель включался и выключался с периодом около 20 мин. При касании нагревателя рукой он казался чуть теплым. Обитатели аквариума поначалу проявляли интерес к «нововведениям» - рыбки тыкались в кипятильник и сразу отплывали в сторону. Но никто не пострадал...
Устройство получилось компактным и сравнительно недорогим (дешевле имеющегося в продаже терморегулятора аналогичного назначения). В перспективе его можно усовершенствовать. Остались масса неиспользованных ресурсов микроконтроллера и место на плате. Можно, например, периодически включать фильтр или подсветку.