This shows you the differences between two versions of the page.
|
pm:prj2023:danield:musical-xmas-lights [2023/05/06 22:10] roxana.popa2703 |
pm:prj2023:danield:musical-xmas-lights [2023/05/28 19:19] (current) roxana.popa2703 |
||
|---|---|---|---|
| Line 10: | Line 10: | ||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| - | {{ :pm:prj2023:danield:diagrama_pm.png?400x300 }} | + | {{ :pm:prj2023:danield:diagrama_pm.png?500x400 }} |
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| + | |||
| + | {{ :pm:prj2023:danield:schema_xmas_lights.png?800x400 }} | ||
| + | |||
| Piese folosite: | Piese folosite: | ||
| * Arduino Uno R3 | * Arduino Uno R3 | ||
| Line 18: | Line 21: | ||
| * Breadboard | * Breadboard | ||
| * Potentiometru | * Potentiometru | ||
| - | * Difuzor audio 8 ohmi | + | * Buzzer |
| * Modul card SD | * Modul card SD | ||
| * Fire, butoane etc | * Fire, butoane etc | ||
| Line 24: | Line 27: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | TBD | + | Codul sursă se găsește aici: {{ :pm:prj2023:danield:musical_xmas_lights.zip }} |
| + | |||
| + | Detalii de implementare: | ||
| + | |||
| + | În funcția setup() se seteaza pinii, se configurează întreruperile și se inițializează parametrii matricei de LED-uri. | ||
| + | Tot aici se inițializează cardul SD și se citesc cele 3 cântece care vor fi redate de buzzer. | ||
| + | |||
| + | În funcția loop() se controlează matricea de LED-uri și buzzer-ul. Inițial se pornește cu un pattern de lumini și un | ||
| + | cântec predefinite care pot fi schimbate prin apăsarea butoanelor NEXT, PAUSE, BACK și butonul asignat matricei. | ||
| + | Apăsarea butoanelor modifică variabilele __song_num__ și __matrix_opt__ care rețin numărul melodiei și al pattern-ului | ||
| + | de lumini. Apăsarea butoanelor declanșează întreruperi de tip PIN Change, în interiorul cărora se actualizează variabilele. | ||
| + | Tot aici se citește input-ul dat de potențiometru pentru a determina intensitatea luminii LED-urilor. | ||
| + | |||
| + | Pattern-urile de lumini folosite sunt definite în fișierele header incluse și sunt definite în librăria FastLED. Cântecele | ||
| + | pentru buzzer sunt definite sub forma unor vectori de perechi (notă, durată) care sunt citiți la începutul execuției. Pentru | ||
| + | a reda cântecele, am definit funcția playSong() care citește nota și durata sa și stabilește parametrii necesari pentru | ||
| + | metoda tone(): | ||
| + | |||
| + | Code snippet din funcția playSong(): | ||
| + | |||
| + | int wholenote = (60000 * 4) / 140; | ||
| + | int divider = 0, noteDuration = 0; | ||
| + | for (int thisNote = 0; thisNote < size * 2 && !pause; thisNote = thisNote + 2) { | ||
| + | lightMatrix(val); | ||
| + | divider = melody[thisNote + 1]; | ||
| + | if (divider > 0) { | ||
| + | noteDuration = (wholenote) / divider; | ||
| + | } else if (divider < 0) { | ||
| + | noteDuration = (wholenote) / abs(divider); | ||
| + | noteDuration *= 1.5; | ||
| + | } | ||
| + | tone(BUZZER_PIN, melody[thisNote], noteDuration*0.9); | ||
| + | delay(noteDuration); | ||
| + | noTone(BUZZER_PIN); | ||
| + | lightMatrix(val); | ||
| + | } | ||
| + | |||
| + | Dacă este apăsat butonul de pauză, se setează un fapt care indică acest lucru și cântecul se oprește. Matricea de LED-uri | ||
| + | se updatează în funcția playSong() pentru a asigura sincronizarea cu cântecul. Dacă cântecul este oprit, pattern-ul de lumini | ||
| + | va continua într-un ritm predefinit. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| - | TBD | + | Pentru demo, ne vedem la PM Fair =) . |
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | TBD | + | Acest proiect a fost primul proiect hardware pe care l-am realizat și m-a ajutat foarte mult să-mi dezvolt abilitățile de lucru |
| + | cu hardware. Totodată, m-a ajutat să-mi dezvolt abilitățile de organizare și documentare a procesului de proiectare și dezvoltare. | ||
| ===== Download ===== | ===== Download ===== | ||
| - | TBD | + | Codul sursă se găsește aici: {{ :pm:prj2023:danield:musical_xmas_lights.zip }} |
| <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||