10.06.2009

Кухонный таймер на Arduino (1)

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

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

Итак, прежде всего - подберем компоненты:
  • дисплей для отображения времени
  • пара кнопок для управления
  • зуммер для привлечения внимания хозяйки
  • корпус, в который все это поместится
  • источник питания

Ну и конечно же, Arduino.

Наиболее хорошо для этой цели подходит Arduino Pro: основные разъемы не установлены, можно поставить ровно столько, сколько надо (а также именно то, что требуется - вилки или колодки, нужный разъем питания):



За неимением такого замечательного девайса, придется собирать на макетке. Как обычно - ATmega8-16PU, кварц 16 МГц + 2 конденсатора 22пФ, притянуть сброс через 10К к Vcc, схема птиания на L7805. Поскольку я постоянно собираю Arduino / Freeduino, все это у меня имеется в избыточном количестве.

С эстетической точки зрения, лучше устанавливать часовой дисплей с "двоеточием" по центру, которое мигает раз в секунду при отсчете времени. В минимальном варианте достаточно просто двух цифр с числом оставшихся минут. Поглядывать на таймер надо издалека, поэтому размер и яркость цифр имеют значение - лучше всего подойдет светодиодный дисплей. Удобно использовать индикатор, у которого одноименные выводы уже соединены - все равно мы будем отображать методом мультепликсирования. У меня был красный семисегментный CA56-21EWA (Kingbright), с общим анодом:



В качестве зуммера можно использовать пьезоизлучатель. Часто на материнских платах можно встретить такой вариант:



Это пятивольтовый KPX-G1205B (Kepo Electronics).

В него встроен генератор, позволяющий издавать звуковое колебание заданной частоты простой подачей разности потенциалов на его выводы. Очень удобно, да и ток всего 30 мА (напоминаю, что максимальный ток через выход ATmega - 40 мА). Если не закрывать отверстие, пищит достаточно громко - простой бесчеловечный эксперимент показал, что хозяйка слышит его сквозь какафонию из льющей из водопроводного крана воды и орущего телевизора, причем еще и из другой комнаты. Те, кому повезло меньше, могут использовать схему с транзистором ;)

Кнопки могут быть как тактовые, так и с креплением на корпус. Идеально подойдут влагозащищенные, но это влетит в копеечку. Я выбрал компромиссные SWT-9 с разноцветными колпачками:





Для включения питания идеально подходит классический тумблер MTS-102:



Среди корпусов для РЭА, которые я мог заказать у поставщиков, мне приглянулись черные пластиковые, на защелках. Брать размер 70 х 40 мм я побоялся (как потом выяснилось, абсолютно верно), но вот 90 х 56 мм уже выглядело для такой схемы вполне комфортно, тем более, что в высоту он 30 мм, а значит - дисплей с кнопками и контроллер можно разместить на двух разных платах, соединив их при помощи PLS/PBS:



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

Настало время рисовать схему в Eagle, но прежде подсчитаем, сколько потребуется портов ввода/вывода.

Семисегментная шина требует 7+1=8 выходов: восьмой в данном случае управляет двумя точками по центру. Один сигнал на каждое знакоместо: +4, итого уже 12. Один выход потребуется для пьезоизлучателя, два - для подключения кнопок. В сумме надо 15, а у Arduino всего 13 цифровых выходов, из которых категорически не хотелось бы занимать 0 и 1 - там UART, через которую заливается скетч.

На наше счастье, аналоговые выходы можно перепрограммировать в цифровые оператором DigitalMode. Аналоговый вход 0 будет соответствовать 14-му цифровому, а 5й - 19-му. АЦП нашей схеме не требуется, так что смело можно переводить все шесть выходов в цифровой режим.

Для начала соберем такую схему на мактной плате:



Продолжение следует...

2 комментария:

  1. К каким пинам подключен индикатор и кнопки именно на ардуино, а не на контроллере?

    ОтветитьУдалить
    Ответы
    1. Чтобы не повторяться - в третьей части, в самом конце ссылка на скетч для Arduino.

      Удалить