У цьому проекті ми продовжуємо демонструвати можливості застосування світлодіода в якості датчика. Пристрій складається з декількох світлодіодів, розташованих у вигляді серця, яке пульсує зі звичайною (Характерною для серця) частотою. Однак якщо до нього піднести руку, то датчик уловлює зменшення освітленості і мікроконтролер підвищує частоту пульсації. Якщо руку піднести ще ближче, то датчик виявляє це і мікроконтролер починає запалювати світлодіоди незвичайним чином (щоб продемонструвати стан щастя). Якщо руку прибрати, то “серце ” знову пульсує нормально. На рис. 5.13 показана блок-схема пристрою.

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

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

Мета- створити інтерактивний проект, що має вигляд матриці світлодіодів у формі серця. Функціонування пристрою полягає в реакції на наближення руки (або будь-якого іншого об’єкта), при цьому змінюється частота миготіння світлодіодів. Пристрій живиться від батарей, щоб забезпечити портативність.

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

Принципова схема пристрою показана на рис. 5.14. Ланцюг складається з 27 світлодіодів, розташованих трьома концентричними рядами. Зовнішній ряд складається з 14 світлодіодів. Середній ряд складається з десяти світлодіодів, а внутрішній – з трьох. У центрі внутрішнього ряду знаходиться ще один світлодіод (LED28), який не випромінює, а сприймає світло. Схема живиться від батарей і забезпечена стабілізатором напруги на 3,3 В. Послідовно з кожним світлодіодом включений резистор опором 560 Ом, тому струм в ланцюзі становить приблизно 3 мА. Дня включення / виключення рядів передбачено три і-р-і-транзистора (BD139). Такий транзистор може керувати колекторним струмом 1 А. Однак у даній схемі максимальний струм (через зовнішній ряд світлодіодів) становить приблизно 45 мА, в принципі тут зможе працювати будь л-р-і-транзистор з струмом колектора 100 мА.

Рис. 5.14. Принципова схема світлодіодного серця

Інтенсивність зовнішнього світла вимірює світлодіод LED28, підключений до контактів мікроконтролера (РВЗ і РВ4). Мікроконтролер подає на світлодіод зворотний зсув і заміряє час, за який стан логічної одиниці перетворюється в стан логічного нуля. Схема може живитися від будь-якого зовнішнього джерела з напругою від 5 до 10 В.

Конструкція

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

Рис. 5.15. Друкована плата світлодіодного серця (сторона компонентів)

Рис. 5.16. Друкована плата світлодіодного серця (сторона друкованих провідників)

Пристрій був виготовлений на односторонній друкованій платі. Фотографії зібраного пристрою показані на рис. 5.15 і 5.16.

Спочатку припаювалися всі компоненти в корпусах SMD (резистори і т. П.), Потім перемички, потім всі світлодіоди, транзистори, гніздо для мікроконтролера і інші компоненти.

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

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

Тактова частота дорівнює 9,6 МГц. Контролер запрограмований за допомогою STK500 в режимі програмування ISP. Пристрій працює в одному з трьох режимів: NONE, NORMAL або HAPPY, які відрізняються способом миготіння світлодіодів. У лістингу 5.2 показаний головний нескінченний цикл програми. При ініціалізації значення змінної а встановлюється рівним 20.

Лістинг 5.2

while(1)

{

if (mode==NORMAL)

{

PORTB &=0blllll000;

// Вимикання mydelay (a + a + a + a);

PORTBI=0b00000111;

// Включення mydelay (a + a);

PORTB & = 0И11110б0;

// Вимикання mydelay (a + a);

PORTB | = 0Ь00000111;

// Включення mydelay (a + a); time = 0;

}

else if (mode==HAPPY)

{

if(state==l)

PORTB I =1«2; else if(state==5) PORTB &= ~ (1«2 ) ; if(state==5)

PORTB &=~(1«1);

// Середній вимкнений else if (state == 2) PORTB | = 1 «1;

// Середній включений if (state == 4)

PORTB (1«0) ;

// Зовнішній вимкнений else if (state == 3) PORTB | = 1 «0;

// Зовнішній включений mydelay (5 * state); state ++; if (state == 6) state = l; time ++; if (time == 100)

{

mode = NORMAL; previous_mode = NONE time=0 ; a=20;

}

}

check ();

}

Якщо встановлений режим NORMAL, то система починає включати і вимикати світлодіоди з деякою затримкою, яка залежить від значення а. Серце складається з трьох частин: зовнішньої, середньої і внутрішньої. У режимі HAPPY включаються / вимикаються світлодіоди однієї з цих частин серця (залежно від стану змінної state).

Спочатку значення змінної mode встановлюється в none. Для виявлення близькості система викликає функцію check () (лістинг 5.3), яка змінює значення mode. Значення count з timero зберігається в змінної i до того моменту, поки в третьому бите PINB (який підключений до датчика) не з’явиться логічна 1 (при виявленні близькості будь-якого непрозорого об’єкта, який перешкоджає падаючому на світлодіод світлі). В залежності від відстані до цього об’єкта (яке можна визначити за значенням count) і від попереднього режиму (в якому працювала система), режим змінюється або на NORMAL, або на HAPPY.

Лістинг 5.3

void check (void)

{

TCCROB = 0; // зупинити таймер TCNT0 = 0; // скинути таймер i = 0;

DDRB = 0Ь0 0010000;

PORTS &= ~(1«3) ; i=0;

TCCROB = 1«CS02 11«CS00 ;

// Попереднє поділ на 1024 while ((PINB & (1 «3)) && (i <80))

{

i=TCNT0;

}

if(i>50)

{

if ( (previous_mode==NORMAL) )

{

mode = HAPPY;

}

else a=20;

}

else if(i<50)

{

if(i<40)

previous_mode = NORMAL;

}

else previous_mode = NONE; mode = NORMAL; a=i/3;

}

PORTB I =1«3 ;

DDRB = ObOOOlllll;

}

В інших фрагментах коду виконується звичайна ініціалізація різних параметрів. У лістингу 5.4 наведено визначення функції mydelay; якщо система працює на частоті 9,6 МГц, то вона забезпечує затримку в 10 мс (коли її аргумент дорівнює »1).

void mydelay(int var)

// Затримка в 10 мс для var = l при 9,6 МГц {

unsigned char il, jl, kl;

for (i1=0; il<var; il++) for (j1=0; jl<251;jl++) for (kl=0; kl<50; kl++) asm ("NOP") ;

}

Робота пристрою

Для демонстрації чутливого пульсуючого серця розташуйте схему біля своїх грудей (сховайте батареї в кишеню) і включіть її. Світлодіоди почнуть перемикатися зі звичайною частотою. Тепер наблизьте руку до миготливим светодиодам, частота пульсацій почне збільшуватися. Піднесіть руку ще ближче до схеми і торкніться її, а потім приберіть руку. Коли ви приберете руку, світлодіоди почнуть мигати в режимі “щастя” (HAPPY), а через кілька секунд знову повернуться в нормальний режим.

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