Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul Theremin are ca scop implementarea si construirea unui instrument muzical controlat prin simpla miscare a mainii prin aer. Ideea proiectului a pornit de la instrumentul muzical electronic cunoscut si sub numele de eterofon sau thereminofon. Acesta a fost inventat de fizicianul rus Lev Sergeyevich Termen (Léon Theremin) in anul 1919. Principiul de functionare al instrumentului inventat de Termen se baza pe 2 oscilatoare de radio frecventa: un oscilator opereaza la frecventa fixa, pe cand cel de-al doilea va opera la o frecventa variabila in functie de miscarile muzicianului fata de antena. Mana muzicianului actioneaza ca o armatura a unui condensator variabil dintr-un circuit LC ce este parte a oscilatorului si determina frecventa sa. Proiectul este ideal pentru pasionatii de muzica, ce doresc sa readuca vechile inventii in pas cu noile tehnologii.
Implementarea proiectului meu se va baza pe senzori de ultrasunete care vor simula functionalitatea oscilatoarelor: un senzor de transmitere care va emite unda in aer, aceasta se va lovi de mana utilizatorului si va fi redirectionata catre receptor. Receptorul va interpreta semnalul, in functie de distanta fata receptor-mana utilizator si de miscarea mainii acestuia care ii va modifica directia. Datele vor fi trimise microprocesorului sub forma unei tensiuni, care le va trimite mai departe unui difuzor pentru redarea sunetului obtinut.
Ca si mediu de dezvoltare am folosit Programmer's Notepad, varianta cu compilatorul WinAVR instalat si Bootloader-ul USB din cadrul laboratorului.
In primul rand, folosesc module de initializare IO si a Timer-ului 1. Pentru a capta semnalul primit pe pinul de Echo al senzorului ultrasonic am folosit Timer0 si rutina de tratare a intreruperii PINT_1. Astfel, cu ajutorul unei variabile globale (got_echo) retin starea anterioara intrarii in interupere si in functie de aceasta pornesc Timer0 in mod CTC cu prescaler de 8 (daca got_echo = 0) si respectiv opresc Timer0, masor distanta de la senzor la mana si in functie de aceasta si de distanta precedenta decid care nota ar trebui cantata (urmatoarea in cazul in care distanta a crescut, anterioara in cazul in care distanta s-a micsorat). Pentru a reda o nota, am folosit interuperi in mod CTC cu Timer1 si cu toggle pin OC1A la compararea cu OCR1A. Astfel, OCR1A va retine frecventa fiecarei note, si aceasta valoare se va schimba doar in momentul in care nota precedenta s-a terminat de redat si in momentul in care este necesara updatarea notei (avem echo). Aceste lucruri sunt verificate de variabilele globale note_remaining si note_position.
Theremin-ul este functional, insa nu se face o trecere lina intre sunete. Am putea spune ca am realizat un cimpoi. :-D
Proiectul este functional, dar pentru o precizie mai mare si o claritatea a sunetelor mai buna recomand folosirea altor senzori care sa permita un calcul al distantei senzor-obiect mult mai buna.
Datasheet senzori: http://www.micropik.com/PDF/HCSR04.pdf Datasheet ATMEGA324: http://cs.curs.pub.ro/wiki/pm/_media/doc8272.pdf
Buzzer: http://cs.curs.pub.ro/wiki/pm/lab/lab0 Timere si intreruperi: http://cs.curs.pub.ro/wiki/pm/lab/lab3