Como utilizar efeitos sonoros no seu projeto com o módulo MP3 WTV020-SD
Precisa colocar algum tipo de efeito sonoro no seu robô, brinquedo ou alarme ? Utilize o módulo MP3 WTV020-SD.
Esse módulo possui um slot para cartão microSD, onde são armazenados os arquivos de áudio, sendo que ele é mais indicado para reprodução de arquivos de voz, mas também é possível reproduzir músicas.
Os formatos suportados são WAV e AD4, com taxa de amostragem (sampling rate) entre 6KHz a 36KHz para os arquivos de voz no formato AD4, e de 6KHz a 16KHz para os arquivos de voz no formato WAV.
O módulo WTV020-SD pode ser utilizado basicamente de duas maneiras. Uma delas é conectado ao microcontrolador, onde utilizamos 4 pinos para comunicação com o módulo e controle das funções de reproduzir música, pausar, volume, etc.
Já o segundo método é o MODO MP3, onde podemos utilizar push-buttons para acionar os pinos do módulo e executar as mesmas funções de reprodução de música mencionadas acima.
Existem ainda outros modos de operação, como o Key mode e o Power-Loop, que são utilizados em casos específicos. Para maiores informações sobre esses modos de operação, consulte o datasheet.
Com relação à capacidade do cartão microSD suportado pelo módulo, encontrei em vários documentos e posts a informação de que a capacidade máxima do cartão é de 1 GB. Nos meus testes, porém, o módulo funcionou normalmente com um cartão de 2GB.
Pinagem e conexão do módulo WTV020-SD ao Arduino
O módulo WTV020-SD segue a pinagem mostrada abaixo, com o pino 1 no mesmo lado da marca indicada pelo círculo:
No lado esquerdo da placa, próximo à marca, você pode selecionar a alimentação para 5V ou 3.3V, soldando os terminais correspondentes. Utilize essa opção com cuidado, já que eu não testei no modo 5V, e vi em grupos de discussão que algumas pessoas tiveram problemas em usar o módulo nessa configuração.
No Arduino Uno, utilizamos os pinos 4, 5, 6 e 7 para ligação aos pinos 1 (RESET), 7 (P04/CLK), 10 (P05/DI) e 15 (P06/BUSY) do módulo. A alimentação será de 3.3V:
Preparação do cartão SD e programação do módulo
Formate um cartão SD utilizando FAT e coloque nele dois arquivos de áudio, nomeados como 0001.ad4 e 0002.ad4. Você pode converter seus arquivos MP3 e WAV para AD4 utilizando um software como o AD4CONVERTER , ou então baixar alguns arquivos de exemplo neste link.
Antes de carregar o programa no Arduino, baixe a biblioteca Wtv020sd16p aqui.
//Programa : Modulo MP3 WTV020-SD e Arduino Uno //Autor : Arduino e Cia #include <Wtv020sd16p.h> int resetPin = 4; //Pino Reset int clockPin = 5; //Pino clock int dataPin = 6; //Pino data (DI) int busyPin = 7; //Pino busy //Variavel que armazena os caracteres recebidos char buf; Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); void setup() { //Inicializa a serial Serial.begin(9600); //Inicializa o modulo WTV020 wtv020sd16p.reset(); //Informacoes iniciais menu_inicial(); } void loop() { //Aguarda os dados da serial while(Serial.available() > 0) { buf = Serial.read(); //Caso seja recebido o numero 1, reproduz o arquivo 0001.ad4 if (buf == '1') { Serial.println("Reproduzindo 0001.ad4"); wtv020sd16p.playVoice(0); //Reproduz o arquivo 1 wtv020sd16p.asyncPlayVoice(1); delay(3000); wtv020sd16p.stopVoice(); delay(2000); menu_inicial(); } //Caso seja recebido o numero 2, reproduz o arquivo 0002.ad4 if (buf == '2') { Serial.println("Reproduzindo 0002.ad4"); wtv020sd16p.playVoice(0); //Reproduz o arquivo 2 wtv020sd16p.asyncPlayVoice(2); delay(3000); wtv020sd16p.stopVoice(); delay(2000); menu_inicial(); } } } //Mostra menu de opcoes void menu_inicial() { Serial.println("nDigite : "); Serial.println("1 - Reproduz o arquivo 0001.ad4"); Serial.println("2 - Reproduz o arquivo 0002.ad4"); Serial.println(); }
Após o carregamento, abra o Serial Monitor e utilize as teclas indicadas para reproduzir/tocar os arquivos 1 e 2 que foram colocados no cartão:
Vamos agora ver como controlar diretamente o módulo com o modo MP3, sem utilizar o Arduino.
Módulo WTV020-SD no modo MP3
Nesse modo são utilizados push-buttons para controlar a reprodução dos sons. Monte o circuito abaixo e alimente o circuito com uma bateria ou fonte externa de até 3.3V:
Carregue os arquivos de áudio no cartão SD, respeitando os limites dos formatos de arquivos mencionados no início deste post (taxa de amostragem (sampling rate) entre 6KHz a 36KHz para AD4, e de 6KHz a 16KHz para WAV).
Pressione os botões NEXT e PREV para alternar a reprodução dos arquivos de áudio. O led vai permanecer aceso caso nenhum botão seja pressionado, e se apaga enquanto o som estiver sendo reproduzido.
(Atualizado em 25/10/2017): Precisando de um módulo que rode MP3 sem necessidade de conversão? conheça o módulo MP3 DFPlayer Mini.
Amigos uma pergunta, pode o positivo da caixa de som ser alimentado direto da bateria ? sairia o som mesmo assim ?
Cada pergunta nada a ver com o assunto…
Não, pois o sinal de som é um sinal alternado, o que faz o diafragma do alto falante vibrar, sendo assim, não pode ser alimentada direto no +vcc.
como fazer para aumentar o volume do som?
Boa tarde,
Creio que apenas com um amplificador. Vi alguns circuitos com esse módulo, em que usaram amplificadores para aumentar o som.
Abraço!
Veja esse circuito…. https://habrastorage.org/files/15e/884/609/15e8846093cb405bbf393d37bc78ec0b.png
Oi,
Montei o esquema com um módulo WTV020M01 e SD de 1GB da Sandisk. Nada funcionou. Minha caixinha de som é uma de 8 OHM e 0.5W que veio com outro módulo. Sabe o que pode estar acontecendo? Quando digito escuto apenas um apito rápido e depois para de funcionar.
Boa tarde,
O seu problema pode estar no formato do arquivo. Verifique as especificações contidas no post, já que esse módulo é mais indicado para reprodução de arquivos de voz.
Abraço!
O mesmo acontece comigo e demais usuários…
Poderia informar o conversor que está utilizando, pois já tentei vários e até agora nada…
Abraço.
O mesmo acontece comigo, já formatei o cartão SD em todos o formatos e também gravei os arquivos de audio conforme indicado no post e nada… Qual seria a solução!!??
Já faz quase 2 anos da última postagem, alguém conseguiu a solução? O meu também faz um chiado rápido de uns 2 segundos no alto falante mesmo eu alterando o tempo de execução da música. Estou utilizando um SD de 1GB da Sandisk também, áudio no formato AD4 sample rate de 32K
Olá,
É possível realizar a gravação de áudio com esse módulo?
Boa noite,
Apenas reprodução.
Abraço!
ola
montei o circuito ,porem nao funcionou …. existe algum tipo de alto falante especifico para este modulo? qual pode ser o meu problema?
Montei o circuito e não funcionou. segui todas as orientacoes, inclusive dos comentarios… não funcionou. tem algum falante especifico? posso usar fone de ouvido para testar?
Boa noite, tenho uma pergunta a fazer.
Penso em ligar um sensor de movimento no Arduino e toda vez que o senhor for ativado irá disparar um som que estará gravado nesse modulo é claro se for possível isso. É possível?
OBRIGADO PELA ATENÇÃO
Quais as especificações do auto-falante?
Bom dia,
Usei um alto-falante comum, de 8 ohms, mas o som saiu um pouco baixo. Uma boa idéia é usar um amplificador com esse módulo.
Abraço!
Boa tarde, como vai?
Seguinte, fiz e refiz o tutorial e não consegui reproduzir nenhum som, vale lembrar que, tenho um falante de 8 ohms, e um cartão sd micro de 2GB, uma pergunta, só funciona no 1 GB ? o que pode estar acontecendo?
Obrigado pelo feedback desde já.
Pedro Gonçalves
Oi Pedro, tudo bem ?
Eu usei um cartão de 512, mas também funcionou com um de 8GB. eu creio que o problema está mais na conversão do arquivo do que necessariamente no tipo de cartão.
Eu tive que tentar vários conversores até achar um que funcionasse. Quanto ao som, ele realmente é bem baixo, eu recomendo que você tente usar esse módulo com algum tipo de amplificador, como o MAX98306:
http://www.arduinoecia.com.br/2015/09/som-modulo-amplificador-audio-max98306-adafruit.html
Espero ter ajudado. Abraço!
Pode ser outro amplificador mais simples?
Pode sim, até um "caseiro"… 🙂
Abraço!
Boa noite posso usar este módulo para o Arduíno dar feedback ?
Bom dia,
Sim, o módulo é mais indicado para trabalhar com arquivos de voz, assim vc pode dizer ao usuário o que está acontecendo com o Arduino.
Abraço!
Obrigado tem algum vídeo mostrando como posso fazer o módulo dar os feedback?
Oi Giovanni,
Não tenho, mas é uma boa sugestão, vou providenciar. 🙂
Abraço!
ola, belo post, eu estou com dificuldades de fazer ele executar uma musica apenas uma vez dentro do SETUP como eu faria isso?
Oi Melque,
Deixe o setup vazio e coloque os seguintes comandos dentro do setup;
wtv020sd16p.playVoice(0);
//Reproduz o arquivo 1
wtv020sd16p.asyncPlayVoice(1);
delay(3000);
wtv020sd16p.stopVoice();
delay(2000);
Abraço!
Me tira uma duvida.
Consegui executar o código só que, quando escrevo na Serial, tenho que escrever 2x.
Explicando melhor
Abro a serial e digito 1
= Não toca nada
Espero voltar ao menu
Digito 1
= Toca normal
Espero voltar ao menu
Digito 1
= Não toda nada
Aguardo contato!
Acontecendo o mesmo comigo, que estranho
Até tentei gambiarrar e pedir pra ele executar 2x sempre, mas não adiantou
Pessoal, não sei se já resolveram o problema, más façam o seguinte, alterem o código assim:
if (buf == '1')
{
Serial.println("Reproduzindo 0001.ad4");
wtv020sd16p.playVoice(0);
delay(2000);
//Reproduz o arquivo 1
wtv020sd16p.asyncPlayVoice(1);
menu_inicial();
}
O código do tutorial tem um delay e um stop após ele, logo, o som irá reproduzir e parar. Coloquei um delay entre o stop e o play pra poder resolver o problema de só iniciar na segunda vez.
Espero que ajude, abraços…
Funcionou Perfeitamente! Obrigado e parabéns pela analise!
Arduino e Cia me tira uma duvida…
Montei o código do exemplo com o UC porem, preciso enviar o comando 2x para ele executar a musica.
ex.
Digito 1 na serial
> Não toca nada
espero solicitar de novo
Digito 1 na serial
> A musica toca
espero solicitar
Digito 1
> Nâo toca
E assim continua….
Tem como ajudar ?
Como faz para deixar ele em loop? tipo: Liga – começa a tocar e não para nunca mais
Boa noite,
Faça um loop em que dentro dele tenha só esses dois comandos:
wtv020sd16p.asyncPlayVoice(1);
delay(5000);
Abraço!
Você tem alguma alternativa com millis? Não posso usar delay no meu projeto 😐
posso fazer a mesma ligação para arduino Mega?
Oi Bianca,
Pode sim.
Abraço!
Posso utilizar a mesma programação para arduino mega?
Oi Bianca,
Pode sim.
Abraço!
qual autofalante eu posso colocar !?
Boa tarde,
Você pode usar um desses pequenos, que vem (vinham) dentro do computador, de 8 ohms.
Abraço!
Gostaria de saber quantos Wats aguente esse modulo?
Olá, hoje estou utilizando um autofalante de 3w mas esta muito baixo e quando eu aumento o volume acima de 6 na função SetVolume(6) o modulo começa a reproduzir mas para antes do fim do arquivo de audio, pelo que entendo (Muito pouco) sobre som (kkkk) o modulo identifica que o autofalante não suporta o volume que esta mandando e ele desliga.
Então minha pergunta é:
Qual o teto em Wats pode ser utilizado com esse modulo para que possamos aumetar o volume?
Ola poderia me passar o conversor de áudio que vc utilizou e funcionou por favor?
Desde jah Muito Obrigado!
Abraços!
Oi Matheus,
Usei o AD4converter:
https://docs.google.com/file/d/0B4p82-pNB6o7QXFwZFg0dlZlWFE/edit
Abraço!
Boa noite. Realizei o código, porém utilizei botões para selecionar a música. O mesmo entra nelas, fiz um teste pelo monitor serial, ele entra na função desejada, porém na segunda vez que vai tocar em diante sempre há a repetição da mesma música. Alguém enfrentou problema semelhante? Grato desde já, abraços.
Cara, como você conseguiu executar o áudio? Você usou um cartão de quantos gigas?
Boa tarde a saida de corrente nos fios que eu deveria ligar no alto falante está na casa dos 1microAmperes . está correta essa medição, pois pelos meus testes o alto falante que possuo precisa de aproximadamente 1 ampere pra funcionar, alguma dica ou solução?
Boa noite Gustavo,
Realmente a saída é bem fraquinha. Eu recomendo o uso de um módulo amplificador, como eu mostro neste post:
http://www.arduinoecia.com.br/2015/09/som-modulo-amplificador-audio-max98306-adafruit.html
Abraço!
Boa noite!!! Meu nome é Glaydstone, por muitas semanas estou estudando sobre esse módulo, testei seu código e vi que se tirar essa linha de comando "wtv020sd16p.playVoice(0);" funcionará perfeitamente, pelo menos comigo funcionou. Usei o Audacity para converter o áudio para WAV, fui em Editar->Preferencias->Qualidade e na taxa de amostragem coloquei 16000Hz, formato 16-bit, coloquei a faixa em Mono e exportei como Wav para o cartão de 1Gb, fiz o teste com duas músicas e funcionou. Um detalhe, meu sistema operacional é linux, mesmo formatando o cartão por lá não funcionou, usei um net que tem windows, usei o programa SDFormatter, e o módulo passou a funcionar perfeitamente.
ola tem como eu usar esse código com o sd card?
boa noite, posso substituir o pino clock(pino 5) por outro pino?
obs: estou utilizando um leitor RFID que ativa o módulo.
Pode sim. 🙂
Abraço!
Olá ,tenho um projeto no qual precisaria colocar 6 sons distintos,posso usar o sistema de botões para cada som e qual esquema de circuito devo usar? Email. [email protected]
O módulo DF player mini é melhor
Pessoal. Penei com esse módulo de som. Parece que tem que dar três pulinhos, bater madeira e acender uma vela.
Mas deu certo depois de (dias). Não sei pq, o som só funciona depois do STOP. vc tem que dar um play e um stop logo em seguida.
Outra coisa: Antes eu estava usando o Arduino NANO e não ia. Agora estou no UNO R3. Outra coisa que pode matar por besteira. Tenho 12 arquivos AD4 no pendrive… sendo que 3 deles não rodam e ficam mudo. Se vc estiver testando com um deles que pegou na net, pode não ver o som funcionar.
Um dos arquivos de exemplo SAMPLES-FILES-2.zip como link aqui está travando o módulo.
Pessoal é tanta coisa….
Olá, poderia ensinar fazendo uma atualização nessa página para saber usar esse módulo
https://http2.mlstatic.com/modulo-carto-micro-sd-arduino-automaco-pic-leitor-gravador-D_NQ_NP_372321-MLB20748117091_062016-O.webp
mostrando a pinagem e conexão do módulo ao Arduino Uno? Tenho esse modulo, um Arduino Uno e um servo, quero levantar o braço do servo e emitir um som mp3, fazer isso também quando ele abaixar, só que to perdidinha, pode me ajudar? Obrigada! :**
Olá pessoal, sou novo no arduino e estava com problemas em executar audio no modulo, dei uma pesquisada e vi que era uma coisa besta que não percebi.
Como o modulo que comprei era novo ainda não tinha feito a ligação que existe bem em cima abaixo do corte que marca a posição correta dele, onde tem escrito 5v e 3.3v. Tive que fazer a ligação com o polo 3.3v com o polo do centro. Resolvi o meu assim. Abraços
Oi Mitchelson,
Muito obrigado. Realmente os primeiros módulos que eu testei já vinham com a tensão selecionada, e os mais recentes exigem uma solda nesses terminais.
Abraço!
Adilson
Não estou conseguindo fazer funcionar com um cartão de 2GB SanDisk, somente com o de 1GB da SanDisk, porem não acho mais o de 1GB para comprar, tem algo que eu possa fazer no software para o cartão de 2GB funcionar ??
Galera, não estou conseguindo fazer o modulo funcionar com um cartão de 2GB (SanDisk), consegui somente com o cartão de 1GB da SanDisk, o problema é que não acho mais cartões de 1GB para comprar, alguem sabe se existe algo que eu possa fazer no software para o cartão de 2GB funcionar?
Boa tarde, como eu faço para reproduzir em uma caixinha de som de computador?
Boa noite,
Liguei a caixinha de som nos pinos 4 e 5 do módulo.
Abraço!
Boa noite,este modulo se eu quiser reproduzir um audio em wave,ele vai funcionar sem passar por programação?
Boa noite,
Esse módulo especificamente não reproduz arquivos wav.
Abraço!
Por que é preciso colocar um delay depois do comando playvoice? É por acaso o tempo que irá reproduzir o arquivo? Não tem como ele tocar o arquivo até o final seja qual for a duração? Grato Wagner
Muito legal!
Mas para mim ficou melhor o programa invertendo a posição entre:
wtv020sd16p.asyncPlayVoice(2);
e
wtv020sd16p.stopVoice();
Ficou assim:
//Programa : Modulo WTV020-SD e Arduino Uno
//Autor : Arduino e Cia
#include
int resetPin = 4; //Pino Reset
int clockPin = 5; //Pino clock
int dataPin = 6; //Pino data (DI)
int busyPin = 7; //Pino busy
//Variavel que armazena os caracteres recebidos
byte buf;
int num;
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
void setup()
{
//Inicializa a serial
Serial.begin(9600);
//Inicializa o modulo WTV020
wtv020sd16p.reset();
//Informacoes iniciais
menu_inicial();
}
void loop()
{
//Aguarda os dados da serial
while(Serial.available() > 0)
{
buf = Serial.read();
num = buf – 48;
Serial.println(num);
//Caso seja recebido o numero 1, reproduz o arquivo 0001.ad4
if (num > 0 && num < 21)
{
Serial.print("Reproduzindo ");
Serial.println(num);
wtv020sd16p.asyncPlayVoice(num);
wtv020sd16p.playVoice(0);
delay(1000);
wtv020sd16p.stopVoice();
menu_inicial();
}
}
}
//Mostra menu de opcoes
void menu_inicial()
{
Serial.println("nDigite : ");
Serial.println();
}
Abraço!
Olá, a caixa de som necessária para usar no circuito, pode ser qualquer uma ou é necessário uma específica?
No caso de poder utilizar uma caixa de som comum, como faço para conectá-la ao ao módulo? É só pegar os fios positivo e negativo da alimentação?
Aguardo resposta.
Att, Analice.
Oi Analice,
Isso mesmo. Você liga no positivo e negativo, como está no desenho do circuito. Quando ao modelo, recomendo uma caixa de som amplificada, ok?
Abraço!
Adilson
C:UsersUserDesktopWtv020sd16pexamplesWtv020sd16pExampleWtv020sd16pExample.ino:7:25: fatal error: Wtv020sd16p.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Erro compilando para a placa Arduino/Genuino Uno
Esse é o erro que não consigo resolver. Me ajuda, por favor
Bom dia,
A biblioteca foi instalada corretamente?
Abraço!
Adilson
Arduino e cia qual comando utilizou pra dar certo?
Command : -E4 Encode PCM -> ADPCM(4-BIT)
-E3 Encode PCM -> ADPCM(3-BIT)
-E2 Encode PCM -> ADPCM(2-BIT)
-E1 Encode PCM -> HELIOS WFM
-E16 Encode PCM -> PCM16
-E12 Encode PCM -> PCM12
-E8 Encode PCM -> PCM8
Olá, comprei um módulo destes e estou tendo problemas em fazer duas coisas ao mesmo tempo (piscar luzes em sequência enquanto toco um som), é possível fazer isso?
Os comandos "play asynchronously/synchronously", designam sincronia com o que especificamente? Estaria aqui a minha solução?
Obrigado desde já e continue com a ótima página, muito instrutiva e de fácil entendimento.
Oi Fernando,
Obrigado. Preciso testar isso, mas é um ponto de partida interessante. Recomendo que você use o millis() para o efeito de piscar o led, ao invés do delay().
Abraço!
Adilson
Bom Dia, seria possível ligar esse modulo em um alto falante de potencia maior, como um de 40W, com fonte independente através de conector RCA???
Agradeço desde já e seus posts são ótimos
Boa Tarde,
Estou com problema a o reproduzir o programa, quando aperto para reproduzir o áudio 1 por exemplo ele reproduz mas na próxima reprodução que eu solicitar ele não reproduz nada sempre assim só funciona as reproduções impares, outra duvida também é se eu consigo substituir o Buf por um botao e se sim como ficaria ?
Fico no aguardo de uma resposta. Obrigado.
Essa programação está errada. o comando wtv020sd16p.playVoice(0); está igual nos dois casos. Só irá tocar o arquivo 0. Se mudar wtv020sd16p.playVoice(0); para wtv020sd16p.playVoice(1); dará certo!
Oi Edu,
Posso até testar novamente, mas acho que está certa sim, pq quem toca o arquivo de áudio é a linha seguinte(wtv020sd16p.asyncPlayVoice(x)). Essa linha está diferente nos dois casos.
Abraço!
Adilson
Olá, estou usando este módulo, porém eu coloquei 12 arquivos, mas de 10 pra baixa não estão tocando. O que faço?
Oi Nicole,
Como você nomeou os arquivos? Pode ser que os nomes estejam muito grandes. Tente usar M1, M2, M3 e assim por diante.
Abraço!
Adilson
Bom, vou tentar perguntar, me parece que responde todas as perguntas.
Como eu consigo tocar dois áudios ao mesmo tempo?
Bom dia,
Seria tipo uma música de fundo e uma outra principal, como em jogos, por exemplo?
Abraço!
Adilson
Até que fim achei o que estava procurando. Artigo bem
completo sobre o assunto. Obrigado pela informação.
Compartilhei no meu pinterest.
Opa! Valeu Claudio! 🙂
Abraço.
Adilson
Ótimo trabalho!
Após perder muito tempo na internet encontrei esse blog
que tinha o que tanto procurava.
Gostei muito.
Meu muito obrigado!!!
Obrigado Marcos!
Abraço.
Adilson
Caro amigo, eu utilizo a entrada de cartão sd do meu Ethernet shield como ficaria meu codigo ?