Можливо, ви бачили рекламні ролики виробників батарейок, де в повітрі малюють фігури і фіксують їх за допомогою фотоапарата з тривалою витримкою. Це можна зробити і за допомогою ліхтарика – малювати в повітрі і фотографувати. Замість ліхтарика малювати фігури можна багатобарвним світлодіодним пером. Саме такий пристрій описано в цьому проекті. Деякі з намальованих таким пером фігур показані на рис. 2.34. Подібні фігури називають “світловими карлючками”.

Рис. 2.34. Фотографії намальованих в повітрі фігур (зроблені цифровим фотоапаратом на тривалій витримці)

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

Світлодіодне перо має бути зручно тримати в руці, щоб їм можна було без праці малювати і писати, тому розмір цього пристрою дуже важливий. Щоб досягти цієї мети, потрібно було: застосувати найменші батареї і гранично спростити схему. Світлодіодне перо схоже на генератор випадкового кольору і світла, проте мета і реалізація зовсім інші. У проекті наведено два приклади світлодіодного пера. Спочатку ми реалізували перший варіант, блок-схема якого показана на рис. 2.35.

Рис. 2.35. Блок-схема світлового пера

Рис. 2.36. Другий варіант світлового пера

Після виготовлення першого пристрою і використання його протягом деякого часу ми зрозуміли всі пов’язані з ним проблеми і зробили другу конструкцію (рис. 2.36).

Давайте спочатку обговоримо вимоги. Ідея виготовити багатобарвне світлодіодне перо прийшла після того, як ми побачили “світлові каракулі” на одному з Web-сайтів. Ці картинки малювалися за допомогою простих світлодіодних пір’я, виготовлених з одноколірних світлодіодів. Ми подумали, що замість кількох світлодіодних пір’я можна застосувати одне перо з RGB-светодиодом. Інтенсивністю світіння світлодіодів можна керувати за допомогою мікроконтролера і отримати при цьому набагато більше квітів, ніж при наявності окремих кольорових світлодіодів. Щоб малювати зображення, вам знадобиться цифровий фотоапарат з ручною установкою витримки і діафрагми. Максимальна витримка фотоапарата визначатиме тривалість вашого малювання світлодіодним пером. Звичайні компактні фотоапарати дають витримку порядку хвилини, чого цілком достатньо для простих малюнків. Для більш складних знадобиться дзеркальна камера, яка дозволяє робити дуже тривалі витримки. При малюванні світлових каракулей ви, можливо, захочете змінювати колір світла. Для вибору кольору можна застосувати перемикач (який буде змінювати колір при натисканні). Крім того, при малюванні вам може знадобитися вимкнути світлодіод, щоб почати іншу частину малюнка (тому потрібний вимикач). Все це показано на першій блок-схемі нашого світлодіодного пера. Перо має два перемикача: для включення світлодіодів і для вибору кольору.

Перший варіант пера давав 16 різних кольорів. Однак ми зіткнулися з такою проблемою: якщо після вибору кольору вам знову знадобиться попередній колір, то доведеться перебрати всі кольори, щоб повернутися до нього. При цьому втрачається дорогоцінний час. Потрібен спосіб швидкого вибору кольору (щоб не перебирати всі можливі кольори по черзі). Тому ми замінили кнопку “установка кольору” потенціометром, який можна швидко повернути для отримання потрібного кольору. Так вийшов другий варіант пристрою. Решта функцій точно такі ж, як у першому варіанті. Щоб домогтися мінімального розміру, ми вирішили застосувати для живлення схеми батареї-таблетки і 8-контактний мікроконтролер tinyAVR в корпусі DIP. Такий корпус дозволяє виймати мікросхему, тому на схемі відсутній роз’єм для програмування (щоб зменшити розмір схеми).

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

На рис. 2.37 зображена принципова схема першого варіанту світлодіодного пера. Для зчитування стану кнопок S1 і S2 використовується мікроконтролер Tinyl3, а для відображення різних кольорів застосовується RGB-світлодіод. Схема живиться від трьох батарей LR44 і не має вимикача живлення. Пристрій запрограмовано так, що при виключенні світлодіода (кнопкою S2) мікроконтролер входить в стан зниженого енергоспоживання (що забезпечує економічність). Зазвичай мікроконтролер AVR в такому стані споживає струм всього кілька мікроампер.

Рис. 2.37. Принципова схема світлодіодного пера (варіант 1)

Рис. 2.38. Принципова схема світлодіодного пера (варіант 2)

Рис. 2.39. Схема підключення RGB-світлодіоди

На рис. 2.38 показана принципова схема другого варіанту світлодіодного пера. Тут кнопка S2 замінена потенціометром РОТ1. Мікроконтролер AVR13 має декілька каналів АЦП. Центральний висновок потенциометра підключений до вхідного каналу АЦП. Решта два висновки потенціометра підключені до джерела живлення і заземлення. Напруга з движка потенціометра змінюється від нуля до Vcc. По заданому напрузі мікроконтролер видає відповідні ШІМ-сигнали для червоного, зеленого і синього світлодіодів. Загальний анод RGB-світлодіоди (SL1) підключений до джерела живлення. В обох версіях світлодіодного пера роз’єм SL1 – це невелика плата з RGB-светодиодом (рис. 2.39).

Конструкція

Компонування плати (і її схему) можна завантажити за посиланням: www.avrgenius.coin / tinyavrl.

Обидва варіанти світлодіодного пера виготовлені на односторонній друкованій платі. Готова друкована плата досить мала для того, щоб розміститися в трубці з оргскла діаметром 20 мм. На рис. 2.40 і 2.41 зображені плати контролера другого варіанту світлодіодного пера. На рис. 2.42 показана маленька плата з RGB-светодиодом, змонтована перпендикулярно головній платі контролера. Схема живиться від трьох батарейок LR44. На рис. 2.40 видно установка батарейок. Батарейки кріпляться невеликими магнітами, причому крайні батарейки припаяні до плати. Блок батарейок з магнітами склеєний гумовим клеєм (щоб вони не роз’єднувались). На рис. 2.43 показана фотографія першого варіанту світлодіодного пера.

Рис. 2.40. Вид згори другого варіанту світлодіодного пера

Рис. 2.41. Вид знизу другого варіанту світлодіодного пера

Рис. 2.42. Плата RGB-світлодіоди, приєднана до основної плати під прямим кутом

Рис. 2.43. Вид збоку першого варіанту світлодіодного пера

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

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

Обидва пристрої працюють на частоті 1,2 МГц. Коди обох версій схожі за винятком того, що в першій версії зміна кольору виконується за допомогою кнопки, а в другій версії – за допомогою потенціометра. Програмування коду і fuse-бітів здійснюється за допомогою STK500 в режимі ISP. Різні кольори генеруються за допомогою програмної широтно-імпульсної модуляції. Для кожного кольору було вибрано по 9 рівнів ШІМ. З можливих 9x9x9 квітів було вибрано 16 (які збережені в пам’яті програм). Є ще один додатковий режим, який називається “прогоном” – коли всі кольори з’являються один за іншим з проміжком в 500 мс. Розглянемо найважливіші фрагменти коду.

ISR (TIMO_OVF_vect)

{

DDRB & = ~ (1 «0 11« 111 «2); if (е == 8)

{

е = 0; xyz ();

}

abc(pwm[0] ,pwm[l] /pwm[2] ,e) ;

DDRB I = (1«0 11«111«2) ; e++;

if (i == 15) // режим роботи {

counter++;

if(counter == 390)//500ms {

counter = 0; if(k==14) k=0;

else k++;

pwm[0] = pgm_read_byte(&Blue[ k ] ) ; pwm[1] = pgm_read_byte(&Red[k]); pwm[2] = pgm_read_byte(&Green[k]);

}

}

}

Лістинг 2.6 – процедура обробки переривання за переповненням TimerO, яка управляє широтно-імпульсною модуляцією з дев’ятьма рівнями (як і в попередніх проектах). Якщо ж вибирається “режим прогону”, то він перебирає всі кольори з часовим проміжком в 500 мс. Ця процедура в обох версіях однакова.

if ( » (PINB& (1«3) ) )

{

_delay_ms(3 0);

while (! (PINB & (1 «3))); // Очікування _delay_ms (3 0);

TIMSKO 8c= ~ (1«TOIEO) ;

// Скинути переривання таймера DDRB (1 «0 I 1« 11 січня < < 2);

GIFR |= 1«PCIF;

// Скинути очікує переривання GIMSK | = 1 «PCIE;

// Активація переривання по зміні сигналу на контакті MCUCR | = (1 «SE | 1« SM1);

// Установка режиму вимкнення живлення sleep_cpu ();

// Процесор зупинений до переривання

}

Фрагмент, наведений у лістингу 2.7, працює в нескінченному циклі (коли пристрій активно). Він перевіряє стан перемикача на РВЗ. При натисканні та відпусканні він відключає переривання TimerO і конфигурирует керуючі светодиодом контакти як плаваючі. Це повністю відключає світлодіод і включає переривання по зміні сигналу на контакті. Незважаючи на те, що це переривання може бути виконано на всіх контактах введення / виведення контролера ATtiny 13, при ініціалізації коду він налаштовується так, щоб це переривання міг викликати тільки контакт РВЗ. Потім значення регістра mcucr вибирає режим очікування і відправляє пристрій в режим виключення (за допомогою виклику функції sieep_cpu ()), з якого його можна пробудити, тільки задавши асинхронне переривання по зміні сигналу на контакті (ми пояснимо це далі). Під час вимикання виконання коду зупиняється. Воно запускається повторно після сигналу пробудження, яким у даному випадку є переривання по зміні стану контакту РВЗ.

ISR (PCINTO_vect)

{

_delay_ms(3 0);

while (! (PINB & (1 «3))); // Очікування _delay_ms (30);

MCUCR = 0x00; / V відключення режиму очікування GIMSK & = – (1 «РС1Е);

// Відключення переривання по зміні стану контакту TIMSKO = 1 «ТО1Е0;

// Включення переривання за переповненням

} 4 Зак 1291

Лістинг 2.8 – це процедура обробки переривання для зміни стану контакту РВЗ. Вихідний код був написаний так, щоб це переривання було активно тільки тоді, коли пристрій знаходиться в стані вимикання. Ця процедура відключає режим очікування і переривання по зміні стану контакту. Вона також включає знову таймер, щоб почати генерування кольорів. Подібний метод перекладу контролера в режим вимкнення реалізований в обох версіях.

Кольори вибираються в нескінченному циклі (у першому устройстве- за допомогою кнопки, а в другому – за допомогою зчитування АЦП). Подробиці дивіться у вихідному коді.

Висновок

У цій главі ми вивчили різні типи світлодіодів, а також послідовне і паралельне управління ними. Ми також докладно обговорили управління інтенсивністю світіння світлодіодів за допомогою широтно-імпульсної модуляції. Ці концепції були підкріплені чотирма проектами. Крім того, світлодіоди можна з’єднати так, що співвідношення числа контактів вводу / виводу до числа світлодіодів буде менше одиниці, т. Е. Число світлодіодів може перевищувати наявну кількість контактів вводу / виводу. Широтно-імпульсна модуляція в усіх проектах реалізована програмним шляхом. Пристрої tinyAVR мають і апаратні канали для широтно-імпульсної модуляції (пов’язані з таймерами). Ми розглянемо це в наступному розділі.

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