[Из песочницы] Умный будильник для умного дома
Что не собирай на avr, а в итоге все равно получаются часыс радиолюбительских форумов
Многие жители мегаполисов (и не только) часто испытывают неудобства от необходимости рано просыпаться по утрам. Особенно зимой — за окном темно, организм думает, что еще ночь, отсюда чувство недосыпа и плохое самочувствие. Вместе с тем летом при утреннем солнечном свете просыпаться обычно заметно легче. Было решено попробовать «обмануть» организм, использовав для пробуждения плавно увеличивающуюся яркость искусственного освещения. Будильники с таким эффектом существуют готовые, однако стоят довольно дорого, кроме того, проект делался больше для собственного удовольствия.На хабре довольно часто упоминаются различные дистанционно управляемые розетки и лампочки с управлением по Wi-Fi, в этом проекте похожая задача решается посредством ИК-управления. Довольно давно на аукционе ebay была приобретена светодиодная лампа китайского производства с ИК пультом дистанционного управления. Лампа имеет стандартный цоколь E27, мощность 9W и субъективно обладает яркостью сорокаваттной лампы накаливания. С пульта можно включать/выключать лампу, а также устанавливать 5 разных уровней яркости.
Идея была следующая — собрать на микроконтроллере AVR будильник, который будет заранее перед звуковым сигналом плавно увеличивать яркость этой лампы посредством передачи ИК-команд. Лампа при этом вкручивается вместо одной из обычных ламп люстры верхнего освещения. За полчаса до установленного времени лампочка включается на минимальную яркость, затем яркость постепенно увеличивается до 100%.
В результате работы хотелось видеть если не шедевр, то хотя бы нечто в корпусе приличного вида, для чего решено было делать будильник в частично стеклянном корпусе с сенсорным управлением. Фирма Atmel предлагает для своих микроконтроллеров библиотеку QTouch, которая позволяет реализовать в своих устройствах сенсорные кнопки при минимальных затратах. В этом проекте хотелось как раз опробовать в деле эту замечательную библиотеку.
Итоговая конструкция представлялась следующей — односторонняя печатная плата, на которой с одной стороны (лицевой) устанавливаются светодиодные индикаторы, ИК-светодиод, фотодатчик, разъем питания, с другой стороны (сторона дорожек) методом поверхностного монтажа припаиваются остальные элементы. Затем индикаторы закрываются пластиной из тонированного стекла, на обратной стороне которой в нужных местах приклеены сенсорные кнопки. С тыльной стороны плата закрывается корпусом, представляющим собой пластиковую коробку подходящего размера. При этом имеем эстетичный внешний вид при отсутствии механических кнопок.
Итак, приступим к проектированию. Для начала определимся с микроконтроллером — он должен иметь достаточное количество выводов для реализации индикации и сенсорных кнопок, а также быть в корпусе не очень сложном для ручной пайки. Этим условиям удовлетворяет ATMEGA324P (44 ноги и шаг выводов 0.8 мм). Выбираем дисплей — в качестве такового было решено использовать светодиодный дисплей с крупными цифрами (1.8»). Дисплей состоит из четырех одноразрядных индикаторов с общим анодом. Обычно сегменты дисплеев большого размера состоят из нескольких последовательно соединенных светодиодов, поэтому пятивольтовым источником питания не обойтись, и для питания часов потребуется источник напряжением минимум 9 В.
Для управления таким дисплеем потребуется драйвер. Дисплей имеет общий анод, так что поступим следующим образом — катоды дисплея через токоограничительные резисторы будут подключены к микросхеме ULN2803, а для анодов предусмотрим отдельные транзисторные ключи. Микросхема ULN2803 представляет собой 8 транзисторов с резисторами в цепи базы, что делает ее очень удобной для подобного применения.
Далее собственно часы, точнее, микросхема RTC. В качестве таковой была выбрана DS3231 — микросхема с встроенным кварцевым резонатором и минимальным числом внешних компонентов. Производитель обещает точность хода порядка нескольких секунд в год. Также за счет встроенного измерителя температуры для термокомпенсации ухода частоты кварца получаем «бесплатный» термометр, показывающий температуру внутри корпуса.
Для звонка используется пьезоизлучатель ЗП-19.
В качестве «исполнительного элемента», который отличает будильник от миллионов подобных, в схеме присутствует ИК-сведодиод, который и будет формировать команды для лампочки.
Для питания часов от сети используется нестабилизированный источник питания напряжением 12 В. Для питания микроконтроллера в схеме надо предусмотреть отдельный источник питания — ставим хорошо известный линейный источник LM7805.
В завершении предусмотрим в схеме двухцветный светодиод для индикации состояния будильника, а также фотодатчик для реализации изменения яркости индикатора в зависимости от уровня освещения. Фотодатчик будет подключен к компаратору, следовательно, надо предусмотреть подстроечный резистор для регулировки порога срабатывания.Схема готова, можно приступать к программированию и изготовлению. Перед изготовлением большая часть программы была проверена в симуляторе Proteus, в котором и производилось все проектирование.
К сожалению, смоделировать работу библиотеки QTouch в протеусе не удалось, так что предварительно пришлось собрать часть схемы на макетке и «поиграть» с емкостными датчиками отдельно. Библиотека отлично себя показала — четкое срабатывание во всех случаях.
Следующий элемент, потребовавший экспериментальной отработки — собственно дистанционное управление лампочкой. Подключаем фотодиод к осциллографу и смотрим на сигнал нажимая кнопки пульта:
Из картинки видно, что используется протокол NEC — один из широкоизвестных протоколов инфракрасного управления, где информация кодируется длительностью паузы между импульсами. Логическая 1 — пауза в 1,7 мс, логический 0 — пауза 0,6 мс. После стартовой последовательности (9 мс импульс и 4,5 мс пауза) передается 32 бита: адрес, инверсный адрес, команда, инверсная команда. Протокол хорошо документирован, и в интернете нетрудно найти его подробное описание.
С помощью осциллографа также определяем частоту передачи — она оказалась равной 38 КГц. Итак, нужные коды кнопок пульта:
Пишем функции, которые будут формировать ИК-команды, проверяем с помощью макетки — лампочка включается, яркость регулируется — значит, все почти готово, можно собирать часы.
Плата изготавливалась методом ЛУТ. У меня довольно скромный опыт в изготовлении плат этим методом, но получилось вполне терпимо. Не обошлось без косяков — забыл предусмотреть на схеме вывод RESET в разъеме для программирования, пришлось припаивать отдельно. На фото только что собранная плата, с еще неотмытым местами флюсом.
Еще раз проверяем, включаем, заливаем прошивку и начинаем процесс отладки. После того, как все заработает, можно закрывать все в корпус.
Продолжаем ловить ошибки. Как уже упоминалось, в качестве основного элемента корпуса было решено заказать пластину из тонированного стекла с обработанной кромкой и четырьмя отверстиями, через которые она и будет крепиться к плате. Если кто-то захочет изготовить аналогичную конструкцию — советую проектировать плату после заказа пластины. Я нашел фирму которая обещала любые работы со стеклом по эскизам, с высокой точностью, современными станками и т.д., на практике же отверстия для крепления были просверлены с разницей в сантиметр от эскиза. Однако предъявлять претензии уже не стал, просто немного скорректировал плату. Еще одной ошибкой был неправильный выбор диаметра отверстий в стекле — первоначально для крепления хотелось использовать декоративные гайки с плоской поверхностью. Такие были найдены на ebay в магазине аксессуаров для метталистов — используются, видимо, для имитации заклепок на ремнях (так называемые Chicago Screws). Однако когда гайки пришли, оказалось что они имеют диаметр резьбовой части 5 мм, а отверстия в стеклянной пластине были 4 мм, так что от идеи пришлось отказаться и крепить стекло обычными болтами с потайной головкой, которые потом были просто покрашены маркером.
С обратной стороны стекла расположены сенсорные датчики — для этого используем алюминиевый скотч. К сенсорам кусочками вспененного полиэтилена (от упаковок с ebay) прижимаются провода от платы. Под кнопкой будильника находится индикаторный светодиод — логика его работы следующая: если будильник будет звенеть в ближайшие 24 часа — зеленый, не будет звенеть — красный, все будильники выключены — светодиод не горит. Символ будильника (колокольчик) тоже переводим на скотч методом ЛУТ, аккуратно вырезаем и приклеиваем к стеклу.
Тонированное стекло отлично себя показало в работе с сенсорными кнопками и эстетическом оформлении дисплея, однако оно весьма существенно ослабляет ИК-излучение. Один ИК-светодиод работает неуверенно, так что в дополнение в разрыв дорожки был дополнительно припаян еще один, который светит в отверстие в верхней стенке корпуса. В итоге имеем уверенное срабатывание, не хуже чем у штатного пульта.
По результатам эксплуатации будильника можно сказать, что идея себя полностью оправдала — просыпаться с таким устройством темным зимним утром действительно намного легче. Дополнительно имеем прикроватный дистанционный выключатель освещения.
Статья была написана больше из желания поделиться идеей, как реализовать подобное с минимальнымы усилиями, однако если кто-нибудь захочет повторить устройство именно в таком виде — готов предоставить прошивку и ответить на вопросы.
Список источников: