Am încercat implementarea unui mecanism de Clap Switch. Acesta este un dispozitiv care realizează anumite operații în funcție de bătaia palmelor. În cazul de față se vor aprinde 3 LED-uri în ordine diferită.
Mecanismul creat va fi capabil să aprindă 3 LED-uri, în funcție de bătaia palmelor. Astfel la o primă bătaie de palme se aprinde primul LED, la a doua bătaie al doilea LED, iar la a treia bătaie se aprind toate LED-urile. Aprinderea LED-urilor se bazează pe ascultarea de către un microfon a semnalelor audio de înaltă intensitate. Astfel bătaia din palme deosebindu-se de zgomotele înconjurătoare datorită intensității ei, va declanșa aprinderea LED-urilor. Pe același mecanism se bazează și stingerea/aprinderea luminii, acțiune pe care o vedeam în multe filme din anii '80-'90.
Semnalul audio va fi recepționat de un microfon electret (XF-18D), care va trimite apoi semnalul către un tranzisotr (2N3904) ce va amplifica semnalul. În cele din urmă, semnalul va ajunge pe portul ADC7 al microcontrolerului. Semnalul analogic primit va fi convertit în semnal digital de către convertorul analogic-digital (ADC) de pe microcontroler. În funcție de rezultat, microcontrolerul va trimite semnalul către unul dintre porturile : PC0, PC1, PC2 ce vor determina aprinderea/stingerea LED-urilor.
După cum am spus și mai sus ne vom folosi de funcționalitatea microcontrolerului de a converti semnalul analogic primit în semnal digital. Pentru asta a trebuit să efectuez mai multe teste pentru a găsi o valoare de referință (diferită de la un microfon la altul). Semnalul primit va fi convertit într-un semnal digital ce va fi comparat cu valoarea de referință. În funcție de aceasta și în funcție de ce LED-uri sunt/nu sunt aprinse se va comanda aprinderea/stingerea celorlalte LED-uri.
M-am folosit de laboratorul 1, incluzând librăriile : <avr\io.h>, <util/delay.h> Apoi am implementat funcțiile :
Pentru ca programul să nu perceapă o bătaie din palme ca reprezentând două bătăi (astfel aprinzând 2 LED-uri), am adăugat la final un delay pentru a face diferența.
Datasheet ATMega16 : doc2466.pdf