Gravação e reprodução de audio com módulo ISD1820

Montagem Final

Montagem Final

Hoje vamos aprender a usar o módulo de reprodução e gravação de áudio ISD 1820. O módulo pode ser usado sozinho, por meio de seus push buttons, ou com um MCU de interface(controle via GPIO).

Conheça um pouco mais sobre o módulo e aprenda a incorporá-lo nas suas aplicações.

Introdução à gravação e reprodução de áudio com ISD1820

O módulo de gravação e reprodução de voz é baseada no CI ISD 1820. O módulo oferece capacidade de playback entre 8 e 20 segundos e é facilmente controlado tanto por push-buttons como por um microcontrolador. Isso significa que não necessariamente você precisa ter o Arduino fazendo interface com ele, basta montar o circuito e usar os push-buttons integrados do módulo.

Nesse artigo vamos usar o Arduino, pois o mesmo oferece flexibilidade e a possibilidade de integrar a gravação e reprodução de áudio em um projeto de automação, por exemplo.

O coração do módulo é o CI ISD 1820. Ele é o responsável pelo processo de aquisição de voz e reprodução dos dados gravados na memória. Além do CI, uma rápida inspeção no módulo permite identificar um microfone de eletreto, o terminal de alimentação, os botões de controle, com as funções REC, PLAYE e PLAYL, e também as saídas para o auto-falante, que é o conector branco na extremidade do módulo.

Veja na figura abaixo a localização do microfone, dos terminais de alimentação e do CI ISD 1820:

 

Módulo ISD 1820

Módulo ISD 1820

Para selecionar o tempo de gravação, é necessário ajustar/trocar um resistor externo. A frequência de amostragem também é alterada por meio desse resistor. O tempo de gravação vai de 8 a 20 segundos, e a frequência de amostragem vai de 4 a 12kHz. O resistor default é de 100k. Como você pode conferir na tabela abaixo, isso significa que, por padrão, o módulo reproduz 10 segundos de áudio e possui frequência de amostragem de 6,4kHz.

Resistência Externa Duração(segundos) Sample Rate(Hz) Bandwidht(Hz)
80 8 8 3,4
100 10 6,4 2,6
120 12 5,3 2,3
160 16 4 1,7
200 20 3,2 1,3

Descrição da placa e pinagem

Os pinos do módulo ISD 1820 são os seguintes:

  • VCC: 3.3V;
  • GND: Referência da alimentação;
  • REC: É uma entrada ativo-alta para gravação de sinais. O módulo começa a gravar sempre que essa entrada é ativada. Importante notar que o pino deve permanecer em nível alto durante todo o tempo de gravação. Ou seja, não vale apenas enviar um pulso achando que a gravação vai começar e terminar. O pino de REC tem precedência sobre os outros dois(PLAL e PLAYE), assim, se você deu um comando com PLAYL e depois com REC, o comando com REC é executado;
  • PLAYE: Comando de reprodução por pulso positivo. Quando esse pino é ativado(transição de nível baixo para nível alto identificada), o módulo começa a reproduzir a gravação até que a memória termina ou um End-of-Message seja encontrado na gravação;
  • PLAYL: Comando de reprodução controlado por nível lógico. Quando esse pino vai de nível baixo para alto, um ciclo de playback é iniciado e toca enquanto o pino se mantiver ativado;
  • SP+ e SP-: São as saídas para o auto-falante. Pode ser ligado em speakers com impedâncias de até 8 ohms;
  • MIC: É a entrada do microfone, cujo sinal é aplicado ao pré-amplificador on-chip;
  • FT – Feed Through: Acionando esse modo, o microfone ativa os auto-falantes diretamente;
  • P-E: Modo no qual as gravações são tocadas sucessivamente;

Vale ressaltar a tensão de alimentação do módulo, que é de 3.3V, e não 5V. Portanto, fique atento para não alimentar o módulo com uma tensão maior do que 3.3V, sob risco de danificá-lo.

O procedimento de gravação/Reprodução manual consiste em 2 passos:

  1. Aperte/Acione o botão REC(repare no LED que irá acender) e mantenha-o em nível alto até o fim da gravação;
  2. Selecione o modo de Playback.
    1.  PlAYE: requer ativação somente uma vez e irá tocar toda a gravação;
    2. O PLAYL inicia a reprodução e para terminar é necessário desativá-lo;
    3. P-E: Quando esse jumper está ligado, a gravação é tocada repetidamente até que o jumper seja desligado;
    4. FT: Quando esse jumper está ligado, tudo que o microfone captar será reproduzido diretamente no auto-falante;

Descrição do projeto

Neste artigo vamos implementar um exemplo para controlar o módulo por meio do arduino. O projeto será o seguinte:

Sempre que um objeto for detectado por um sensor de presença TCRT5000, vamos reproduzir um comando de voz previamente gravado. 

Assim, nosso teste consiste em duas etapas: Acionar o botão de REC via Arduino para gravar o comando de voz desejado, e depois entrar num modo de identificação de objetos, no qual sempre que o sensor identificar a presença de um objeto, o módulo ISD 1820 irá reproduzir a gravação.

Aspectos de Hardware

No módulo, você vai ver uma barra de pinos com 12 pinos, 6 do lado direito e seis do lado esquerdo. A configuração default é deixar os dois jumpers interconectando todos os 4 pinos do meio do lado interno. O significado de cada pino e configuração é mostrado na imagem abaixo:

Detalhe do conector ISD 1820

Detalhe do conector ISD 1820

Quando os jampers estão conectados como em A(configuração P-E), a gravação é reproduzida de forma contínua. Quando está um jumper está conectado em B, não há alterações pois os dois pinos do meio não possuem funções. Quando um jumper está conectando os dois pinos em C, o modo F-T é habilitado.

O circuito junto com o TCRT5000 é mostrado abaixo. Nas ligações do módulo, por conveniência, mostramos apenas os pinos usados por nosso software.

Montagem TCRT5000, Arduino e ISD 1820

Montagem TCRT5000, Arduino e ISD 1820

Para entender como montar o sensor TCRT5000, acesse esse outro post no qual o seu funcionamento é explicado e é feito um exemplo de aplicação.

Aspectos de Software

O software usado é o seguinte:

   
#define saidaSensor 5
#define led 13
#define ativaPlayL 3
#define ativaREC 4
#define tempoReproducao 10000

int leituraSensor = 0;  
   
void setup()  
{  
  pinMode(saidaSensor,INPUT);
  pinMode(ativaPlayL,OUTPUT);
  pinMode(ativaREC,OUTPUT);
  pinMode(led,OUTPUT);//Pino para ativar o led
  pinMode(saidaSensor,INPUT);//Pino ler o sinal no coletor do fototransistor  
  Serial.begin(9600);//inicializa a porta serial com baud rate de 9600
  MainMenu();
}  
   
void loop()  
{ 
  leituraSensor = digitalRead(saidaSensor); 
  
  if (leituraSensor == 0 ) 
  {  
    digitalWrite(led,HIGH);
    digitalWrite(ativaPlayL,HIGH);
    delay(tempoReproducao);
    digitalWrite(ativaPlayL,LOW);
  }
  else 
    digitalWrite(led,LOW);
 
  delay(10);
} 

void MainMenu()
{ 
  int controlLoop = true;
  char byteRead;
  Serial.println("Digita a para gravar ou b para rodar a reproducao");
  
  while(controlLoop)
  {
      if (Serial.available())  //verifica se tem dados diponível para leitura
      {
        byteRead = Serial.read(); //le bytwe mais recente no buffer da serial
        Serial.write(byteRead);   //reenvia para o computador o dado recebido
      }
      
      if( byteRead == 'a') 
      { 
        Serial.println("Gravação começa no 3");
        contador(3);
        digitalWrite(ativaREC,HIGH);
        Serial.println("Gravando por 10 segundos!");    
        contador(10);      
        digitalWrite(ativaREC,LOW);
        Serial.print("Pronto!");
        Serial.println("Digite b para comecar a reproducao");
        byteRead = ' ';
      }
      
      if(byteRead == 'b' )
      { 
        controlLoop = false;
        byteRead = ' ';
      }
  }
}

void contador(int quantasVezes)
{
  for(int i=0; i<quantasVezes; i++)
  {
    Serial.print(i+1);
    Serial.println("...");
    delay(1000);
  }

}

No programa, foram criadas duas funções auxiliares:

  • MainMenu(): Essa função é um menu rápido para que o usuário possa fazer gravações antes de o sistema entrar na função void loop();
  • contador(): Uma função simples apenas para mostrar no terminal serial o tempo de duração da gravação do áudio;

Ao energizar o arduino e com o terminal serial aberto, você verá as mensagens pedindo para gravar um novo áudio ou proceder para a reprodução. Se escolher gravar, você poderá gravar um novo áudio por 10 segundos(tempo padrão). Se escolher proceder para as reproduções, o firmware vai para a função void Loop(). Nesta função o sensor TCRT5000 é lido constantemente. Sempre que um objeto entra no raio de leitura, a saída do sensor muda de estado e é acionado o pino PLAYL do módulo ISD 1820 por 10 segundos.

Dependendo da sua aplicação, você pode fazer pequenos ajustes no código para reproduzir o áudio por um tempo menor ou utilizar outras funcionalidades do módulo ISD 1820.

Considerações finais

Lembre-se de conferir o post sobre o sensor reflexivo TCRT5000 e recomendamos também a leitura das referências abaixo, principalmente a número 3, que é um guia do usuário sobre o ISD 1820. No mais, faça as adaptações no código para ajustar às suas necessidades e compartilhe suas dúvidas conosco.

Referências:

  1. Arduino Forum Oficial;
  2. How to use ISD1820 voice recorder and player;
  3. ISD1820 Voice Recorder Module User Guide;
  4. Voice Record Module – ISD1820 – Elecfreaks;
Faça sua avaliação.
Por favor, aguarde...
Vitor Vidal
Vitor Vidal
Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.