Riprodurre file Audio con Arduino Uno, senza shield

Ciao!


In questo post spremeremo a fondo il nostro Arduino Uno, facendogli riprodurre file audio senza neanche uno shield!
Infatti sfruttando solo la capacità di calcolo del piccolo Atmega328 sarà possibile leggere una traccia da una scheda SD e riprodurla da un piccolo speaker.






Ovviamente date le prestazioni del microcontrollore la qualità non potrà essere elevatissima, ma è comunque molto buona (più di quanto mi aspettavo!) e validissima per svariate applicazioni.

Ecco un esempio:





Questo è lo schema da realizzare, come potete vedere è diviso in 2 blocchi (le due breadboard), una contiene la parte di lettura dalla scheda SD, nell'altra invece c'è la parte di amplificazione del segnale audio.




Ed ecco lo sketch da caricare, è lo sketch di esempio che trovate anche sotto "File", "Esempi", "TMRpcm", "music" che ho leggermente modificato e tradotto.

Prima di poter utilizzare lo sketch dovrete scaricare ed installare (copiando nella cartella "Libraries" del vostro IDE) questa libreria.


Ora non vi resta che caricare nella SD un brano che dovrà essere convertito per avere caratteristiche ben precise.
Per fare ciò è possibile utilizzare un software per l'audio editing che si chiama Audacity.
Il programma è open source, ed è scaricabile da qui.


Per modificare il brano che volete sentire con Arduino aprite Audacity, trascinate all'interno il vostro file (mp3 o altro) ed eseguite i seguenti step:

  • Cliccate sul menu "tracce" poi "da stereo a mono"
  • In basso cambiate la "frequenza progetto", sono utilizzabili le frequenze 11025, 16000, 22050 o 32000 Hz
  • ora salvate il brano cliccando su "file", "esporta audio"
    • Salva come: "Altri file non compressi"
    • Intestazione: "Wav"
    • Codifica: "Unsigned 8-bit PCM" 
    • Nome file: "music" (non deve avere nessuna estensione)
Una volta ottenuto il file copiatelo nella root della scheda micro SD (non so dirvi se ci sono dei limiti di capacità, io ne uso una da 2gb formattata in FAT32).
Inserite la card nell'adattatore collegato ad Arduino, alimentatelo (la musica partirà!) ed avviate il serial monitor (impostate la velocità nel serial monitor a 115200 baud).

Come potete vedere in fondo allo sketch ci sono dei comandi che potete utilizzare anche mentre il brano è in esecuzione (ad esempio con il "-" abbasseremo il volume, con il "=" lo aumenteremo, aumentandolo troppo il segnale si distorcerà).


Per maggiori informazioni vi rimando alla Wiki di questa fantastica libreria.
Per domande e chiarimenti su questo tutorial lasciate un commento qui sotto,
ciao!

Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

29 commenti:

  1. Spettacolo!, appena riesco faccio il medesimo tuo test!

    RispondiElimina
  2. ciao Daniele, oggi ho provato a fare questo progetto ma non funziona correttamente, la scheda la legge, ma il led lampeggia fisso a circa 1 Hz e non c'è nessun suono.
    sai dove potrebbe essere il problema?
    grazie.

    RispondiElimina
    Risposte
    1. Ciao, il problema potrebbe essere la traccia audio, assicurati di averla convertita in modo corretto, fammi sapere!

      Elimina
  3. ho provato svariate volte ad rieseguire la procedura ma niente, ho notato una cosa pero il formato audio è AIFF, è normale?

    RispondiElimina
  4. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  5. Ora funziona perfettamente!!!!!
    grazie per il supporto.

    RispondiElimina
  6. Complimenti per il tutorial, spiegato davvero molto bene.
    Ho solo una domanda, io al posto della SD ho la microSD e il relativo adattatore (con pin CS,SCK,MOSI,MISO,VCC e GND) mi sai dire se il tutto funziona nello stesso modo e se si come si collega? Grazie.

    RispondiElimina
  7. Si nessun problema, si collega tutto nello stesso modo. Ciao!

    RispondiElimina
    Risposte
    1. Grazie però il mio adattatore ha solo 6 pin, sai quale è quello che posso trascurare?

      Elimina
  8. ho appena comprato un paio di schede io ho un programmino che fa ruotare un motore dc avanti ed indietro con un ponte h e due interruttori.
    quando premo e tengo premuto il primo interruttore il motorino gira in un senso e si ferma appena rilascio con il secondo itterruttore ottengo lo stesso risultato nell'altra direzione. Mi servirebbe che il tasto premuto produca anche la riproduzione di un file sulla sd omeglio due file musicali chiamati dai due interruttori quando premuti...non so se sono stato chiaro spero che qualcuno mi aiuti se serve posso mandarvi lo sketch attuale (che faceva uso di una scheda audio non più funzinante e fuori produzione) grazie molte !!!

    RispondiElimina
  9. Scusami Daniele dimenticavo di ringraziarti !...
    Gianni (giovanni)

    RispondiElimina
  10. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  11. Qualcuno ha provato la riproduzione dei fonemi con questo metodo?

    RispondiElimina
  12. Buongiorno Daniele, mi sto cimentando a costruire il riproduttore per montarlo su un presepe.
    Questa è la prima volta che uso Arduino e che mi avventuro in queste cose, ho nozioni base di elettronica (so distinguere una resistenza da un diodo e so cos'è un condensatore) però non ci capisco un H di programmazione.
    Sul tuo circuito è possibile aggiungere dei pulsanti tipo Play - Stop - traccia successiva - Traccia precedente e al limite il volume + / - ?
    Ti ringrazio.

    RispondiElimina
  13. Ciao Daniele e complimenti! E'possibile modificare il codice in modo da far riprodurre ad Arduino dei file (sempre da SD) in base a determinati eventi e non intendo pressione di pulsanti bensì un sensore che rileva un movimento ad esempio...?
    Grazie!

    RispondiElimina
  14. Ciao Daniele, vorrei realizzare il tuo circuito, ma non riesco a capire cosa collega il ponticello nero posto tra la resistenza R3 e il condensatore C1.
    Grazie

    RispondiElimina
    Risposte
    1. Ciao Giovanni,
      quel ponticello é un errore, lo rimuoveró il prima possibile.
      Grazie per la segnalazione!

      Elimina
  15. Ciao Daniele, complimenti per il progetto!
    Mi chiamo Antonio e da poco tempo mi sono avvicinato al mondo di Arduino.
    Ho caricato il tuo sketch ma mi da errore!!!
    Te lo posto:
    27:22: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    tmrpcm.play("music");

    Riusciresti ad aiutarmi?
    Grazie

    RispondiElimina
  16. Sto avendo il tuo stesso problema ma non riesco a risolverlo

    RispondiElimina
  17. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  18. ciao, ho sotto mano uno di quegli amplificatori con LM386 (questo per capirsi : https://www.amazon.it/Denash-Moduli-amplificatori-guadagna-Scheda/dp/B07WRS76K2/ref=sr_1_3?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=lm386&qid=1588984096&sr=8-3).
    Riesco comunque ad utilizzarlo per riprodurre audio con Arduino? se si, mi mostri come sarebbe lo schema elettrico? grazie

    RispondiElimina
  19. Ciao, complimenti per la dimostrazione... Una domanda è possibile attivare più messaggi vocali uno ad ogni ingresso?

    RispondiElimina
  20. Ciao Daniele volevo sapere se potevi mandarmi la lista dei componenti che hai utilizzato perché dal video non riesco a capirlo bene grazie

    RispondiElimina
  21. Ciao Daniele volevo sapere se potevi mandarmi la lista dei componenti che hai utilizzato perché dal video non riesco a capirlo bene grazie

    RispondiElimina
  22. Ciao Daniele volevo sapere se potevi mandarmi la lista dei componenti che hai utilizzato perché dal video non riesco a capirlo bene grazie

    RispondiElimina
  23. Ciao Daniele senti volevo sapere se potevi darmi una lista di tuitti i componenti perché dal video non capisco molto bene tutto quello che ci vuole?

    RispondiElimina
  24. Ciao Daniele,
    complimenti per questo grande lavoro
    Ho provato a riprodurlo ma mi fa da stazione radio ovvero untercetta le frequenze in giro e me le fa sentire. Non riesco a capire qualle sarebbe il problema (legge il contenuto della scheda SD come me lo fa sapre la seriale di arduino ma non me lo fa sentire tramite speaker) avresti qualche suggerimento !?!
    Cordialmente
    Carles

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post