Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:danield:mini-tutorial-pentru-pian [2023/05/22 14:17]
indra.catana
pm:prj2023:danield:mini-tutorial-pentru-pian [2023/05/29 14:09] (current)
indra.catana [Download]
Line 2: Line 2:
 ===== Introducere ===== ===== Introducere =====
  
-**Proiectul** constă în implementarea unui **dispozitiv** ce faciliteaza invatarea si recunoasterea notelor muzicale din gama **Do Major**.+**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. 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.+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ă ===== ===== Descriere generală =====
-** 
-Schema Bloc** 
  
-{{ :​pm:​prj2023:​danield:​screenshot_2023-05-05_183232.png?​400 |}}+==== Schema Bloc ====
  
-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. Daca timpul expira, pe ecranul LCD se va afisa un mesaj sugestiv.+{{ :​pm:​prj2023:​danield:​screenshot_2023-05-05_181739.png?500 |}}
  
-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. +==== Mod de functionare ==== 
-De asemenea, in functie ​de corectitudinea reproducerii, pe display se va afisa un mesaj de eroare sau succes.+ 
 +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 muzicalela 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 ===== ===== Hardware Design =====
  
-Lista piese:+==== Lista piese: ​==== 
   * Arduino UNO   * Arduino UNO
   * Ecran LCD 12C   * Ecran LCD 12C
   * Buzzer   * Buzzer
-  * butoane+  * butoane ​redare note muzicale 
 +  * 1 buton alegere nivel
   * Banda LED WS2812   * Banda LED WS2812
   * Breadboard   * Breadboard
   * Fire   * Fire
 +
 +
 +==== Schema Electrica ====
 +
 +{{ :​pm:​prj2023:​danield:​screenshot_2023-05-22_145321.png?​700 |}}
 +
 +
 +
 +{{ :​pm:​prj2023:​danield:​screenshot_2023-05-22_145809.png?​800 |}}
 +
  
 ===== Software Design ===== ===== 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
  
-<note tip> +==== Detalii de implementare ==== 
-Descrierea codului aplicaţiei ​(firmware)+ 
-  ​mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+In **setup()** am configurat pinii de input (butoanele corespunzatoare notelor muzicale si butonul corespunzator niveluluisi pinul de output ​(buzzer-ul), LCD-ul si banda led 
-  librării şi surse 3rd-party ​(e.gProcyon AVRlib+ 
-  algoritmi şi structuri ​pe care plănuiţi să le implementaţi +Am implementat functii separate pentru a //​modulariza//​ codul, intrucat rationamentul folosit este identic in cele 5 nivele. 
-  * (etapa 3surse şi funcţii implementate +Functiile** playTone()** si **playNote()** sunt responsabile pentru redarea unui ton pe buzzerrespectiv a unei note muzicale.  
-</​note>​+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:​ 
 +  - Mesaj de bun-venit afisat ​pe **ecranul LCD** 
 +  ​- 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. 
 +  - Redarea melodiei corespunzatoare nivelului 
 +  - Indrumarea utilizatorului pentru a reproduce secventa auzita si feedback-ul in functie de corectitudinea rezultatului.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +{{ :​pm:​prj2023:​danield:​01430b05-23b6-47fa-ba11-678ef60a4054.jpeg?300 |}}
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii ===== 
  
-===== Download =====+{{ :​pm:​prj2023:​danield:​7cdd7d27-03fc-45c2-95a0-b4583ddc5416.jpeg?​300 |}}
  
-<note warning> 
-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**. +{{ :pm:prj2023:danield:02d11e56-a886-4127-a22d-d26b7c85572d_1_.jpeg?300 |}}
-</​note>​+
  
 +
 +{{ :​pm:​prj2023:​danield:​797aa278-3a86-4f12-bf4b-fe95ddbfb0a8.jpeg?​300 |}}
 +
 +
 +{{ :​pm:​prj2023:​danield:​bb4b2d30-fcdd-471a-91a5-aa8d49440b2e.jpeg?​300 |}}
 +
 +
 +
 +===== 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 =====
 +
 +{{:​pm:​prj2023:​danield:​mini-tutorial_pentru_pian.zip|}}
 ===== Jurnal ===== ===== Jurnal =====
  
Line 64: Line 108:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +=== Resurse Software ​=== 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** ​şi **Resurse Hardware**. +  ​https://​gist.github.com/​baojie/​4522173 
-</note>+  ​https://​www.youtube.com/​watch?​v=CvZ-SGJ8fGo 
 +  ​https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023 
 +  ​https://​forum.arduino.cc/​t/​using-millis-for-timing-a-beginners-guide/​483573 
 +  * https://​arduinogetstarted.com/​tutorials/​arduino-neopixel-led-strip
  
-<​html><​a class="media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</a></html>+=== Resurse Hardware === 
 +  * https://​www.youtube.com/​watch?v=CvZ-SGJ8fGoo 
 +  * https://www.youtube.com/​watch?​v=EAeuxjtkumM
pm/prj2023/danield/mini-tutorial-pentru-pian.1684754230.txt.gz · Last modified: 2023/05/22 14:17 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