terça-feira, agosto 25, 2020

Módulo Gravador de Voz Usando o ISD1820

Vamos hoje dar uma olhada rápida neste módulo de gravação de voz que você encontra nos botecos que vendem módulos "para Arduino".

O módulo ligado a um Arduino para acionamento comandado por um sensor ultrassônico

O ISD1820 é um integrado capaz de gravar uma mensagem de voz de até 20 segundos na sua memória interna e reproduzi-la. Ele requer poucos componentes externos (resistores e capacitores) para conectar um microfone e um alto-falante. O módulo que vamos ver se baseia no circuito exemplo contido no datasheet (não achei o datasheet específico do ISD1820, mas tudo indica que é um exemplar da série ISD1800, descrita neste documento, com memória para até 20 segundos).

Por falar nestes "até 20 segundos"... O tempo máximo de gravação depende da taxa de amostragem, que é controlada por um resistor (R2 no módulo). O módulo vem com um resistor de 100K, o que limita o tempo em 10 segundos:


Vamos examinar primeiro a operação do módulo isolado. Para isto basta colocar uma alimentação de 3,0 a 5,0V entre os pinos VCC e GND do conector de pinos. A operação é feita através de 3 botões:
  • REC: a gravação começa quando você aperta este botão e dura até você soltar o botão ou acabar a memória.
  • PLAYE: aperte e solte este botão para reproduzir a mensagem gravada. O "E" é de "edge" (borda): a reprodução é disparada pela mudança de nível baixo para alto em um pino do ISD1820.
  • PLAYL: aperte e mantenha pressionado para reproduzir a mensagem gravada. O "L" é de "level" (nível): a reprodução é feita enquanto é mantido o nível alto em um pino do ISD1820.
Estes três sinais estão também disponíveis no conector de pinos (com os nomes REC, P-E e P-L), juntamente com um sinal FT que, quando em nível alto, transforma o ISD1820 num amplificador, reproduzindo diretamente no alto falante o sinal do microfone.

Um LED fica aceso enquanto está sendo feita a gravação e pisca rapidamente quando a reprodução é concluída.
 
Ao lado do conector de pinos tem dois jumpers:
  • FT: fixa o sinal FT (transformando o gravador em um amplificador do microfone)
  • P-E: conecta o sinal P-E ao sinal do LED, fazendo com que a gravação seja reproduzida continuamente. 

Vamos fazer uma brincadeira simples com um Arduino, ligado ao módulo ISD1920 e um sensor ultrassônico HC-SR04:


O programa abaixo dispara uma gravação de 5 segundos quando o Arduino é ressetado; depois disso a mensagem será tocada quando o sensor ultrassônico detectar que tem um obstáculo a menos de 0,5 metro.
/*
 * Exemplo de uso do Módulo Gravador de Voz com ISD1820
 */

// Conexões
const int pinPlay = 2;
const int pinRec = 3;
const int pinTrigger = 4;  
const int pinEcho = 5;

// Iniciação
void setup() {
  // Inicia o sentido dos pinos
  pinMode (pinPlay, OUTPUT);
  pinMode (pinRec, OUTPUT);
  pinMode (pinTrigger, OUTPUT);
  pinMode (pinEcho, INPUT);
  
  // Inicia o estado dos pinos
  digitalWrite (pinPlay, LOW);
  digitalWrite (pinRec, LOW);
  digitalWrite (pinTrigger, LOW);

  // Faz uma gravação de 5 segundos
  digitalWrite (pinRec, HIGH);
  delay (5000);
  digitalWrite (pinRec, LOW);
}

// Loop principal
void loop() {
  // Verifica se tem algo próximo
  digitalWrite (pinTrigger, HIGH);  
  delayMicroseconds (20);  
  digitalWrite (pinTrigger, LOW);  
  long tEcho = pulseIn (pinEcho, HIGH, 38000L);  
  if (tEcho < 2900L) {  
    // Toca a gravação
    digitalWrite (pinPlay, HIGH);
    delay (10);
    digitalWrite (pinPlay, LOW);
    // Aguarda acabar
    delay(5000);
  }
  // Dar um tempo entre as leituras
  delay (500);
}
Embora interessante, este módulo não é muito versátil. O uso típico com microcontolador seria para emitir uma mensagem pré gravada quando um certa condição por detectada. Uma alternativa mais versátil (mas mais cara e sem capacidade de gravação) é usar um módulo MP3 (como este ou este).

Nenhum comentário: