Очередной термостат на Tiny2313 и DS18B20
Автор: СКАЗОЧНИК Категорически приветствую всех Котов, а заодно и поздравлю с Новым 2017 годом. Также хочу выразить благодарность котам за постоянную помощь в реализации идей: ARV, Z_h_e, Albert_V, pyzhman, Kavka, oleg110592 и другим, кого не упомянул... Наконец-то и я решил опубликовать на любимом сайте свое творение, долго не решался, но подобных термостатов было собрано уже штук 6 и все исправно трудятся в течение года. Все они включают/выключают различные вентиляторы для охлаждения при достижении "верхней" температуры.
Как это работает. Собственно о чем речь. Заказали мне как-то изобрести простенький термостат (даже проще - термометр) и собрал я его ради интереса из того, что было под руками, а также в учебных целях (распотрошить протокол 1-Wire). Термостат очень простой и представляет из себя устройство с семисегментным четырехразрядным индикатором. Собран на микроконтроллере ATTiny2313. Подключается к нему всего один внешний датчик DS18B20. Двумя кнопками настраивается температура верхнего порога (во всем диапазоне температур работы датчика от -55 до +125 градусов Цельсия), при нажатии на любую кнопку пропадает значок градуса в правом разряде, через некоторое время (ориентировочно 30 секунд) термостат переходит в режим контроля температуры, а значение выставленного порога сохраняется в памяти EEPROM. В режиме контроля температуры отображается значок градуса в правом разряде индикатора. При достижении установленной температуры включается нагрузка (см. схему там транзистор с открытым коллектором) и на индикаторе в правом разряде еще появляется десятичная точка (символизирует о работе нагрузки). Когда температура упадет на пару градусов - нагрузка отключается. Вот и все! Об 1-Wire. Описаний протокола 1-Wire в сети очень много, поэтому в него уже углубляться не буду, скажу лишь одно для начинающих, что всегда старайтесь разбить большую задачу на много маленьких. Так и в программировании, не пытайтесь освоить все сразу (в том числе и из описания этого протокола, как и любого другого), разбивайте на блоки. Общение микроконтроллера с датчиком это не все сразу. Это какие-то команды и ответы на них. А команды - это байты циферок (как и ответы). А байты уже состоят из битов! Так вот! Минимальная единица информации - бит - вот с чего надо начинать в изучении и написании своей библиотеки. Все задержки/интервалы начинаете с битов чтения и записи. А если смогли записать/считать один бит, то потом уже оформляете дальше чтение и запись целого байта. А потом уже просто все - передаете команду, а подпрограммы все выполняют. ))) Надеюсь, поможет. И сейчас меня может начнут пинать, но я все равно сделал по своему. Если внимательно изучите исходник (а он на ассемблере с комментариями), то увидите, что у меня нет определения адреса датчика, как и нет подсчетов контрольных сумм. Поэтому и датчик в моем термостате всего один. В любом случае, исходный код свободный и открытый, так что для усовершенствования годится - дерзайте, исправляйте и цепляйте кучу датчиков. ))) А можем и вместе покумекать, тогда вопросы на форум, будут интересные идеи - доработаем. Схема. Итак, вот схема (сильно не серчайте, устройство было вообще без схемы, а схема уже потом создавалась, как модель в Протеусе, тем более по своей природе коты ленивы и я тоже):
Как видите, сама схема не отличается каким-либо разнообразием и изысками, впрочем, как и большинство устройств с микроконтроллерами. Почему она именно такая? А все очень просто, сначала я взял индикатор, потом микроконтроллер и примерил одно к другому. Так разрабатывалась печатная плата. Где выводы индикатора и микроконтроллера совпали, там и получились дорожки, а значит и порты заняты именно эти. Заметьте также, на схеме не указаны цепи питания, а на плате разводка под стабилизатор типа 7805 и конденсаторы. Настоятельно рекомендую ставить стабилизатор в корпусе ТО-220. Но если его использовать просто как термометр, то у меня дома он вообще питается от какой-то старой пятивольтовой зарядки для телефона, работает без стабилизатора. Транзистор на схеме любой. На плате разведен под корпус типа SOT-23, т.е. маленький поверхностный. Рекомендую туда поставить вообще какой-нибудь полевой типа IRLML0030. Все силовые цепи по моей задумке внешние и управляются через реле. Кстати, в архивах есть и модель Протеуса, где можно все понажимать (не забудьте указать микроконтроллеру файл с прошивкой). Как это реализовано.
Для эксперимента я на первый образец ставил стабилизатор типа 78L05, но его мало, т.к. индикаторы довольно много жрут. Почему и советую поставить помощнее. Слева на плате видны штырьки - это для подключения питания и нагрузки. Справа три штырька для подключения самого датчика температуры, а снизу для подключения кнопок! (всегда сверяйтесь со схемой). Также на фотографии видны провода - это припаян программатор, в конце, конечно, все они убираются.
Прошитый термостат сразу начинает показывать температуру окружающей среды. Внимание, если датчик не подключен, то он всегда будет показывать -1 градус Цельсия (по умолчанию). ))))
Давайте теперь запихаем это чудо-юдо в какой-нибудь корпус! Ведь, хоть какое-то устройство у Кота должно быть в корпусе. )
Переднее дымчатое стекло взял от какого-то принтера сломанного.
Малость шлифанем и чуток заполируем.
Ну и покрасим подходящей краской из баллона, предварительно заклеив переднюю панель малярным скотчем.
Готово! Результат см. выше. Если кто-то захочет поменять разводку платы - пожалуйста, тогда можно применить микроконтроллер в любом корпусе. Индикатор, который использовал я называется KEM5461AG (общий катод). Были и зеленого и красного и желтого цвета. Соответственно программа под них и создавалась. У кого будут другие индикаторы по разводке ног и по общим анодам - плату и прошивку правьте сами. Тем более, я даже призываю к этому. Не следует тупо повторять конструкцию - это не по-кошачьи. Резисторы в анодах индикатора на свое усмотрение, у меня стоят 100 Ом (кстати, на схеме они не показаны, а на плате есть). Индикация динамическая, поэтому 100 Ом в самый раз. Резистор в базе транзистора тоже зависит от того транзистора, который вы будете использовать. Для биполярного пойдет в районе 1 кОм или больше. Для полевого в районе 200 Ом. И еще рекомендую базу (затвор) притянуть к земле каким-нибудь резистором в районе 10 кОм (на схеме и плате его нет). Если у вас получилась длинная линия до датчика температуры и термометр плохо работает, попробуйте уменьшить сопротивление R1. Надеюсь кому-нибудь да пригодится в образовательных целях. Все вопросы как всегда в форум.
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
|
||||