Clap Switch

Introducere

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ă.

Descrierea proiectului

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.

Implementarea Hardware

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.

Piese necesare :

  • 3 LED-uri
  • 3 rezistențe de 1K
  • 2 rezistențe de 10K
  • 1 rezistență de 100k
  • 1 condensator de 0.1μF
  • 1 tranzistor 2N3904
  • 1 microfon electret (XF-18D)

Implementarea Software

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 :

  • ADC_init() : configurează si activează ADC-ul microcontrolerului
    • referință AVCC cu condesator extern pe pinul AREF
    • activăm ADC-ul și setăm prescaler-ul de ceas la maxim (division factor = 128)
  • ADC_read() : va întoarce valoarea citită de la port-ul ADC7

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.

Poze plăcuță

Față :

Spate :

Bibliografie

Datasheet ATMega16 : doc2466.pdf

pm/prj2012/amocanu/alinbrados333cb.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0