OSBoy notes.

Записки обо всём...

Термостат на ATtiny13 и DS18B20

Предлагаю свой вариант простенького бытового термостата на ATtiny13. Данный проект я пока не собирал в виде законченного устройства, а сделал только прототип на своей отладочной плате. Задумка была - сделать максимально простой термостат, который поддерживал бы положительную температуру, включая при необходимости обогреватель. За основу взят код, найденный где-то на просторах интернета, обеспечивающий взаимодействие МК с термодатчиками Dallas DS18B20 по протоколу 1Wire. Програма рассчитана на работу только с одним датчиком. Идентификатор конкретного датчика знать необязательно, т.к. программа определяет присутствие датчика автоматически и обращается к нему, минуя процесс идентификации.

[ Показать/скрыть исходный код от 02.11.2017 ]

Функции устройства

Изначально предполагалось сделать максимально простую прошивку, обеспечивающую только измерение температуры, сравнение её с заданным значением и переключение, при необходимости, реле нагрузки. Но по ходу дела я решил, что всё-таки будет целесообразно добавить пару фишек, тем более память МК это позволяет.

Индикация температуры и состояния реле

Для индикации на устройстве предусмотрены два светодиода: один - сигнализирует о текущем состоянии реле (вкл./выкл.), второй - отображает текущую температуру. Изначально, отображение температуры не предусматривалось, но в процессе написания, я где-то в коде допустил ошибку и никак не мог понять, почему неправильно срабатывает реле. Поэтому было решено сделать индикацию температуры для удобства отладки кода. Так как свободных ног у ATtiny13 мало, тут возникают некоторые затруднения. Кто-то тут использует для индикации сдвиговые регистры, кто-то - трёхцветный светодиод... Я же решил ещё больше изголиться, и обойтись обычным светодиодом! :) (впрочем, подобное решение мне позже попадалось на Youtube, так что тут я, видимо, тоже не придумал ничего принципиально нового).
Температура отображается вспышками светодиода: положительная - короткими одинарными, отрицательная - короткими двойными, при нуле градусов - светодиод загорается и гаснет примерно на одну секунду, если данные с термодатчика получить не удаётся - светодиод светится постоянно.
Хоть индикация получилась и не самая наглядная, но для отладки такой способ вполне пойдёт. Да и вообще, я решил оставить хотя бы такую индикацию - в конце концов, это второстепенная функция данного устройства. Надо заметить, что пока идёт отсчёт времени вспышек светодиода, МК простаивает, не выполняя никакой полезной работы. Но в данном случае это не важно, т.к. в фоне нам не требуется выполнения каких-либо операций, а замеры температуры достаточно делать раз в несколько секунд.

Защита от замерзания (аварийный режим)

Для макетирования этот момент может и не очень важен, но при сборке реального устройства требуется предусмотреть защиту на случай, если термодатчик выйдет из строя, либо оборвётся связь с ним. В данном случае, если текущая температура не будет получена от термодатчика в течение 1 минуты, реле нагрузки (обогревателя) отключается принудительно, дабы избежать замерзания обогреваемого объекта.
Программа рассчитана на подключение обогревателя к нормально ЗАМКНУТЫМ контактам реле. Таким образом, если отключить питание термостата, он будет работать в режиме байпаса, то есть обогреватель будет включен непрерывно.

Теги : attiny13, термостат, DS18B20, AVR, программирование, микроконтроллеры, си, C

Комментариев: 4

Виктор
#Ответить
CodeVisionAVR выдает кучу ошибок, в каком компиляторе делать hex-файл для загрузки в МК и какие фьюзы?
OSBoy
#Ответить
Я в AVR studio 4 писал. Фьюзы сейчас не скажу, я их не трогал в данном случае.
Виктор
#Ответить
А что в данной программе надо изменить, чтобы сделать охладитель, например при достижении определенной температуры включался вентилятор?
OSBoy
#Ответить
В принципе, можно ничего не менять, только указать нужную температуру в переменной setTemp, и вместо реле с нормально замкнутыми контактами, использовать реле - с нормально РАЗОМКНУТЫМИ.

Добавить комментарий

Отменить