Насправді Тенгу – це казковий персонаж з японського фольклору. Але Тенгу – це ще й популярна іграшка, в якій спілкування з гравцем відбувається за допомогою різноманітних звуків і шумів. Пропоноване пристрій є аудіоігрой і не має нічого спільного з надприродними істотами. У нашій іграшці Тенгу являє собою обличчя з очима, носом і ротом. Залежно від навколишніх звуків вираз очей і обличчя Тенгу буде змінюватися. На рис. 4.16 зображена блок-схема цього пристрою. Мікрофон, підключений до аудіокоректор, призначений для уловлювання звуків. Особа відображається на графічному дисплеї Nokia. Мікропроцесор tinyAVR аналізує звук і змінює вираз обличчя. Пристрій живиться від батареї, і його можна носити з собою.

Рис, 4.16. Блок-схема іграшки Тенгу

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

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

Oписание. пристрої

На рис. 4.17 зображена схема іграшки Тенгу. Пристрій живиться від батарейки 9 В, але буде добре працювати навіть від чотирьох лужних батарейок по 1,5 В. Напруга подається через роз’єм SL2. Діод D2 забезпечує захист від неправильної полярності підключення батарей. Напруга від джерела живлення подано на операційний підсилювач LM358 і на вхід перетворювача LP2950, ​​який видає напругу Vcc (3,3 В) для роботи мікроконтролера і дисплея Nokia. Дисплей підключений до схеми через роз’єм LCD1, мікрофон – через SL4. При підключенні конденсаторного мікрофона необхідно дотримуватись полярності. Харчування на мікрофон подається через резистор R7. Аналоговий сигнал з мікрофона через конденсатор С5 ємністю. 10 мкФ надходить на операційний підсилювач.

Рис. 4.17. Принципова схема іграшки Тенгу

Мікросхема включена як неинвертирующий підсилювач постійного струму з високим посиленням. Резистори R10 і R11 забезпечують постійний зсув, рівну половині вхідної напруги. Оскільки резистор R10 зашунтірован конденсатором С6, то по змінному струмі точка з’єднання R10 і R11 виявляється заземлена. Корисний сигнал прикладений до входу підсилювача (контакт 3).

За першим каскадом підсилювача слід другий (зібраний на другій половині операційного підсилювача), включений теж як неинвертирующий. До виходу (контакт 7 мікросхеми) підключений резистор R15 і стабілітрон D1 (2,7 В), тому вихідна напруга обмежується до 2,7 В. Далі сигнал надходить на вхідний контакт РА4 мікроконтролера Tiny44. Посилення двох каскадів таке велике (25000), що сигнал на виході являє собою меандр з частотою вихідного аудіосигналу. Завдання мікроконтроллера- визначити частоту цього сигналу і потім змінити вираз обличчя на графічному дисплеї. Мікроконтролер постійно заміряє частоту аудиосигнала.

Операційний підсилювач живиться безпосередньо від батарей. Для LM358 потрібно напругу не менше 5 В, тому схема повинна харчуватися або від чотирьох батарейок по 1,5 В, або від батареї 9 В. Мікроконтролер і дисплей Nokia 3310 живляться від стабілізатора LP2950, ​​який дає вихідну напругу 3,3 В.

Конструкція

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

Плата одностороння (на стороні компонентів є всього декілька перемичок). Боку друкованої плати зображені на рис. 4.18 і 4.19. Працюючий зразок пристрою показаний на рис. 4.20.

Рис. 4.18. Друкована плата іграшки Тенгу (сторона компонентів)

Рис. 4.20. Працюючий зразок іграшки Тенгу

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

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

Тактова частота дорівнює 8 МГц. Контролер запрограмований за допомогою STK500 в режимі програмування ISP. Найважливіші фрагменти коду ілюструє лістинг 4.5.

void check (void)

{

TIFRO = 1«TOVO;

TCNTO = 255-125;

TCCROB = 1«CS00 11«CS01;

count = 0;

freq = 0;

stop_check=0 ;

while(count<200)

{

while ( (PINA& (1«4)) && (stop_check==0)

) ;

while ( ( ! (PINA& (1«4 )))&&( stop_check===0) ) ‘ if (PINA& (1«4) )

/ {

freq++;

}

}

freq = freq*5; if(freq>=1900) face = 9;

else if(freq>=1700) face = 7;

else if(freq>=1500) face = 6;

else if(freq>=1200) face = 1;

else if(freq>=900) face = 0;

else if (freq>=650) face = 5;

else if(freq>=350) face = 2;

else if(freq>=200) face = 4; else if(freq<200) face = 3;

TCCROB = OxOO; // Зупинити таймер}

Це функція, яка вимірює частоту вхідного сигналу на контакті РА4 мікроконтролера. Вона инициализирует TimerO таким чином, що переривання по його переповнення виникає кожну мілісекунду. Ця процедура збільшує змінну count до 200 (це і є інтервал в 200 мс). Протягом цього часу кожна зміна стану контакту РА4 записується в змінну freq. Вона потім множиться на 5 (щоб отримати число змін за одну секунду), що і дає частоту вхідного сигналу. Далі, виходячи з отриманого результату, методом проб і помилок змінної face присвоюється певний номер особи, який функція putface використовує для формування виразу обличчя на дисплеї LCD (витягуючи відображаються байти з пам’яті програм мікроконтролера). Вона також відображає підморгують очі (викликаючи функцію puteye).

Головна процедура нашого коду спочатку ініціалізує LCD, а потім поперемінно викликає функції check і putface (в нескінченному циклі).

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

Для роботи з іграшкою Тенгу вам потрібно спочатку підключити живлення, а потім розмістити її так, щоб мікрофон не був закритий. Ви побачите обличчя на дисплеї, а коли з’явиться який-небудь звук, очі засвітяться, і зміниться вираз рота. Якщо ви включите гучну музику, то рот буде постійно змінюватися – наче Тенгу співає.

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