Светодиодная мигалка

Светодиодные «неточные» часы

Насмотревшись на всякие красивые светодиодные безделушки, очень захотелось повторить одну из них, ну или разработать свою. А тут еще конкурс от Радиокота к его пятилетию. И хотя я точно знал, что моя работа не попадет даже в двадцатку первых (все же это часы, которые всем изрядно надоели), решил, что эта работа будет не для конкурса – а реально «в подарок».
Итак – светодиодная мигалка, но не полностью бесполезная, а с функцией «неточных» часов. Почему неточных? А потому что в ней 24 светодиода, 12 зеленых, 12 красных, а значит точность показа минут – 12 раз в час, т.е. 5 минут. Ну что ж. Иногда и такая точность отсчета времени бывает полезна. Тем более, помнится, когда-то в старинных каретах стояли часы, которые каждые 15 минут издавали звон, тем самым давая пассажирам приблизительно определять время, проведенное в поездке. А у нас получатся часы в три раз точнее :)

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

За основу был взят простой и уже знакомый мне микроконтроллер ATtiny2313. Красивой схемы я к сожалению не нарисовал, зато есть проект в Proteus, где наглядно показано куда подключено большинство деталей. На схеме не показаны токоограничительные резисторы на 330 Ом, включенные последовательно со светодиодами, кварц с на 16 МГц блокирующими конденсаторами, а так же разъём программирования.

Так как кнопок управления нужно было минимум две (чтобы было удобно управлять мигалкой), то ножек МК на полноценное раздельное управление отдельно зелеными и красными светодиодами, просто не хватило. Поэтому пришлось делать динамическую засветку красных и зеленых светодиодов с управлением по одной ножке PORTD.0 (когда на ней уровень «1″ — светятся зеленые, «0″ — красные).
Питать схему должны были два ААА аккумулятора (была мысль использовать литиевую батарейку, но не было под рукой красивого держателя на нее.

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

Сидел над разводкой платы долго, старался красиво (ну, конечно же, на свой взгляд) развести светодиоды, расположить детали. Это же в первую очередь должна была б быть красивая технологичная светодиодная мигалка, а значит плата должна соответствовать.
Транзисторы, отвечающие за динамическое управление «красным» и «зеленым» каналами использовал выводные BC32140 и BC33140. SMD транзисторы у меня закончились, а с выводными вид получился даже солиднее. И кварц у меня тоже был обычный выводной, а чтобы ножки не смогли замкнуть ан корпус, то из плотного картона пришлось вырезать прокладку.
Долго прикидывал, как красиво развести светодиоды, и наконец, понял, что без двухсторонней платки никак не обойтись. В результате получилось вот это:


Плату изготовлял по лазерно-утюжной технологии, потому что это наиболее быстрый способ (при условии, что принтер под рукой)

Изготовление

Распаиваем все детали. Самое главное было – не перепутать полярность запайки светодиодов. А то если ошибиться, то надо будет выпаивать… а это очень плохо скажется на внешнем виде платки.
С обратной стороны платы впаиваем разъём для программатора. Принятый в AVR стандарт я не использую. Зря, наверное, но так уж получилось. У меня много конструкций уже использует «мой собственный» стандарт разъёма программирования. Возможно, когда-то спаяю на всякий случай переходник…  впрочем, я отвлекся.
Для придания конструкции законченного вида осталось только установить на обратной стороне держатель аккумуляторов и выключатель.

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

Все! Вот что получилось:

Прошивка

Память микроконтроллера использована на 99.7%. Правда, боюсь, что слишком уж неоптимальная получилась прошивка. Впрочем, для начала – подойдет и такая.

Описание логики работы и функций кнопок.

При включении питания в первый раз – часы включатся в первом режиме. Чтобы переключить часы в другие режимы – нужно при нажатой кнопке «М» нажать кнопку «Н».
В режимах 1 и 2 – кнопками М и Н можно настроить время, а в режимах 3-11 – можно изменять скорость анимационных эффектов.
При выключении устройства – текущий режим и скорость сохраняются в энергонезависимой памяти микроконтроллера.

Режим 1. Пятиминутные неточные часы. Обновление – раз в 5 минут. Зеленые светодиоды показывают часы, красные – минуты. Чтобы в темноте можно было однозначно определить, сколько времени (ведь в темноте не видно ничего кроме светодиодов!), по кругу очень слабо по очереди засвечивают красные светодиоды. А еще – слабо горит зеленый верхний светодиод, который обозначает 12 часов. Т.е. по слабо светящимся светодиодам можно понять, как расположены часы в пространстве, а по ярко светящимся светодиодам определить время.

Режим 2. Не знаю, почему я оставил этот режим. Красные светодиоды – это секунды, зеленые – минуты. Обновление показаний – раз в 5 секунд.

Режим 3. Секундомер. Пользы от этого секундомера много ждать не следует, но пусть будет… Миллисекунды – зеленые светодиоды, секунды – красные. Что ж. Можно считать, что это переходной этап к другим анимационным режимам.

Режим 4. «Фонарик». Светятся все светодиоды. Вряд ли стоит ожидать от обычных индикаторных светодиодов сильного света, но разглядеть в темноте – где лежит подушка – вполне хватает :)

Режимы 5,6,7,8,9 – простенькие анимационные эффекты.
Режимы 10 и 11 –подборки эффектов из режимов 5-9.

Итоги

В результате получилось непонятное, мигающее, почти бесполезное, но зато красивое устройство. Во всяком случае – мне нравится. Единственное, что мне там не слишком нравится – это неоптимальная прошивка. Но ведь ее можно поменять в любой момент… было бы желание ее оптимизировать.

Видео с демонстрацией работы

(К сожалению, режимы там показаны, начиная с третьего. А режим, собственно часов показан в самом конце и очень невнятно)

Архив файлов для светодиодных часов


Светодиодная мигалка: 2 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>