15 junho 2015

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.
Modulo MP3 WTV020-SD Arduino
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:

Pinagem modulo WTV020-SD-16P



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:

Circuito Arduino Uno e modulo WTV020-SD

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.

 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//Programa : Modulo 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:

WTV020-SD Serial Monitor

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:

WTV020-SD MP3 Mode
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.

73 comentários:

  1. Amigos uma pergunta, pode o positivo da caixa de som ser alimentado direto da bateria ? sairia o som mesmo assim ?

    ResponderExcluir
  2. como fazer para aumentar o volume do som?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
    2. Veja esse circuito.... https://habrastorage.org/files/15e/884/609/15e8846093cb405bbf393d37bc78ec0b.png

      Excluir
  3. 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.

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
    2. 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.

      Excluir
    3. 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!!??

      Excluir
  4. Olá,

    É possível realizar a gravação de áudio com esse módulo?

    ResponderExcluir
  5. ola
    montei o circuito ,porem nao funcionou .... existe algum tipo de alto falante especifico para este modulo? qual pode ser o meu problema?

    ResponderExcluir
    Respostas
    1. 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?

      Excluir
  6. 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

    ResponderExcluir
  7. Quais as especificações do auto-falante?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  8. 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

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
    2. Pode ser outro amplificador mais simples?

      Excluir
    3. Pode sim, até um "caseiro"... :)

      Abraço!

      Excluir
  9. Boa noite posso usar este módulo para o Arduíno dar feedback ?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  10. Obrigado tem algum vídeo mostrando como posso fazer o módulo dar os feedback?

    ResponderExcluir
    Respostas
    1. Oi Giovanni,

      Não tenho, mas é uma boa sugestão, vou providenciar. :)

      Abraço!

      Excluir
  11. ola, belo post, eu estou com dificuldades de fazer ele executar uma musica apenas uma vez dentro do SETUP como eu faria isso?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  12. 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!

    ResponderExcluir
    Respostas
    1. Acontecendo o mesmo comigo, que estranho

      Excluir
    2. Até tentei gambiarrar e pedir pra ele executar 2x sempre, mas não adiantou

      Excluir
    3. 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...

      Excluir
  13. 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 ?

    ResponderExcluir
  14. Como faz para deixar ele em loop? tipo: Liga - começa a tocar e não para nunca mais

    ResponderExcluir
    Respostas
    1. Boa noite,

      Faça um loop em que dentro dele tenha só esses dois comandos:
      wtv020sd16p.asyncPlayVoice(1);
      delay(5000);

      Abraço!

      Excluir
  15. Você tem alguma alternativa com millis? Não posso usar delay no meu projeto :|

    ResponderExcluir
  16. posso fazer a mesma ligação para arduino Mega?

    ResponderExcluir
  17. Posso utilizar a mesma programação para arduino mega?

    ResponderExcluir
  18. qual autofalante eu posso colocar !?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você pode usar um desses pequenos, que vem (vinham) dentro do computador, de 8 ohms.

      Abraço!

      Excluir
    2. Gostaria de saber quantos Wats aguente esse modulo?

      Excluir
    3. 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?

      Excluir
  19. Ola poderia me passar o conversor de áudio que vc utilizou e funcionou por favor?
    Desde jah Muito Obrigado!
    Abraços!

    ResponderExcluir
    Respostas
    1. Oi Matheus,

      Usei o AD4converter:

      https://docs.google.com/file/d/0B4p82-pNB6o7QXFwZFg0dlZlWFE/edit

      Abraço!

      Excluir
  20. 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.

    ResponderExcluir
    Respostas
    1. Cara, como você conseguiu executar o áudio? Você usou um cartão de quantos gigas?

      Excluir
  21. 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?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  22. 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.

    ResponderExcluir
  23. ola tem como eu usar esse código com o sd card?

    ResponderExcluir
  24. boa noite, posso substituir o pino clock(pino 5) por outro pino?
    obs: estou utilizando um leitor RFID que ativa o módulo.

    ResponderExcluir
  25. 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. evertonfoxhound2@gmail.com

    ResponderExcluir
  26. O módulo DF player mini é melhor

    ResponderExcluir
  27. 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....

    ResponderExcluir
  28. 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! :**

    ResponderExcluir
  29. 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

    ResponderExcluir
    Respostas
    1. 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

      Excluir
  30. 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 ??

    ResponderExcluir
  31. 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?

    ResponderExcluir
  32. Boa tarde, como eu faço para reproduzir em uma caixinha de som de computador?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Liguei a caixinha de som nos pinos 4 e 5 do módulo.

      Abraço!

      Excluir
  33. Boa noite,este modulo se eu quiser reproduzir um audio em wave,ele vai funcionar sem passar por programação?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Esse módulo especificamente não reproduz arquivos wav.

      Abraço!

      Excluir
  34. 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

    ResponderExcluir
  35. 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!

    ResponderExcluir
  36. 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.

    ResponderExcluir
    Respostas
    1. 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

      Excluir
  37. C:\Users\User\Desktop\Wtv020sd16p\examples\Wtv020sd16pExample\Wtv020sd16pExample.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

    ResponderExcluir
    Respostas
    1. Bom dia,

      A biblioteca foi instalada corretamente?

      Abraço!

      Adilson

      Excluir
  38. 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

    ResponderExcluir
  39. 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.

    ResponderExcluir
    Respostas
    1. 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

      Excluir