Замість звичайних гральних кісток дуже цікаво користуватися електронними. Раніше ми вже розглядали подібний пристрій (див. Проект 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 с .: іл. – (Електроніка)