This shows you the differences between two versions of the page.
pm:prj2022:arosca:cutie-muzicala [2022/05/27 15:18] idumitrescu [Hardware Design] |
pm:prj2022:arosca:cutie-muzicala [2022/05/27 22:19] (current) idumitrescu [Rezultate Obţinute] |
||
---|---|---|---|
Line 26: | Line 26: | ||
{{ :pm:prj2022:arosca:schema_electr_2_cutie_muzicala.png?700 |}} | {{ :pm:prj2022:arosca:schema_electr_2_cutie_muzicala.png?700 |}} | ||
{{ :pm:prj2022:arosca:schema_electrica_cutie_muzicala.png?700 |}} | {{ :pm:prj2022:arosca:schema_electrica_cutie_muzicala.png?700 |}} | ||
- | <note tip> | + | Asa cu se poate observa si in snippet-ul adaugat, am legat fiecare componenta la pinii placii arduino folosindu-ma de un breadboard. |
+ | * Potentiometrul a fost legat in serie cu buzzer-ul, deoarece el actioneaza ca un rezistor variabil ce, la momentul cresterii rezistentei, scade tensiunea pentru buzzer, modificandu-i astfel volumul. | ||
+ | * Matricea 4x4 de butoane detine cate un pin aferent ficarei linii, respectiv coloane. | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | ===Medii de dezvoltare folosite=== | ||
+ | * Fritzing - pentru schema electrica | ||
+ | * Arduino 1.8.13 | ||
- | <note tip> | + | ===Librarii si surse 3rd party=== |
- | Descrierea codului aplicaţiei (firmware): | + | * Keypad.h => Biblioteca ce cuprinde declaratia keypad-ului si functia de mapare a acestuia |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Servo.h => Biblioteca ce cuprinde declaratia servomotorului si a functiei de write pe acesta |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
+ | ===Surse si functii implementate=== | ||
+ | * In fisierul "notes.h" - am definit toate notele muzicale, precum si 16 melodii si durata acestora pentru a putea fi redate cu ajutorul | ||
+ | functiei de redare. | ||
+ | * play_piece() - In aceasta functie, se parcurge vectorul de note muzicale aferent melodiei si este redata fiecare dintre acestea cu durata corespunzatoare din vectorul de durate. Inainte de fiecare redare, se verifica daca nu cumva valoarea senzorului s-a schimbat (daca da, intreg sistemul se intrerupe) sau daca s-a apasat vreun buton ce implica schmbarea melodiei. Tot aici,pe fiecare nota, servomotorul isi schimba pozitia cate putin, acesta realizand treptat o miscare 0-180 grade si inapoi. | ||
+ | <code> | ||
+ | void play_piece(int pin, int *melody, int *duration, int length) { | ||
+ | for (int i = 0; i < length; ++i) { | ||
+ | int Sensordata = digitalRead(LDRSENSOR_PIN); | ||
+ | if(Sensordata == 1) { | ||
+ | break; | ||
+ | } | ||
+ | char key; | ||
+ | while(key = kpd.getKey()) { | ||
+ | change_song(key); | ||
+ | } | ||
+ | | ||
+ | Servo1.write(posServo); | ||
+ | if(posServo == 180) { | ||
+ | direction = -1; | ||
+ | } else if(posServo == 0) { | ||
+ | direction = 1; | ||
+ | } | ||
+ | | ||
+ | if(direction == 1) { | ||
+ | posServo+=10; | ||
+ | } else { | ||
+ | posServo-=10; | ||
+ | } | ||
+ | tone(pin, melody[i], duration[i]); | ||
+ | delay(duration[i]); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | * change_song() - reda o alta melodie in functie de butonul apasat dintre cele 16 | ||
+ | * setup() - setez pinii folositi ca fiind de input/output | ||
+ | * loop() - citesc valorea de la senzorul de lumina si, daca arata ca este capacul inchis (intensitatea luminii este scazuta), atunci intregul sistem se opreste. Daca nu, atunci apeleaza functia care reda melodia si actioneaza servomotorul. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | + | ===Demo=== | |
- | <note tip> | + | https://youtu.be/iaVMPVLegz0 |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | ===Galerie foto=== |
- | </note> | + | {{ :pm:prj2022:arosca:cutiemuzicala4.jpeg?800 |}} |
+ | {{ :pm:prj2022:arosca:cutiemuzicala1.jpeg?800 |}} | ||
+ | {{ :pm:prj2022:arosca:cutiemuzicala2.jpeg?800 |}} | ||
+ | {{ :pm:prj2022:arosca:cutiemuzicala3.jpeg?800 |}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Proiectul meu a fost realizat in intregime, toate functionalitatile fiind implementate si adaugandu-i si un aspect estetic placut pentru a ajuta la scopul sau final, recreativ si, totodata, decorativ. | ||
+ | Realizarea proiectului a reprezentat ceva inedit, o experienta hands-on unde rezultatele sunt fizice, iar device-ul creat chiar are o utilitate. Am realizat ca imi place sa petrec timpul lucrand cu microprocesoare si mi-ar placea sa elaborez si alte poriecte in viitor. | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2022:arosca:cutie_muzicala_teodora_dumitrescu.zip|}} | ||
- | <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**. | ||
- | </note> | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | + | * 21.04.2022: Realizarea schemei bloc si introducerii proiectului | |
- | <note tip> | + | * 03.05.2022: Inceperea proiectului |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 25.05.2022: Finalizarea functionala a proiectului |
- | </note> | + | * 27.05.2022: Finalizarea aspectului estetic si a paginii de ocw wiki |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | ===Resurse hardware=== |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://solarianprogrammer.com/2017/01/31/arduino-buzzer-player-adjustable-volume-playing-fur-elise-beethoven/ |
- | </note> | + | |
+ | https://www.electroduino.com/ldr-sensor-module-how-ldr-sensor-works/ | ||
+ | ===Resurse software=== | ||
+ | https://docs.arduino.cc/learn/electronics/servo-motors | ||
+ | |||
+ | https://www.arduinolibraries.info/libraries/music-buzzer - colectia de melodii pentr buzzer | ||
+ | |||
+ | https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody | ||
+ | |||
+ | https://playground.arduino.cc/Main/KeypadTutorial/ | ||
+ | |||
+ | https://playground.arduino.cc/Code/Keypad/#Download | ||
<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> | ||