Часы на светодиодных матрицах и микроконтроллере
Оказывается, часы в комнату я собирал ровно два года назад. Быстро же время летит! Все это время они успешно тикали, даже весьма точно. А я коварно вынашивал планы о новой версии…
Где-то через полгода после завершения сборки я набрел на светодиодные матрицы 8×8. Купил по случаю пять штук. Они лежали и давили мне на совесть, но собирать из них что-то на 595-х регистрах было откровенно лень — вот эти вот десятки резисторов, все такое. И так бы они совсем потерялись под слоем пыли, но совершенно внезапно на ebay нашел MAX7219 по 90 рублей за пять штук. Ого! Из дополнительной обвески нужен всего один резистор и один конденсатор. Вполне себе вариант. Заказал.
Когда микросхемы приехали, собрал небольшую тестовую плату для проверки возможностей. Оказалось, все очень-очень просто, как в плане схемы, так и в плане программирования.
Тестовая плата — MAX7219, светодиодная матрица 8×8
По пути, конечно же, сжег один пиксель на тестовой матрице :)
Тем временем, оформился список претензий к уже имеющимся часам:
- Хочется, чтобы яркость регулировалась автоматически. А то приходилось периодически вручную менять время включения/выключения пониженной яркости
- Хочется, чтобы не приходилось вручную поправлять время. В идеале — какое-нибудь NTP.
- Хочется корпус поприличнее, а то выкрашенная белым акрилом деревянная коробка выглядит не слишком прельстиво.
Управление яркостью — это, очевидно, фоторезистор. А для дистанционного управления я решил использовать широко распространенный bluetooth модуль HC-05. В конце-концов домашний сервер с линуксом вполне в состоянии раз в сутки отправить в последовательный порт точное время. Микроконтроллер взял ATMega32. Как выяснилось, натуральный overkill — вся прошивка вместе со шрифтом вполне умещается в 6Кб. С другой стороны можно напихать невероятное множество полезных и бесполезных функций, вплоть до показа последних новостей бегущей строкой или времени восхода/захода солнца. Микросхема часов — такая же DS1307 как и в предыдущих, только в SMD корпусе. Питание — традиционно mini USB. Все компоненты — по максимуму SMD. Резисторы-конденсаторы типоразмера 0805.
Схема нарисовалась довольно быстро — никаких особенных сложностей нет. А вот с платой возникла проблема — довольно скоро стало ясно, что одностороннюю плату в домашних условиях я если и сделаю, то количество перемычек на ней очень быстро превысит все разумные пределы. Решил заказать в Китае. Резонит отпал по причине того, что срочности у меня никакой, а цены у них далеко не самые гуманные.
Среди всех вариантов выбрал pcb.hqew.net — при сравнимых с остальными ценами они сначала проверяют присланные файлы, а уже потом выставляют счет на оплату. Очень важный для меня момент, так как это был первый опыт заказа промышленных плат. Действительно, пришлось немного поправить и запускать в производство уже второй вариант.
Уже после того, как платы уехали в производство, меня посетила мысль, что можно было бы добавить микросхему FT232RL, залить ардуиновский загрузчик и программировать девайс из среды разработки Arduino. Как вариант, можно добавить небольшую обвеску и делать то же самое через уже установленный bluetooth модуль. С другой стороны, мне оно не особо и нужно.
Изготовление плат с доставкой заняло около месяца. Причем последнюю неделю посылка с платами просто лежала у нас в районном отделении — некому было разбирать гору пришедшей почты.
Минимальный заказ 5 штук, мне приехало 6. Качество приятно порадовало, абсолютно никаких претензий.
Далее самый приятный этап — сборка и программирование. Здесь без сюрпризов.
При сборке обнаружилось несколько моих косяков, допущенных при проектировании:
- Гадский Eagle CAD потерял линии TX/RX от bluetooth модуля. В чем проблема была я так и не понял — удалил два провода со схемы и нарисовал заново — тут же появились на плате. Похоже на какой-то глюк. На плате пришлось кинуть два проводка. Не красиво, но работает.
- Отверстия для крепежных винтов слишком близко к краю, пришлось немного подрезать индикаторы, чтобы они нормально вошли.
- Светодиоды статуса bluetooth не нужны нафиг. Их вполне можно кинуть на микроконтроллер и обрабатывать там.
Хотел замерить потребляемый ток — безопасно ли совать в компьютерный USB порт. Но, похоже, в моем мультиметре глючный амперметр — на всех диапазонах показывает одно и то же — 0.28. Так что не понятно 0.28A или 0.28μA.
За пару часов все прекрасно собралось и началось программирование. Тоже, в общем, никаких изысков. Управление DS1307 взял из предыдущего проекта. Написал несложную библиотечку для рисования чего угодно на матричном дисплее. Нарисовал шрифт. А дальше уже дело техники.
С корпусом решил не мудрить. Основа из плегсигласовой пластины и две ножки. Получилось на удивление неплохо! Выглядит так, как будто экран просто висит в воздухе.
Для желающих повторить, улучшить, посмотреть в подробностях — весь проект свободно доступен на GitHub.