Якщо ви граєте в настільні ігри, то вам потрібні кістки. У цьому проекті показано, як створити електронні кістки, які не тільки видають випадкове число при кожному натисканні кнопки, але і показують його довільним кольором. Це знову досягається за допомогою RGB-світлодіодів. Однак на відміну від пристрою змішування кольорів або лампи для настрою (де для керування інтенсивністю

Рис. 3.45. Блок-схема пристрою

червоною, зеленою і синій складових кольору застосовується широтно-імпульсна модуляція, що забезпечує безліч відтінків), в даному проекті можливі тільки три первинних (червоний, зелений і синій) і три вторинних кольори (жовтий, оранжевий і пурпурний). Блок-схема пристрою показана на рис. 3.45.

Світлодіоди організовані в звичайну точкову матрицю. Кнопка натискається і відпускається, при цьому генерується випадкове число і спалахують світлодіоди. Їх колір вибирається випадковим чином з шести можливих.

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

Мета проекту – створити електронні гральні кістки. Замість точок на кістках використовуються світлодіоди. При кожному натисканні кнопки загоряються світлодіоди, що показують число очок. Самі світлодіоди також будуть світитися різними кольорами. Пристрій живиться від зовнішнього стабілізованого джерела (хоча можна з’єднати послідовно чотири лужні батареї по 1,5 В або чотири акумулятора по 1,2 В.

Опис пристрою

На рис. 3.46 показана принципова схема пристрою. Стабілізатор напруги LM3840 видає 5 В, тому вхідна напруга може варіюватися від 6 до 20 В. D1 – це діод Шотткі (1Ν5819) для захисту (як вже пояснювалося раніше). Конденсатор С1 фільтрує викиди і небажані перешкоди джерела живлення. С2 підключений до виходу LM3840. Мікроконтролер – ATtinyl3. За допомогою методу Чарлі виконано мультиплексування чотирьох груп RGB-світлодіодів. Усього є 12 світлодіодів, керованих чотирма контактами введення / виводу.

Рис. 3.46. RGB-кості: принципова схема

У кожній групі по два підключених паралельно світлодіоди, які включаються одночасно. Сама кістка представлена ​​сімома точками. Для цього потрібно три групи і ще один світлодіод, але для того, щоб вирівняти струм через світлодіоди, паралельно светодиоду центральної точки підключений “холостий” світлодіод. Він зміщений від центру і закритий (щоб його світло не було видно). Кнопка S1 призначена для зміни числа і кольору світлодіодів. Натискання кнопки S1 змінює число, а відпускання – колір. Резистори R1 і R4 обмежують струм.

У програмі працює лічильник і при кожному натисканні кнопки його значення зчитується і генерується нове число, а при кожному відпуску кнопки знову зчитується значення лічильника і генерується новий колір. Усього є шість кольорів. Три первинні кольори формуються включенням потрібного числа RGB- світлодіодів. Три вторинних кольори генеруються включенням будь-яких двох комбінацій потрібних світлодіодів. ШІМ в цьому пристрої немає.

Конструкція

Компонування плати в програмі EAGLE (і її принципову схему) можна завантажити за посиланням: www.avrgemus.com/tinyavrl.

Плата одностороння (на стороні компонентів є всього декілька перемичок). Боку друкованої плати показані на рис. 3.47 і 3.48.

Програмування

Відкомпільований вихідний код (разом з файлом MAKEFILE) можна завантажити за посиланням: www.avrgenius.coin / tinyavrl.

Тактова частота дорівнює 9,6 МГц. Контролер програмується за допомогою STK500 в режимі ISP. Лістинг ЗЛО ілюструє найбільш важливий фрагмент коду.

Лістинг 3.10

// Процедура для натискання кнопки void switchpressed (void)

{

unsigned char b = 1; while ( (PINB& (1«0) ) )

// Очікування натискання кнопки

{

if(b==6) b = 1; else b = b+1;

}

_delay_ms (20); // Для запобігання брязкоту statusonoff [1] = (b == 4) || (b == 5) || (b == 6); statusonoff [2] = (b == 4) || (b == 5) || (b == 6) || (b == 3); statusonoff [3] = (b == 2) || (b == 6); statusonoff [4] = (b == l) || (b == 3) || (b == 5);

}

// Процедура для відпускання кнопки void switchreleased (void)

{

unsigned char b = 1; while ( ! (PINB&(1«0) ) )

// Очікування відпускання кнопки

{

if(b==6) b = 1; else b = b+1;

_delay_ms (20); // Для запобігання брязкоту coloronoff [0] = (b == 2) II (b == 4) | | (b == 6); coloronoff [1] = (b == 3) I I (b == 4) | | (b == 5); coloronoff [2] = (b == l) I I (b == 6) I I (b == 5);

}

Функція switchpressed чекає натискання кнопки, а функція switchreleased чекає відпускання вже натиснутою кнопки. Обидві функції мають внутрішній лічильник від 1 до 6. При натисканні або відпуску його значення збільшується. Залежно від цього значення загоряються світлодіоди.

Джерело: Гадре, Д., Цікаві проекти на базі мікроконтролерів tinyAVR / Дхананья Гадре, Нігула Мелхотра: Пер. з англ. – СПб .: БХВ-Петербург, 2012. – 352 с .: іл. – (Електроніка)