Ну совсем маленький термостат |
Автор ARV | |||||||||||||||||
28.01.2009 г. | |||||||||||||||||
Проект "Термостат - меньше не бывает" развился до очередной стадии миниатюрности. Почти не изменившись по физическим габаритам, он тем не менее стал еще проще по схемотехнике, а число функций стало даже больше! Развитие проекта целиком и полностью следует поставить в заслугу пользователю 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 градус, причем краткое нажатие кнопки просто изменяет значение на один шаг, а длительное нажатие приводит к ускоренному изменению, после которого знак шага меняется на противоположный. Надеюсь, все понятно. Во всяком случае, привыкнуть к этому алгоритму довольно просто, и, я надеюсь, он покажется вам удобным. Скачать файлы из фалохранилища.
Добавить в любимые (14) | Просмотров: 141068
Только зарегистрированные пользователи могут оставлять коментарии. |
« Пред. | След. » |
---|