Differences

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

Link to this comparison view

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>​
  
pm/prj2024/azamfir/oana_maria.bacaran.1716730271.txt.gz · Last modified: 2024/05/26 16:31 by oana_maria.bacaran
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