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.

51 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
  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