MÓDULO SENSOR DE SOM KY-037: ACENDENDO UM LED COM ARDUINO

 Este tutorial tem como objetivo ensinar a utilizar o sensor de som para acender um LED. Surpreendentemente, vamos automatizar e programar um LED para acender quando o sensor detectar som. Além disso, aprimoraremos os seus conhecimentos sobre programação para arduino utilizando as funções digitalWrite e delay.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o módulo sensor de som?

O sensor de som constitui uma placa de circuito impresso com uma função específica. O módulo faz com que emita pulsos de energia ao detectar som fazendo com que uma lâmpada acenda ou apague.

– Funcionamento

Presipuamente, o sensor realiza a transformação da intensidade das ondas sonoras para tensões de 0 a 5V. Em seguida, o pino de leitura digital manda um sinal de nível lógico alto se uma determinada intensidade do som for atingida. Este sensor em especial possui também um pino analógico para podermos ter diversos valores da intensidade do som.
O sensor de som utiliza o microfone para captar o som, identificando a vibração das ondas no meio e o Trimpot(Potenciômetro) para ajustar a sensibilidade do microfone a essas vibrações.
Este componente possui um potenciômetro com a função de ajustar a sensibilidade do som que queira detectar. Támbem, possui dois leds em sentidos opostos onde um serve para alertar que o módulo está energizado e o outro que a saída está ativa, pois ele detectou som.

 

ATENÇÃO: Entretanto, quando o circuito estiver montado, ao alimentar a placa o LED pode iniciar piscando. Isto indica que você deve ajustar a sensibilidade do sensor no trimpot.

– Os terminais deste sensor são:

  • VCC(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo, que é conectado ao GND do Arduino ou fonte
  • Saida Analogica(A0) – Pino de saída analogica (retorna o valor da intensidade do som captado)
  • Saída Digital(D0)– Pino de saída digital (retorna HIGH ou LOW)

Sensor de Som

Mãos à obra – Fazendo um pisca-pisca usando o Arduino

Componentes Necessários

 

– Montando o projeto:

Neste tutorial montaremos um circuito para acender um LED, porem ao contrário de muitos outros neste utilizaremos da programação para transformar um simples acender de LED em um pisca-pisca quando o sensor de som detectar vibrações. Monte conforme o projeto abaixo:

Diagrama de montagem do sensor de som

A perna maior dos LEDs esta ligada aos pinos das portas digitais(sendo estes, verde ligada a porta 7, amarelo ligada a porta 6 e vermelho ligada a porta 5) e a perna menor no resistor de 470 ohm. O resistor no que lhe concerne esta ligado ao GND da protoboard. Enfim, no circuito do sensor o VCC está ligado ao 5V do arduino, o GND esta também ligado no GND(-) da protoboard e a saída digital(D0) esta ligada ao pino 12 do arduino.

Imagem do circuito do sensor de som

– Programando o Arduino:

Com o circuito montado vamos conectar o arduino no computador e abrir a IDE arduino para configurar o programa. Escreva programa abaixo na IDE e compile o programa para o seu arduino. Vamos comentá-lo mais adiante.

Antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#define led1 7 // O led1 esta definido no pino 7
#define led2 6 // O led2 esta definido no pino 6
#define led3 5 // O led3 esta definido no pino 5
#define sensor 12 // O pino 12 contem o sensor de som
int  valor_A0 = 9; // Cria uma variável do tipo inteiro(int) chamada valor_A0 e atribui-lhe o valor 9
int aceso = 0; // Cria uma variável do tipo inteiro(int) chamada aceso e atribui-lhe o valor 0
void setup() {
  Serial.begin(9600); //Inicializa a comunicação serial e estabelece uma velocidade para ela
  pinMode(led1, OUTPUT); // Define o pino 7 onde esta o led1 como saída
  pinMode(led2, OUTPUT);  // Define o pino 6 onde esta o led2 como saída
  pinMode(led3, OUTPUT);  // Define o pino 5 onde esta o led3 como saída
  pinMode(sensor, INPUT); // Define o pino 12 como saída
}

void loop() {
  valor_A0 = digitalRead(sensor);// A variavel  valor_A0 recebe a leitura digital do pino 12 onde o sensor esta
  Serial.print("\nSaida A0: "); // Imprime no serial monitor "\nSaida A0: "
  Serial.print(valor_A0); // Imprime no serial monitor o valor que a variável valor_A0 recebeu
  delay(500); // O delay espera 500 milissegundos
   if(valor_A0 == HIGH){ // é detectada a presença de som
    switch(aceso){ // switch necessário para definir se o led vai acender ou apagar
      case 0: // caso o led esteja apagado...
        digitalWrite(led1, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led3, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led2, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led1, HIGH); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led3, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led2, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led1, HIGH); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led3, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led2, HIGH); // ...ele se apagará
        delay(1000);
        aceso = 1; // atribuição para definir que o led está aceso
        break;
      case 1: // caso o led esteja aceso...
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led1, HIGH); // ...ele se acenderá
        delay(500);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led3, HIGH); // ...ele se apagará
        delay(500);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, HIGH); // ...ele se apagará
        delay(500);
        digitalWrite(led1, HIGH); // ...ele se acenderá
        delay(500);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(100);
        aceso = 0; // atribuição para definir que o led esta apagado
        break;
    }
  }
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

Imagem do circuito do sensor de som funcionando

Em seguida, regule o potenciômetro para detectar as vibrações desejadas:

Imagem do regulador de vibrações

Assim, abra o Monitor serial e visualize o funcionamento do sensor:

Monitor serial

 

Entendendo a Fundo:

Software

– Definições e variáveis utilizadas no projeto

A instrução #define apenas associa os numeros dos pinos do arduino a nomes referente aos componentes conectados nestes pinos.  Semelhantemente, nas variáveis declaradas com o tipo int são atribuídas a elas valores escolhidos pelo programador.

#define led1 7 // O led1 esta definido no pino 7
#define led2 6 // O led2 esta definido no pino 6
#define led3 5 // O led3 esta definido no pino 5
#define sensor 12 // O pino 12 contem o sensor de som
int  valor_A0 = 9; // Cria uma variável do tipo inteiro(int) chamada valor_A0 e atribui-lhe o valor 9
int aceso = 0; // Cria uma variável do tipo inteiro(int) chamada aceso e atribui-lhe o valor 0

– Função Setup – Inicialização da comunicação serial e definindo pinos

A função setup é aquela que irá rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. O serial.begin(9600) inicializa a comunicação serial, assim possibilitando que visualizemos as intensidades do som no Monitor serial da IDE arduino. A função pinMode define quais dos pinos serão entradas e quais serão as saídas.

void setup() {
  Serial.begin(9600); //Inicializa a comunicação serial e estabelece uma velocidade para ela
  pinMode(led1, OUTPUT); // Define o pino 7 onde esta o led1 como saída
  pinMode(led2, OUTPUT);  // Define o pino 6 onde esta o led2 como saída
  pinMode(led3, OUTPUT);  // Define o pino 5 onde esta o led3 como saída
  pinMode(sensor, INPUT); // Define o pino 12 como saída
}

– Função Loop – Usando o monitor serial, leitura do nosso sensor de som e Estruturas de decisão

Por analogia, a função loop ao contrário da setup rodará tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Então, na variável valor_A0 será atribuído a leitura digital(digitalRead) do pino do sensor. A função Serial.print imprime no monitor serial primeiro o texto entre aspas e depois o valor que esta na variável valor_A0. Logo após, a função delay(500) faz com que esta impressão do texto e valor seja mais lenta dando tempo para a visualização.

void loop() {
valor_A0 = digitalRead(sensor);// A variável  valor_A0 recebe a leitura digital do pino 12 onde o sensor esta
Serial.print("\nSaida A0: "); // Imprime no serial monitor "\nSaida A0: "
Serial.print(valor_A0); // Imprime no serial monitor o valor que a variável valor_A0 recebeu delay(500); // O delay espera 500 milissegundos

O if é uma estrutura de decisão onde entre parenteses esta a condição para ser verdadeiro, ou seja, se a variável valor_A0 for igual a HIGH significa que detectou som e ele executará a estrutura swich – case. A estrurura ”switch(aceso)” determina qual dos dois cases serão executados. Se na variável aceso estiver atribuído a ela o valor 0 será o primeiro case, em contrapartida se estiver atribuído a ela o valor 1 será o segundo.
O digitalWrite escreve no pino do led nível logico HIGH ou LOW. Já o delay espera 1000 milissegundos para executar a próxima linha do código.

if(valor_A0 == HIGH){ // é detectada a presença de som
   switch(aceso){ // switch necessário para definir se o led vai acender ou apagar
     case 0: // caso o led esteja apagado...
       digitalWrite(led1, HIGH); // ...ele se acenderá
       delay(1000);
       digitalWrite(led3, HIGH); // ...ele se acenderá
       delay(1000);
       digitalWrite(led1, LOW); // ...ele se apagará
       delay(500);

Hardware

– Microfone

Microfones são transdutores sonoro-elétricos, ou seja, são dispositivos que convertem energia sonora em energia elétrica através de uma membrana flexível chamada diafragma. Este diafragma entra em vibração ao receber ondas sonoras. Através de um processo específico esta vibração produz um sinal elétrico que é depois amplificado e filtrado em aparelhos eletrônicos.

– LM393D

É um circuito integrado com amplificadores operacionais, capaz de executar tarefas avançadas.

Diagrama do Circuito Integrado LM393D

Acima temos o diagrama do circuito integrado LM393D com pinos saída, pinos de entrada com dois negativos e dois positivos, um pino do vcc e outro do GND . Estes pinos devem ser utilizados conforme a aplicação que queira realizar com o circuito integrado. No projeto ele é responsável por amplificar os som do ambiente em 100 vezes.

Considerações finais:

Neste tutorial mostramos como utilizar o sensor de som, que por sua vez, tem uma aplicação bastante interessante na automação onde utilizamos para energizar e desenergizar uma lâmpada como vemos no tutorial “ACENDENDO UMA LÂMPADA COM VIBRAÇÕES SONORAS“. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.