This is an old revision of the document!


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

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

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.1684763926.txt.gz · Last modified: 2023/05/22 16:58 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