Mini-Tutorial pentru pian

Introducere

Proiectul constă în implementarea unui dispozitiv ce faciliteaza invatarea si recunoasterea notelor muzicale din gama Do Major.

Se vor folosi 7 butoane, fiecare asociat cu o nota muzicala. Vor exista 5 nivele de dificultate din care utilizatorul poate alege. Dupa redarea unei secvente de note muzicale prin buzzer, utilizatorul are la dispozitie un interval prestabilit de timp pentru a reda secventa corect. Dispozitivul ofera o modalitate interactiva si distractiva de a invata notele muzicale, utilizatorul fiind indrumat de led-urile luminoase si ecranul LCD in acest proces.

Descriere generală

Schema Bloc

Mod de functionare

Initial, utilizatorul va avea 10 secunde pentru a alege cu ce nivel de dificultate doreste sa continue.

Buzzer-ul va reda o secventa de note muzicale, iar ulterior, utilizatorul va avea la dispozitie un interval de timp masurat cu ajutorul unui timer pentru a reproduce “melodia” auzita. In cazul in care timpul expira sau un buton gresit este apasat, pe ecranul LCD se va afisa un mesaj sugestiv, led-urile vor deveni rosii, iar nivelul selectat se va relua.

Utilizatorii vor fi ghidati de catre o banda led ce va avea cate un led asociat fiecarui buton, iar acesta se va aprinde in cazul in care nota muzicala ce trebuie redata corespunde butonului respectiv. Pentru a imbunatatii procesul de recunoastere si invatare al notelor muzicale, la fiecare buton apasat, numele notei muzicale careia ii corespunde va fi afisat pe ecranul LCD.

Odata ce secventa va fi reprodusa corect, led-urile devin verzi si se ofera posibilitate trecerii la un alt nivel, in cazul in care se doreste continuarea folosirii dispozitivului.

Hardware Design

Lista piese:

  • Arduino UNO
  • Ecran LCD 12C
  • Buzzer
  • 7 butoane redare note muzicale
  • 1 buton alegere nivel
  • Banda LED WS2812
  • Breadboard
  • Fire

Schema Electrica

Software Design

  • Mediu de dezvoltare : Arduino IDE
  • Librarii importate : LiquidCrystal_I2C.h pentru comunicarea cu ecranul LCD, Adafruit_NeoPixel.h pentru adresarea bandei led, Arduino Tone Library pentru redarea notelor muzicale

Detalii de implementare

In setup() am configurat pinii de input (butoanele corespunzatoare notelor muzicale si butonul corespunzator nivelului) si pinul de output (buzzer-ul), LCD-ul si banda led.

Am implementat functii separate pentru a modulariza codul, intrucat rationamentul folosit este identic in cele 5 nivele. Functiile playTone() si playNote() sunt responsabile pentru redarea unui ton pe buzzer, respectiv a unei note muzicale. Cu ajutorul functiei playNivel() se va reda secventa corespunzatoare nivelului selectat, aceasta primind ca input o serie de caractere care definesc notele muzicale si durata lor.

Functia sing() este responsabila cu functionalitatea “pianului”, intrucat reda frecventa notei muzicale asociata butonului apasat cu ajutorul functiei tone() si afiseaza pe ecranul LCD denumirea acesteia.

Functiile succesLed(), failedLed() si clearLed() confera un feedback vizual utilizatorului referitor la redarea secventei auzite.

Functia anotherBUtton() primeste drept argument indicele butonului ce trebuie apasat si verifica daca un alt buton este apasat in schimb.

Intrucat folosim un timer pentru a masura timpul de reproducere a melodiei, functia setupTimer() se va ocupa de configurarea Timer1, iar ISR(TIMER1_COMPA_vect) va fi rutina de intrerupere este declansata atunci cand timer-ul atinge valoarea specificata în registrul OCR1A.

In functia loop() este implementat flow-ul programului:

  1. Mesaj de bun-venit afisat pe ecranul LCD
  2. Alegerea nivelului intr-un timp de 10 secunde ce va fi masurat folosind functia millis(). La fiecare apasare a butonului, nivelul va fi incrementat si utilizatorul va putea vedea cat timp mai are la dispozitie pentru alegere.
  3. Redarea melodiei corespunzatoare nivelului
  4. Indrumarea utilizatorului pentru a reproduce secventa auzita si feedback-ul in functie de corectitudinea rezultatului.

Rezultate Obţinute

Concluzii

Ma bucur de alegerea facuta in legatura cu tema proiectului, deoarece mi-a facut placere sa il realizez, atat pe partea de hardware, cat si pe partea de software.

Pentru realizarea hardware-ului am urmarit diverse tutoriale pe youtube, care mi-au fost de mare ajutor, iar pentru scrierea codului am incercat sa implementez initial pe module (functionalitatea pianului, functionalitatea ecranului LCD, redarea melodiilor, adresarea bandei led), iar apoi le-am imbinat pentru a avea functionalitatea dorita. Consider ca am creat un dispozitiv interactiv, distractiv si usor de utilizat datorita mesajelor sugestive afisate pe ecranul LCD si a feedback-urilor luminoase oferite de banda led.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Resurse Software

Resurse Hardware

pm/prj2023/danield/mini-tutorial-pentru-pian.txt · Last modified: 2023/05/29 14:09 by indra.catana
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