После создания множества прототипов Arduino на макетной плате, я решил сделать что-то полезное, то, что можно использовать дома. А что может быть полезнее, чем светящиеся часы, которые почему-то с 2010 года перестали выпускаться? Начал я сборку цифровых часов с поиска необходимых деталей. Одним из критериев, который помог быстрее насобирать необходимые компоненты, стала доступность деталей в местных магазинах и от производителей из Китая, Малайзии.
Arduino часы реального времени (RTC) на 7-сегментных индикаторах
При сборке часов, появилось несколько вариантов настройки на них точного времени. Первый: устанавливать время на Arduino, держа его все время под питанием. Но такой метод не очень целесообразный, так как каждый раз, когда понадобиться установить время, надо будет пустить питание на Arduino.
Вторым вариантом была идея подключения 7-сегментных LED-индикаторов к GPS модулю. Поскольку GPS сигнал дает очень точное время, этот вариант должен был решить проблему, и не пришлось бы настраивать часы каждый раз при их включении. Я взял свой карманный навигатор Garmin GPS 60 C, подключил его в последовательный разъем к Arduino и загрузил несколько библиотек GPS, получив таким образом сигнал очень точного времени.
Проблема GPS метода оказалась в том, что, поскольку я живу центре города, то каменные джунгли непроглядными высотками окружают мой дом, и понадобилось бы поставить внешнюю GPS антенну снаружи окна, чтобы получить GPS сигнал с чистого неба. Без спутникового покрытия, никакое устройство GPS не в состоянии получить сигнал с синхронизацией по времени. Или часы должны быть на окне, либо надо было вынести GPS-антенну и проложить 7-метровый кабель до них.
Третий способ настройки часов оказался наилучшим. Заключается он в работе Arduino совместно с DS1307 часами реального времени (RTC). Питание на них идет от таблеточной 3-вольтовой батарейки, которая сохраняет настройки, когда устройство выключено и во время отсоединения микроконтроллера.
Я пошел в местный «электронный рай», расположенный в центре города, чтобы испытать свою удачу в поиске необходимых компонентов. К моему удивлению, там я нашел все необходимые детали для сборки цифровых часов.
Необходимыми деталями являются:
- плата Arduino для макетирования и загрузки скетча в микроконтроллер;
- микроконтроллер ATmega328P для работы часов;
- четыре красных 7-сегментных LED-индикатора (или другие, более холодного цвета, которые найдете на местном рынке);
- часы реального времени DS1307;
- кварцевый резонатор на 32,768 кГц;
- держатель для батарейки таблеточного размера CR2025 или CR2032;
- четыре микросхемы 74HC595 сдвигающего регистра для управления 7-сегментными LED-индикаторами;
- резисторы 220 Ом по 0.25 Вт;
- однорядные штыревые разъёмы;
- гнезда для интегральных микросхем (IC);
- соединительные провода.
Если нет навыков в изготовлении печатных плат, то рекомендую использовать паечную макетную плату (текстолитовая пластинка с множеством отверстий для закрепления на ней пайкой компонентов, которую ошибочно называют монтажной платой) и припаять на неё все IC гнезда микросхем и штыревые разъёмы. Благодаря таким быстроразъемным контактам все 7-сегментные LED-индикаторы и интегральные микросхемы могут быть легко заменены при необходимости.
Поскольку размер макетной платы весьма ограничен, то удалось разместить на ней только 35-миллиметровые LED-индикаторы, ведь должно было ещё остаться место для держателя таблеточной батарейки. Хотелось бы поставить гораздо большие 7-сегментные индикаторы, но более крупным из них надо повышенное напряжение, свыше 5 В, и уже потребовалось таки усложнить схему двойными цепями питания. Иметь дело со стабилизатором на два выходных напряжения не хочется, лучше сосредоточиться на более простой версии цифровых часов.
Разделительные керамические конденсаторы 100 нФ на ножке питания Vcc каждого регистра 74HC595 добавлены, чтобы предотвратить любые проблемы с низкочастотными помехами.
Собираемые цифровые часы используют только 5 пинов Arduino:
- 3 цифровых выхода для сдвигающих регистров 74HC595;
- 2 аналоговых выхода для часов реального времени, подключенных с использованием соединения I2C.
Преимущество собираемых цифровых часов на Arduino в сравнении с заводскими в том, что к ним можно легко добавить любые функции, какие только могут стать полезны.
Вот некоторые идеи доработки часов:
- Чередование отображения на индикаторах часов/минут и минут/секунд;
- Проигрывание мелодии каждый час;
- Установка датчика LM35, и использование часов в качестве термометра;
- Функция утреннего будильника;
- Даже управление другими электрическими приборами с помощью электромеханического реле, включающегося в соответствии с определёнными по времени событиями или показаниями подключенных датчиков.
Так как четыре индикатора довольно большие и яркие, их можно использовать также для отображения буквенной информации.
Загрузка скетча на цифровые часы
После того, как я припаял первую цифру 7 сегментного LED-индикатора с общим катодом к сдвигающему регистру 74HC595, открылась первая проблема. Я использовал только один резистор 220 Ом, соединенный с общим катодом LED-индикатора, чтобы сберечь резисторы, и обнаружил, что когда включается число 8, то все сегменты загораются очень тускло. Это нормально для прототипа, но не годится для действующих цифровых часов. Было бы очень неприятно иметь часы с по-разному светящимися цифрами. Так что пришлось разорвать отдельные провода и раздобыть побольше резисторов на 220 Ом, чтобы подключить их к каждому из семи сегментов LED-индикатора.
Подключение 7-сегментных индикаторов к регистрам 74HC595
Вторая проблема была в том, что я забыл выделить место для двух светодиодов диаметром 5 мм, в качестве мигающего двоеточия индикатора секунд. А индикатор третьей цифры уже был припаян.
Поскольку слишком много труда уходит на пайку одного индикатора, вместе с присоединением всех резисторов к проводам, я решил сделать выносную платку с двумя светодиодами в качестве индикаторов секунд. Я найду способ установки двух точек между часовыми и минутными цифрами! На фотографии внизу, я просто снимаю по светодиоду на 13 выводе мигания с интервалом в 500 мс.
- Есть коды для работы 7-сегментных индикаторов на сдвигающих регистрах 74595.
- Окончательный скетч для Arduino часов реального времени с 7-сегментными индикаторами на сдвигающих регистрах 74595
Вот несколько фотографий собранного, работающего устройства. Теперь мне всего лишь нужно что-то вроде акрила, чтобы закрепить макетную плату и скрыть часы Arduino в общем корпусе.
Arduino часы со светодиодным индикатором секунд голубого цвета
Arduino часы со снятыми 7-сегментными LED-индикаторами
Вид сзади часов с выносной платой Arduino
Эти часы запитаны от выносной платы Arduino в версии с FTDI кабелем и гнездом DC постоянного тока.
Arduino часы с датчиком DHT11
Сборка Arduino часов завершена после установки DHT11 датчика влажности и температуры.
Автор: Виталий Петрович. Украина, Лисичанск.
Я десь читав, що такий годинник відстає на пару секунд кожної доби, тому потрібно модуль годинника реального часу. Чи це правда.
Добрий день.
В цьому годиннику використовується плата DS1307, на чому акцентовано увагу у вступній розповіді до переліку необхідних деталей. DS1307 — і є модуль годинника реального часу, найпоширеніший в багатьох проектах. Мабуть тому для нього існує стільки різних бібліотек на різних платформах: Arduino Mini, Arduino Nano, Arduino Uno, Arduino Pro, Arduino Mega та інших.
Запевняю, навряд чи цей модуль так масово застосовували, якщо він би мав настільки значущий глюк в дві секунди кожної доби.
Хоча, треба зазначити, що на відміну від DS3231, модуль DS1307 не має термометра для стабілізації хода годинника в залежності від температури оточуючого середовища. Але ж навіщо годиннику потрібна та термостабілізація, якщо він висить у теплому приміщенні?
вылезают ошибки при компиляции скетча.
Схема то отзеркаленна? Отсчет идет справа налево ,судя по микросхемам.?
Такова жизнь. Ничего не поделаешь.