Пролог
С появлением дома газового котла с электронным управлением, жить, как бы сказать, становится приятнее. Улучшив этот момент простым термостатом с двумя кнопочками и семисегментником, показалось что совсем все хорошо. Но было решено развить эту идею.
Однозначно, лидером в области контроля температуры дома является проект NEST.
Вот и решено было создать подобное устройство, но добавив нужное, и убрав то, что редко когда пригождается.
Решение
Наше устройство должно уметь:
1) Показывать температуру дома и на улице
2) Включать отопление, когда температура дома упадет ниже заданной
3) Соответственно задавать температуру мы будем графиком(например в 6 утра нам надо 22 градуса, когда все ушли на работу можно и 18 и т.д.)
Из плюшек
4) График температуры на улице за сутки
5) Часы(получились попутно)
Железо
Для большей наглядности решено использовать дисплей LCD TFT на контроллере ILI9320. Этот дисплей выпускается с разными диагоналями(2.2 -3.2 дюйма). Разрешение 240х320. Есть резистивный сенсорный тачскрин. В принципе можно применить практически любой дисплей с таким же разрешением. Потребуется поменять только процедуру инициализации. В прикреплении есть список поддерживаемых контроллеров, для которых есть примеры инициализации, спасибо Noi.
Текст изначально был только 8x8, и для мелких надписей его хватало, так же сделана возможность выводить этот шрифт с удвоенным масштабом. Шрифт генерился программой LCD Font Generator и хранился во flash. Но для больших цифр этого было явно мало. Был создан еще шрифт 128x128 в той же программе. Можно выбрать любой шрифт. Но 10 цифр и 3 символа занимали 200кБ памяти. Мне лень было придумывать формат для сжатия и я добавил внешнюю память eeprom 24c256. В ней хранятся большие цифры и пара пиктограмм.
Схема
Попытка уместить все устройство в тесном корпусе привела к двум платам, соединённые проводом МГТФ.
Первая плата служит для распаивания достаточно мелкого шага дисплея, на второй разместились Atmega32(код занимает 47% flash, поэтому подойдет Atmega16), EEPROM и линейный стабилизатор на 3.3В.
Дисплей питается от 3.3 вольт, да и входа не толерантны к 5 вольтам, поэтому я запитал МК от 3.3В, что бы не добавилось согласование уровней. В качестве датчиков температуры применил DS18B20
Что бы котел понимал что пора включится надо подать 220В на специальный вход. Для коммутации добавлено реле, которое разместилось внутри котла на отдельной плате вместе с блоком питания на 12В и стабилизатором на 5В. Также добавил еще одно реле, его обмотка подключена к 220 напрямую. А общий контакт идет на землю, а нормально замкнутый на вход МК. Теперь для чего нужно. При пропадании электричества, в первую очередь отваливается это реле, тем самым на определенном входе МК появляется ноль. Сразу отключается дисплей. Теперь Atmega работает только за счет заряженных конденсаторов в блоке питания и потребляет 7ma. Этого хватит на 2-3 секунды работы, за это время переписывается вся нужная информация(график задания температуры дома, настройки) в энергонезависимую память.
Для того что бы часы продолжали идти в то время пока нет электричества добавлена микросхема часов реального времени DS1307. Так как идея с этой микросхемой пришла после того как был изготовлен прототип, то я добавил ее на отдельной платке, купленной у китайцев за 2$.
Первое включение
Прототип готов
Софт
На дисплее есть 5 сенсорных кнопочек, их мы будем использовать для выбора режима.
Сверху всегда отображается температура дома и на улице, уставка температуры в данный момент времени, дельта и время.
При нажатии на кнопки выбираются соответствующие режимы:
Температура дома
(Можете заметить много служебной информации, которая выводится на дисплей. Она нужна была для отладки, но уже удалена из прошивки)
Температура на улице
График температуры за сутки(реализовано авто масштабирование графика)
График задания температуры дома
В этом режиме видим предыдущий график задания(желтый) и новый, который я только что задал(зеленый).
Через 10 секунд старый удалится и зеленый перерисуется желтым.
Часы. Тут и говорить нечего
Настройки, пока минималистично.
В верхней части дисплея можно заметить рисунок огонька, нарисован он все в той же программе LFG. С генерацией шрифтов, рисунков и прочих символов нет ни каких проблем. Большие цифры были немного широковаты, когда они выводили время, поэтому они сжимались программно на 75%. Пиктограмки домика и улицы переводились в массив с помощью программы LCD Assistant.
Ну вот и все, для кого то может эта статья всподвигнет для создания подобного, а может, поможет создать устройство на похожем дисплее.
Исходник на github.com
Автор: Atxmega