Differences

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

Link to this comparison view

pm:prj2023:dene:mp3player [2023/05/01 20:47]
andrei.buhnici [Descriere generală]
pm:prj2023:dene:mp3player [2023/05/29 21:28] (current)
andrei.buhnici [Download]
Line 14: Line 14:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-{{:​pm:​prj2023:​dene:​block_diagram.png?​nolink&​200|}}+{{:​pm:​prj2023:​dene:​block_diagram.png?​600|}}
  
  
Line 32: Line 32:
 </​note>​ </​note>​
  
 +{{:​pm:​prj2023:​dene:​proiect_pm_v2_page-0001-cpy.jpg?​600|}}
 +{{:​pm:​prj2023:​dene:​whatsapp_image_2023-05-18_at_17.36.37.jpeg?​500|}}
 ===== Software Design ===== ===== Software Design =====
 +Mediul de dezvoltare folosit a fost Arduino IDE.
  
 +**Biblioteci folosite:**
  
-<note tip> +- #include "​SoftwareSerial.h" ​-> pentru comunicarea seriala cu laptopul(mai mult pentru debugging si comunicarea cu modulul DFPlayer Mini;
-Descrierea codului aplicaţiei (firmware):​ +
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +
-  * 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>​+
  
-===== Rezultate Obţinute =====+- #include "​AltSoftSerial.h"​ -> pentru comunicarea seriala cu modulul de bluetooth;
  
-<note tip> +- #include "​DFRobotDFPlayerMini.h" -pentru functii special destinate controlului modulului DFPlayer Mini;
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
-===== Concluzii =====+- #include <​LiquidCrystal_I2C.h>​ -> pentru modulul I2C
  
-===== Download =====+**Implementare:​**
  
-<note warning>​ +- am definit un array de string-uri pentru numele artistului si al melodieideoarece nu pot sa citesc numele fisierelor ​.mp3 cu modulul DFPlayer Miniasa ca tin un indexpe care il incrementez si decrementez prin acest vector construit in ordinea fisierelor ​de pe cardul SD;
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ sursescheme, etcUn fişier README, un ChangeLogun 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 Alin331CC -> **:pm:prj2009:cc:dumitru_alin**. +- la fel este definit si un vector de durate(long) ce tine durata melodiei in milisecunde;​ 
-</​note>​+ 
 +- urmatoarele declarari sunt niste vectori de octeti destinati sa populeze complet o celula de pe LCD, folositi pentru afisarea unui progress bar al melodiei; 
 + 
 +- in setup() activez intreruperile pentru pinii in care am cele 5 butoane, incep comunicarile seriale, testez ca DFPlayer-ul raspunde si initializez si lcd-ul; 
 + 
 +- initial, am un flag de playerInitial pe true, cu ajutorul caruia voi afisa initial un mesaj de start pe LCD de genul : "​DFPlayer OnlinePress any button to continue";​ 
 + 
 +- la apasarea oricarui buton, cat si apasarea de pe telefon, va da play la prima melodie din lista, practic, va da start cu adevarat la mp3 player; 
 + 
 +- odata dat startul, pe prima linie a LCD-ului va fi afisat numele artistului alaturi de cel al melodiei, si daca nu incape se va face scroll la stanga la 500 de ms; 
 + 
 +- pe a doua linie de LCD va fi afisat un progress bar ce va spune cat mai este ramas din melodie; 
 + 
 +- urmatoarele instructiuni sunt niste verificari pe flag-uri setate de intreruperile de pe butoane care spun practic daca s-a facut comanda respectiva;​ 
 + 
 +- aceste flag-uri sunt folosite strict pentru a afisa pe lcd ce comanda a fost folosita si sunt prezente din cauza faptului ca orice cod legat de lcd as fi pus in intreruperi,​ indiferent daca le activez sau nu in interiorul unei intreruperi (no nested interrupts),​ bloca tot programul si cu un mic search pe arduino forums, dupa ce deja facusem metoda cu flags, recomanda folosirea flag-urilor;​ 
 + 
 +- dupa flag-uri este update-ul la progress bar care se va face daca player-ul nu este pus pe pauza, si exista acel track time - 2000, pentru a completa bara pana la final inainte ​de skip, deoarece altfel fix cand se face ultima completare se va trece si la urmatoarea melodie, si am vrut sa se vada totusi ca se completeaza;​ 
 + 
 +- iar la final se afla tratarea mesajelor primite de la modulul de bluetooth, ce citeste litere pana la newline, iar daca se trece peste 9 litere va printa Illegal word si va face flush la tot cuvantul retinut; 
 + 
 +- verific cu strcmp fiecare functionalitate prezenta si la butoane si apelez handlers pentru fiecare; 
 + 
 +- si intreruperile fac exact acelasi lucru, fiecare intrerupere,​ apeleaza handlers; 
 + 
 +- am cele 2 intreruperi de tip int(int0 si int1) atasate la comenzile de previous si pause, iar celelalte 3 functionalitati folosesc pcint; 
 + 
 +- toate intreruperile folosesc debouncere inainte sa apeleze handlers; 
 + 
 +- functiile de handle afiseaza diferite lucruri la serial monitor si la interfata de pe bluetooth(pe telefon), apeleaza o functie specifica bibliotecii de DFPlayer (next(), pause(), resume(), previous(), si cele de volum) seteaza anumite variabile(timp,​ indecsi) si flag-uri pentru modulul I2C si flag-uri folosite intre intreruperi;​ 
 + 
 +- functia ce elibereaza o linie de LCD scrie ' ' pe toate cele 16 caractere;​ 
 + 
 +- functia de scroll scrie doar pe linia 0 si afiseaza string-ul de la o litera(curr + 1) diferita la fiecare 500 de ms, iar dupa ce ajunge la final, afiseaza iar tot string-ul de la capat si porneste din nou cu parcurgerea;​ 
 + 
 +- functia de progress bar calculeaza procentajul de umplere pe care trebuie sa il afiseze din durata totala a melodiei, iar daca acest procentaj este intreg va umple un block intreg la pozitia cursorului, altfel va afisa restul de la impartirea cu 5, adica intre 1 si 4 linii dintr-un block(pentru asta erau array-urile de bytes, five fiind un block complet); 
 + 
 +===== Rezultate Obţinute ===== 
 +{{:pm:prj2023:​dene:​whatsapp_image_2023-05-25_at_22.09.20.jpeg?600|}} 
 +{{:pm:​prj2023:​dene:​whatsapp_image_2023-05-25_at_22.12.09.jpeg?600|}} 
 +{{:pm:prj2023:​dene:​whatsapp_image_2023-05-25_at_22.12.09(1).jpeg?600|}} 
 +{{:pm:​prj2023:​dene:​whatsapp_image_2023-05-25_at_22.12.10.jpeg?600|}} 
 +{{:pm:​prj2023:​dene:​whatsapp_image_2023-05-25_at_22.12.10(1).jpeg?​600|}} 
 + 
 + 
 +===== Concluzii ===== 
 +A fost un proiect interesant si fun de lucrat. Au fost extrem de multe batai de capmai ales cu interuperile si cum interactioneaza acestea cu anumite bilbioteci si componente, si DFPlayer-ul care este un modul ieftin si prost LOL care nu poate sa citeasca fisierele si e extrem de special cand vine vorba de ordinea in care sunt puse pe cardul SD, dar macar acum o sa stiu sa ma feresc de chestii de genul. Overall mi-a placut sa lucrez la proiect, a fost foarte fun sa pun mana sa fac ceva si chiar sa iasa. 
 +===== Download ===== 
 +{{:pm:prj2023:dene:cod_proiect_buhnici_andrei.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
  
 <note tip> <note tip>
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +01.05.2023 - Creare pagina ocw.
-</​note>​+
  
-===== Bibliografie/​Resurse =====+18.05.2023 - Etapa hardware.
  
-<​note>​ +25.05.2023 ​Etapa software + completare finala ocw.
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.+
 </​note>​ </​note>​
  
 +===== Bibliografie/​Resurse =====
 <​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>​
 +
 +- https://​github.com/​DFRobot/​DFRobotDFPlayerMini
 +
 +- https://​arduinogetstarted.com/​tutorials/​arduino-lcd-i2c
 +
 +- https://​lastminuteengineers.com/​i2c-lcd-arduino-tutorial/​
 +
 +- https://​wiki.dfrobot.com/​DFPlayer_Mini_SKU_DFR0299
 +
 +- https://​www.electronics-lab.com/​project/​mp3-player-using-arduino-dfplayer-mini/​
 +
 +- https://​www.optimusdigital.ro/​en/​audio/​1484-dfplayer-mini-miniature-mp3-player-module.html
 +
 +- https://​github.com/​Makuna/​DFMiniMp3
 +
 +- https://​howtomechatronics.com/​tutorials/​arduino/​arduino-and-hc-05-bluetooth-module-tutorial/​
 +
 +- https://​ardushop.ro/​ro/​home/​132-modul-bluetooth-hc-06-cu-3-pini.html
 +
 +- https://​www.makerguides.com/​arduino-and-hc-05-bluetooth-module-complete-tutorial/​
 +
 +- laboratoare ocw
  
  
pm/prj2023/dene/mp3player.1682963261.txt.gz · Last modified: 2023/05/01 20:47 by andrei.buhnici
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