Когда-то давно в детстве, когда я ещё только начинал заниматься электроникой, у меня была мечта изготовить огромные часы на семисегментных индикаторах. Точнее, изготовить большой индикатор и подключить его к электронной плате уже имеющихся маленьких электронных часов. Для изготовления самих семисегментных индикаторов в качестве сегментов я рассматривал люминесцентные лампы дневного света. Других идей на тот момент мне не приходило. А на таких лампах делать часы – не очень хорошая задумка.
По прошествии многих лет в обиход вошли другие более практичные источники света, в частности, светодиодные ленты. Именно они и послужили стимулом воплотить свою старую задумку в реальность. Имея возможность и опыт программирования микроконтроллеров, я решил, конечно же, самостоятельно изготовить электронную плату для часов со своими функциональными возможностями. Кроме отображения часов и минут я задумал сделать отображение даты и температуры. В данной статье я не буду подробно описывать принципиальную схему и прошивку МК. Напишу лишь краткий обзор и историю разработки своей конструкции.
Конструированием больших часов из светодиодной ленты я начал заниматься ещё 7 лет назад. Было приобретено 3 рулона дешёвой светодиодной ленты по 5 метров в каждом (4.8 Вт/м, синий цвет). Исходя из имеющегося количества ленты (3*5=15 м) я определился с длиной одного сегмента: 50 см. Всего сегментов 28 (4 по 7) плюс две точки по центру (одна внизу и одна вверху), разделяющие часы и минуты. Итого – 30 сегментов. То есть, планировалась израсходоваться вся имеющаяся светодиодная лента. Точки представляют собой 5 отрезков по 10 см каждый, что по длине и по мощности эквивалентно одному сегменту. Они сложены в квадрат 10 на 10 см.
Все отрезки светодиодной ленты уложены в специальный алюминиевый профиль. Данный профиль, предназначенный для светодиодной ленты, также можно свободно найти в продаже. Вовнутрь профиля приклеивается светодиодная лента, а сверху закрывается пластиковым матовым материалом для рассеивания света. Все профили скручены в единый каркас, размером 320 на 105 см. Края смежных профилей я соединил через металлические кружочки. Для усиления жёсткости всей конструкции в некоторых местах я прикрутил дополнительные алюминиевые уголки.
Электронная плата сделана на базе микроконтроллера Atmega8. Часовая микросхема DS3231 в виде модуля (с обвесом и батарейкой CR2032) втыкается в разъём на плате. Датчик температуры DS1621 подключен к плате коротким кабелем и выведен наружу снизу коробки. Также на плате предусмотрены три кнопки для настройки и конфигурации часов. С практической точки зрения они не очень удобны, так как находятся внутри коробки. Поэтому со временем я дополнил плату модулем Bluetooth HC-06, подключенным к UART интерфейсу МК.
Через Bluetooth можно подключаться с ноутбука или смартфона, используя в качестве программы любой терминал. В свою очередь внутри программы МК предусмотрен набор текстовых команд для управления с таких терминалов. Имеется возможность не только настраивать дату и время, но и менять режимы и продолжительность отображения времени, даты и температуры по очереди. Вывод информации на сегменты реализован через сдвиговые регистры 74HC595 и транзисторные ключи структуры NPN. В качестве последних сначала применялись четыре 8-канальных ключа ULN2803. Было 4 одинаковых дочерних плат, которые втыкались в основную плату с МК. На каждой из них размещались регистр, 8-канальный ключ и выходные клеммы для подключения проводов к сегментам. Кстати, именно они и послужили в дальнейшем непрямому соответствию нумерации бит и сегментов из-за удобства монтажа.
Данные ключи от нагрузки перегревались и со временем вышли из строя (немножко не рассчитал). Поэтому я решил изготовить плату с транзисторами помощнее. На ней я разместил 32 транзистора BC139 (2 – в резерве) и 4 регистра. Эту плату с платой МК я соединил проводами.
В качестве общего провода всех сегментов (общий плюс) применяется сам каркас. Провода к каждому сегменту идут от электроники (коробка 3) через промежуточные коробки, в которых спрятаны разъёмные соединения (коробки 1 и 2). В коробке 3 кроме электроники также находится блок питания на 12В. Такая конструкция надёжно проработала несколько лет. Часы висели в большом помещении.
Со временем возникло желание повесить часы на улицу. Для этого в первую очередь нужно было обеспечить защиту конструкции от влаги и осадков. Для этой цели я решил полностью обновить светодиодную ленту на влагозащищённую. Заодно хотелось, чтобы часы светили гораздо ярче и были видны даже в светлое время суток. Я нашёл в продаже крутую влагозащищённую яркую светодиодную ленту белого свечения мощностью 24 Вт/м. На ней светодиоды расположены более плотно, чем на предыдущей ленте, и они более яркие. В конструкцию каркаса я также внёс небольшие дополнения – добавил 2 дополнительных сегмента. В первой «восьмёрке» – диагональный сегмент в нижней части, а в последней – наклонный сегмент в нижнем правом углу. Подключены они к оставшимся двум резервным каналам выходных ключей (всего у меня 4 регистра по 8 бит, или же 32 канала). Эти дополнительные сегменты нужны для возможности отображения на часах своего ника на хабре радиолюбительского позывного R3EQ: на первой «восьмёрке» – буква «R», а на последней – «Q».
После обновления светодиодной ленты некоторые места я промазал герметиком, особенно места пайки проводов, чтобы ещё больше исключить попадание влаги. От общей шины питания в виде самой конструкции я отказался и решил подводить к каждому сегменту отдельную пару проводов. Это полностью исключает возможные проблемы с просадкой напряжения.
В электронику я также ввёл существенные изменения. Из-за умощнения нагрузки пришлось обновить блок питания. Точнее, я поставил их два: один на первую половину циферблата, другой – на вторую и на питание электронной платы. Плату с регистрами и транзисторными ключами я также обновил, расположив транзисторы в один ряд с целью их монтажа на теплоотвод. В качестве теплоотвода применён кусок алюминиевого уголка соответствующей длины. Ведь при такой новой нагрузке (1А на сегмент) транзисторы стали греться довольно неплохо.
Все вышеперечисленные потроха я разместил в новый корпус – герметичный металлический электрошкаф. Он получился довольно тяжёлый, и поэтому я не стал его крепить к каркасу часов и повесил рядом. Соединения между электрошкафом и индикацией выполнены множествами пар проводов, уложенных в гофре, через два круглых 32-пиновых герметичных разъёма на дне шкафа.
Из промежуточных распределительных коробок провода разводятся на сегменты через кабель-каналы позади конструкции. Вместо модуля Bluetooth я решил поставить самодельный преобразователь UART-TCP/IP (Telnet сервер) для управления часами с терминала на любом расстоянии через локальную сеть или Интернет. Данный преобразователь описан в моей самой первой публикации на Habr.
Ещё в прошивку добавил новую полезную функцию – регулировку яркости. Технически это реализовано на таймере МК с режимом ШИМ. Соответственно, с помощью ШИМ за счёт изменения скважности импульсов регулируется напряжение, подаваемое на все сегменты. Сигнал ШИМ с соответствующего вывода МК идёт на выводы «OE» регистров. Кстати, эту реализацию я придумал уже после того, как изготовил печатные платы. Поэтому пришлось городить костыли (можно увидеть на рис. 15). Предусмотрено 10 градаций яркости, включая нулевую яркость, когда часы не горят. Команды терминала – «y0», …, «y9». Как известно, зависимость видимого свечения светодиодов от приложенного к ним напряжения не линейна, а имеет «выпуклую» характеристику в пользу потребителя. То есть, к примеру, 50% приложенного напряжения соответствует 75% яркости. Тем самым, в частности, можно снизить напряжение на светодиоды примерно на 10-20%, при этом почти ничего не потеряв в яркости. Именно на предпоследней градации яркости («y8») я и эксплуатирую часы. Стоит понимать, что ШИМ сама по себе создаёт мерцание светодиодов на определённой частоте, типа не видимой для глаз. Частоту ШИМ я выбрал действительно высокой (1.35 кГц), которая глазам практически не мешает. Но я предусмотрел переключение частоты ШИМ специальными командами «f1», …, «f5» с экспериментальной целью. При этом в прошивке переключаются предусмотренные в МК делители таймера. Получились частоты 10.5 Гц (мерцание однозначно видно всем), 42.2 Гц, 168.75 Гц, 1.35 кГц, 10.8 кГц. На самой высокой частоте ШИМ 10.8 кГц при одной и той же средней яркости часы светятся чуть-чуть бледнее. Видимо, на этой частоте светодиоды уже перестают успевать набирать полную яркость. Самая оптимальная частота – 1.35 кГц. Недостаток ШИМ на этой частоте – тихий свист из электрошкафа с той же частотой. Но он слышен в комнате при идеальной тишине (при подключенной нагрузке, само собой).
Спустя год мне снова захотелось модернизировать конструкцию. А именно, было желание, чтобы часы отображали атмосферное давление. Самый распространённый, дешёвый и довольно точный в показаниях датчик – BMP280. Совместно с датчиком в моей конструкции применён модуль схемы согласования уровней I2C 3.3В-5В, так как датчик работает от 3.3В, а моя схема – от 5В. Эти модули применяют в своих конструкциях ардуинщики.
Избегая Ардуино, на данный датчик имеется подробная документация (даташит). Для получения информации о давлении необходимо внести в прошивку МК кучу вычислений. Данные вычисления не поместились в память МК Atmega8. Поэтому я нарисовал и изготовил новую плату для МК Atmega32, и перенёс всю прошивку на неё. На данной плате я предусмотрел схему подключения распространённого аналогового температурного датчика NTC (термистора) на 10 кОм для возможности измерения и отображения температуры на более длинном расстоянии от часов. Попутно с этим я решил отказаться от самодельного переходника UART-TCP/IP, приобретя на Алиэкспрессе по дешёвке аналогичное устройство в отдельной небольшой коробочке. Но у него UART интерфейс выполнен на разъёме DB9 с электрическими уровнями компьютерного COM-порта (RS-232). Поэтому на новой плате я предусмотрел микросхему преобразователя уровней MAX232, через которую и подключается новый переходник. Кнопки на новой плате я ставить не стал, и их функционал исключил из прошивки.
Кроме того, прошивку я дополнил другими новыми функциями и командами терминала. В автопрокрутку, кроме времени, даты и температуры, добавились атмосферное давление и произвольная комбинация. Данную комбинацию можно составить самостоятельно посегментно или побайтно специально предусмотренными для этого командами.
Калькулятор для расчёта HEX-кода комбинации сегментов я сделал в Excel.
Продолжительности страниц автопрокрутки также по-прежнему гибко настраиваются через терминал. Имеется возможность переключаться между датчиками температуры для отображения (DS1621 или NTC). По команде «info» в терминал выводится вся информация с датчиков.
Часами можно управлять командами с терминала по TCP не только вручную, но и в автоматическом режиме. Существуют терминальные программы, поддерживающие программирование сценариев и скрипты. Но я поступил проще – создал простейший Telnet клиент в среде разработки «Visual Studio 2022» с применением библиотек <WinSock2.h> и <WS2tcpip.h>. Цель данной затеи – дополнить свои часы ещё несколькими функциями, не меняя прошивку МК. В частности мне хотелось, чтобы ночью в определённое время уменьшалась яркость свечения часов, а утром – увеличивалась. Это как раз я и реализовал с помощью своего простейшего приложения. Данная программа выполняется в командной строке. При вызове программы указываются аргументы – текстовые строки, которые по очереди будут отправлены на указанный TCP сервер, в роли которого являются часы (точнее, переходник TCP/IP – RS-232, установленный в часах). Вызов программы с нужными аргументами, т.е. параметрами яркости, осуществляется в планировщике заданий Windows по заранее заданному сценарию.
Учитывая то, что на часах предусмотрен режим отображения произвольной информации (произвольной комбинации сегментов), которая посылается к ним по TCP специальной командой, имеется возможность использовать часы в качестве индикатора. В частности, реализовать программу отображения на часах времени и даты полностью на компьютере. К сожалению, скорость обновления информации не сильно высокая. Чаще, чем 3 раза в секунду, у меня не получилось обновить информацию на циферблате. Это связано с неоптимальной реализацией алгоритма приёма информации по UART в прошивке МК. Тем не менее, для некоторых приложений такой скорости вполне хватает. В одной из следующих статей речь пойдёт как раз об одном из таких приложений.
Напоследок – ещё несколько фотографий часов.
За полтора года эксплуатации часов не было ни единого сбоя в их работе. Хотя нет, один сбой всё-таки был 31 мая этого года. Об этом я как раз и хотел написать. С утра я заметил, что часы периодически то потухнут, то погаснут. То есть, примерно 10 минут горят и 5 минут не горят. Не помогала даже перезагрузка. Но при параметре полной яркости они горят постоянно, и всё нормально. Я весь день выяснял, в чём причина. Оказалось, что сбился параметр делителя таймера, отвечающего за ШИМ (регулировку яркости), хранящийся в EEPROM МК. То есть, параметр частоты ШИМ, управляющийся командами «f1», …, «f5». Он каким-то образом ушёл за свои пределы, переключившись на непредусмотренный «f0». А согласно регистру конфигурации таймера в МК AVR нулевой делитель соответствует переключению таймера T1 на внешний источник тактирования по пину T1. А данный пин в моей схеме совпал с пином строба второго регистра. Получается, что мой таймер, отвечающий за ШИМ, стал тактироваться сигналом строба на регистр, который формируется не чаще, чем раз в секунду. Тем самым частота пульсации ШИМ значительно упала, и задание яркости превратилось в периодическое включение и отключение часов.
Автор: R3EQ