Ми хотіли створити світлодіодні свічки для дня народження, які можна було б задувати точно так само, як і звичайні. Така система добре підходить для маленьких дітей (оскільки не вогненебезпечна). Для виявлення подуву використаний термістор (показаний на рис. 5.39). Мікроконтролер управляє світлодіодами і може міняти інтенсивність їх свічення випадковим чином, що створює враження мерехтіння свічок. Пристрій можна об’єднати з програвачем рингтонів (дивіться наступну главу), який після задування всіх свічок буде відтворювати веселу мелодію.

Рис. 5.39. Блок-схема електронних свічок

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

Мета проекту – створити світлодіодні свічки, які можна задути (точно так само, як звичайні воскові). Головне завдання-створити безпечне в пожежному відношенні пристрій для дітей.

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

Принципова схема пристрою наведена на рис. 5.40.

Вона складається з мікроконтролера Tiny44, який має 12 контактів вводу / виводу, але оскільки один контакт призначений для RESET, то залишається 11 вільних контактів. Схема живиться від зовнішніх батарей (Рекомендуємо взяти чотири нікель-метаплогідрідних батареї розміром АА) і не має стабілізаторів напруги (для спрощення). Використовується 20 світлодіодів, зібраних в матрицю 4×5. Аноди світлодіодів підключені до джерела живлення через р-і-р-транзистори. Катоди з’єднані з висновками мікроконтролера. Світлодіоди мультиплексируются на великій частоті. Щоб добитися ефекту мерехтіння, середній струм через світлодіоди змінюється за допомогою програмної ШІМ. У сйстеме передбачений дільник напруги з резистора R10 (опором 150 Ом) і термістора R9 (з номінальним опором 150 Ом). Поблизу від термістора розміщений невеликий резистор (для нагрівання). Напруга на R9, R10 постійно відстежується контактом РА7 мікроконтролера. Якщо подути на термістор, то він охолоне і напруга на контакті РА7 зменшиться. Якщо падіння напруги більше запрограмованого межі, то мікроконтролер вважатиме, що на схему хтось дме, і починає вимикати світлодіоди (випадковим чином). Коли ви дуеті на звичайні свічки, одні з них гаснуть відразу, а інші лише мерехтять (і вам може навіть не вдасться задути жодної свічки). Тому таким випадковим вимиканням ми імітуємо поведінку справжніх свічок.

Рис. 5.40. Принципова схема пристрою

Один з контактів мікроконтролера (РА1) не задіяний і може застосовуватися для будь-яких цілей. Наприклад, до нього можна підключити програвач рингтонів.

Конструкція

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

Рис. 5.41. Друкована плата пристрої (сторона компонентів)

Рис. 5.42. Друкована плата пристрої (сторона друкованих провідників)

Плата розлучена в двох шарах і тому її не можна виготовити за допомогою верстата Roland Modela MDX 20. Плата була спеціально вирізана у вигляді кола. На рис. 5.41 і 5.42 показані обидві сторони плати. На нашому сайті www.avrgenius.com/ tinyavrl є відеозапис, яка демонструє роботу цієї системи.

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

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

Світлодіодні свічки для дня народження працюють як звичайні свічки. Можна вибрати число палаючих свічок (до 20 штук), а для їх виключення на них потрібно подути. Як і у випадку зі звичайними свічками, одне подув може погасити не всі свічки, і, щоб задути їх все, вам доведеться дути кілька разів. 20 світлодіодів мультиплексуюча за допомогою дев’яти ліній; принцип мультиплексування ясний з лістингу 5.16. Змінні е, el, е2, ез і є4 управляють програмним мультиплексированием. Функція setrandomO задає значення для масиву pwm, звернення до якого виробляється з процедури обробки переривання за переповненням TIMERO. Масив pwm призначений для завдання випадкових робочих струмів світлодіодів (щоб вони мерехтіли подібно справжнім свічок).

void setrandom(void)

{

if(ab==0)

{

pwm[0]=3;pwm[1]=0;pwm[2]=0;pwm[ 3]=0; pwm [ 4]=0;pwm[5]=0;pwm[6]=2;pwm[7]=3; pwm[8]=3;pwm[9]=1;pwm[10]=1;pwm[11]= 3; pwm [12]=3;pwm[13]=1;pwm[14]=1;pwm[15]=0; pwm[16]=3;pwm[17]=2;pwm[18]=4;pwm[19]=0;

}

if(ab==l)

{

pwm[0]=1;pwm[1]=1;pwm[2]=1;pwm[3]=1; pwm[4]=1;pwm[5]=3;pwm[6]=1;pwm[7]=2; pwm [ 8 ] =2;pwm [ 9 ] =3 ;pwm [10] = 0;pwm [ 11]=2; pwm [12] =2 ;pwm [13] =1;pwm [14] =3 ;pwm[15]=1; pwm [16] =2 ; pwm [17] =1; pwm [18] =1; pwm [19] =1;

if(ab==2)

{

pwm[0] =2 ;pwm[ 1 ] =2 ;pwm[2 ] =2;pwm[3 ] =3 ; pwm[4]=2;pwm[5]=2;pwm[6]=0;pwm[7]=0; pwm[8]=l;pwm[9]=0;pwm[10]=l;pwm[ll]=3; pwm[12]=3;pwm[13]=1;pwm[14]=0;pwm[15]=3; pwm [16] =1; pwm [17] =3; pwm [18] =2; pwm [19] =2 ;

}

if(ab==3)

{

pwm[0]=0;pwm[1]=3;pwm[2]=3;pwm[3]=2; pwm[4] =3 ;pwm[5] =1;pwm[6] =3 ;pwm[7]=1; pwm[8]=0;pwm[9]=2;pwm[10]=2;pwm[ll]=0; pwm[12]=1;pwm[13]=1;pwm[14]=2;pwm[15]=2; pwm [ 16 ] =0 ;pwm [ 17 ] =0;pwm [ 18] =3 ;pwm[ 19 ] =3 ;

}

ab++; if(ab==4) ab=0 ;

}

Спосіб мультиплексування світлодіодів був описаний в розділі 3. Усередині головної функції t світлодіоди розділені на вісім груп. Вся група вимикається одночасно, але групи вимикаються випадковим чином. Масив zi і змінна ζ служать для виключення світлодіодів випадковим чином (коли користувач дме на свічки) за допомогою генерування псевдослучайного числа від 1 до 8 (яке під час попередніх спроб не зустрічалося). Вихід з АЦП використовується для управління двома змінними: present і past. Залежно від різниці між present і past (і від згенерованого випадкового числа) вимикається відповідна група (її елементи в масиві statusonoff виставляються в О, що призводить до вимикання відповідних світлодіодів). Пррцесс виключення світлодіодів управляється фрагментом програми, наведеним в лістингу 5.17.

if ((present-past)>=3)

{

if(z==0)

{

statusonoff[0] = 0; statusonoff[5] = 0; statusonoff[9] = 0; statusonoff[12]=0; zl[0] = 0;

}

else if(z==l)

{

statusonoff[2] = 0; statusonoff[6] = 0; zl[l] = 1;

}

else if(z==2)

{

statusonoff[1] = 0; statusonoff[7] = 0; statusonoff[14]=0; zl[2] = 2;

}

else if(z==3)

{

statusonoff[11] = 0; zl[3] = 3;

}

else if(z==4)

{

statusonoff[15] = 0; statusonoff[18] = 0; zl[4] = 4;

}

else if(z==5)

{

statusonoff[10] = 0; statusonoff[13] = 0; zl[5] = 5;

}

else if (z==6)

{

statusonoff[3] = 0; statusonoff[4] = 0; statusonoff[8] = 0; zl[6] = 6;

}

else if(z==7)

{

statusonoff[17] = 0; statusonoff[16] = 0; statusonoff[19]=0; zl[7] = 7;

}

}

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

Для підготовки до роботи потрібно підключити схему до батарей (не більше 5,5 В) і дати опору нагріти термістор. Через кілька хвилин він почне реагувати на рух повітря. Подуйте на схему і поспостерігайте за випадковим вимиканням світлодіодів.

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