Audio Player

Autor: Anghel Cristiana-Andreea

Introducere

Proiectul constă în implementarea unui audio player care redă piese de pe un card SD precum un dispozitiv MP3.

Descriere generală

Plăcuța Arduino Uno va fi conectată la un ecran pe care va afișa detaliile melodiei și un difuzor pentru redarea melodiei.
Dispozitivul va îndeplini următoarele funcții:

  • next/back (2 butoane)
  • play/pause (1 buton)
  • volume up/down (potențiometru)

Dacă piesa se termină, player-ul va trece la următoarea. Player-ul va funcționa în modul “repeat all songs”. Componentele vor fi conectate cu ajutorul firelor și breadboard-ului.

Hardware Design

Piese necesare

  • Arduino Uno + adaptor USB
  • Difuzor 8ohmi 2W
  • Breadboard 830 de puncte
  • LCD 1602
  • Modul I2C pentru LCD
  • ~25x Fire mamă-tată și tată-tată
  • 3x Butoane 6x6x6
  • Potențiometru 10k
  • Cititor card SD Arduino
  • 3x Rezistențe 1k
  • Card SD 4Gb

Schema Electrică

Software Design

Codul sursă se găsește mai jos în secțiunea Download.

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

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

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

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/

pm/prj2021/apredescu/audioplayer.txt · Last modified: 2021/06/04 22:22 by cristiana.anghel99
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