Например TDA7294

РадиоКот > Схемы > Цифровые устройства > Игрушки

Виртуальные часы-брелок

Автор: Goodefine, г.Тирасполь, Приднестровье
Опубликовано 05.12.2011.
Создано при помощи КотоРед.

Существует большое количество самых разных конструкций так называемых виртуальных часов - с механической разверткой. Их принцип действия широко известен и основан на инерционности зрения человека.  Не будем на нем останавливаться.

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

Схема часов:

Светодиоды D1-D7 - сверхъяркие, номиналы сопротивлений R1-R7 зависят от типа светодиодов. Необходимо также проледить чтоб ток через пины контроллера не превышал допустивый (20мА). В моем варианте резисторы по 50 Ом. Светодиоды добыл из ленты (см. фото ниже). Питание осуществляется от батареи GP2032 3V, поэтому следует выбирать контроллер и индексом V - Attiny2313V. Обратите внимание на С1 и германиевый диод (малые потери напряжения) - в первоначальной схеме их не было, но при этом происходило зависание RTC ds1302. После установки этих элементов, зависаний больше не наблюдалось. Кварц на RTC - 32768 Гц, припаивается на медную площадку корпусом, соединения с микросхемой кратчайшим путем. Поскольку от этого зависит точность хода, необходимо учесть рекомендации в даташите часов на способы разводки задающих цепей.

Общий вид комплектующих:

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

Обратите внимание еще на следующие моменты - на светодиоды пришлось одеть термоусадочные трубки, выкрашенные изнутри белой краской (можно корректором). Это борьба с засветкой (если сверху будет стекло). Контакты разъема PRG необходимо разомкнуть при внутрисхемном программировании через разъем ISP. В моем случае конструкция не совсем оптимальная и элегантная, что обусловлено необходимостью отладки. В окончательном варианте можно избавиться от вышеуказанных разъемов и сэкономить место. Батарею также можно составить из менее габаритных источников питания. В общем, есть простор для фантазии.

Несмотря на необычность индикации, эта схема вполне поддается моделированию:

Немного о модели - кнопка ENABLE_MODEL_AKSEL подключает модель датчика акселерометра (просто генератор импульсов). Т.е. когда мы нажали эту кнопку, это значит мы машем рукой. Кнопка RUN выводить МК из режима POWER DOWN.  Последовательность такая - нажали RUN, МК проснулся. Затем пока он не заснул нужно произвести взмахи (нажать вторую кнопку). При этом можно понаблюдать что будет в реальности. Следует отметить, что в файле hand_clock.h есть строка #define TEST. Если ее расскоментировать, получится прошивка для модели в Proteus. Если закомментировать - прошивка для реальной конструкции.

Примерный вид часов:

Теперь о том как пользовать часами:

1. Чтобы посмотреть время необходимо нажать на кнопку (она единственная). После этого произвести несколько энергичных взмахов. Через, примерно, 7 секунд, если не будет взмахов, часы снова заснут  (ток потребления менее 0.5мкА).

2. Установка времени:

-Разбудить часы (нажать на кнопку)

-Войти в режим установки времени, для этого нажать и удерживать кнопку, пока не вспыхнут два крайних светодиода (D1 и D7).

-После этого, не дожидаясь пока часы заснут, короткими нажатиями установить число ЧАСОВ. Происходит их инкрементирование с текущего времени. Об этом указывает вспыхивающий средний светодиод D4. При этом можно взмахами руки посмотреть время, которое будет установлено в случае изменений. После того как нужное число часов выставлено, нужно установить МИНУТЫ. Для этого снова зажимаем и держим кнопку пока не вспыхнут следующие два диода (D2 и D6). Точно так же выставлем число минут. Затем сохраняем время таким же длинным нажатием, пока не вспыхнут светодиоды D3 и D5. После этого время на индикаторе перепишется в RTC ds1302. Если не сделать последнего длинного нажатия изменения времени не сохранятся.

-Установка завершена

На деле проще чем в описании. Всегда можно потренироваться в модели (не забудьте за тестовый режим - см. выше).

Видео работы можно посмотреть по ссылке http://www.youtube.com/watch?v=_zEEQJPRAiE

Установка времени там не показана, поскольку на тот момент еще не была реализована.

Внизу приведены все файлы проекта:

-Проект в CodeBlock 8.02

-Компилятор WinAvr 20100110

-Модель и плата - Proteus 7.7 sp2 и Ares соответственно.

Помимо данной конструкции, в архиве присутствует схема с моделью и исходниками на основе Atmega48V без RTC. Подсчет сделан на генераторе таймера 2 данного МК. Часы просыпаются раз в секунду, инкрементируют счетчик и засыпают. Ожидаемое потребление - около 5 - 7 мкА.  Потребление выше, поскольку часы спят в режиме POWER SAVE.  Остальная работа не отличается от схемы с attiny2313v.  На практике не проверялась, но в модели работает.

Есть еще один небольшой нюанс - в схеме с RTC обновление времени на дисплее будет после нажатия на кнопку. Грубо говоря, если вы будете махать минуту, то изменений в индикации не будет. Нужно нажать кнопку и обновить дисплей. Это связано с особенностями работы с RTC. В схеме на atmega48V обновление информации на дисплее будет происходить синхронно с его течением. В режиме установки в обоих вариантах будет выводится время которое будет установлено в случае сохранения изменений.

Спасибо за внимание :)



Файлы:
Архив проекта


Все вопросы в Форум.


ID: 1136