Проект tinyAVR 33. Электронные игральные кости (без батареек)

December 18, 2014 by admin Комментировать »

Вместо обычных игральных костей очень интересно пользоваться электронными. Ранее мы уже рассматривали подобное устройство (см. проект 12 в главе 3), теперь давайте снова обсудим их поподробнее. Обычно электронные кости состоят из электронной схемы и светодиодного дисплея. Это может быть либо семисегментный индикатор, на котором отображаются числа от 1 до 6 (рис. 7.18), либо семь отдельных светодиодов (рис. 7.19).

Рис. 7.18. Электронные игральные кости с семисегментным индикатором

Рис. 7.19. Электронные игральные кости с отдельными светодиодами

Рис. 7.20. Блок-схема электронных игральных костей (без батареек)

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

Для обеих этих схем необходим источник питания (например, сетевой адаптер с выпрямителем, конденсатором и стабилизатором на 5 В). Если кости должны быть переносными, то нужно предусмотреть питание от батареи (например, на 9 В). Можно взять и другие батарейки, но для работы устройства от одной батарейки (например, АА или ААА) понадобится повышающий преобразователь на 5 В.

Наконец, батарейки можно заменить генератором Фарадея. На рис. 7.20 приведена блок-схема таких электронных игральных костей.

Как уже неоднократно говорилось, чтобы получить энергию от генератора Фарадея, его нужно несколько раз встряхнуть. Можно создать "детектор встряхивания", который при помощи светодиодов будет’выдавать случайное число. Поскольку питание имеется только тогда, когда вы трясете трубку, то необходим конденсатор, который продолжит питать в схему в течение некоторого времени и после встряхивания, когда на светодиодах отображается случайное число. После разряда конденсатора светодиоды выключаются. Увеличить время свечения светодиодов можно, повысив емкость конденсатора.

Спецификация проекта

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

Описание устройства

Принципиальная схема электронных игральных костей без батареек изображена на рис. 7.21. К разъему Л подключен генератор Фарадея, вырабатывающий переменное напряжение, которое выпрямляется мостовой схемой на диодах D1-D4. Диоды 1Ν5819 — это диоды Шоттки с более низким напряжением включения, чем у обычных кремниевых выпрямительных диодов. Постоянное напряжение фильтруется и запасается в электролитическом конденсаторе С1 (4700 мкФ/25 В) и далее подается на вход стабилизатора LP2950-5V. Напряжение с выхода стабилизатора (5 В) служит для питания микроконтроллера и светодиодов нашей схемы.

Обнаружение факта встряхивания осуществляется при помощи диода D5, резистора R1 и стабилитрона D6. Входной переменный ток выпрямляется и через диод D5 проходят только положительные импульсы. Сигнал на выходе D5 показан на рис. 7.22.

Стабилитрон ограничивает импульсы напряжения до 4,7 В. Эти импульсы поступают на контакт микроконтроллера (РВО). Программа отслеживает наличие импульсов, и если вы перестанете трясти устройство, то импульсов больше не будет, микроконтроллер сделает вывод, что пользователь перестал трясти трубку, и выдаст случайное число, которое отображается на светодиодах.

Рис. 7.21. Принципиальная схема электронных игральных костей (без батареек)

Рис. 7.22ϊ Импульсы на выходе детектора встряхивания

Светодиоды LED1-LED7 сконфигурированы так (рис. 7.23), что для управления семью светодиодами нужно всего четыре контакта. Конечно, микроконтроллер не управляет всеми светодиодами по отдельности. Вместо этого четыре контакта микроконтроллера управляют группами: один, два, два и два светодиода. Когда пользователь начинает трясти трубку, напряжение на конденсаторе С1 растет и напряжение на выходе стабилизатора также возрастает. Когда напряжение питания стабилизируется, микроконтроллер начинает выполнять программу. Программа инициализирует контакты и выключает все светодиоды. Она запускает также внутренний таймер TimerO. Значение таймера увеличивается при каждых восьми циклах тактовой частоты микроконтроллера. Затем микроконтроллер ждет, когда пользователь прекратит встряхивать трубку. После прекращения встряхивания микроконтроллер считывает значение таймера TimerO и берет остаток от целочисленного деления этого значения на 6. Это дает значение от нуля до единицы. Результат этой операции (значение от нуля до пяти) преобразуется в значение от 1 до 6 и отображается на светодиодном дисплее. К этому моменту в конденсаторе остается достаточно заряда для того, чтобы светодиоды горели в течение примерно десяти секунд. После индикации числа микроконтроллер опять ждет встряхивания трубки. Чтобы получить новое случайное число, пользователь должен опять несколько раз встряхнуть трубку.

Поскольку работа таймера и встряхивание трубки никак не синхронизированы, полученное с таймера число получается случайным. В этом и состоит одна из основных идей устройства.

Рис. 7.23. Расположение светодиодов

Для многих настольных игр нужно две кости, поэтому мы видоизменили исходную схему и сделали два светодиодных дисплея. На рис. 7.24 показана принципиальная схема "двойных” костей. Здесь мультиплексируются два набора по семь светодиодов. Программа для микроконтроллера Tiny изменена так, чтобы две группы светодиодов обновлялись попеременно (с высокой частотой) и оба индикатора показывали случайные числа. Два случайных числа генерируются при помощи TimerO (так же, как и в предыдущем случае, за исключением того, что первое число генерируется в момент начала сотрясения, а второе — по. окончании сотрясения трубки). В остальном устройство функционирует аналогично предыдущему.

Рис. 7.24. Принципиальная схема игральных костей с двумя индикаторами

В обеих схемах микроконтроллер Tiny 13 работает от внутреннего RC-генератора (запрограммированного для генерирования тактовой частоты в 12&кГц). Это минимальное значение тактовой частоты, которое может сгенерировать микроконтроллер Tinyl3. Такой выбор частоты позволяет снизить энергопотребление микроконтроллера.

Конструкция

Первый вариант устройства был выполнен на печатной плате общего назначения (размерами примерно 2×10 см), как показано на рис. 7.25.

Готовая схема размещена внутри трубки из оргстекла. После сборки трубка со схемой и генератор Фарадея скрепляются вместе для удобства пользования. На рис. 7.26 изображено готовое устройство.

Рис. 7.25. Печатная плата игральных костей (вариант 1)

ЮЗак 1291

Рис. 7.26. Внешний вид игральных костей (вариант 1)

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

Рис. 7.27. Внешний вид игральных костей с одним и двумя индикаторами

Программирование

Откомпилированный исходный код (вместе с файлом MAKEFILE) можно скачать по ссылке: www.avrgenius.com/tinyavrl.

Один из важных фрагментов программы — главный бесконечный цикл, где микроконтроллер постоянно отслеживает импульсы на контакте РВО (листинг 7.5).

Когда импульсы перестают появляться, он генерирует случайное число (при помощи TimerO) и отображает его на светодиодах. Такой же код имеется и для двойных костей. Задержка сформирована с помощью функции _delay_loop_2 (в отличие от применявшихся ранее фуНКЦИЙ _delay_ms И _delay_us).

const char ledcode[] PROGMEM= {Oxfc, Oxee, 0xf8, 0xf2, OxfO, 0xe2, Oxfe} ; void main (void)

{

unsigned char temp=0; int count=0;

DDRB=0xfe; /* PBO — входной контакт*/

TCCR0B=2; /* делим на 8*/

TCCR0A=0;

TCNT0= 0;

PORTB=254; /*выключаем все светодиоды*/ while(1)

{

/* ждем, пока импульс не станет высоким */ while ( (PINB & 0x01) == 0);

_delay_loop_2(50);

/* ждем, пока импульс не исчезнет */ while ( (PINB & 0x01) == 0x01);

_de1ау_1оор_2(50); count=5000;

while ( (count > 0) && ((PINB &0x01)==0))

{

count–;

}

if(count ==0) /* импульсов больше нет — отображаем случайное число */ {PORTB=0xfe; /* выключаем все светодиоды */

_delay_loop_2(10000); temp=TCNT0; temp= temp%6;

temp =pgm_read_byte(&ledcode[temp]);

PORTB=t emp;

}

}

}

Микроконтроллер Tinyl3 запрограммирован при помощи программатора STK500, а установка fuse-битов микроконтроллера показана на рис. 7.28.

Рис. 7.28. Установка fuse-битов микроконтроллера

Источник: Гадре, Д., Занимательные проекты на базе микроконтроллеров tinyAVR / Дхананья Гадре, Нигул Мэлхотра: Пер. с англ. — СПб.: БХВ-Петербург, 2012. — 352 с.: ил. — (Электроника)

1 комментарий

  1. Виталий says:

    Очень интересно! Как нибудь повторить нужно..
    Благодарю!

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты