Manual
do
Maker
.
com
Esse é um brinquedo "pronto pra uso", por assim dizer. Esse módulo ISD1820 é chamado de "gravador de voz" por ter um microfone embutido, mas ele pode gravar qualquer som, obviamente. E aí começam as ideias, uma vez que você pode gravar até 10 segundos de qualquer tipo de som, inclusive dar "aquela kibada" em um som polifônico de telefone fixo ou um toque de celular. Além disso, ele acompanha também o falante de 8ohms.
Ele é um módulo totalmente independente para gravar e reproduzir, mas o interessante é fazer a interface com alguma inteligência que possa integrá-lo à IoT de sua residência. Se a saída for amplificada por algum meio, ele pode ser um ótimo substituto para as campainhas sem graça, que possuem os mesmos som desde o descobrimento da campainha (!).
Outra possibilidade é gravar uma amostra de som no momento em que algum evento acontece. Por exemplo, quando um sensor de presença é acionado.
No vídeo eu mostro a gravação e as duas maneiras de reprodução pelos botões, seguidamente interagindo com o Arduino.
Esse CI é utilizado em diversos módulos diferentes. Esse em especial, comprei do atual parceiro e patrocinador de artigos com coisas diferentes - a Fulltronic. Se tiver interesse no módulo (que por sinal custa uma bagatela), o link é esse.
Esse módulo vem lacrado no tradicional pacote anti-estático e acompanha o falante que você vê na imagem e no video.
Nos pinos ao lado do microfone faz-se a alimentação, seguidamente os outros pinos fazer o papel dos botões. Na ordem estão:
VCC | de 3V à 5V |
GND | ground |
FT | Feed Through - Reproduz o que estiver entrando no microfone imediatamente |
P-L | Play Level-activated - toca tudo na interrupção (botão ou GPIO) |
P-E | Play Edge-activated - Toca enquanto pressionado (ou um pulso via GPIO) |
REC | Grava |
O dispositivo tem capacidade para 10 segundos de gravação em sua memória interna, sempre substituindo pela nova gravação ao pressionar a tecla REC ou ao fazer o acionamento através de um GPIO de uma MCU externa no pino correspondente à gravação.
Sem mais delongas, vamos ao deslinde desse colóquio, prenunciando-o pelo código que segue e precedendo-o pelo pinout da tabela supracitada (isso significa "mãos-à-obra").
O código é auto-explicativo, mas de qualquer modo vou fazer uma prévia; criei um menu help() e uma função para cada função que pode ser executada. No inicio do código você já vê o define dos pinos, dos quais utilizo apenas PLAYE,PLAYL e REC. A alimentação é proveniente do Arduino (5V) e os defines tem o mesmo nome que está silkado na board, portanto basta conectar o GPIO correspondente. O tempo de gravação também pode ser variável, mas confesso que fiquei com preguiça de escrever mais código.
#define REC 9
#define PLAYE 8
#define PLAYL 7
#define FT 10
#define REC_T 10000 //tempo de gravacao em ms
char command = '0';
int ttp = 0; //Time To Play
bool timeChoice = false;
void setup(){
for (int i=7;i<10;i++){
pinMode(i, OUTPUT);
digitalWrite(i,LOW);
}
Serial.begin(9600);
}
void help(){
Serial.println("Help menu");
Serial.println("h - Exibe esse menu");
Serial.println("r - Gravar");
Serial.println("e - Toca o que foi gravado");
Serial.println("l - Toca por um periodo selecionado");
}
void record(){
//inicia gravacao de 10s
Serial.println("REC");
digitalWrite(REC,HIGH);
delay(REC_T);
digitalWrite(REC,LOW);
delay(3000);
}
void playE(){
Serial.println("PLAYE");
digitalWrite(PLAYE,HIGH);
delay(100);
digitalWrite(PLAYE,LOW);
delay(REC_T);
}
void playL(){
Serial.println("PLAYL");
timeChoice = true;
Serial.println("Entre com o tempo desejado de 1 a 0");
Serial.print("(0 para 10) >>> ");
timeChoice = true;
}
void timeToPlay(){
ttp = command-48 > 0 ? (command-48)*1000 : REC_T;
Serial.print("TTP: ");
Serial.println(ttp);
digitalWrite(PLAYL,HIGH);
delay(ttp);
digitalWrite(PLAYL,LOW);
timeChoice = false;
}
void loop(){
if (Serial.available() > 0){
command = Serial.read();
Serial.print("Commando: ");
Serial.println(command);
Serial.println("-----------------");
if (command == 'h'){
help();
}
else if (command == 'r'){
record();
}
else if (command == 'e'){
playE();
}
else if (command == 'l'){
playL();
}
else if ((command >47 && command <58) && timeChoice){
timeToPlay();
}
}
}
Esse módulo precisa unicamente do acionamento do GPIO, de modo que você pode utilizar Arduino, Pic, ESP8266, Raspberry, MSP432 ou o que mais imaginar, bastando cumprir o requisito de ter GPIO.
Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.