Проект «Термостат – меньше не бывает» развился до очередной стадии миниатюрности. Почти не изменившись по физическим габаритам, он темне менее стал еще проще по схемотехнике, а число функций стало даже больше!
Развитие проекта целиком и полностью следует поставить в заслугу пользователю Toledo, который сподвиг меня на разработку. Кроме этого, Toledo приложил максимум усилий по тестированию прошивки в реальном «железе» (не былоу меня под руками нужного микроконтроллера), а так же снял видеоролик и фотографии.Он же разработал несложный вариант печатной платы. В общем, масса благодарностей ему!
Особенность устройства в том, что управление всеми режимами осуществляется одной-единственной кнопкой, причем, как показали наши с Toledo эксперименты, это весьма удобно. Учитывая неистребимое желание измерять температуру с точностьюдо десятых долей градуса, я реализовали эту возможность, совместив диапазон термометра от −55.0°С до +125.0°С с трехразрядным семисегментным индикатором. Это вторая изюминка устройства: десятые доли индицируются только в диапазоне −9.9…+99.9°С, а другие температуры отображаются уже без десятых долей. Думаю, это оптимальное решение. Третья изюминка – уже не нова: это режим двухпорогового термостата (т. е.с гистерезисом)с противофазными выходами, что позволяет использовать устройство для поддержания температуры от −50°С до +99°С как путем управления нагревателем, так и охладителем (вентилятором).
Принципиальная схема термостата
На рисунке показана схема термостата. Она элементарна, собственно говоря, это не полностью завершенное устройство, а лишь его основа: источник питания и выходные каскады можно придумать любые.
Микроконтроллер DD1 типа Atiny26, датчик DA2 – DS18S20 (если есть DS1820 – подойдет и он), его можно и нужно вынести на проводкахв нужное место подальше от нагревающихся компонентов, способных исказить показания. Питание 5В можно получить от любогоисточника –на схеме показан стабилизатор DA1 типа 7805 (или КРЕН05А). Индикатор – трехразрядный 7-сегментный «динамический» (с общими анодами или катодами – все равно). В моем случае это был «безымянный» индикатор «китайского» типа, его цоколевка определена экспериментально, поэтому номера выводов не указаны,а лишь обозначены сегменты. Кнопка SB1 – само собой любая. В прошивке реализована посегментная динамическая индикация, поэтому число токоограничительных резисторов сведено к трем,т. е.к минимуму,их сопротивление должно ограничивать ток через сегмент индикатора на уровнене более30 мА.
Выходы out1 и out2 способны выдать (или принять) ток до 40 мА, поэтому оконечный каскад может быть любым –от маломощного пятивольтового реле до мощного транзисторного ключа. Эти выходы работают всегда в противофазе.
Программа написана на языке Си, ее текст доступен, компилируется при помощи WinAVR. При компиляции обязательно нужно включать максимальную оптимизацию по размеру кода, иначе в память микроконтроллера не поместится. Кстати, в текущей версии остается свободным около 12% памяти программ – есть шанс дополнить программу еще каким-либо полезным свойством. Кстати, очень скоро это будет сделано: в прошивку будет введен дополнительный режим контроля «предельных» уровней температуры (по просьбе одного из посетителей сайта).
Для тех, кто не готов разбираться с исходными текстами, имеются 2 варианта готовых прошивок – для индикаторов с общими анодами и катодами. Перед прошивкой (или после) необходимо установить фьюзы микроконтроллера CKSEL=0100, т. е. активировать встроенный RC-генератор 8 МГц, остальные фьюзы можно оставить в предустановленномна заводе-изготовителе состоянии. Кроме прошивок, доступен исходный текст программы.
Кроме прошивок доступен для скачивания вариант печатной платы в форматеSprint Layout 5 (для SMD компонентов и упомянутого «безымянного» индикатора, установки кнопки вне платы и питания сразу от 5В-источника). Фото собранного пользователем Toledo устройства (без стабилизатора DA1 – микросхема просто для масштаба) приведено на рисунках:
Вид снизу
Вид с лицевой стороны
А вот и видео, которое, наверное, многие уже успели посмотреть в анонсе проекта.
Вот как работает устройство. Имеется 5 функциональных режимов:
Индикация температуры.
Индикация верхнего порога термостата.
Индикация нижнего порога термостата.
Коррекция верхнего порога.
Коррекция нижнего порога.
Собственно термостатирование, т. е. сравнение текущей температуры с пороговыми значениями и формирование соответствующих выходнях сигналов, ведется постоянно в любомиз рассмотренных режимов. Переключение уровня при повышении температуры на выходах происходит, когда температура превышает верхний порог, а при понижении температуры – когда опускается ниже нижнего, т. е. промежуток между значениями порогов есть гистерезис термостата.
В первом режиме на индикаторе просто отображается текущая температура.
Во втором и третьем режимах отображаются соответствующие пороги термостата. Для порогов значения задаются только в целых градусах. Чтобы можно было отличить одно значение от другого,в первом разряде индикатора дополнительно подсвечиваются сегменты А или D соответственно для верхнего и нижнего порогов.
Переключение первой тройки режимов осуществляется кратковременным нажатием на кнопку, причем только режим № 1 стабильный – остальные автоматически переходят к нему, если кнопка не нажимается более 2,5 секунд.
Из режимов индикации порогов можно перейти к режимамизменения соответствующего порога, если нажать и удерживать кнопку более 2,5 секунд. С этого момента начинается интересное (т. е. та самая изюминка управления одной кнопкой). Как только включается режим изменения значения порога, сразу начинает мерцать соответствующий сегмент А или Dна первом индикаторе (признак коррекции порога), и одновременно, пока нажата кнопка, происходит быстрое изменение значения. Дождавшись, когда порог «проскочит» желаемое значение, нужно отпустить кнопку. После этого можно кратковременными нажатиями скорректировать значение в противоположном быстрому изменению направлении. Если при удержании кнопки происходит изменение не в томнаправлении – надо отпустить ее и снова нажать надолго.
Поясню на примере. Допустим, установлены пороги -5 и +15 градусов, нужно сделать их -2 и +2. Включаем режим коррекции верхнего порога, нажав и удерживая кнопку во втором режиме. Спустя 2,5 секунды значение начинает быстро меняться в сторону увеличения. Дождавшись, когда появится на индикаторе15, отпускаем кнопку. Если не повезло и на индикаторе16 – не беда: нажимаем кнопку кратко и значение уменьшается на 1, т. е. становится 15, что и требовалось. Не трогаем кнопку 2,5 секунды – мерцание сегмента Апрекращается – снова включен режим 2. Нажимаем кнопку кратко, включая тем самым режим 3. Теперь нажимаем кнопку надолго и ждем, пока включится режим коррекции нижнего порога. Как только замерцал сегмент D, значение начинает быстро уменьшаться – ждем, пока оно не достигнет значения -2и отпускаем кнопку. Проскочили? –не беда! Кратковременным нажатием кнопки возвращаем по одному проскоченному градусу… Далее – как и ранее:не трогаем кнопку 2,5 секунды, по и после выключения режима коррекции не трогаемкнопку –в момент автоматического включения режима 1 произойдет запоминание новых значений порогов.
Попробую сформулировать алгоритм коррекции одним предложением. В режиме коррекции изменение значения осуществляется с шагом в 1 градус, причем краткое нажатие кнопки просто изменяет значение на один шаг, а длительное нажатие приводит к ускоренному изменению, после которого знак шага меняется на противоположный. Надеюсь, все понятно. Во всяком случае, привыкнуть к этому алгоритму довольно просто, и, я надеюсь,он покажется вам удобным.