Есть такая пословица — как начинаю что-нибудь делать на Arduino, так обычно часы получаются. Не будем отходить от этого правила и сделаем часы. Отмечу, что работа с микроконтроллерами (МК)) — это мое хобби. Мне понравился малый уровень вхождения для знакомства и освоения МК. Кроме того, как программиста по образованию привлекла возможность освоения новых технологий создание систем на базе МК.
![](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/6c6/960/d58/6c6960d586acbb252f6a1a4318afdcf7.png)
Дизайн
Решение по дизайну навеян часами с сайта Огни Токио.Отображение в данном виде понравилось тем что несмотря на ограниченность возможности высветки времени 30 диодами, есть узнаваемый часовой круг и можно понять сколько времени с одного взгляда (после предварительной тренировки). Сейчас на часах 5 часов 46 минут.
Описание
Часы используют внутренний таймер. Тестирование такого решения показало точность не хуже ±1мин в трое суток. Больший период не тестировался. Для подключения 30 светодиодов необходима схема, которая бы уменьшила количество управляющих сигналов. Это могут быть декодеры, регистры. Однако есть довольно хитрая схема подключения светодиодов, которая добавляет волшебства этим часам.
Технология называется Charlieplexing. Для подключения 30 светодиодов нам потребуется (X=N*(N-1)) — всего 6 портов. Правда отображние будет динамическим, т.е. диод будет светиться только маленький квант времени. Благодаря инертности восприятия глаза, нам будет казаться, что диод светиться постоянно.
Технология Charlieplexing
По опиcанию в Wiki. Если подать «1» Pin 1 и «0» на Pin 2, будет гореть светодиод Led 1. Светодиод Led 2 в этом случае светиться не будет. Если поменять полярность, то будет гореть Led 2.
![](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/8d5/293/55e/8d529355ea179ce5c0d4d018759cd56b.png)
Следующая схема вносит ясность, как экономятся порты. С помощью трех портов можно управлять шестью светодиодами
![](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/23a/da8/90b/23ada890bb7c80a7eeebd169ef359fb3.png)
Для отсоединения порта от схемы используется третье состояние порта — он включается «на вход». Для arduino есть специальный пакет для реализации принципа работы charlielexing.
Реализация
Для реализации нам потребуется:
![](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/e07/37b/430/e0737b4308bc220806573e748c4e88cc.jpg)
![](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/670/9bf/8fc/6709bf8fc9d5cb6ed14147d197cf7967.jpg)
![](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/9ee/bfe/f77/9eebfef77ff0391cbb215109556cf9a9.jpg)
Закуплено в: Robocraft и Чип и Дип. Примерная стоимость — 1500 руб.
Схема в Proteus
Разработка и моделирование велось в пакете Proteus. Моделирование не слишком успешно, т.к. динамическую индикацию уловить тяжело. Наверно надо использовать дополнительные виртуальные инструменты.
Общий вид
![](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/867/839/caa/867839caad7e5797327bb263e3755c46.png)
Крупно
![](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/aea/aef/cb9/aeaaefcb99ee4e58d9a105739e0e795e.png)
Разводка
Для разводки пришлось располагать элементы вручную.
![](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/f4a/18e/70a/f4a18e70ae772273ee2b14cc73673477.png)
Долго решался на такой большой объем пайки. Скажу процесс не простой и требует навыка и терпения. Наверно повторно такую работу врядли сделаю. Попробую что-нибудь по-удобнее типа Лазерно-утюжной технологии. Там правда травление и сверление требуется.
Вид на светодиоды
![](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/3c4/1a3/e95/3c41a3e95a79f3d45b3d8e8a1b283068.jpg)
Кнопки устанавливают часы и минуты. В готовом изделии их, возможно, придется перенести.
Монтаж
![](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/af0/c37/979/af0c37979c0fd852105604466abe0792.jpg)
Прототип в дизайне
![](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/e10/398/c89/e10398c89e489166d6a566de44ab41a7.jpg)
Перспективы
Проект
Файлы проектов в Proteus и программа для Arduino здесь
![](https://habrastorage.org/getpro/geektimes/post_images/6c6/960/d58/6c6960d586acbb252f6a1a4318afdcf7.png)
Дизайн
Решение по дизайну навеян часами с сайта Огни Токио.Отображение в данном виде понравилось тем что несмотря на ограниченность возможности высветки времени 30 диодами, есть узнаваемый часовой круг и можно понять сколько времени с одного взгляда (после предварительной тренировки). Сейчас на часах 5 часов 46 минут.
Описание
Часы используют внутренний таймер. Тестирование такого решения показало точность не хуже ±1мин в трое суток. Больший период не тестировался. Для подключения 30 светодиодов необходима схема, которая бы уменьшила количество управляющих сигналов. Это могут быть декодеры, регистры. Однако есть довольно хитрая схема подключения светодиодов, которая добавляет волшебства этим часам.
Технология называется Charlieplexing. Для подключения 30 светодиодов нам потребуется (X=N*(N-1)) — всего 6 портов. Правда отображние будет динамическим, т.е. диод будет светиться только маленький квант времени. Благодаря инертности восприятия глаза, нам будет казаться, что диод светиться постоянно.
Технология Charlieplexing
По опиcанию в Wiki. Если подать «1» Pin 1 и «0» на Pin 2, будет гореть светодиод Led 1. Светодиод Led 2 в этом случае светиться не будет. Если поменять полярность, то будет гореть Led 2.
![](https://habrastorage.org/getpro/geektimes/post_images/8d5/293/55e/8d529355ea179ce5c0d4d018759cd56b.png)
Следующая схема вносит ясность, как экономятся порты. С помощью трех портов можно управлять шестью светодиодами
![](https://habrastorage.org/getpro/geektimes/post_images/23a/da8/90b/23ada890bb7c80a7eeebd169ef359fb3.png)
Для отсоединения порта от схемы используется третье состояние порта — он включается «на вход». Для arduino есть специальный пакет для реализации принципа работы charlielexing.
Реализация
Для реализации нам потребуется:- Arduino- совместимая плата
- Прото-плата и переходники к Arduino
- 30 светодиодов (12+5+9 часы и минуты 4 на будильники)
- 6 ограничительных резисторов
- 2 кнопки
![](https://habrastorage.org/getpro/geektimes/post_images/e07/37b/430/e0737b4308bc220806573e748c4e88cc.jpg)
![](https://habrastorage.org/getpro/geektimes/post_images/670/9bf/8fc/6709bf8fc9d5cb6ed14147d197cf7967.jpg)
![](https://habrastorage.org/getpro/geektimes/post_images/9ee/bfe/f77/9eebfef77ff0391cbb215109556cf9a9.jpg)
Закуплено в: Robocraft и Чип и Дип. Примерная стоимость — 1500 руб.
Схема в Proteus
Разработка и моделирование велось в пакете Proteus. Моделирование не слишком успешно, т.к. динамическую индикацию уловить тяжело. Наверно надо использовать дополнительные виртуальные инструменты.
Общий вид
![](https://habrastorage.org/getpro/geektimes/post_images/867/839/caa/867839caad7e5797327bb263e3755c46.png)
Крупно
![](https://habrastorage.org/getpro/geektimes/post_images/aea/aef/cb9/aeaaefcb99ee4e58d9a105739e0e795e.png)
Разводка
Для разводки пришлось располагать элементы вручную.
![](https://habrastorage.org/getpro/geektimes/post_images/f4a/18e/70a/f4a18e70ae772273ee2b14cc73673477.png)
Долго решался на такой большой объем пайки. Скажу процесс не простой и требует навыка и терпения. Наверно повторно такую работу врядли сделаю. Попробую что-нибудь по-удобнее типа Лазерно-утюжной технологии. Там правда травление и сверление требуется.
Вид на светодиоды
![](https://habrastorage.org/getpro/geektimes/post_images/3c4/1a3/e95/3c41a3e95a79f3d45b3d8e8a1b283068.jpg)
Кнопки устанавливают часы и минуты. В готовом изделии их, возможно, придется перенести.
Монтаж
![](https://habrastorage.org/getpro/geektimes/post_images/af0/c37/979/af0c37979c0fd852105604466abe0792.jpg)
Прототип в дизайне
![](https://habrastorage.org/getpro/geektimes/post_images/e10/398/c89/e10398c89e489166d6a566de44ab41a7.jpg)
Перспективы
- Разработать окончательный дизайн часов в широкой деревянной рамке.
- Подключить часы реального времени с литиевой батарейкой.
- Переписать программу с использованием методики автоматного программирования
- Реализовать будильники
- Расширить управление настройками с помощью кнопок