Выбираем подарок


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

Когда мы приезжаем к ней в гости, нас всегда встречает богатый стол, с большим количеством блюд. Поэтому, мы сразу решили делать прибор, полезный на кухне. Вместе мы часто играем в различные настольные игры — лото, различные игры с кубиком. Значит, наш прибор должен и тут помогать.

Подумав немного, сын решил делать продвинутый кухонный таймер. Я ему немного помог со схемой. Основные функции нашего подарка:

  • Режим таймера до 3 часов
  • Режим секундомера
  • Громкий сигнал
  • Компактный размер
  • «Вечные» батарейки — аккумуляторы, зарядка как у телефона, по micro usb
  • Ну и конечно игры — кубик (случайное число от 1 до 6), лото, бомба (очень веселая игра)

Подбираем компоненты


В качестве индикатора, мы выбрали светодиодный трех-разрядный индикатор с общим анодом — у него всего 11 выводов, очень удобно. Купить не сложно, и в принципе, довольно экономично в энергопотреблении (но конечно не LCD).

Микроконтроллер — STM8S003F3P6 — с ним мы уже работали, так что все знакомо. ST-link уже есть.

Микросхема заряда и вся обвязка у МК, как у велокомпьютера.



В качестве пищалки, очень компактная и громкая пищалка HC0903A



Аккумулятор — LIR2032. Всего 45 mAh, но этого хватит на 40 часов непрерывной работы таймера. От кварцевого резонатора решили отказаться (нужны выводы), особенная точность нам не нужна, ну и у STM8 довольно точный внутренний генератор. Микросхема заряда — TP4056.

Управление — 2 тактовые кнопки. Прибор все время находится в спящем режиме, потребление меньше 5 мкА, спать может долго. Плату защиты для аккумулятора делать не стали, особенно не нужна. У МК нижний предел 3В, так что сильно не просядет. При включении идет музыка, включается индикатор (бросок тока), и если аккумулятор севший, то МК перегрузится и перейдем в спящий режим, что является сигналом к зарядке. Заряжается он током 100 мА около 40 минут, что в принципе очень быстро. Схему и программу можно скачать на github, ссылка в конце.

Корпус сын решил делать сам из монтажного короба 40 х 16 мм. Раскрасил акрилововыми красками, в качестве стекла вырезали кусок из DVD диска. Получилось очень симпатично.



Трассировку платы сын делал сам в Kicad. Расположение компонент при��умал он же. Кнопки по бокам от индикатора, пищалка внизу, аккумулятор на ней. Все вошло плотно, ничего ни куда не болтается. Плата двухсторонняя. Делали из одностороннего стеклотекстолита толщиной 0.8мм с помощью метода холодного переноса тонера. Две половинки платы соединили и зафиксировали перемычками. Из разъемов — micro usb, питание и программирование.



Программа


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

Программно это делается очень просто. Задействуется таймер, и через равные интервалы времени, с большой частотой, например каждые 300 мкс, будем выводить по одному разряду по кругу — 1-2-3-1-2-3. Нам будет казать что цифры светятся одновременно, как в кино. Если дополнительно добавить еще пустые разряды, то можно управлять яркостью. То есть, будет такая схема вывода информации — 1-2-3-пусто-пусто-пусто-пусто-1-2-3-пусто-пусто… Управление яркостью нужна для того, чтобы снизить энергопотребление. Таким образом, например без применения яркости, один разряд потребляет 24 мА, а с применением можно сократить до 1-2 мА. При этом цифры все еще четко и далеко видно. Сын поигрался с частотой, яркостью, когда все перестало мерцать, ему понравилось. Оказалось, программировать такой типа индикатора довольно легко и удобно.
Второй сложный момент — это придумать простой, как говорится, интуитивно понятный интерфейс, когда у нас 3 разряда индикатора и 2 кнопки. Но я счи��аю, ему это удалось.

Придумали с кнопками так:

  • Правая кнопка — долгое нажатие, смена режимов, их три — Таймер, Секундомер, Игры
  • Правая кнопка — одиночное нажатие, смена подрежима. У таймера — это выбор предустановленных времен, у секундомера — выбор обычного секундомера и с подтверждением, у игры — соотв. Различные игры
  • Левая кнопка — одиночное нажатие — старт/стоп или ход в игре, долгое нажатие — режим настройки, программирования

С индикатором так:
  • Когда выбран таймер — то сразу выводится некое число из предустановленных настроек (Например 5,15,30 минут), их можно перепрограммировать, хранятся в ПЗУ
  • Когда выбран секундомер — то 000
  • Когда игры — L — лото, 6 — бомба, С — кубик.
  • На индикатор цифры выводятся хитро, так как разряда только три, то выводим максимальное число значащих элементов. Например, таймер — 200 минут 30сек — то выводим 200., если таймер 10мин 15с, то выводим 10.1, если 1 минута 25с, то 1.25. При этом чтобы понимать, что таймер или секундомер запущен, точка мигает в такт секундам.
  • Когда секундомер остановлен, например на 10 мин 25с то показываем попеременно 10. и .25, раз в секунду, чтобы видеть и секунды тоже.

Программа оказалась не такой простой, сын писал ее почти 3 недели в школьное время, с небольшой моей помощью. Очень много условий, разные флажки — старт, стоп, работа с памятью и т. д. Но результатом он был очень доволен.

Испытания


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

Первые испытания секундомера и таймера прошли на ура. Засекали разное время, сверяли с точными часами, ошибка 1-2 секунды на час. Отрабатывали звук сигнала.

Вручение подарка


Наступил день рождения. Бабушка быстро прошла обучение и была очень рада. Все вместе испытали Лото, полностью автоматизированное. Каждые 5 секунд прибор пищит и выдает новое число, из оставшихся в мешке. Играют все, водит прибор! Кто не успел тот опоздал.

Итоги


Итак, прибор получился просто отличный. Практика программирования очень интересная. Если вам тоже интересны ��икроконтроллеры, то можете сделать себе (или в подарок) такой же и попрограммировать. Вы обязательно научитесь:

  • делать платы
  • паять smd компоненты
  • программировать STM8
  • работать с аккумуляторами
  • обрабатывать кнопки
  • издавать различные звуки
  • работать с таймерами и обрабатывать временные события
  • бороться с энергопотреблением

На github выложена схема и плата в формате Kicad. Выложен начальный проект для STM8, там самое сложное — динамическая индикация, инициализация микроконтроллера, сложная обработка кнопок — короткое, двойное, долгое нажатие. Остальную программу предлагаю написать самостоятельно, это ведь так интересно!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Нужно ли выложить полную программу?
69.41%Да, самому писать сложно и скучно59
30.59%Нет, я сам напишу, а то все копи пасте.26
Проголосовали 85 пользователей. Воздержались 38 пользователей.