Проект tinyAVR 26. Электронные свечи для дня рождения

October 12, 2014 by admin Комментировать »

Мы хотели создать светодиодные свечи для дня рождения, которые можно было бы задувать точно так же, как и обычные. Такая система хорошо подходит для маленьких детей (поскольку не огнеопасна). Для обнаружения дуновения использован термистор (показан на рис. 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 с.: ил. — (Электроника)

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты