Термостат на микроконтроллере attiny2313

Термостат на микроконтроллере attiny2313

Очередной термостат на Tiny2313 и DS18B20

Автор: СКАЗОЧНИК
Опубликовано 16.01.2017
Создано при помощи КотоРед.

Категорически приветствую всех Котов, а заодно и поздравлю с Новым 2017 годом.

Также хочу выразить благодарность котам за постоянную помощь в реализации идей: ARV, Z_h_e, Albert_V, pyzhman, Kavka, oleg110592 и другим, кого не упомянул.

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

Как это работает.

Собственно о чем речь. Заказали мне как-то изобрести простенький термостат (даже проще — термометр) и собрал я его ради интереса из того, что было под руками, а также в учебных целях (распотрошить протокол 1-Wire).

Термостат очень простой и представляет из себя устройство с семисегментным четырехразрядным индикатором. Собран на микроконтроллере ATTiny2313. Подключается к нему всего один внешний датчик DS18B20. Двумя кнопками настраивается температура верхнего порога (во всем диапазоне температур работы датчика от -55 до +125 градусов Цельсия), при нажатии на любую кнопку пропадает значок градуса в правом разряде, через некоторое время (ориентировочно 30 секунд) термостат переходит в режим контроля температуры, а значение выставленного порога сохраняется в памяти EEPROM.

В режиме контроля температуры отображается значок градуса в правом разряде индикатора. При достижении установленной температуры включается нагрузка (см. схему там транзистор с открытым коллектором) и на индикаторе в правом разряде еще появляется десятичная точка (символизирует о работе нагрузки). Когда температура упадет на пару градусов — нагрузка отключается. Вот и все!

Описаний протокола 1-Wire в сети очень много, поэтому в него уже углубляться не буду, скажу лишь одно для начинающих, что всегда старайтесь разбить большую задачу на много маленьких. Так и в программировании, не пытайтесь освоить все сразу (в том числе и из описания этого протокола, как и любого другого), разбивайте на блоки. Общение микроконтроллера с датчиком это не все сразу. Это какие-то команды и ответы на них. А команды — это байты циферок (как и ответы). А байты уже состоят из битов! Так вот! Минимальная единица информации — бит — вот с чего надо начинать в изучении и написании своей библиотеки. Все задержки/интервалы начинаете с битов чтения и записи. А если смогли записать/считать один бит, то потом уже оформляете дальше чтение и запись целого байта. А потом уже просто все — передаете команду, а подпрограммы все выполняют. ))) Надеюсь, поможет.

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

Итак, вот схема (сильно не серчайте, устройство было вообще без схемы, а схема уже потом создавалась, как модель в Протеусе, тем более по своей природе коты ленивы и я тоже):

Как видите, сама схема не отличается каким-либо разнообразием и изысками, впрочем, как и большинство устройств с микроконтроллерами. Почему она именно такая? А все очень просто, сначала я взял индикатор, потом микроконтроллер и примерил одно к другому. Так разрабатывалась печатная плата. Где выводы индикатора и микроконтроллера совпали, там и получились дорожки, а значит и порты заняты именно эти. Заметьте также, на схеме не указаны цепи питания, а на плате разводка под стабилизатор типа 7805 и конденсаторы. Настоятельно рекомендую ставить стабилизатор в корпусе ТО-220. Но если его использовать просто как термометр, то у меня дома он вообще питается от какой-то старой пятивольтовой зарядки для телефона, работает без стабилизатора.

Читайте также:  Посудомоечная машина премиум класса

Транзистор на схеме любой. На плате разведен под корпус типа SOT-23, т.е. маленький поверхностный. Рекомендую туда поставить вообще какой-нибудь полевой типа IRLML0030. Все силовые цепи по моей задумке внешние и управляются через реле.

Кстати, в архивах есть и модель Протеуса, где можно все понажимать (не забудьте указать микроконтроллеру файл с прошивкой).

Как это реализовано.


Сначала, конечно делаем ЛУТ и травим. (Рисунок платы в СпринтЛайауте прилагается)

Для эксперимента я на первый образец ставил стабилизатор типа 78L05, но его мало, т.к. индикаторы довольно много жрут. Почему и советую поставить помощнее. Слева на плате видны штырьки — это для подключения питания и нагрузки. Справа три штырька для подключения самого датчика температуры, а снизу для подключения кнопок! (всегда сверяйтесь со схемой). Также на фотографии видны провода — это припаян программатор, в конце, конечно, все они убираются.

Прошитый термостат сразу начинает показывать температуру окружающей среды. Внимание, если датчик не подключен, то он всегда будет показывать -1 градус Цельсия (по умолчанию). ))))

Давайте теперь запихаем это чудо-юдо в какой-нибудь корпус! Ведь, хоть какое-то устройство у Кота должно быть в корпусе. )

Переднее дымчатое стекло взял от какого-то принтера сломанного.

Малость шлифанем и чуток заполируем.

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

Готово! Результат см. выше.

Если кто-то захочет поменять разводку платы — пожалуйста, тогда можно применить микроконтроллер в любом корпусе. Индикатор, который использовал я называется KEM5461AG (общий катод). Были и зеленого и красного и желтого цвета. Соответственно программа под них и создавалась. У кого будут другие индикаторы по разводке ног и по общим анодам — плату и прошивку правьте сами. Тем более, я даже призываю к этому. Не следует тупо повторять конструкцию — это не по-кошачьи. Резисторы в анодах индикатора на свое усмотрение, у меня стоят 100 Ом (кстати, на схеме они не показаны, а на плате есть). Индикация динамическая, поэтому 100 Ом в самый раз. Резистор в базе транзистора тоже зависит от того транзистора, который вы будете использовать. Для биполярного пойдет в районе 1 кОм или больше. Для полевого в районе 200 Ом. И еще рекомендую базу (затвор) притянуть к земле каким-нибудь резистором в районе 10 кОм (на схеме и плате его нет).

Если у вас получилась длинная линия до датчика температуры и термометр плохо работает, попробуйте уменьшить сопротивление R1.

Надеюсь кому-нибудь да пригодится в образовательных целях.

Очередной термостат на Tiny2313 и DS18B20

Автор: СКАЗОЧНИК
Опубликовано 16.01.2017
Создано при помощи КотоРед.

Категорически приветствую всех Котов, а заодно и поздравлю с Новым 2017 годом.

Также хочу выразить благодарность котам за постоянную помощь в реализации идей: ARV, Z_h_e, Albert_V, pyzhman, Kavka, oleg110592 и другим, кого не упомянул.

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

Как это работает.

Собственно о чем речь. Заказали мне как-то изобрести простенький термостат (даже проще — термометр) и собрал я его ради интереса из того, что было под руками, а также в учебных целях (распотрошить протокол 1-Wire).

Читайте также:  1С как добавить цену в номенклатуре

Термостат очень простой и представляет из себя устройство с семисегментным четырехразрядным индикатором. Собран на микроконтроллере ATTiny2313. Подключается к нему всего один внешний датчик DS18B20. Двумя кнопками настраивается температура верхнего порога (во всем диапазоне температур работы датчика от -55 до +125 градусов Цельсия), при нажатии на любую кнопку пропадает значок градуса в правом разряде, через некоторое время (ориентировочно 30 секунд) термостат переходит в режим контроля температуры, а значение выставленного порога сохраняется в памяти EEPROM.

В режиме контроля температуры отображается значок градуса в правом разряде индикатора. При достижении установленной температуры включается нагрузка (см. схему там транзистор с открытым коллектором) и на индикаторе в правом разряде еще появляется десятичная точка (символизирует о работе нагрузки). Когда температура упадет на пару градусов — нагрузка отключается. Вот и все!

Описаний протокола 1-Wire в сети очень много, поэтому в него уже углубляться не буду, скажу лишь одно для начинающих, что всегда старайтесь разбить большую задачу на много маленьких. Так и в программировании, не пытайтесь освоить все сразу (в том числе и из описания этого протокола, как и любого другого), разбивайте на блоки. Общение микроконтроллера с датчиком это не все сразу. Это какие-то команды и ответы на них. А команды — это байты циферок (как и ответы). А байты уже состоят из битов! Так вот! Минимальная единица информации — бит — вот с чего надо начинать в изучении и написании своей библиотеки. Все задержки/интервалы начинаете с битов чтения и записи. А если смогли записать/считать один бит, то потом уже оформляете дальше чтение и запись целого байта. А потом уже просто все — передаете команду, а подпрограммы все выполняют. ))) Надеюсь, поможет.

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

Итак, вот схема (сильно не серчайте, устройство было вообще без схемы, а схема уже потом создавалась, как модель в Протеусе, тем более по своей природе коты ленивы и я тоже):

Как видите, сама схема не отличается каким-либо разнообразием и изысками, впрочем, как и большинство устройств с микроконтроллерами. Почему она именно такая? А все очень просто, сначала я взял индикатор, потом микроконтроллер и примерил одно к другому. Так разрабатывалась печатная плата. Где выводы индикатора и микроконтроллера совпали, там и получились дорожки, а значит и порты заняты именно эти. Заметьте также, на схеме не указаны цепи питания, а на плате разводка под стабилизатор типа 7805 и конденсаторы. Настоятельно рекомендую ставить стабилизатор в корпусе ТО-220. Но если его использовать просто как термометр, то у меня дома он вообще питается от какой-то старой пятивольтовой зарядки для телефона, работает без стабилизатора.

Транзистор на схеме любой. На плате разведен под корпус типа SOT-23, т.е. маленький поверхностный. Рекомендую туда поставить вообще какой-нибудь полевой типа IRLML0030. Все силовые цепи по моей задумке внешние и управляются через реле.

Читайте также:  Хранилище контактов занимает много места

Кстати, в архивах есть и модель Протеуса, где можно все понажимать (не забудьте указать микроконтроллеру файл с прошивкой).

Как это реализовано.


Сначала, конечно делаем ЛУТ и травим. (Рисунок платы в СпринтЛайауте прилагается)

Для эксперимента я на первый образец ставил стабилизатор типа 78L05, но его мало, т.к. индикаторы довольно много жрут. Почему и советую поставить помощнее. Слева на плате видны штырьки — это для подключения питания и нагрузки. Справа три штырька для подключения самого датчика температуры, а снизу для подключения кнопок! (всегда сверяйтесь со схемой). Также на фотографии видны провода — это припаян программатор, в конце, конечно, все они убираются.

Прошитый термостат сразу начинает показывать температуру окружающей среды. Внимание, если датчик не подключен, то он всегда будет показывать -1 градус Цельсия (по умолчанию). ))))

Давайте теперь запихаем это чудо-юдо в какой-нибудь корпус! Ведь, хоть какое-то устройство у Кота должно быть в корпусе. )

Переднее дымчатое стекло взял от какого-то принтера сломанного.

Малость шлифанем и чуток заполируем.

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

Готово! Результат см. выше.

Если кто-то захочет поменять разводку платы — пожалуйста, тогда можно применить микроконтроллер в любом корпусе. Индикатор, который использовал я называется KEM5461AG (общий катод). Были и зеленого и красного и желтого цвета. Соответственно программа под них и создавалась. У кого будут другие индикаторы по разводке ног и по общим анодам — плату и прошивку правьте сами. Тем более, я даже призываю к этому. Не следует тупо повторять конструкцию — это не по-кошачьи. Резисторы в анодах индикатора на свое усмотрение, у меня стоят 100 Ом (кстати, на схеме они не показаны, а на плате есть). Индикация динамическая, поэтому 100 Ом в самый раз. Резистор в базе транзистора тоже зависит от того транзистора, который вы будете использовать. Для биполярного пойдет в районе 1 кОм или больше. Для полевого в районе 200 Ом. И еще рекомендую базу (затвор) притянуть к земле каким-нибудь резистором в районе 10 кОм (на схеме и плате его нет).

Если у вас получилась длинная линия до датчика температуры и термометр плохо работает, попробуйте уменьшить сопротивление R1.

Надеюсь кому-нибудь да пригодится в образовательных целях.

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

Описание устройства

Этот электронный термостат на микроконтроллере достаточно прост и не требует много радиокомпонентов. Основа его — микроконтроллер Attiny2313, функция которого — опрос датчика температуры DS18B20, управление исполнительным устройством и вывод информации на экран трехразрядного светодиодного индикатора с общим анодом. Диапазон поддерживаемой температуры термостата можно уставить в диапазоне от 0 до 99,9 градуса.

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

В дежурном режиме на светодиодном индикаторе отображается фактическая температура. Шаг отображения температуры составляет 0,1 градуса, а при температурах ниже минус 9,9 градуса с шагом в 1 градус, так как первый разряд индикатора отображает знак минус.

Ссылка на основную публикацию
Adblock detector