In questo articolo viene descritta la costruzione di uno shield per il modulo audio WTV020-SD.
Il modulo permette di riprodurre suoni o voci memorizzate su scheda MicroSD tramite Arduino.
Il PCB è stato progettato con il programma online EasyEDA, mentre stata realizzata tramite il servizio offerto dal sito JLCPCB.
Sito online per creazioni schemi e PCB | Sito produzione PCB |
Indice
Il modulo WTV020-SD
Se leggiamo il datasheet del modulo possiamo notare che può lavorare in svariate modalità: MP3, Key (3 group of voice), Key (5 group of voice), Loop play, Two line serial mode.
Di questo modulo è possibile trovare due versioni: WTV020-SD-20S o WTV020-SD-16P, il primo usa schede SD standard ed ha un connettore bifilare a passo ridotto, mentre il secondo, più comune, usa una Micro SD e presenta un package DIL a 16 piedini.
Un modulo simile è quello citato in questo articolo DFPlayer Mini Riproduttore MP3 per Arduino
Questi moduli sono relativamente facili da reperibile in rete, e hanno un costo molto contenuto.
Il modello che sarà utilizzato è il WTV020-SD-16P (datasheet) , e come detto, consente di leggere file audio da una scheda microSD e di trasmetterli con un semplice altoparlante.
Può essere utilizzato sia in modo autonomo con dei pulsanti esterni oppure associato a un controllore come Arduino mediante comunicazione seriale su 2 linee di input/output.
La scheda è estremamente compatta in quanto misura solo 20x18mm, il suo peso è di soli 5 gr, la sua impostazione “a circuito integrato” permette l’installazione su uno zoccolo o su una millefori.
Il cuore del circuito del modulo è l’integrato WTV020SD-20S prodotto dalla Waytronc Electronics Co.,Ltd
NOTA : anche se sul modulo è presente un Jumper che sembra permettere di selezionare l’alimentazione tra i valori di 3,3V o 5V, questa è impostata alla costruzione al valore di 3,3V.
Per maggiori informazioni vedere l’articolo Modulo audio WTV020-SD – Presentazione
Modalità Two line serial mode tramite Arduino
Per il collegamento ad Arduino viene utilizzata la modalità Two line serial mode. In questa modalità è possibile effettuare il comando del modulo tramite comandi inviati da Arduino, la gestione è facilitata dalla disponibilità di una libreria freeware in grado di controllare con pochissimi comandi questo modulo.
Il collegamento necessita di soli 4 segnali: Data, Clock, Reset e Busy.
Sotto è riportato lo schema base del datasheet del modulo
Schema elettrico dello shield per WTV020-SD
Sotto è riportato lo schema elettrico dello Shield per modulo audio WTV020-SD. Questo può essere esaminato accedendo al sito EasyEDA, dove è disponile un programma online. Ecco il link
Per conoscere meglio il programma, leggete anche gli articoli EasyEDA – Guida all’utilizzo del programma.
Sigla | Descrizione | Q.tà |
---|---|---|
U1 | WTV020SD-16P | 1 |
U2 | Arduino UNO R3 | 1 |
U3 | Regolatore di tensione lineare L78L33 | 1 |
R1 | 470Ω 5% | 1 |
R2 | 330Ω 5% | 1 |
VR1 | Trimmer 500Ω | 1 |
C1,C3 | Consensatore 0,1uF | 2 |
C2 | Consensatore 0,33uF | 1 |
D1 | Disodo 1N4007 | 1 |
BUSY | LED ø3 mm Rosso | 1 |
PWR | LED ø3 mm Verde | 1 |
SW2,SW3,SW4,SW1 | Pulsante 6×6 mm | 4 |
P4,P1 | Pinstrip M-2.54_1x2 | 2 |
P5,P6 | Pinstrip M-2.54_1x3 | 2 |
P3 | Pinstrip M-2.54_1x4 | 1 |
P2 per U1 | Pinstrip F-2.54_1x8 | 2 |
P1 -Arduino | Pinstrip F-2.54_1x8 | 2 |
P1 -Arduino | Pinstrip F-2.54_1x6 | 1 |
P3 -Arduino | Pinstrip F-2.54_1x10 | 1 |
Segue una breve descrizione delle varie sezioni che formano il circuito.
Sezione di alimentazione
La sezione di alimentazione utilizza l’integrato LDO U3 tipo 78L33 (datasheet) che fornisce i 3,3 V per l’alimentazione del modulo WTV020-SD-16P.
Il diodo D1 tipo 1N4004/1N4007 (datasheet) garantisce la protezione dall’inversione di polarità, il diodo PRW segnalerà con la sua accensione la presenta dell’alimentazione.
La sezione di controllo
La sezione di controllo basata sulla scheda Arduino UNO, riporta l’indicazione delle porte utilizzate dal modulo WTV020-SD-16P e dai tasti presenti. Dalla scheda, viene anche prelevata l’alimentazione di 5V.
Sezione Modulo Audio WTV020-SD-16P
Nella sezione Modulo audio WTV020-SD-16P (datasheet) sono indicati i collegamenti verso Arduino per la gestione seriale. E’ presente il led BUSY la cui accensione indica che il modulo sta elaborando un file audio.
Sono indicati i collegamenti con i tasti e i pin di uscita verso l’altoparlante o verso il connettore a cui collegare un modulo amplificatore LM358.
Sull’uscita altoparlante è presente un trimmer che permette di regolare il volume, questo nel caso di gestione tramite Arduino è regolabile con un apposito comando.
Sezione controllo manuale
Nella sezione controllo manuale sono riportati i collegamenti ai 4 pulsanti presenti sullo shield. SW1 e SW2 sono dotati di un ponticello che permette di scegliere se collegarli al modulo audio, oppure alle porte D7 e D6 per altre funzioni. In questo caso, per l’utilizzo occorrerà attivare le resistenze di PUL-UP/PULL-DOWN interne ad Arduino
Normalmente i 4 pulsanti sono collegati ai relativi pin del modulo audio PO2, PO3, PO7 e RESET.
In questo modo è possibile utilizzate il modulo in modalità manuale anche senza l’utilizzo di Arduino.
I pulsanti SW1 e SW2 possono essere collegati tramite un cavallotto alle porte D6 e D7 e possono essere utilizzati secondo le istruzioni inserite nel programma.
Sezione uscita amplificate
Connettore per collegare un eventuale modulo amplificatore basato sull’integrato LM385.
Modifica del circuito del PCB
Il circuito potrà essere modificato o adattato alle proprie esigenze tramite il programma online realizzato da EasyEDA. Sarà inoltre possibile apportare delle modifiche al PCB.
Il progetto completo può essere anche scaricato dal mio account presso OSHWLab, utilizzando questo link.
Realizzazione del PCB
Il PCB potrà essere realizzato tramite il servizio offerto dalla JLCPCB, azienda che agisce in sinergia con EasyEDA.
Il PCB è di tipo a doppia faccia con fori metallizzati
Per le fasi di realizzazione vi consiglio la lettura dei seguenti articoli: Come realizzare i vostri PCB tramite il sito JLCPCB e JLCPCB & EasyEDA-Progettazione, realizzazione, assemblaggio PCB
Busta contente la scatola con i PCB ordinati
Scatola dei PCB
Busta contenete i 5 PCB, numero minimo ordinabile
PCB dello shield per WTV020-SD-16P.
Costruzione
L’assemblaggio del PCB è piuttosto semplice. Occorreranno però alcuni strumenti :
- Per la saldatura, si utilizzerà un piccolo saldatore a punta fine, della potenza di circa 25 – 30 W.
- Stagno per saldatura ricavato, per esempio da un rocchetto di stagno per saldatura con filo diametro 1 mm “lead-free” ovvero senza piombo. Lega composta dal 97% di stagno e 3% di rame;
- Una tronchesina per tagliare i reofori dei componenti dopo la saldatura;
- Opzionale un multimetro per misurare le resistenze in caso di dubbio.
Vedere anche gli articoli:
- Il laboratorio di elettronica – Le attrezzature
- Il laboratorio di elettronica – La strumentazione
- Come eseguire delle buone saldature
Fasi di montaggio
Seguono le principali fasi di costruzione dello Shield. La prima delle quelli è quella di ordinare tutti i componenti che formano lo shield per il modulo WTV020-SD.
Le pin strip F 1×8 si potranno ricavare da pin strip di solito formate da 40 pin, tagliandole con un cutter, in alternativa potranno essere acquistate già della giusta conformazione.
Anche le pin strip M 1×3 e 1×2 possono essere ricavate da pin strip a 40 pin.
Si può iniziare dai componenti a più basso profilo come le resistenze:
- R1 da 470 Ω: giallo, viola, marrone + un anello di tolleranza oro (5%)
- R2 da 330 Ω: arancio, arancio, marrone + un anello di tolleranza oro (5%)
Si prosegue con il diodo raddrizzatore D1, facendo attenzione che essendo polarizzato andrà montato facendo riferimento alla banda colorata riportata sull’involucro.
Saldiamo ora i tre condensatori, due che riportano la sigla 104 e uno con la sigla 334
si prosegue con i 4 pulsanti
passando poi ai due led. Occorre fare attenzione a posizionare il terminale più corto che è in corrispondenza della tacca sull’involucro con il segno presente sulla serigrafia del PCB. Si salderanno poi anche i trimmer.
Ora possiamo saldare il regolatore di tensione facendo anche in questo caso riferimento alla serigrafia del PCB
Possiamo poi saldare i pin strip vari presenti sul circuito
Si prosegue con le due pin strip 8 pin per l’installazione del modulo audio
Per ultimo le pin strip passanti che permetteranno il collegamento con la scheda Arduino UNO
Potremo ora posizionare il Modulo audio WTV020-SD-16P, prendendo come riferimento la tacca presente
Per ultimo posizioniamo i cavallotti sulle pin trip come in foto. Il montaggio è ora terminato
Alcune foto del montaggio
Creazione dei file audio
Per poter riprodurre dei brani è necessario realizzare dei file audio compatibili con il modulo e caricarli nella scheda microSD, questo perché il nostro modulo è in grado di riprodurre solo files in formato .ad4 e .wav.
Per realizzare i file audio è possibile utilizzare uno dei tanti sound editor che si trovano gratuitamente su Internet.
Per creare parole e numeri è più indicato utilizzare un programma di TTS cioè Text To Speech, in questo caso, tutto si semplifica poiché è sufficiente scrivere quello che vogliamo far pronunciare e il programma, utilizzando la sintesi vocale che è la tecnica per la riproduzione artificiale della voce umana, creerà per voi il file che potrà essere salvato in formato wav.
Quello che consiglio, si chiama DSpeech è stato scritto da Dimitrios Coutsoumbas (Dimio).
Il programma è in grado di leggere il testo scritto, non ha bisogno di essere installato e occupa poca memoria. Permette di salvare l’output sotto forma di un file Wav, Mp3, Aac, Wma o Ogg.
Per scaricarlo e per le istruzioni di come installarlo vedere al seguente link
I file con estensione .ad4 sono file a 4 bit codificati in ADPCM (Adaptive Differential Pulse Code Modulation) è un’estensione della codifica digitale PCM di base, usata largamente nel campionamento, quantizzazione e codifica di segnali audio, soprattutto in campo di telefonia fissa.
Per ottenere la migliore qualità audio .ad4, è meglio rispettare queste caratteristiche:
- Il suono se stereo dovrebbe essere convertito in mono;
- La frequenza di campionamento deve essere impostato a 32000Hz;
- La profondità di bit deve essere impostata a 16;
- Il livello sonoro non dovrebbe essere superiore a -6db.
Per realizzare questo tipo di file si può utilizzare un programma che risulta ancora compatibile con la versione W10, si tratta del programma SOMOtool.exe, al cui interno c’è un’applicazione UsbRecorder che permette appunto la conversione di file nel formato AD4 compatibile con il modulo.
IMPORTANTE! I files, una volta generati, devono avere il nome nel formato XXXX.ad4, dove le X stanno ad indicare delle cifre in numerazione decimale, da 0000 a 0511. Per cui sulla microSD dovremo avere quindi qualcosa del genere:
0000.ad4
0001.ad4
0002.ad4
0003.ad4
0004.ad4
…..
0511.ad4
L’ordine dei files sarà quello che avremo in riproduzione quando invieremo il comando “next”.
La scheda di memoria SD
Come prima cosa dovremo procurarci una scheda MicroSD in quanto questa non viene fornita con il modulo. Non tutte le schede sono compatibili, in particolare NON sono compatibili le schede SDHC.
Sfortunatamente , la massima capacità della scheda utilizzabile è di 2 GB, non tanto per la sua dimensione ma per la sua reperibilità.
La scheda va poi formattata in formato FAT32, altri tipi di file system o capacità maggiori non sono riconosciuti dal modulo.
Libreria di gestione del modulo
La gestione è facilitata dalla disponibilità di una libreria freeware in grado di controllare con pochissimi comandi questo modulo. La libreria è disponibile presso il link Arduino Library List, l’ultima versione disponibile è la versione 1.4.0.
Per cui fare clic su Sketch> #Includi libreria> Gestione librerie, oppure premere Crtl+Maiusc+l
Il programma verificherà tutte le librerie presenti e mostrerà una casella di ricerca, a questo punto digitare il nome della libreria da caricare, nel nostro caso “WTV020SD16P“, in questo modo apparirà la libreria cercata
occorre premere il tasto Installa, Al termine dell’installazione apparirà la dicitura “INSTALLED“, quindi premere il tasto Chiudi per uscire.
Una volta riavviato l’ambiente di programmazione di Arduino, troveremo anche la libreria chiamata Wtv020sd16p, e negli esempi uno sketch completo di tutti i comandi utilizzabili.
Per altre informazioni su come installare una libreria vedere l’articolo Arduino – Tutorial, come installare una libreria
Utilizzo della libreria
Per utilizzare la libreria occorrerà utilizzare il comando #include
1 | #include <WTV020SD16P.h> |
poi occorre assegnare il numero dei pin utilizzati per le varie funzioni
1 2 3 4 | int resetPin = 2 int clockPin = 3; int dataPin = 4; int busyPin = 5;. |
A questo punto si potrà creare l’istanza
1 | WTV020SD16P wtv020sd16p(resetPin, clockPin, dataPin, busyPin); |
Sono disponibili i seguenti comandi:
Comando | Descrizione |
---|---|
wtv020sd16p.reset(); | Esegue il reset del modulo |
wtv020sd16p.setVolume(X); | Imposta il volume dell'uscita collegata all'altoparlante, dove X è un valore tra 0 e 7. |
wtv020sd16p.asyncPlayVoice(X); | Manda in esecuzione i file relativo, dove X è un valore tra 0 e 511. |
wtv020sd16p.pauseVoice(); | Arresta la riproduzione del brano, o riprende il brano dopo una pausa. |
wtv020sd16p.mute(); | Ammutolisce il suono durante la riproduzione. |
wtv020sd16p.unmute(); | Riattiva il suono durante la riproduzione |
wtv020sd16p.stopVoice(); | Interrompe la riproduzione del file corrente. |
Programma di test
Per testate lo shield, dovremmo istallarlo su una scheda Arduino UNO e collegare un piccolo altoparlante al connettore SPK.
Il programma di test, prevede l’utilizzo di alcuni file audio, che dovremmo salvare sulla scheda MicroSD.
Una volta lanciato il programma il modulo invierà nella giusta sequenza i file .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <Arduino.h> #include <WTV020SD16P.h> int resetPin = 2; int clockPin = 3; int dataPin = 4; int busyPin = 5; WTV020SD16P wtv020sd16p(resetPin, clockPin, dataPin, busyPin); void setup() { //Inizializza il modulo wtv020sd16p.reset(); delay(1000); // Imposta il volume wtv020sd16p.setVolume(7); } void loop() { //Pronuncia alcune frasi. La pausa è in // relazione alla sua lunghezza wtv020sd16p.asyncPlayVoice(15); delay(4400); wtv020sd16p.asyncPlayVoice(16); delay(2600); wtv020sd16p.asyncPlayVoice(17); delay(4600); wtv020sd16p.asyncPlayVoice(18); delay(6300); //Pronuncia i numeri da 1 a 10 // con una pausa di 1 secondo for (int i = 1; i <= 10; i++) { wtv020sd16p.asyncPlayVoice(i); delay(1000); } //Pronuncia i numeri da 10 a 1 // con una pausa di 1 secondo for (int i = 9; i >= 1; i--) { wtv020sd16p.asyncPlayVoice(i); delay(1000); } } |