Собираем не совсем обычные настольные часы с цветным дисплеем
История создания этих часов довольно необычна и забавна. У меня есть знакомый, который занимается сьемкой всякого альтернативного кино в стиле «артхауc», «нуар», «ню» и так далее. Однажды он пришёл ко мне с проблемой – по сценарию, им в фильме нужны были электронные часы на 7-сегментных индикаторах, меняющих цвет, которые могут вести обратный отсчёт, типа бомбы с таймером. Готовых часов на 7-сегментных индикаторах полно, но практически у всех оказалась одна неприятная особенность – сегменты зажигаются попеременно, с достаточно низкой частотой, порядка 200-700 гц (так называемое мультиплексирование), и на видео это выглядит как сильное мерцание или вообще пропадание некоторых сегментов. Знакомый был настолько заинтересован часами с нужным функционалом, что пришёл ко мне не один, а в компании двух портретов Бенджамина Франклина, которые вскоре поменяли локацию с его бумажника на мой, и работа началась.
Так как было нужно, чтобы ничего не мерцало, надо делать статическую индикацию. Для этого можно применить что-то классическое, типа CD4511, SN74LS47, но так как эти чипы поддерживают отображение только цифр, а знакомому были нужны и другие символы, этот вариант не подходил. По этой же причине я решил взять МК в 40-ножечном корпусе и управлять сегментами напрямую, а для регулировки яркости и цветов использовать встроенный в МК ШИМ-генератор, который будет работать на частоте 32 кГц, и тем самым исключит мерцание.
Схема, сборка и комплектующие
Схему отдельно не рисовал, начал сразу рисовать плату, так что схема – только словами.
- В качестве «сердца» часов я применил МК PIC16F887 в DIP-40 корпусе.
- Отсчёт времени обеспечивает микросхема DS3231.
- Автономность хода часов при отсутствии питания обеспечивается ионистором на 0,47 ф, 5,5 вольт. Его хватает приблизительно на 3-4 суток без внешнего питания.
- В качестве индикаторов применены двухцветные LED-модули KYX12101BHG (Ярко-красный и зелёный цвета, общий анод: https://item.taobao.com/item.htm?id=590631082765). Выбор этих индикаторов, как и максимально компактный размер платы был обусловлен желанием заказчика поместить «новые» часы в уже имеющийся корпус.
- Аноды модулей через транзисторы 2SB772 включены на выход встроенного в МК ШИМ-генератора.
- В качестве разделительных точек выступают 5мм светодиоды оранжевого цвета.
- Для управления и настройки часов применены две кнопки, подключенные через резисторы разных номиналов к входу АЦП МК.
- Так как оставались неиспользованные выводы МК, то я решил добавить функции будильника – реализована на «активном» бипере и транзисторе BC547 — и измерения температуры с применением DS18B20. Термометр подключается к ICSP-коннектору на контакты, помеченные как DAT, GND, VCC, при этом между VCC & DAT также подключается резистор на 4,7К.
- Для упрощения сборки количество SMD компонентов сведено к одной микросхеме — DS3231. Эта микросхема довольно крупная, расстояние между ножками тоже приличное, так что её вполне можно припаять и обычным паяльником.
- Питание на плату поступает по порту USB Type-C, и при максимальной яркости сегментов потребление составляет порядка 80 мА.
Плату заказал в Китае, она позволяет работать с индикаторами в двух вариантах – как с параллельным включением светодиодов, так и с последовательным. Такой подход обусловлен разным напряжением зажигания светодиодов разного типа, и об этом чуть детальней – в следующем абзаце.
Двухцветные индикаторы выбранного типоразмера бывают как с параллельным включением светодиодов (редко), так и последовательным (часто). И если в случае с красно-зелёными индикаторами особых проблем при последовательном включении не возникает (да, зелёный чуть тускловат, но это малозаметно), то если применить, скажем, красно-синие индикаторы, то при питании от 5 вольт получим что, красные сегменты будут гореть на полную яркость, а синие – вообще не будут гореть. Это происходит из-за разного падения напряжения на светодиодах – 2 вольта на красных, 3,3 вольта на синих, что в случае с последовательным включением сегментов даст 4 и 6,6 вольт соответственно.
Для исключения таких проблем надо или использовать индикаторы с параллельным включением диодов, или делать другой вариант платы, чтобы на диоды подавалось напряжение чуть повыше, приблизительно 6.3 вольта. Напрямую повышать напряжение питание нельзя — МК и микросхема часов могут сгореть. Здесь придётся использовать внешний блок питания на, скажем, 6 вольт. При этом 5 вольт, нужные для работы красных сегментов, логики и микросхемы часов, получаются с использованием стабилизатора типа 7805, а «высокое» напряжение напрямую подаётся на транзистор, который управляет яркостью синих сегментов.
Так как изначально плата не предусматривала такой функционал, её пришлось немножко доработать. В «новом» варианте платы я оптимизировал и общую разводку – теперь колодка ICSP имеет «правильный» вид, а не раскидана по плате, бипер отодвинут чуть в сторону и не мешает крепежному винту. Однако первый вариант платы был собран в нескольких экземплярах и проблем при работе с ним не было обнаружено – на фото далее именно он, так что не надо удивляться, что на рисунке одна плата, а на фото – другая.
Все детали на плате подписаны своими номиналами, допустимы вариации в пределах ±10%. Как можно видеть по фото, у меня вообще не было 100-Омных резисторов, поставил два по 220 Ом параллельно. Резисторы – 0,125 Вт. Можно и 0,25 Вт, но их придётся ставить «боком».
Если будете собирать вариант с точно теми же индикаторами, что использовал я, то микросхему 7805 ставить не надо. Вместо неё надо поставить перемычку на плату в отверстия для ножек 1 и 3 (крайние слева и справа) этой микросхемы. Если же применяем, скажем, индикаторы с сегментами с красным и синим свечением и последовательным включением диодов, то микросхему уже придётся ставить, а на часы подавать питание в пределах 6-7 вольт.
Последовательность сборки платы такая:
- Припаиваем DS3231
- Припаиваем все остальные компоненты, кроме индикаторов
- Продеваем в угловые отверстия 4 винта М3 с плоской головкой
- Припаиваем индикаторы
Я вот не последовал этому порядку — забыл вставить винты до индикаторов. В результате надо было либо выпаивать индикаторы, либо вклеить проставки в плату — я выбрал второе:
Для использования в кинематографических целях для часов была написана специальная прошивка, девайс собран в двух экземплярах и отдан заказчику. Но три комплекта плат (заказывал на JLCPCB) остались…
Дочки попросили часы для своей комнаты – мол, неудобно каждый раз в смартфон или планшет смотреть, особенно, когда в кровати лежишь. Можно было купить что-то готовое, но комсомольцы не ищут простых путей, и я решил, раз «железо» есть, то можно написать обычную прошивку для обычных людей и сделать часам простой корпус. Прошивку писал в свободное время, по настроению, в результате чего этот процесс растянулся почти на три месяца – да и программист я так себе. Но наконец-то прошивка доведена до состояния «можно использовать», и часы готовы.
Прошивка, настройки, баги и фичи
Программно часы работают следующим образом:
При включении сразу отображается надпись Hello, которая плавно меняет цвет. В это время происходит «загрузка» часов, опрашиваются микросхема таймера и инициализируется микросхема термометра. Если последняя не обнаружена, то индикация температуры пропадает из рабочего режима часов. После того как часы загрузились, на дисплее отображается текущее время и раз в минуту – текущая температура (если микросхема термометра была обнаружена), а кнопки обеспечивают следующие функции:
При нажатии правой (зеленой) кнопки (если смотреть на часы спереди) отображаются год и дата, а если включён будильник, то и время его срабатывания. Разделительные точки при этом быстро мерцают.
При нажатии же левой (красной) кнопки попадаем в меню настроек. Слева двумя буквами латинского алфавита отображается название пункта меню, а справа – текущее значение выбранного параметра. Всего в меню 13 пунктов:
- Yr (year) — Установка года, можно выбрать в диапазоне 2021-2099.
- tH (month) – Установка текущего месяца.
- dt (date) – Установка даты.
- dY (day) –Установка дня недели. 0 – Понедельник, 7 – Воскресенье.
- Hr (hour) – Установка часов.
- Ut (minute) – Установка минут.
- dF (display format) – Выбор формата отображения времени: 12 или 24-часовой формат.
- AH (alarm hour) – Установка часов срабатывания будильника.
- At (alarm minute) – Установка минут срабатывания будильника.
- AE (Alarm enable) – Выбор режима будильника: 00 –выключено. 01 – работает всю неделю, 02 – работает только по рабочим дням.
- Tr (time readjust) – Корректор времени (об этом подробнее ниже).
- Dh (display hue) – Выбор цвета дисплея. Всего доступно 16 значений, от чистого зеленого через лимонно-желтый и оранжевый до ярко-красного.
- tF (temperature format) — Формат отображения температуры — в Цельсиях или в Фаренгейтах.
- Ft (font type) – Выбор типа шрифта (подробнее – ниже).
- Rt (Return) – Выход в основной режим.
А теперь про Tr и Ft. Многие китайские клоны микросхемы DS3231 страдают проблемой отставания — такие микросхемы считают время хотя и стабильно, но медленно. Такие часы могут за сутки отставать на несколько секунд, что в итоге даёт заметное отставание за неделю и месяц. Значение Tr прибавляет к показаниям часов от 1 до 15 секунд в 23:59:30 каждый вечер, тем самым компенсируя отставание часов. Если же у вас нормальный чип, то этот параметр можно не трогать и оставить на дефолтном значении (30).
Настройкой Ft можно выбирать начертание отображаемых цифр. Многие, наверное, не знают, но для 7-сегментных индикаторов существуют 3 разных начертания цифр:
- «Американская» — 6, 7 и 9 не имеют хвостиков.
- «Европейская» — 6 и 9 с хвостиками, 7 – без.
- «Японская» — 6, 7 и 9 с хвостиками.
При настройке начертания в меню в качестве пунктов отображаются ключевые отличия. Это 79 для «US», 67 для «EU», 76 для «JP». Была идея для «US» писать 69, но я решил отказаться, дабы избежать ненужных ассоциаций.
Для наглядности — фото вариантов.
Хотя прошивка в целом и работает стабильно, а все основные функции тоже без нареканий, есть некоторые недоработки. Хоть они и не влияют на функциональность часов, их все равно надо учитывать.
Например: текущее время 11:05. Вы зашли в меню настройки часов, пролистали пункты и дошли до установки минут. Часы покажут «05». Вы в это время отвлеклись и отошли от часов на пару минут. Вернувшись к часам, вы решили минуты не трогать и нажали на кнопку перехода в следующий пункт меню. В это время в часы будет записано значение 05. Это происходит из-за того, что в момент входа в пункт выбирается текущее значение, и оно же пишется в момент выхода, если вы не меняли настройку. Если между «входом» и «выходом» прошло несколько секунд, то изменения незаметны. Если же прошло больше времени, а мы записали в часы «старое» значение, может появиться ощущение, что часы отстают.
Написал немножко сумбурно, да и в реальной жизни такая ситуация маловероятна, но на всякий случай учтите. Также я пока не написал код для отображения отрицательных температур (зачем это вообще надо?), но работу над кодом продолжаю, так что обновления прошивки будут.
В целом, индивидуальное управление сегментами даёт много возможностей для творчества – можно написать код, чтобы все сегменты имели свой цвет, цифры «переливались» одна в другую и еще много чего интересного. Например, я уже реализовал функцию измерения относительной влажности, сейчас работаю над барометром — в итоге будет у меня мини-метеостанция).
И да, насчёт отставания. Учтите: если будете подавать питание с ПК и программа-прошивальшик на ПК будет в этот момент активна (PicKit standalone softwareб MPLAB IDE), то часы будут сильно отставать. Это фича самого режима ICSP, а не баг прошивки. Я в свое время, пока не догадался о причине, много нервов потратил. С обычным питанием, естественно, никаких проблем не будет.
Корпус
Детали для корпуса часов я вырезал лазерным резаком из 3мм фанеры и прозрачного оргстекла. После того как я собрал и склеил корпус (использовал прозрачный эпоксидный клей), внешние поверхности обработал наждачной бумагой, скруглив углы, и обклеил самоклеящейся синтетической кожей розовато-красного цвета: как я уже говорил, эти часы делались для девичьей комнаты, а там похожие цвета уже применены в дизайне. По идее, светло-розовый бы подошёл больше, но кожзама такого цвета у меня не было. Корпус с внутренней стороны пришлось зачернить маркером, так как свет от сегментов индикатора подсвечивал его изнутри, и выглядело всё неряшливо. Также пришлось чернить и боковины индикаторов: изначально они были белые и тоже неплохо отражали свет.
Передняя панель часов изготовлена из дымчатого оргстекла толщиной 3мм. Из этого же материала цвета слоновой кости я сделал боковые ножки-упоры. Узел крепления ножек к корпусу получился простым, но тем не менее, он одновременно обеспечивает и плотный прижим, чтобы часы не прокручивались под своим весом, и возможность плавной регулировки угла наклона. Конструктивно узел состоит из нейлоновой шайбы, зажатой между ножками-упорами и корпусом часов декоративным винтом с круглой головкой. Сам винт вкручивается в предварительно вклеенную в фанеру граверную гайку и зафиксирован каплей эпоксидного клея, чтобы конструкция не раскручивалась.
На обратной стороне (тоже из 3мм оргстекла) размещены кнопки управления, порт USB Type-C и несколько вентиляционных вырезов. Основная плата часов крепится именно к задней панели, которую в случае необходимости можно быстро демонтировать, открутив четыре крепежных шурупа по углам.
Вроде все: часы собраны, фото сделаны, статья написана :) Все чертежи, схемы и прошивки бесплатны – пишите, если заинтересовались, выложу в открытый доступ.
P.S. Некоторые читатели спрашивают, как я делаю фото для обзоров: какую аппаратуру и как использую? Для конкретного случая ответ на фото ниже. Используются:
- фотоаппарат Sony A77Mk2 с китовым объективом (18-50 мм)
- синхронизатор Godox
- внешняя вспышка Godox TT685S+Бустер
Настройки фотоаппарата – ISO 400, 1/25, F9.0, Rear sync, WB – 4800K. Фотоаппарат установлен на штативе, и используется ИК ПДУ, чтобы меня не было видно в зеркале. Вспышка работает в режиме ADI, направлена в потолок и обеспечивает заполняющий свет.
По вашим просьбам, заново выкладываю прошивку и герберы:
- http://www.tiktoki.ge/bicolor.rar — Герберы, подготовленные для изготовления в JLCPCB
- http://www.tiktoki.ge/bicolor.firmware.rar — прошивка
Кстати, я немножечко улучшил прошивку, и теперь в ней будильник играет известный ритм от Casio VL-1 — VL Rock (Trio — Da da da). По ссылке выше — старая прошивка. Как новую докончу, тоже выложу.