Простые часы своими руками. Многофункциональные наручные LED часы

В этой пошаговой инструкции расскажу как сделать настенные часы своими руками.

Особенности часов:

  • Большие цифры (каждая цифра примерно равна размеру листа формата А4).
  • Тонкие стенки (можно вставить в рамку для картины).
  • Автоматическая регулировка в зависимости от яркости освещения в комнате.
  • Выделенная кнопка переключения летнего времени.

Шаг 1: Необходимые материалы


Что я использовал для настенных электронных часов с большими цифрами.

Электроника:

  • Arduino nano V3.0 (к сожалению, поскольку я не могу позволить себе оригинальный ардуино, я использовал китайский клон) - 150 рублей.
  • Цифровой модуль измерения интенсивности света Фоторезистор для Arduino - 60 рублей.
  • DS3231 AT24C32 IIC-модуль памяти для точного времени для Arduino — 60 рублей.
  • DC-DC преобразователь LM2596, Выходная мощность 1.23В-30В - 50 рублей.
  • 4 метра WS2811 светодиодной ленты 30 диодов / м - 700 рублей. (один WS2811 контролирует 3 светодиодных чипа)

Общая стоимость электроники: 900 рублей.

Другие материалы:

  • Термоусадочная трубка - 400 рублей (33м в ассортименте)
  • 20 шт. 5 x 7 см печатная плата - 200 рублей.
  • 3 шт. Микропереключатель - 60 рублей.
  • Припой - 50 рублей
  • Флюс - 50 рублей.
  • Кабель UTP (неэкранированная витая пара)
  • ЖК-шрифт (http://www.dafont.com/lcd-lcd-mono.font) - бесплатно.
  • Картон - бесплатно в супермаркете.
  • Полистирольная панель - 100 рублей.

А также различные инструменты.

Шаг 2: Подготовка - шаблоны цифр


  1. Скачайте и установите шрифт для часов
  2. Откройте Word или другую программу, и создайте шаблон, как на первом фото.
  • Размер шрифта ~ 800,
  • Шрифт белого цвета с черным контуром,
  • Серые полосы там, где будут светодиодные ленты

Напечатайте шаблон и вырежьте полосы канцелярским ножом (как на втором фото)

Шаг 3: Подготовка - режем картон и светодиодную ленту

Используя цифровой шаблон, вырежьте картон по размеру (не забудьте оставить место для точек между часами и минутами)

Если ваши светодиодные полосы поставляются с разъемами на каждом конце (как у меня), отсоедините разъем и разрежьте их по 3 штуки.

Шаг 4: Крепим светодиодную ленту


Используя шаблон, наклейте светодиодную ленту на картон.

Это не обязательно, но я использовал карандаш, чтобы отметить, где должны быть размещены светодиодные полосы.

Намного удобнее клеить их, когда видишь конечную форму. Благодаря этому я заметил, что оставил слишком много места для точек между цифрами и вовремя это исправил.

Шаг 5: Паяем светодиодную ленту


Теперь начинается долгий процесс пайки.

Спаяйте светодиодную ленту, чтобы сформировать непрерывную полосу. Обратите внимание на порядок припаивания полосок на фото. Для точек я использовал один кусок ленты, которой посередине заклеил скотчем.

Цвета, которые я выбрал:

  • Синий для земли
  • Зеленый для data
  • Красный для +12В

Шаг 6: Установка Ардуино на печатной плате


Я попытался сделать эскиз в Fritzing, но не смог найти все детали 🙁

Итак, на первом фото схема подключения проводов, а на втором то, как это выглядит у меня.

Шаг 7: Проверка LED


Прежде чем загружать код (к которому я не имею никакого отношения), не забудьте установить библиотеку FastLED.

Если все сработает нормально, светодиоды должны циклически менять цвета. Если у вас возникли проблемы, в первую очередь проверьте вашу спайку.

Файлы

Шаг 8: Запрограммируйте часы

Спустя некоторое время мне удалось сделать часы, которые меня полностью устраивают. Однако, каждый найдет для себя, что можно улучшить.

Код хорошо прокомментирован, поэтому с ним не должно возникнуть никаких проблем.

Все сообщения отладки также прокомментированы.

Чтобы изменить используемый цвет, вы должны изменить переменную в строке 22 (int ledColor = 0x0000FF; // Используемый цвет (в шестнадцатеричном формате)). Вы можете найти список цветов в нижней части этой страницы

Привет, geektimes! В первой части статьи были рассмотрены принципы получения точного времени на самодельных часах. Пойдем дальше, и рассмотрим, как и на чем это время лучше выводить.

1. Устройства вывода

Итак, у нас есть некая платформа (Arduino, Raspberry, PIC/AVR/STM-контроллер, etc), и стоит задача подключить к нему некую индикацию. Есть множество вариантов, которые мы и рассмотрим.

Сегментная индикация

Тут все просто. Сегментный индикатор состоит из обычных светодиодов, которые банально подключаются к микроконтроллеру через гасящие резисторы.

Осторожно, траффик!

Плюсы: простота конструкции, хорошие углы обзора, невысокая цена.
Минус: количество отображаемой информации ограничено.
Конструкции индикаторов бывают двух видов, с общим катодом и общим анодом, внутри это выглядит примерно так (схема с сайта производителя).

Есть 1001 статья как подключить светодиод к микроконтроллеру, гугл в помощь. Сложности начинаются тогда, когда мы захотим сделать большие часы - ведь смотреть на мелкий индикатор не особо удобно. Тогда нам нужны такие индикаторы (фото с eBay):

Они питаются от 12В, и напрямую от микроконтроллера просто не заработают. Тут нам в помощь приходит микросхема CD4511 , как раз для этого предназначенная. Она не только преобразует данные с 4-битной линии в нужные цифры, но и содержит встроенный транзисторный ключ для подачи напряжения на индикатор. Таким образом, нам в схеме нужно будет иметь «силовое» напряжение в 9-12В, и отдельный понижающий преобразователь (например L7805) для питания «логики» схемы.

Матричные индикаторы

По сути, это те же светодиоды, только в виде матрицы 8х8. Фото с eBay:

Продаются на eBay в виде одиночных модулей либо готовых блоков, например по 4 штуки. Управление ими весьма просто - на модулях уже распаяна микросхема MAX7219 , обеспечивающая их работу и подключение к микроконтроллеру с помощью всего лишь 5 проводов. Для Arduino есть много библиотек, желающие могут посмотреть код.
Плюсы: невысокая цена, хорошие углы обзора и яркость.
Минус: невысокое разрешение. Но для задачи вывода времени вполне достаточно.

ЖК-индикаторы

ЖК-индикаторы бывают графические и текстовые.

Графические дороже, однако позволяют выводить более разнообразную информацию (например график атмосферного давления). Текстовые дешевле, и с ними проще работать, они также позволяют выводить псевдографику - есть возможность загружать в дисплей пользовательские символы.

Работать с ЖК-индикатором из кода несложно, но есть определенный минус - индикатор требует много управляющих линий (от 7 до 12) от микроконтроллера, что неудобно. Поэтому китайцы придумали совместить ЖК-индикатор с i2c-контроллером, получилось в итоге очень удобно - для подключения достаточно всего 4х проводов (фото с eBay).


ЖК-индикаторы достаточно дешевые (если брать на еБее), крупные, их просто подключать, и можно выводить разнообразную информацию. Единственный минус это не очень большие углы обзора.

OLED-индикаторы

Являются улучшенным продолжением предыдущего варианта. Варьируются от маленьких и дешевых с диагональю 1.1", до больших и дорогих. Фото с eBay.

Собственно, хороши всем кроме цены. Что касается мелких индикаторов, размером 0.9-1.1", то (кроме изучения работы с i2c) какое-то практическое применение им найти сложно.

Газоразрядные индикаторы (ИН-14, ИН-18)

Эти индикаторы сейчас весьма популярны, видимо из-за «теплого лампового звука света» и оригинальности конструкции.


(фото с сайта nocrotec.com)

Схема их подключения несколько сложнее, т.к. эти индикаторы для зажигания используют напряжение в 170В. Преобразователь из 12В=>180В может быть сделан на микросхеме MAX771 . Для подачи напряжения на индикаторы используется советская микросхема К155ИД1 , которая специально для этого и была создана. Цена вопроса при самостоятельном изготовлении: около 500р за каждый индикатор и 100р за К155ИД1, все остальные детали, как писали в старых журналах, «дефицитными не являются». Основная сложность тут в том, что и ИН-хх, и К155ИД1, давно сняты с производства, и купить их можно разве что на радиорынках или в немногих специализированных магазинах.

2. Выбор платформы

С индикацией мы более-менее разобрались, осталось решить, какую аппаратную платформу лучше использовать. Тут есть несколько вариантов (самодельные я не рассматриваю, т.к. тем кто умеет развести плату и припаять процессор, эта статья не нужна).

Arduino

Самый простой вариант для начинающих. Готовая плата стоит недорого (около 10$ на eBay с бесплатной доставкой), имеет все необходимые разъемы для программирования. Фото с eBay:

Под Arduino есть огромное количество разных библиотек (например для тех же ЖК-экранов, модулей реального времени), Arduino аппаратно совместима с различными дополнительными модулями.
Главный минус: сложность отладки (только через консоль последовательного порта) и довольно-таки слабый по современным меркам процессор (2КБайт RAM и 16МГц).
Главный плюс: можно сделать много чего, практически не заморачиваясь с пайкой, покупкой программатора и разводкой плат, модули достаточно соединить друг с другом.

32-разрядные процессоры STM

Для тех кто захочет что-то помощнее, есть готовые платы с процессорами STM, например плата с STM32F103RBT6 и TFT-экраном. Фото с eBay:

Здесь мы уже имеем полноценную отладку в полноценной IDE (из всех разных мне больше понравилась Coocox IDE), однако понадобится отдельный программатор-отладчик ST-LINK с разъемом JTAG (цена вопроса 20-40$ на eBay). Как вариант, можно купить отладочную плату STM32F4Discovery, на которой этот программатор уже встроен, и его можно использовать отдельно.

Raspberry PI

И наконец, для тех кто хочет полной интеграции с современным миром, есть одноплатные компьютеры с Linux, всем уже наверное известные Raspberry PI. Фото с eBay:

Это полноценный компьютер с Linux, гигабайтом RAM и 4х-ядерным процессором на борту. С краю платы выведена панель из 40 пинов, позволяющая подключать различную периферию (пины доступны из кода, например на Python, не говоря о C/C++), есть также стандартный USB в виде 4х разъемов (можно подключить WiFi). Так же есть стандартный HDMI.
Мощности платы хватит к примеру, не только чтобы выводить время, но и чтобы держать HTTP-сервер для настройки параметров через web-интерфейс, подгружать прогноз погоды через интернет, и так далее. В общем, простор для полета фантазии большой.

С Raspberry (и процессорами STM32) есть одна единственная сложность - ее пины используют 3-вольтовую логику, а большинство внешних устройств (например ЖК-экраны) работают «по старинке» от 5В. Можно конечно подключить и так, в принципе заработает, но это не совсем правильный метод, да и испортить плату за 50$ как-то жалко. Правильный способ - использовать «logic level converter», который на eBay стоит всего 1-2$.
Фото с eBay:

Теперь достаточно подключить наше устройство через такой модуль, и все параметры будут согласованы.

ESP8266

Способ скорее экзотический, но довольно-таки перспективный в силу компактности и дешевизны решения. За совсем небольшие деньги (около 4-5$ на eBay) можно купить модуль ESP8266, содержащий процессор и WiFi на борту.
Фото с eBay:

Изначально такие модули предназначались как WiFi-мост для обмена по serial-порту, однако энтузиастами было написано множество альтернативных прошивок, позволяющих работать с датчиками, i2c-устройствами, PWM и пр. Гипотетически вполне возможно получать время от NTP-сервера и выводить его по i2c на дисплей. Для тех кто хочет подключить много различной периферии, есть специальные платы NodeMCU с большим числом выводов, цена вопроса около 500р (разумеется на eBay):

Единственный минус - ESP8266 имеет очень мало памяти RAM (в зависимости от прошивки, от 1 до 32КБайт), но задача от этого становится даже интересней. Модули ESP8266 используют 3-вольтовую логику, так что вышеприведенный конвертор уровней тут также пригодится.

На этом вводный экскурс в самодельную электронику можно закончить, автор желает всем удачных экспериментов.

Вместо заключения

Я в итоге остановился на использовании Raspberry PI с текстовым индикатором, настроенным на работу с псевдографикой (что вышло дешевле чем графический экран той же диагонали). Сфоткал экран настольных часов во время написания этой статьи.

Часы выводят точное время, взятое из Интернета, и погоду которая обновляется с Яндекса, все это написано на Python, и вполне работает уже несколько месяцев. Параллельно на часах запущен FTP-сервер, что позволяет (вкупе с пробросом портов на роутере) обновить на них прошивку не только из дома, но и из любого места где есть Интернет. Как бонус, ресурсов Raspberry в принципе хватит и для подключения камеры и/или микрофона с возможностью удаленного наблюдения за квартирой, или для управлением различными модулями/реле/датчиками. Можно добавить всякие «плюшки», типа светодиодной индикации о пришедшей почте, и так далее.

PS: Почему eBay?
Как можно было видеть, для всех девайсов приводились цены или фото с ебея. Почему так? К сожалению, наши магазины часто живут по принципу «за 1$ купил, за 3$ продал, на эти 2 процента и живу». В качестве простого примера, Arduino Uno R3 стоит (на момент написания статьи) 3600р в Петербурге, и 350р на eBay с бесплатной доставкой из Китая. Разница действительно на порядок, безо всяких литературных преувеличений. Да, придется подождать месяц чтобы забрать посылку на почте, но такая разница в цене думаю, того стоит. Но впрочем, если кому-то надо прямо сейчас и срочно, то наверно и в местных магазинах есть выбор, тут каждый решает сам.

Концепция часов с большими цифрами

Конструктивно девайс будет состоять из двух плат – одна над другой. Первая плата – матрица светодиодов, образующих разряды часов и минут, Вторая – силовая часть (управление светодиодами), логика и питание. Такая конструкция сделает часики более компактным (без корпуса примерно 22см х 9 см, толщиной сантиметра 4-5) + даст возможность прикрутить матрицу к другому проекту, если что то пойдет не так.

Силовая часть будет построена на базе драйвера UL2003 и транзисторных ключах. Логическая - на Atmega8 и DS1307. Питание: 220В - трансформатор; логика 5В (через 7805), силовая часть - 12В (через LM2576ADJ). Отделено будет предусмотрена кроватка для батарейки 3В для автономного питания часов реального времени - DS1307.

Думаю использовать Atmega8 и DS1307 (часики планирую подвесить под потолком, и что бы в случае пропадания электричества каждый раз не лазить за настройкой), однако разводка платы будет предполагать возможность работы девайса и без DS1307 (на первое время, а может и навсегда – уж как получится).

Таким образом, в зависимости от комплектации алгоритм работы программы часов будет следующим:

Atmega8 – счетчик времени по таймеру. Работа в цикле без пауз: опрос клавиатуры, корректировка времени (если необходимо), отображение 4 разрядов и разделителя.

Atmega8 + DS1307 . Работа в цикле без пауз: опрос клавиатуры, корректировка времени DS1307 (если необходимо), зачитка времени с DS1307, отображение 4 разрядов и разделителя. Или другой вариант – зачитка с DS1307 по таймеру, остальное в цикле (пока не знаю как лучше).

Сегмент представляет собой 4 красных светодиода, соединенных между собой последовательно. Одна цифра – 7 сегментов с общим анодом. Сегменты не планирую разделять шаблоном «восьмерки», как это сделано в обычных индикаторах.

Силовая часть часов

Силовая часть часов построена на драйвере UL2003 и транзисторных ключах VT1 и VT2.

UL2003 отвечает за управление сегментами индикатора, ключи – за управление разрядами.

Отдельно управляется разделитель часов и минут (сигнал K8).

Управление сегментами, разрядами и разделителем осуществляется от микроконтроллера подачей положительного потенциала (т.е. подачей +5В) на К1-К8, Z1-Z4.

Подача сигналов на сегменты и разряды должна осуществляться синхронно и с определенной частотой, для того, что бы обеспечить динамический вывод информации (часов и минут).

В качестве транзистора VT1 (BCP53) можно использовать транзистор BCP52.

Схема силовой части часов с большими цифрами

Печатная плата семисегментного индикатора для часов с большими цифрами

Как я говорил ранее, конструктивно часы будут состоять из двух печатных плат - плата индикатора + логика и силовая часть.

Начнем с разработки и изготовления печатной платы индикатора.

Разработка печатной платы семисегментного индикатора для часов с большими цифрами

Печатная плата семисегментного индикатора для часов с большими цифрами в формате "lay" находится конце статьи, в присоединенных файлах. О технологии изготовления печатных плат методом ЛУТ можно почитать .

Если вы сделали все правильно, готовая печатная плата будет выглядеть примерно так.

Готовая печатная плата семисегментного индикатора для часов с большими цифрами

Сборка семисегментного индикатора

Поскольку плата индикатора является двухсторонней, первое, что надо сделать это выполнить межслоевые переходы. Я делаю это с помощью ножек ненужных деталей - продеваю их в отверстия и припаиваю с двух сторон. Когда все переходы выполнены, зачищаю их плоским мелким напильником - получается очень аккуратно и симпатично.

Межслоевые переходы на плате индикатора

Следующий шаг, собственно говоря, сборка индикатора. Для чего нам понадобится пачка красных (зеленых, белых, синих) светодиодов. Я, например, брал эти.

Подготовка к сборке индикатора

При установке диодов не забываем, что мы делаем индикатор с общим анодом - т.е. "+" диодов должны быть соединены вместе. Общие аноды на печатной плате - это большие фрагменты меди. Обязательно обратите внимание на анод разделительной точки.

Расположение анодов на печатной плате индикатора

В итоге, после 2 часов кропотливой работы должно получиться вот что:

Семисегментный индикатор

Цифровая часть часов

Цифровую часть часов с большими цифрами будем собирать по схеме:

Схема часов с большими цифрами

Схема часов довольно прозрачна, поэтому объяснять как она работает не вижу смысла. Печатную плату в формате *.lay можно скачать в конце статьи. Замечу, что печатная плата в основном разработана под детали для поверхностного монтажа.

Итак, элементная база, которую использовал я:

1. Диодный мост DFA028 (подойдет любой компактный для поверхностного монтажа);
2. Регуляторы напряжения LM2576ADJ в корпусе D2PAK, 78M05 в корпусе HSOP3-P-2.30A;
3. Транзисторные ключи BCP53 (корпус SOT223) и BC847 (корпус SOT23);
4. Микроконтроллер Atmega8 (TQFP);
5. Часы реального времени DS1307 (SO8);
6. Блок питания 14В 1,2А от какого-то старого устройства;
7. Остальные детали - любого типа, подходящие по размерам для установки на печатную плату.

Разумеется, если вы хотите применить другие корпуса деталей, вам потребуется внести некоторые изменения в печатную плату.

Обратите внимание на номиналы сопротивлений R3 и R4 - они должны быть именно такими, какие указаны на схеме - не больше не меньше. Это сделано для того, что бы обеспечить на выходе регулятора напряжения LM2576ADJ ровно 12В. Если все таки не удастся найти такие номиналы резисторов, то значение сопротивления R4 может быть рассчитано по формуле:

R4=R3(12/1.23-1) или R4=8.76R3

Сборка цифровой части. Версия 1, без DS1307

Если при изготовлении печатной платы часов вы придерживались рекомендаций, изложенных в , то тогда вам излишне напоминать, что перед сборкой печатная плата должна быть просверлена, все видимые короткие замыкания на ней устранены, а плата покрыта жидкой канифолью? Тогда приступаем к сборке часов.

Я рекомендую начать со сборки блока питания и только за тем выполнить монтаж цифровой части. Это общая рекомендация по самостоятельной сборке девайсов. Почему? Просто потому, что если блок питания собран с ошибкой можно пожечь всю низковольтную электронику, которая должна питаться этим блоком питания.

Если все сделано правильно - блок питания должен заработать сразу. Проверяем сборку блока питания - замеряем напряжение в контрольных точках.

На рисунке показаны контрольные точки, в которых следует проверить напряжение питания. Если напряжение соответствует заявленному, можно приступать к сборке цифровой части часов. Иначе проверяем монтаж и работоспособность элементов блока питания.

Контрольные точки и значения напряжений для блока питания часов

После того, как проверка блока питания выполнена приступаем к сборке цифровой части часов - устанавливаем все остальные элементы на печатную плату. Проверяем на КЗ, особенно в ногах микроконтроллера Atmega и драйвера UL2003.

Монтаж цифровой части часов

Обратите внимание на то, что сборку часов мы выполняем БЕЗ установки часов реального времени DS1307, однако вся обвязка этой микросхемы должна быть выполнена. В будущем, если возникнет необходимость, это сэкономит нам время на доработку часов под вторую версию, там где все таки будут использоваться отдельные, независимые часы реального времени на DS1307.

Предварительная проверка микроконтроллера ATMEGA8

Для того, что бы проверить правильность и работоспособность микроконтроллера нам потребуется:

1. Программатор, например .
2. для внутрисхемного программирования микроконтроллера.
3. Программа AVRDUDESHELL.

Подключаем плату часов к дата-кабелю. Дата-кабель подключаем к программатору. Программатор к компьютеру, на котором установлена программа AVRDUDESHELL. Подключать плату часов к питающей сети 220В не следует.

Удачное чтение данных с микроконтроллера программой AVRDUDESHELL

Если при чтении фьюзов возникла проблемы - проверяйте монтаж - возможно где то есть короткое замыкание или "непропай". Еще один совет - возможно микроконтроллер находится в режиме низкоскоростного программирования, тогда достаточно переключить программатор в этот режим (

Для тех, кто хоть немного разбирается в микроконтроллерах, а также хочет создать несложное и полезное устройство для дома, нет ничего лучше сборки с LED индикаторами. Такая вещь может украсить вашу комнату, а может пойти на уникальный подарок, сделанный своими руками, от чего приобретёт дополнительную ценность. Схема работает как часы и как термометр - режимы переключаются кнопкой или автоматически.

Схема электрическая самодельных часов с термометром

Микроконтроллер PIC18F25K22 берёт на себя всю обработку данных и отсчёт времени, а на долю ULN2803A остаётся согласование его выходов со светодиодным индикатором. Небольшая микросхема DS1302 работает как таймер точных секундных сигналов, частота её стабилизирована стандартным кварцевым резонатором 32768 Гц. Это несколько усложняет конструкцию, зато вам не придётся постоянно подстраивать и корректировать время, которое будет неизбежно запаздывать или спешить, если обойтись случайным ненастроенным кварцевым резонатором на несколько МГц. Подобные часы скорее простая игрушка, чем качественный точный хронометр.

При необходимости, датчики температуры могут быть расположены далеко от основного блока - они соединяются с ним трёхпроводным кабелем. В нашем случае один температурный датчик установлен в блок, а другой расположен снаружи, на кабеле длинной около 50 см. Когда пробовали кабель 5 м, то тоже прекрасно функционировало.

Дисплей часов изготовлен из четырех больших светодиодных цифровых индикаторов. Первоначально они были с общим катодом, но изменены на общий анод в финальной версии. Вы можете ставить любые другие, потом просто подберёте токоограничительные резисторы R1-R7 исходя из требуемой яркости. Можно было разместить его на общей, с электронной частью часов, плате, но так гораздо универсальнее - вдруг вы захотите поставить очень большой LED индикатор, чтоб их было видно на дальнем расстоянии. Пример такой конструкции уличных часов есть тут.

Сама электроника запускается от 5 В, но для яркого свечения светодиодов необходимо использовать 12 В. Из сети, питание поступает через понижающий трансформатор адаптер на стабилизатор 7805 , который образует напряжение строго 5 В. Обратите внимание на небольшую зелёную цилиндрическую батарейку - она служит источником резервного питания, на случай пропадания сети 220 В. Её не обязательно брать на 5 В - достаточно литий-ионного или Ni-MH аккумулятора на 3,6 вольта.

Для корпуса можно задействовать различные материалы - дерево, пластик, металл, либо встроить всю конструкция самодельных часов в готовый промышленный, например от мультиметра, тюнера, радиоприёмника и так далее. Мы сделали из оргстекла, потому что оно легко обрабатывается, позволяет увидеть внутренности, чтоб все видели - эти часы собраны своими руками. И, главное, оно было в наличии:)

Здесь вы сможете найти все необходимые детали предлагаемой конструкции самодельных цифровых часов, в том числе схему, топологию печатной платы, прошивки PIC и

Как видно из названия, главное предназначение данного устройства - узнавать текущее время и дату. Но оно имеет ещё множество других полезных функций. Идея его создания появилась после того, как мне на глаза попались полусломанные часы с относительно большим (для наручных) металлическим корпусом. Я подумал, что туда можно вставить самодельные часы, возможности которых ограничиваются только собственной фантазией и умением. В результате появилось устройство со следующими функциями:

1. Часы - календарь:

    Отсчёт и вывод на индикатор часов, минут, секунд, дня недели, числа, месяца, года.

    Наличие автоматической корректировки текущего времени, которая производится каждый час (максимальные значения +/-9999 ед., 1 ед. = 3,90625 мс.)

    Вычисление дня недели по дате (для текущего столетия)

    Автоматический переход на летнее и зимнее время (отключаемый)

  • Учитываются високосные годы

2. Два независимых будильника (при срабатывании звучит мелодия)
3. Таймер с дискретностью 1 сек. (Максимальное время отсчета 99ч 59м 59с)
4. Двухканальный секундомер с дискретностью счета 0,01 сек. (максимальное время счета 99ч 59м 59с)
5. Секундомер с дискретностью счета 1 сек. (максимальное время счета 99 суток)
6. Термометр в диапазоне от -5°С. до 55°С (ограничен температурным диапазоном нормальной работы устройства) с шагом 0,1°С.
7. Считыватель и эмулятор электронных ключей - таблеток типа DS1990 по протоколу Dallas 1-Wire (память на 50 штук, в которой уже имеется несколько универсальных ”ключей-вездеходов”) с возможностью побайтного просмотра кода ключа.
8. Дистанционный пульт управления на ИК лучах (реализована только команда "Сделать снимок") для цифровых фотокамер "Pentax", "Nikon", "Canon"
9. Светодиодный фонарик
10. 7 мелодий
11. Звуковой сигнал в начале каждого часа (отключаемый)
12. Звуковое подтверждение нажатия кнопок (отключаемое)
13. Контроль напряжения батареи питания с функцией калибровки
14. Цифровая регулировка яркости индикатора

Может такая функциональность и избыточна, но мне нравятся универсальные вещи, ну и плюс моральное удовлетворение от того, что данные часы будут сделаны своими руками.

Принципиальная схема часов

Устройство построено на микроконтроллере АТmega168PA-AU. Часы тикают по таймеру Т2, работающему в асинхронном режиме от часового кварца на 32768 Гц. Микроконтроллер почти всё время находится в спящем режиме (индикатор при этом выключен), просыпаясь раз в секунду, чтобы добавить эту самую секунду к текущему времени и снова засыпает. В активном режиме МК тактируется от внутреннего RC осциллятора на 8 МГц, но внутренний прескалер делит её на 2, в итоге ядро тактируется от 4 МГц. Для индикации используется четыре одноразрядных светодиодных цифровых семисегментных индикатора c общим анодом и децимальной точкой. Так же имеется 7 статусных светодиодов, назначение которых следующее:
D1- Признак отрицательного значения (минус)
D2- Признак работающего секундомера (мигает)
D3- Признак включенного первого будильника
D4- Признак включенного второго будильника
D5- Признак подачи звукового сигнала в начале каждого часа
D6- Признак работающего таймера (мигает)
D7- Признак низкого напряжения батареи питания

R1-R8 - токоограничительные резисторы сегментов цифровых индикаторов HG1-HG4 и светодиодов D1-D7. R12,R13 – делитель для контроля напряжения батареи. Поскольку напряжение питания часов 3V, а белому светодиоду D9 требуется около 3,4-3,8V при номинальном токе потребления, то он светится не в полную силу (но её хватает, чтобы не споткнуться в темноте) и поэтому подключен без токоограничительного резистора. Элементы R14, Q1, R10 предназначены для управления инфракрасным светодиодом D8 (реализация дистанционного управления для цифровых фотокамер). R19, R20, R21 служат для сопряжения при общении с устройствами, имеющими интерфейс 1-Wire. Управление осуществляется тремя кнопками, которые я условно назвал: MODE (режим), UP (вверх), DOWN (вниз). Первая из них также предназначена для пробуждения МК по внешнему прерыванию (при этом индикация включается), поэтому она подключена отдельно на вход PD3. Нажатия остальных кнопок определяется при помощи АЦП и резисторов R16,R18. Если кнопки не нажимаются в течении 16 сек, то МК засыпает и индикатор гаснет. При нахождении в режиме “Пульт ДУ для фотокамер” этот интервал составляет 32 сек., а при включенном фонарике - 1 минуту. Также МК можно усыпить вручную, используя кнопки управления. При запущенном секундомере с дискретностью счета 0,01 сек. устройство не переходит в спящий режим.

Печатная плата

Устройство собрано на двухсторонней печатной плате круглой формы по размеру внутреннего диаметра корпуса наручных часов. Но при изготовлении я использовал две односторонние платы толщиной 0,35 мм. Такую толщину опять же получил отслоив её от двухстороннего стеклотекстолита толщиной 1,5 мм. Платы затем склеил. Все это делалось потому что, у меня не было тонкого двухстороннего стеклотекстолита, а каждый сэкономленный миллиметр толщины в ограниченном внутреннем пространстве корпуса часов очень ценен, да и отпала надобность совмещения при изготовлении печатных проводников методом ЛУТ. Рисунок печатной платы и расположение деталей находятся в прилагаемых файлах. На одной стороне размещены индикаторы и токоограничительные резисторы R1-R8. На обратной - все остальные детали. Имеются два сквозных отверстия для белого и инфракрасного светодиодов.

Контакты кнопок и держатель батареи выполнены из гибкой пружинящей листовой стали толщиной 0,2…0,3мм. и залужены. Ниже приведены фото платы с двух сторон:

Конструкция, детали и их возможная замена

Микроконтроллер ATmega168PA-AU можно заменить на ATmega168P-AU, ATmega168V-10AU ATmega168-20AU. Цифровые индикаторы - 4 штуки KPSA02-105 суперяркие красного цвета свечения с высотой цифры 5,08мм. Mожно поставить из этой же серии KPSA02-xxx или KCSA02-xxx. (только не зеленые – они будут слабо светиться) Другие аналоги подобных размеров с достойной яркостью мне неизвестны. У HG1, HG3 соединение катодов сегментов отличается от HG2, HG4, потому что мне так было удобнее для разводки печатной платы. В связи с этим для них в программе применена различная таблица знакогенератора. Используемые резисторы и конденсаторы SMD для поверхностного монтажа типоразмеров 0805 и 1206, светодиоды D1-D7 типоразмера 0805. Белый и инфракрасный светодиоды диаметром 3мм. На плате имеется 13 сквозных отверстий, в которые необходимо установить перемычки. В качестве температурного датчика применён DS18B20 c интерфейсом 1-Wire. LS1 – обычная пьезоэлектрическая пищалка, вставляется в крышку. Одним контактом она соединяется с платой при помощи пружинки, установленной на ней, другим соединяется с корпусом часов самой крышкой. Кварцевый резонатор от наручных часов.

Программирование, прошивка, фьюзы

Для внутрисхемного программирования на плате имеются только 6 круглых контактных пятачка (J1), так как полноценный разъем не уместился по высоте. К программатору их подключал, используя контактное устройство, сделанное из штыревой вилки PLD2x3 и напаянных на них пружинками, прижимая их одной рукой к пятачкам. Ниже прилагается фото приспособления.

Я использовал его, так как в процессе отладки приходилось много раз перепрошивать МК. При разовой прошивке проще подпаять к пятачкам тонкие провода, подключенные к программатору, а после снова отпаять. МК удобнее прошивать без батареи, но чтобы питание поступало либо от внешнего источника +3V, либо от программатора c таким же напряжением питания. Программа написана на ассемблере в среде VMLAB 3.15. Исходные коды, прошивки для FLASH и EEPROM в приложении.

FUSE-биты микроконтроллера DD1 должны быть запрограммированы следующим образом:
CKSEL3...0 = 0010 - тактирование от внутреннего RC осциллятора 8 МГц;
SUT1...0 =10 - Start-up time: 6 CK + 64 ms;
CKDIV8 = 1 - делитель частоты на 8 отключён;
CKOUT = 1 - Output Clock on CKOUT запрещен;
BODLEVEL2…0 = 111 - контроль напряжения питания отключён;
EESAVE = 0 - стирание EEPROM при программировании кристалла запрещено;
WDTON = 1 - Нет постоянного включения Watchdog Timer;
Остальные FUSE – биты лучше не трогать. FUSE–бит запрограммирован, если установлен в “0”.

Прошивка EEPROM прилагаемым в архиве дампом обязательна.

В первых ячейках EEPROM размещается начальные параметры устройства. В приведённой ниже таблице описывается назначение некоторых из них, которые можно менять в разумных пределах.

Адрес ячейки

Назначение

Параметр

Примечание

Величина напряжения батареи, при которой происходит сигнал о её низком уровне

260($104) (2,6V)

коэффициент для коррекции значения измеренного напряжения батареи

интервал времени на переход в режим сна

1 ед. = 1 сек

интервал времени на переход в режим сна при включенном фонарике

1 ед. = 1 сек

интервал времени на переход в режим сна при нахождении в режиме ДУ для фотокамер

1 ед. = 1 сек

Здесь хранятся номера IButton ключей

Небольшие пояснения по пунктам:

1 пункт. Здесь указывается величина напряжения на батарее, при которой загорится светодиод, сигнализирующий о её низком значении. Я поставил 2,6V (параметр - 260). Если нужно другое, например 2,4V, то надо записать 240($00F0). В ячейку по адресу $0000 заносится младший байт, соответственно в $0001 – старший.

2 пункт. Поскольку я не установил на плату переменный резистор для подстройки точности измерения напряжения батареи питания ввиду отсутствия места, то я ввел программную калибровку. Порядок калибровки для точного измерения следующий: изначально в данной ячейке EEPROM записан коэффициент 1024($400), необходимо перевести устройство в активный режим и посмотреть на индикаторе напряжение, и тут же замерить вольтметром реальное напряжение на батарее. Коэффициент коррекции (К), который необходимо выставить, вычисляется по формуле: K=Uр/Uи*1024 где Uр – реальное напряжение, измеренное вольтметром, Uи – напряжение которое, измерило само устройство. После подсчёта коэффициента ”K” его заносят в устройство (как это делается сказано в инструкции по эксплуатации). После калибровки у меня погрешность не превысила 3%.

3 пункт. Здесь задается параметр времени, через которое устройство перейдет в спящий режим, если кнопки не нажимаются. У меня стоит 16 сек. Если допустим надо, чтобы засыпало через 30 сек, то надо записать 30($26).

В 4 и 5 пунктах аналогично.

6 пункт. По адресу $0030 хранится код семейства нулевого ключа (dallas 1-Wire), затем его 48 битный номер и CRC. И так 50 ключей последовательно.

Настройка, особенности работы

Настройка устройства сводится к калибровке измерения напряжения батареи, как описано выше. Также необходимо засечь отклонение хода часов за 1 час, посчитать и внести соответствующее значение коррекции (процедура описана в инструкции по эксплуатации).

Устройство питается от литиевой батареи CR2032 (3V) и потребляет в режиме сна примерно 4 мкА, а в активном режиме 5…20 мА в зависимости от яркости индикатора. При ежедневном пятиминутном использовании активного режима батареи должно хватить примерно на 2….8 месяцев в зависимости от яркости. Корпус часов соединен с минусом батареи.

Считывание ключей проверялось на DS1990. Эмуляция проверена на домофонах ”МЕТАКОМ”. Под порядковыми номерами от 46 до 49(последние 4) прошиты (все ключи хранятся в EEPROM, их можно изменять перед прошивкой) универсальные ключи для домофонов. Ключ, прописанный под номером 49 открывал все домофоны ”МЕТАКОМ”, которые мне попадались, остальные универсальные ключи тестировать не довелось, их коды я взял из сети.

Дистанционное управление для фотокамер проверялось на моделях Pentax optio L20, Nikon D3000. Canon не удалось заполучить для проверки.

Инструкция пользователя занимает 13 страниц, поэтому я не стал её включать в статью, а вынес в приложение в формате PDF.

Архив содержит:
Схема в и GIF;
Рисунок печатной платы и расположение элементов в формате ;
Прошивка и исходники на ассемблере;

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
DD1 МК AVR 8-бит

ATmega168PA

1 PA-AU В блокнот
U2 Датчик температуры

DS18B20

1 В блокнот
Q1 MOSFET-транзистор

2N7002

1 В блокнот
С1, С2 Конденсатор 30 пФ 2 В блокнот
С3, С4 Конденсатор 0.1 мкФ 2 В блокнот
С5 Электролитический конденсатор 47 мкФ 1 В блокнот
R1-R8, R17 Резистор

100 Ом

9 В блокнот
R9 Резистор

10 кОм

1 В блокнот
R10 Резистор

8.2 Ом

1 В блокнот
R11 Резистор

300 Ом

1 В блокнот
R12 Резистор

2 МОм

1 В блокнот
R13 Резистор

220 кОм

1 В блокнот
R14 Резистор

30 кОм

1 В блокнот
R15, R19 Резистор

4.7 кОм

2 В блокнот
R16 Резистор

20 кОм

1

Последние материалы раздела:

История России от Рюрика до Путина!
История России от Рюрика до Путина!

Путинцев Севастьян, Митрафанов Вадим ГЕРОИ ВОЙНЫ 1812 года Пётр Иванович Багратион 1778 - 1834 Князь, генерал-майор. Из грузинского рода царей...

Мозаика император юстиниан со свитой
Мозаика император юстиниан со свитой

Равенна. Италия. Императрица Феодора со свитой. Мозаика. Середина VI в. Церковь Сан-Витале. Равенна. Италия. тинопольской черни, в то время...

Конкурсы для детей по биологии
Конкурсы для детей по биологии

Конкурс эрудитов (интеллектуальные и занимательные задания к циклу занятий по темам: «Царство Прокариоты», «Грибы», «Растения») для 6-7 классов....