Modulo audio WTV020-SD

ultimo aggiornamento 17 aprile 2017


JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Recati presso la JLCPCB, riceverai regali e coupon gratuiti
presso Maker Faire Rome il 18-20 ottobre


Indice

Descrizione

Si ha l'esigenza a volte di avere otre che un segnale visivo un segnale sonoro, ma non il semplice suono fornito da un buzzer, ma un vero proprio messaggio.
In vendita ci sono già visti molti prodotti come il modulo LPM11162, o il modulo EasyVR, che possono riprodurre dei messaggio precedentemente salvati sulla propria memoria.
In questa pagina vedremo l'utilizzo del modulo WTV020-SD che permette di riprodurre suoni o voci memorizzate su scheda MicroSD tramite un PIC o un Arduino.
Se leggiamo il Datasheet possiamo notare che il modulo può lavorare in svariate modalità: MP3, Key (3 group of voice), Key (5 group of voice), Loop play, Two line serial mode.
Ma non tutte sono disponibili in quanto risultano opzionali, e vanno ordinati in modo specifico al fabbricante, ovviamente in grandi quantità.
Per quanto riguarda i moduli commercializzati questi prevedono due modalità: MP3 e Two line serial mode.

 

Schema elettrico Shield per testare il modulo WTV020 SD realizzato con il programma EasyEDA
Un servizio per il disegno di circuiti e la loro simulazione, progettazione e produzione di PCB.
Provalo è gratuito!

OurPCB, your most reliable PCB and PCBA supplier.

Focusing on PCB Prototype and PCB Assembly Turnkey Services.

One-Stop Wire Harness & Cable Assemblies Solution

Il modulo WTV020-SD

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 MicroSD e presenta un package DIL a 16 piedini.

Questi moduli sono facilmente reperibile in rete, e hanno un costo molto contenuto, intorno ai 5 Euro
Il modello che sarà analizzato è il WTV020-SD-16P, 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 20x18mmil suo peso è di soli 5 gr, la sua impostazione "a circuito integrato" permette l'installazione su zoccolo o su una millefori. L'alimentazione è a 3,3V.
Il cuore del circuito del modulo è l'integrato WTV020SD-20S prodotto dalla Waytronc Electronics Co.,Ltd

Circuito elettrico del modulo

Piedinatura del modulo

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 in formato .wav con le caratteristiche citate è possibile utilizzare uno dei tanti sound editor che si trovano gratuitamente su Internet, come Audacity che è pure multipiattaforma.

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 che tra l’altro è freeware, oltre alle funzioni TTS, possiede le funzionalità di ASR (Automatic Speech Recognition) integrate. E' cioè, in grado di leggere ad alta voce il testo scritto e di scegliere le frasi da pronunciare a seconda delle risposte vocali dell'utente.
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:

Per realizzare questo tipo di file esistono in rete un paio di applicazioni dedicate che sono liberamente scaricabili

SOMOtool.exe AD4converter.exe

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 l comando "next".

La scheda di memoria SD

Come prima cosa dovremo procurarci una scheda MicroSD in quanto questa non viene fornita col modulo. Non tutte le schede sono compatibili col modulo, in particolare NON sono compatibili le schede SDHC.
La massima capacità della scheda utilizzabile è di 2 GB, la scheda fa poi formattata in formato FAT32, altri tipi di file system o capacità maggiori non sono riconosciuti dal modulo.

Ora che la microSD è pronta dobbiamo inserirla nello slot del modulo, lo slot in questione non è del tipo a molla, ma va prima aperto facendo slittare indietro il coperchio metallico e poi aprendolo come uno sportello, lo slot previene la fuoriuscita accidentale della MicroSD

Formattare microSD su Windows

Per formattare una microSD usando il computer, occorre utilizzare un adattatore microSD > USB o un adattatore microSD > SD.

Qualora non ne avessi ancora uno, puoi acquistarlo per pochi euro direttamente online.
Una volta in possesso dell'adattatore, è sufficiente inserire al suo interno la scheda da formattare, collegalo al computer e procedi come illustrato di seguito.
Benché Windows consenta di formattare le schede di memoria senza ricorrere a software di terze parti (semplicemente dall’Esplora Risorse), è consigliabile utilizzare l’applicazione gratuita SD Formatter che è stata sviluppata direttamente dalla SD Association, l’associazione che raccoglie tutte le maggiori aziende produttrici di schede SD.
Per scaricare l'applicazione SD Formatter sul PC, è sufficiente accedere al  sito Internet ufficiale e scaricare la versione per il proprio sistema operativo.
A download completato, si aprirà il pacchetto zip che contiene il programma e si avvierà il file setup.exe.
Nella finestra che si apre, si dovrà pigiare sul pulsante Next due volte consecutive, cliccare quindi su Install e premere Sì e Finish per portare a termine il processo d’installazione di SD Formatter.

Ora, dopo aver inserito nel computer la microSD che si desidera formattare (tramite l’apposito adattatore), attendere sino a che l’unità venga riconosciuta da Windows e avviare quindi SD Formatter cliccando sulla sua icona presente sul desktop di Windows.

Nella finestra che si apre, selezionare l’unità della MicroSD da formattare nel menu a tendina Drive, digitare se si vuole il nome che vuoi assegnare al volume nel campo Volume label e cliccare prima su Format e poi OK per avviare la formattazione della scheda.
Se si vuole, cliccando sul pulsante Option ed espandendo il menu a tendina Format type si potrà impostare anche il tipo di formattazione da effettuare: lasciando attiva l’opzione Quick la scheda viene formattata velocemente ma i file che contiene rimangono potenzialmente recuperabili o; selezionando il metodo Full (Erase) la formattazione sarà più lunga ma sarà molto più difficile recuperare i dati dalla scheda, mentre attivando l’opzione Full (Overwrite) i dati verranno prima cancellati e poi sovrascritti con informazioni casuali (rendendo praticamente impossibile il recupero dei vecchi file).

Modalità MP3 (stand alone)

In questa modalità il modulo non occorre alcun micro per poter riprodurre i files audio e risulta completamente autonomo. E' sufficiente collegare i pulsanti per il controllo, un piccolo altoparlante, un led e una resistenza.

Modalità minima

Lo schema mostrato permette semplicemente di testare il modulo, per questo motivo è presente solamente il tasto NEXT, che permette di passare al prossimo file presente nella memoria del modulo.

Sotto è riportato lo schema di montaggio, per l'alimentazione del modulo è utilizzato un piccolo convertitore CC tipo YL-46 che riduce la tensione dai 6V della batteria ai 3,3V massimi richiesti.

Per il test sono utilizzati alcuni file di test, occorre salvarli nella SD, per le istruzioni vedere la pagina SD Creazione


I file audio

 

 

Un video pubblicato da Adriano Gandolfo (@adrirobot) in data:

Modalità completa

Anche in questa modalità il modulo non ha bisogno di alcun micro per poter riprodurre i files audio e risulta completamente autonomo. E' sufficiente collegare i pulsanti per il controllo, un piccolo altoparlante, un led e una resistenza.
Per l'alimentazione si è utilizzato un piccolo alimentatore per breadboard tipo YwRobot MB 102 .

I piedini utilizzati in questa modalità sono i seguenti:

Pin Funzione Descrizione
1 Reset Con un pulsante collegato verso massa riporta a 0 il contatore dei brani.
2 Audio-L Uscita audio analogica a basso livello.
4-5 SPK+ e SPK- uscita PWM, a questi due pin e' possibile collegare direttamente un piccolo altoparlante da 8 Ohm/0,5W
7 Vol+ Collegando un pulsante collegato verso massa possiamo aumentare il volume da 0 (mute) a 7.
8 massa Negativo dell'alimentazione
9 Play/Pause Collegando un pulsante verso massa possiamo riprodurre o interrompere il brano corrente
10 Vol - Collegando un pulsante collegato verso massa possiamo diminuire il volume da 7 a 0 (mute).
12 Previous Con un pulsante collegato verso massa possiamo passare al brano precedente
13 Next Con un pulsante collegato verso massa possiamo passare al brano successivo
15 Busy A questo pin possiamo collegare un LED e relativa resistenza da 470Ω per indicare quando un brano e' in riproduzione
16 +3,3 Volt Non applicate i 5 Volt al modulo pena la distruzione della scheda MicroSD.
3,6,11,14 NC Pin non utilizzati

 

 

 

   

Modalità Two line serial mode tramite Arduino

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. La libreria è scaricabile da qui
Per utilizzare questa libreria bisogna scaricare il file zippato, poi decomprimerlo e copiare la cartella risultante nella cartella Library dell'IDE Arduino.
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.

Utilizzo della libreria

Per utilizzare la libreria occorrerà utilizzare il comando #include

#include <Wtv020sd16p.h>

poi occorre assegnare il numero dei pin utilizzati per le varie funzioni

int resetPin = 2;  // Reset pin 2.
int clockPin = 3;  // Clock pin 3.
int dataPin = 4;  // Data pin 4.
int busyPin = 5;  // Busy pin 5.

A questo punto si potrà creare l'istanza

Wtv020sd16p wtv020sd16p(resetPin, clockPin, dataPin, busyPin);

Sono disponibili i seguenti comandi:

Per il comando del modulo sono utilizzate 4 porte digitali

Pin Arduino Pin Wtv020 Funzione Descrizione
2 1 Reset. Pin reset
3 7 P04/CLOCK CLOCK linea seriale
4 10 P05/Data DATA linea seriale
5 15 P06 /Busy BUSY
- 4 SPK+ Polo positivo altoparlante
  5 SPK- Polo negativo altoparlante
GND 8 massa Negativo alimentazione
3,3V 16 +3,3 Volt Positivo alimentazione

Schema dei collegamenti

Foto del test

 

 

Programma test


Programma test

I file audio


I file audio

Il Programma

Segue il listato del programma di test che pronuncerà i numeri da 10 a 0 e da 0 a 10.
La procedura di caricamento è la seguente:

/*  Test_WTV020-SD-16P.ino
Programma di test WTV020-SD-16P tramite Arduino basato
sul programma di test originale di Diego J. Arevalo, August 6th, 2012.
Vengono utilizzati i seguenti pin
Pin +3.3V         -> Collegato al pin 16 del modulo - VDD
Pin GND           -> Collegato al pin 8 del modulo - GND
Pin Digital 2     -> Collegato al pin 1 del modulo - RESET
Pin Digital 3     -> Collegato al pin 7 del modulo - CLOCK (P04)
Pin Digital 4     -> Collegato al pin 10 del modulo - DATA (P05)
Pin Digital 5     -> Collegato al pin 15 del modulo - BUSY (P06)

Creato il 12/04/2016 da Adriano Gandolfo
Sito web https://www.adrirobot.it
Blog http://it.emcelettronica.com/author/adrirobot

This example code is in the public domain.*/

#include <Wtv020sd16p.h>

int resetPin = 2;  // The pin number of the reset pin 2.
int clockPin = 3;  // The pin number of the clock pin 3.
int dataPin = 4;  // The pin number of the data pin 4.
int busyPin = 5;  // The pin number of the busy pin 5.


Wtv020sd16p wtv020sd16p(resetPin, clockPin, dataPin, busyPin);

void setup() {
  //Initializes the module.
  wtv020sd16p.reset();
  delay(1000);
  wtv020sd16p.setVolume(7);
}

void loop() {
  for (int i = 1; i <= 10; i++) {
    wtv020sd16p.asyncPlayVoice(i);
    delay(1000);
  }
  for (int i = 9; i >= 2; i--) {
    wtv020sd16p.asyncPlayVoice(i);
    delay(1000);
  }
}

Realizzazione di un voltmetro parlante

Perché leggere un valore di tensione o una temperatura su un display quando possiamo conoscere il valore misurato grazie alla voce della nostra scheda Arduino?
Il progetto proposto permette di dare la parola ad Arduino, sarà così possibile, per esempio, sentire il valore letto tramite una porta analogica attraverso l’altoparlante connesso alla scheda.
Per fare questo è necessario i componenti sotto riportati:

Mini breadboard Arduino UNO Modulo WTV020-SD
Altoparlante 8 ohm - 0,5W Potenziometro 10 kohm Cavetti

Per il collegamento del potenziometro , si dovrà collegare in modo che un lato sia connesso al pin +5V, il lato opposto al pin GND e il pin centrale al pin di ingresso analogico A0.

Pin Arduino Pin Wtv020 Funzione Colore cavo Descrizione
2 1 Reset. Rosso Reset del modulo
3 7 P04/Clock Giallo CLOCK linea seriale
4 10 P05Data Verde DATA linea seriale
5 15 P06 /Busy Blu BUSY
GND 8 massa Nero Negativo dell'alimentazione del modulo e uno dei pin laterali del potenziometro
- 4 SPK+ Rosso Polo positivo altoparlante
  5 SPK- Nero Polo negativo altoparlante
3,3V 16 +3,3 Volt Ciano Alimentazione modulo
5V   +5,0 Volt Rosso Uno dei pin esterni del potenziometro
A0   Ingresso analogico Blu Pin centrale del potenziometro per la lettura della tensione

Schema dei collegamenti

Foto del test

 

Programma voltmetro parlante


Programma voltmetro

I file audio


I file audio

 

Il Programma

Segue il listato del programma, che esegue la lettura del valore di tensione variato tramite il potenziometro collegato alla porta analogica A0.
Si usa quindi il comando analogRead () che converte la tensione d’ingresso da 0 a 5 volt, in un valore digitale.
Ruotando l’albero del potenziometro, si cambia la quantità di resistenza su entrambi i lati del pin centrale del potenziometro. Questo cambia la resistenza relativa tra il pin centrale e i pin esterni, dando una tensione diversa all’ingresso analogico.
Quando l’albero è girato completamente in una direzione, non vi è resistenza tra il pin centrale e il pin collegato a GND. La tensione al pin centrale è quindi 0 volt.
Quando l’albero è girato tutto nella direzione opposta, non vi è resistenza tra il pin centrale e il pin collegato a +5 volt. La tensione al pin centrale è quindi di 5 volt.
Perciò analogRead () restituirà un numero tra 0 e 1023 che è proporzionale alla quantità di tensione applicata al pin analogico.
Il programma convertirà il numero letto e farà in modo da richiamare i vari file presenti sulla scheda SD in modo da pronunciare il valore di tensione letta.
Per fare questo sulla memoria SD sono salvati i file che contengono la pronuncia dei numeri da zero a nove, la parola punto e la parola Volt.
Per il comando del modulo sono utilizzate 4 porte digitali, e l'ingresso analogico A0
Il valore di tensione è poi “pronunciato” tramite l’altoparlante connesso all’uscita.
La procedura di caricamento è la seguente:

/* voltmetro_parlante.ino
Programma per realizzare un voltmetro parlante utilizzando
la scheda Arduino e il modulo WTV020-SD-16P.
Il programma legge il valore analogico che viene variato
tramite un potenziometro, e pronuncia il valore a voce.
Vengono utilizzati i seguenti pin
Pin +5V           -> Pin laterale del potenziometro
Pin +3.3V         -> Collegato al pin 16 del modulo - VDD
Pin GND           -> Pin laterale del potenziometro e pin 8 del modulo - GND
Pin Digital 2     -> Collegato al pin 1 del modulo - RESET
Pin Digital 3     -> Collegato al pin 7 del modulo - CLOCK (P04
Pin Digital 4     -> Collegato al pin 10 del modulo - DATA (P05
Pin Digital 5     -> Collegato al pin 15 del modulo - BUSY (P06)
Pin Analogoico A0 -> Pin centrale potenziometro
Creato il 12/4/2016da Adriano Gandolfo
Sito web https://www.adrirobot.it 
Blog http://it.emcelettronica.com/author/adrirobot
This example code is in the public domain. */
#include <Wtv020sd16p.h>

int resetPin = 2;  // The pin number of the reset pin 1.
int clockPin = 3;  // The pin number of the clock pin 7.
int dataPin = 4;  // The pin number of the data pin 10.
int busyPin = 5;  // The pin number of the busy pin 15.
#define pin_tensione   A0 // Pin analogico lettura

Wtv020sd16p wtv020sd16p(resetPin, clockPin, dataPin, busyPin);
int pinval = 0;
int oldpinval = 0;

void setup()
{
  //Initializes the module.
  wtv020sd16p.reset();
  delay(1000);
  wtv020sd16p.setVolume(7);
}

void loop()
{
  pinval = analogRead(pin_tensione);// Legge il pin analogico
  if (pinval != oldpinval)
  {
    oldpinval = pinval;
    SayVolts(pinval);              // Converte in una tensione e dice il valore
  }
  delay (2000);
}

void SayVolts(int volts)
{
  int BigNumber = 0;
  int SmallNumber = 0;

  BigNumber = abs(volts / 204);                // Converte il valore analogico in tensione
  Serial.println (BigNumber);
  SmallNumber = volts - abs(BigNumber * 204);  // Converte i decimali ad una sola cifra
  SmallNumber = abs(204 - SmallNumber) / 2;
  SmallNumber = abs(100 - SmallNumber) / 10;
  Serial.println (SmallNumber);
  if (BigNumber != 0)
  {
    wtv020sd16p.asyncPlayVoice(BigNumber);
    delay (1000);
  }
  wtv020sd16p.asyncPlayVoice(12); // Pronuncia "Punto"
  delay (1000);
  wtv020sd16p.asyncPlayVoice(SmallNumber);
  delay (1000);
  wtv020sd16p.asyncPlayVoice(11); // Pronuncia "Volt"
  delay (1000);
}

   

Elenco revisioni

17/04/2014

Aggiornata pagina, unificazione delle varie pagine prima separate.

10/04/2016

Emissione preliminare