This shows you the differences between two versions of the page.
pm:prj2024:azamfir:oana_maria.bacaran [2024/05/26 16:31] oana_maria.bacaran |
pm:prj2024:azamfir:oana_maria.bacaran [2024/05/27 14:28] (current) oana_maria.bacaran |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Introducere ===== | ===== Introducere ===== | ||
<note tip> | <note tip> | ||
- | * Autor: Oana Maria Băcăran \\ | + | * Autor: Oana Maria Băcăran |
- | * Grupa: 334CB | + | * Grupa: 334CB |
</note> | </note> | ||
<note> | <note> | ||
Line 49: | Line 49: | ||
* LM385: acesta are nevoie de un pin de input pentru speaker si foloseste pinul D46 | * LM385: acesta are nevoie de un pin de input pentru speaker si foloseste pinul D46 | ||
* Butoanele: folosesc pinii digitali 5,6,7,8,9 | * Butoanele: folosesc pinii digitali 5,6,7,8,9 | ||
+ | \\ | ||
+ | **Componentele conectate:**\\ | ||
+ | {{:pm:prj2024:azamfir:imagine_circuit.jpg?800|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 190: | Line 193: | ||
} | } | ||
</code> | </code> | ||
+ | In functia de setup, se initializeaza butoanele la INPUT_PULLUP, este deschis fisierul ce stocheaza audio-urile, este initializat isd-ul si display-ul si se verifica daca nu cumva un buton este apasat in timpul setup-ului. | ||
Pentru cititorul de card SD, am formatat cardul de 1GB in format FAT, iar fisierele le-am convertit in format .wav cu setarile: Samples Per second (Hz): 16000, Channel: Mono, Bits Per Sample: 8PCM, format: PCM unsigned 8-bit. | Pentru cititorul de card SD, am formatat cardul de 1GB in format FAT, iar fisierele le-am convertit in format .wav cu setarile: Samples Per second (Hz): 16000, Channel: Mono, Bits Per Sample: 8PCM, format: PCM unsigned 8-bit. | ||
\\ | \\ | ||
Line 195: | Line 199: | ||
**Implementare:**\\ | **Implementare:**\\ | ||
Functia loop():\\ | Functia loop():\\ | ||
+ | In functia loop, se afla tratarea cazurilor in care apasam unul din cele 5 butoane. Pentru music player, daca apasam unul din butoanele previous sau next, cu functia playAudio ne vom muta la anteriorul, respectiv urmatorul audio, scazand sau adunand 1 la indexul audio-ului curent. Audio-urile pot fi accesate in loop (cand ultima melodie va fi redata ne putem intoarce la prima) si vom selecta de fiecare data cand apasam aceste butoane o animatie random cu functia selectRandomAnimation(). Apasam butonul play pentru a da start primei melodii dupa setup, dar si pentru a intrerupe melodia. Cand melodia se termina, ecranul se va opri de asemenea. Pentru a da replay, apasam tot butonul play. Pentru a realiza efectul de debounce, am dat un mic delay. Cat timp o melodie este in desfasurare, nu ne putem inregistra vocea, si viceversa. \\ | ||
+ | Pentru partea de inregistrare si redare a ceea ce spunem, apasam butonul rec cat timp vorbim. In timp ce vorbim, o animatie se va derula. Apasam butonul play recording pentru derularea inregistrarii. O animatie de 4 secunde se va declansa cand vom apasa acest buton. | ||
<code cpp> | <code cpp> | ||
void loop() { | void loop() { | ||
Line 315: | Line 321: | ||
Functia numberAudios(): | Functia numberAudios(): | ||
+ | Pentru a numara cate audio-uri avem in directorul root, parcurgem fiecare fisier din director si verificam daca string-ul format din numele fisierului se termina in extensia .wav .Daca da, marim contorul. | ||
<code cpp> | <code cpp> | ||
int numberAudios(File dir) { | int numberAudios(File dir) { | ||
Line 334: | Line 341: | ||
Functia playAudio(): | Functia playAudio(): | ||
+ | Reda audio-ul cu index-ul curent, opriind orice alt audio care s-ar derula in acel moment. | ||
<code cpp> | <code cpp> | ||
void playAudio(int index) { | void playAudio(int index) { | ||
audio.stopPlayback(); | audio.stopPlayback(); | ||
+ | |||
+ | // make the name of the file | ||
songIdx = index; | songIdx = index; | ||
char fileName[FILENAME_SIZE]; | char fileName[FILENAME_SIZE]; | ||
Line 347: | Line 356: | ||
Functia selectRandomAnimation(): | Functia selectRandomAnimation(): | ||
+ | Alege un numar din 3 si, in functie de numarul ales, reda o animatie. | ||
<code cpp> | <code cpp> | ||
void selectRandomAnimation() { | void selectRandomAnimation() { | ||
Line 368: | Line 378: | ||
Functia updateAnimation(): | Functia updateAnimation(): | ||
+ | Aceasta șterge ecranul, desenează cadrul curent al animației, actualizează ecranul pentru a afișa noul cadru, avansează la următorul cadru și introduce o pauză scurtă pentru a controla viteza animației. % FRAME_COUNT asigură că, dacă frame_music ajunge la FRAME_COUNT, acesta revine la 0 (creând o animație în buclă). | ||
<code cpp> | <code cpp> | ||
void updateAnimation() { | void updateAnimation() { | ||
Line 385: | Line 396: | ||
} | } | ||
</code> | </code> | ||
+ | \\ | ||
+ | ** Optimizări: **\\ | ||
+ | Am mutat variabilele constante care stocau animatiile in PROGMEM. \\ | ||
+ | ** Probleme intampinate: **\\ | ||
+ | Codul a fost prea mare in ciuda optimizarilor, nu am mai avut loc pe memoria flash pe placuta Arduino Uno. Solutia cea mai smart si rapida a fost sa schimb placuta cu Arduino Mega, unde totul a mers smooth. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | + | Am reusit sa realizez o jucarie draguta pentru copii, care poate si sa cante si sa repete tot ce spui. De asemenea, animatiile variate adauga dinamism proiectului. Tot ce mai trebuie terminat este carcasa din carton a robotelului (voi pune poze, lipiciul dureaza cam mult sa se usuce :-D ).\\ | |
- | <note tip> | + | [[https://youtu.be/oykXTy-1w_U]]\\ |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Update:\\ |
- | </note> | + | {{:pm:prj2024:azamfir:robot_gata.jpg?400|}} |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost un proiect interesant, aparte de temele pe care le-am realizat pana acum. Desi acest proiect a venit si cu stresul constant ca piesele mi se pot defecta sau ca pot veni deja defecte (inca mai am aceasta spaima pana voi prezenta la PM fair), m-am distrat cel mai mult la partea de scris cod si de implementat functionalitati diverse, iar sentimentul pe care l-am avut la final, cand am vazut ca merge ce mi-am propus, a fost unul satisfacator. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | {{:pm:prj2024:azamfir:tom.zip|}} |
- | 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 ===== | ||
Line 408: | Line 421: | ||
06 mai - achizitionare piese \\ | 06 mai - achizitionare piese \\ | ||
09-10 mai - primire piese \\ | 09-10 mai - primire piese \\ | ||
- | 14-17 mai - realizare asamblare hardware \\ | + | 14-16 mai - realizare asamblare hardware \\ |
- | 21-24 mai - scrierea codului | + | 23 mai - achizitionarea unor elemente noi \\ |
+ | 21-25 mai - scrierea codului \\ | ||
+ | 26 mai - realizarea robotelului de carton | ||
</note> | </note> | ||
Line 415: | Line 431: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | **Datasheet:**\\ |
+ | [[https://docs.arduino.cc/resources/datasheets/A000067-datasheet.pdf|Arduino ATmega2560 Datasheet]] \\ | ||
+ | **Resurse Software:** \\ | ||
+ | [[https://animator.wokwi.com/|Animations]] \\ | ||
+ | [[https://www.instructables.com/Music-Player-Using-Arduino/|Music player inspiration]] \\ | ||
+ | **Resurse Hardware:** \\ | ||
+ | [[https://www.instructables.com/Music-Player-Using-Arduino/|CardSD setup]] \\ | ||
+ | [[https://www.youtube.com/watch?v=o3PhC_VJdXo&t=16s|OLED setup]] \\ | ||
+ | [[https://www.electronicshub.org/interfacing-isd1820-voice-recorder-module-with-arduino/|ISD setup]] | ||
</note> | </note> | ||
<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> | ||