This shows you the differences between two versions of the page.
pm:prj2021:apredescu:audioplayer [2021/06/04 16:30] cristiana.anghel99 [Hardware Design] |
pm:prj2021:apredescu:audioplayer [2021/06/04 22:22] (current) cristiana.anghel99 [Jurnal] |
||
---|---|---|---|
Line 26: | Line 26: | ||
* 3x Rezistențe 1k | * 3x Rezistențe 1k | ||
* Card SD 4Gb | * Card SD 4Gb | ||
- | === Schema Electrica === | + | === Schema Electrică === |
{{:pm:prj2021:apredescu:anghel_cristiana_schema_electrica.png?nolink&650|}} | {{:pm:prj2021:apredescu:anghel_cristiana_schema_electrica.png?nolink&650|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | <note tip>Codul sursă se găsește mai jos în secțiunea Download.</note> | ||
+ | Pentru a programa playerul, am folosit următoarele biblioteci și funcții: | ||
+ | * <SD.h> | ||
+ | * SD.begin(sd_pin) - initializarea cardului SD | ||
+ | * <SPI.h> - pentru comunicarea MISO/MOSI a cititorului de card | ||
+ | * <TMRpcm.h> - pentru redarea melodiilor | ||
+ | * var.speakerPin - pin pwm pentru redare audio | ||
+ | * var.setVolume(0...7) - setarea volumului (6,7 sunt prea mari) | ||
+ | * var.play("song.wav") - redarea melodiei song.wav de pe card | ||
+ | * var.pause() - pune pauză sau reîncepe redarea melodiei | ||
+ | * var.isPlaying() - 0 înseamnă că nu este redată o melodie, 1 înseamnă că da | ||
+ | * <LiquidCrystal_I2C.h> - biblioteca pentru modulul I2C și LCD | ||
+ | * lcd.init() - inițializare lcd | ||
+ | * lcd.backlight() - pornește lumina de fundal | ||
+ | * lcd.setCursor(0, 1) - setează cursorul la poziția 1 (0) pe rândul 2 (1) | ||
+ | * lcd.print("ceva"); - de la poziția cursorului afișează ceva | ||
+ | |||
+ | Programul începe prin redarea primei melodii selectate. După ce o melodie se termină, playerul o va reda pe următoarea. Butoanele funcționează printr-o singură apăsare. De exemplu la prima apăsare a butonului de pauză se va pune pauză, dacă este apăsat iar va pune play. La o singură apăsare a butonului de next/back playerul va trece la următoarea/anterioarea melodie. | ||
+ | Dacă playerul este pe pauză pe o melodie și este apăsat next/back, playerul începe redarea imediată a următoarei/anterioarei melodii, ieșind de pe starea de pauză. | ||
+ | |||
+ | Când playerul se află în starea play, pe primul rând al lcd-ului va fi afișat: "Now playing...", iar pe starea pause: " Paused ". | ||
+ | Pe al 2-lea rând va fi afișat numele melodiei redate (pe pauză sau nu). Pentru a afișa numele corect am creat un vector de chars, în care păstrez numele melodiilor citite de SD (nume diferit de numele original, datorită bibliotecii SD.h care nu afișează numele întreg) și în funcție de index-ul melodiei redate afișez numele melodiei. Astfel, pentru redarea altor melodii este necesară modificarea vectorului *song și afișării în funcție de index. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | {{:pm:prj2021:apredescu:anghel_cristiana_playing.jpg?nolink&600|}} | ||
- | ===== Concluzii ===== | + | {{:pm:prj2021:apredescu:anghel_cristiana_paused.jpg?nolink&600|}} |
+ | <note>Demo video al proiectului:\\ | ||
+ | [[https://drive.google.com/file/d/1T4CmCLEWcBvFQ-jFhYTFF0-_1b3BKT4G/view?usp=sharing]]</note> | ||
+ | ===== Concluzii ===== | ||
+ | A fost o experiență interesantă să sudez piese(nu credeam că voi face asta vreodată) și să construiesc un proiect atât pe partea hardware cât și pe cea software.\\ | ||
+ | În ciuda problemelor cu piese greșite (SD shield) și conexiunile foarte sensibile care m-au încurcat la testare, m-am bucurat de proiectul obținut.\\ | ||
+ | Cel mai mult mi-a plăcut să lucrez cu modulul I2C și LCD-ul cu biblioteca LiquidCrystal_I2C.h. | ||
===== Download ===== | ===== Download ===== | ||
+ | [[https://ocw.cs.pub.ro/courses/pm/prj2021/apredescu/audioplayer?do=export_pdf|Download pdf documentation]] | ||
+ | {{:pm:prj2021:apredescu:anghel_cristiana_cod.txt|Download arduino code}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
+ | 17.05.2021: Dau comanda de piese.(inițial aveam un SD shield)\\ | ||
+ | 18.05.2021: Ajung piesele.\\ | ||
+ | 24.05.2021: Dau comanda de kit pentru sudat.\\ | ||
+ | 26.05.2021: Ajunge kit-ul și sudez modulul I2C la LCD, gnd și power(2 fire tată-tată) la difuzor și pinii la SD shield.\\ | ||
+ | 27.05.2021: Testez piesele și merg toate, înafara de SD shield care recunoaște cardul dar nu și partiția/fișierele.\\ | ||
+ | 28-29.05.2021: Continui sa formatez SD shieldul în diferite moduri și să folosesc diferite biblioteci pentru Arduino SD (ex: SDfat). Fără success.\\ | ||
+ | 02.06.2021: Cumpăr cititor microSD și testez că merge.\\ | ||
+ | 03.06.2021: Programez partea de butoane și logica redării.\\ | ||
+ | 04.06.2021: Realizez schema electrică în Eagle și termin documentația. | ||
===== Bibliografie/resurse ===== | ===== Bibliografie/resurse ===== | ||
- | [[https://ocw.cs.pub.ro/courses/pm/prj2021/apredescu/audioplayer?do=export_pdf|Download pdf]] | + | Pentru a reda melodiile de pe SD card și pentru a conecta cititorul:\\ |
+ | [[https://steemit.com/utopian-io/@kimp0gi/playing-music-in-arduino-using-sd-card-module]] | ||
+ | |||
+ | Pentru a verifica starea de pause/unpause și citirea unei singure apăsări de buton:\\ | ||
+ | [[https://roboticsbackend.com/arduino-turn-led-on-and-off-with-button/]] | ||
+ | |||
+ | Pentru a conecta și afișa cu ajutorul modulului I2C si LCD:\\ | ||
+ | [[https://www.instructables.com/How-to-Connect-I2C-Lcd-Display-to-Arduino-Uno/]] |