This shows you the differences between two versions of the page.
pm:prj2023:drtranca:stefan.pantucu [2023/05/21 19:27] stefan.pantucu |
pm:prj2023:drtranca:stefan.pantucu [2023/05/28 21:49] (current) stefan.pantucu [Rezultate Obţinute] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Music Player ====== | ====== Music Player ====== | ||
+ | |||
+ | <note tip> | ||
+ | Nume: Panțucu Ștefan-Alexandru\\ | ||
+ | Grupa: 333CB | ||
+ | </note> | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 29: | Line 34: | ||
{{ pm:prj2023:drtranca:schema_electrica_stefan_pantucu.jpg?700 |}} | {{ pm:prj2023:drtranca:schema_electrica_stefan_pantucu.jpg?700 |}} | ||
- | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
- | * diagrame de semnal | ||
- | * rezultatele simulării | ||
- | </note> | ||
+ | === Rezultat final: === | ||
+ | {{ pm:prj2023:drtranca:hardware_setfan_pantucu.jpeg?700 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | ==== Mediul de dezvoltare ==== | ||
+ | |||
+ | Pentru scrierea codului necesar implementarii proiectului am folosit Arduino IDE. | ||
+ | |||
+ | ==== Biblioteci folosite ==== | ||
+ | * LiquidCrystal_I2C -> pentru comunicarea cu ecranul LCD prin intermediul modulului I2C | ||
+ | * TMRpcm -> pentru speaker | ||
+ | * SD -> pentru cardul SD | ||
+ | * SPI -> pentru cardul SD | ||
+ | |||
+ | ==== Modul de functionare ==== | ||
+ | |||
+ | In metoda de setup se initializeaza pinii folositi pentru butoane, se initalizeaza citirea de pe cardul SD, | ||
+ | selectand pin-ul de CS folosit, se citeste continutul din radacina cardului SD pentru a determina numarul total de melodii, | ||
+ | se initializeaza speaker-ul pe pinul ales, cat si volumul si calitatea, iar apoi se initializeaza si ecranul LCD, urmand sa se | ||
+ | afiseze un mesaj de bun venit. Dupa 3 secunde, prima melodie disponibila va incepe sa cante. | ||
+ | |||
+ | In loop se citeste inputul pe fiecare din cele 3 butoane si se actioneaza in conformitate cu actiunea ce a avut loc (se trece la melodia anterioara, se pune pauza sau se reia redarea sau se trece la melodia urmatoare). In cazul in care nicio melodie nu este in desfasurare sau melodia curenta s-a terminat, se va trece la melodia urmatoare. | ||
+ | |||
+ | Melodiile sunt stocate pe card in formatul <index>.wav, 0 <= index < numarul de melodii. Deoarece citirea de pe card functioneaza doar daca file systemul folosit este FAT32, care permite ca numele fisierelor sa aiba cel mult 8 caractere 8-o, mi-am dat seama ca daca vreau sa afisez numele artistului si al melodiei, trebuie sa gasesc o alta solutie. Astfel, fiecarei melodii ii corespunde un fisier <index>.in in care se gaseste pe primul rand numele melodiei, iar pe al doilea numele artistului. In momentul in care se apeleaza functia playSong(index), mai intai este apelata functia displaySong(index), care compune numele fisierului de intrare pentru a citi datele despre melodie de pe card, pentru a le putea afisa pe ecran. Apoi, revenind in playSong, se compune numele melodiei si se apeleaza metoda play() cu numele fisierului. | ||
+ | |||
+ | ==== Extra ==== | ||
+ | |||
+ | Am scris un script de bash care ia toate fisierele cu extensia .mp3 si folosind ffmpeg, le converteste in format .wav pentru a putea fi redate de catre arduino prin speaker. Acest script creeaza si fisierele de input cu datele despre melodie. Singura conditie inainte de rularea scriptului este ca melodiile sa fie in formatul "NumeMelodie;NumeArtist.mp3" pentru ca datele sa fie afisate corect pe ecranul lcd. | ||
- | <note tip> | ||
- | 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 ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | [[https://youtu.be/gFPt4ypNxlk]] |
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost o experienta interesanta sa lucrez la acest proiect si chiar daca poate nu este cel mai complicat, a fost rewarding sa il vad terminat. Am trecut prin diverse probleme de-a lungul implementarii, de la formatul potrivit atunci cand converteam melodiile din mp3 in wav, la probleme cu bouncing-ul la butoane sau faptul ca am crezut ca nu functioneaza modulul pentru cardul SD, dar de fapt pinii erau scrisi gresit pe placuta m(. | ||
+ | |||
+ | O provocare a fost afisarea datelor despre melodie pe ecran, data fiind limitarea provocata de FAT32, insa cred ca am gasit un workaround destul de dragut (descris mai sus), care te scuteste de introducuerea manuala a datelor in prealabil. | ||
===== Download ===== | ===== Download ===== | ||
- | <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> | ||
+ | {{ pm:prj2023:drtranca:stefan_pantucu_333cb_proiect_pm.zip }} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 73: | Line 89: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://reference.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ |
+ | |||
+ | https://reference.arduino.cc/reference/en/libraries/tmrpcm/ | ||
+ | |||
+ | https://www.arduino.cc/reference/en/libraries/sd/ | ||
</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> | ||