Marius-Robert DRĂGHICI (78635) - Ultrasonic piano
Autorul poate fi contactat la adresa:
Introducere
Scopul acestui proiect constă în realizarea unui pian care are pe post de clape senzori ultrasonici de distanță.
Funcționalitatea de bază este reprezentată de redarea notelor muzicale din mai multe octave în momentul în care senzorii sunt activați prin plasarea mâinilor deasupra lor. Pianul va beneficia de funcționalități suplimentare, precum înregistrarea melodiilor cântate de utilizator, selectarea și redarea unor melodii.
Sursele mele de inspirație au fost proiectele ce implementau piane realizate în anii trecuți și aceste 2 videoclipuri:
video 1 și
video 2.
Am ales să fac acest proiect, deoarece îmi place foarte mult muzica de pian și îmi doresc să am un instrument la care să cânt de fiecare dată când simt nevoia. În plus, el poate fi folosit de ceilalți pentru a învăța să cânte la pian melodii simple.
Descriere generală
Claviatura pianului este reprezentată de opt senzori ultrasonici de distanță, fiecare senzor fiind asociat uneia din cele 8 note ale unei octave: Do, Re, Mi, Fa, Sol, La, Si, Do. Când utilizatorul își plasează mâna deasupra unui senzor, programul va reda nota corespunzătoare acelui senzor, în funcție de octava curentă. Fiecare senzor are asociat un led care se va aprinde când nota corespunzătoare ledului va fi redată. Se va folosi un card SD pentru stocarea melodiilor. Pe ecranul LCD grafic, se vor afișa informații despre modul curent de funcționare, despre acțiunile posibile ce pot fi realizate sau despre melodia curentă. Sunetul va fi redat cu ajutorul difuzorului.
Pianul poate funcționa în următoarele moduri:
Modul interpretare: în acest mod, utilizatorul poate cânta la pian, plasând mâinile deasupra senzorilor corespunzători notelor care se doresc a fi redate. Senzorii vor detecta mâna utilizatorului și vor genera nota muzicală corespunzătoare. În acest mod, ledul asociat unui senzor se va aprinde atunci când utilizatorul pune mâna deasupra unui senzor și se va stinge când își va retrage mâna.
Modul selectare: acest mod este activat prin apăsarea unui buton de control. Pe ecranul LCD grafic se vor afișa o serie de gesturi ce pot fi realizate și acțiunile asociate acestora. După selectare, modul se oprește prin reapăsarea butonului. Acțiunile ce pot fi selectate pot fi:
incrementarea/decrementarea octavei;
trecerea în modul de redare/înregistrare;
selectarea melodiei anterioare/următoare pentru redare.
Modul înregistrare: Acest mod îi permite utilizatorului să înregistreze melodia pe care o cântă. Înregistrarea se oprește în momentul în care utilizatorul apasă pe butonul de control sau dacă senzorii nu au mai detectat nicio activitate pentru un anumit număr de secunde. După oprirea înregistrării, melodia înregistrată va fi salvată pe cardul SD.
Modul redare: În acest mod, utilizatorul poate alege să redea melodiile înregistrate de el și stocate pe cardul SD, melodii simple stocate în memoria de program sau melodii mai complexe stocate pe cardul SD în format wav. Selecția se va realiza tot cu ajutorul gesturilor, după selectarea modului redare. Pentru melodiile simple și melodiile înregistrate, ledurile asociate senzorilor se vor aprinde atunci când programul redă nota corespunzătoare acelor senzori. Redarea melodiilor se oprește prin apăsarea butonului de control.
Hardware Design
Listă de piese:
placa de bază cu componentele principale
-
1 buton de control pentru pian
8 led-uri (câte unul per senzor)
ecran LCD grafic TFT
micro card SD
rezistențe
condensatoare
modul slot card micro SD
placa de test
Schema electrica:
Software Design
Proiectul a fost dezvoltat pe Windows 10, utilizand:
* Atmel Studio
* tool-chain-ul AVR
* |HIDBootFlash
Bibliotecile folosite in cadrul proiectului sunt:
* ili9341.h preluata de aici pentru comunicarea cu ecranul lcd tft
* HC_SR04.h o biblioteca adaptata pentru a comunica cu cei 8 senzori ultrasonici
* usart.h din laboratorul 1 utilizata pentru debugging
Pentru detectarea obstacolelor de catre senzori, am folosit intreruperi si pentru calcularea distantei pana la obstacol am folosit timere. Pentru a detecta obstacolele, initial trebuie sa trimitem un puls care sa dureze cel putin 10 us la pinul de trigger al senzorului. Dupa ce primeste semnalul de trigger, senzorul transmite automat 8 unde de sunet de 40kHz fiecare. Apoi microcontrollerul asteapta ca pinul echo al senzorului sa ajunga in starea high. Cand pinul echo a ajuns in starea high, timerul incepe sa contorizeze timpul necesar undei sonore a ecoului sa se intoarca inapoi la senzor, lucru care se va intampla cand pinul echo va fi in starea low. Odata ce pinul echo a ajuns in starea low, microcontrollerul retine valoarea curenta a timerului, pe care o va utiliza pentru calcularea distantei pana la obstacolul intalnit. In acest calcul, trebuie sa luam in considerare si de cate ori timerul a facut overflow.
Rezultate Obţinute
Concluzii
Consider ca proiectul realizat a fost o experienta destul de interesanta, din care am invatat multe lucruri.
Download
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse