Projeto 99 - Como medir a intensidade sonora com módulo sensor de som e Arduino

Básico - Projeto 99

Medir e exibir a intensidade do som (VU meter) em um display LCD

Objetivo

O objetivo deste projeto é criar um dispositivo para aferir a intensidade sonora e mostrar essa intensidade em um display LCD e/ou apenas ligando e desligando leds. Para isso, vamos utilizar um módulo sensor de som capaz de transformar qualquer variação sonora do ambiente em sinais. O Arduino ao receber e processar esses sinais, irá controlar os leds e/ou o display LCD conforme as diferentes frequências sonoras que receber. No projeto utilizamos o módulo KY-038, mas o resultado deverá ser semelhante para qualquer outro tipo de módulo sensor de som.

Obs: O uso do display LCD é opcional. Se você não tiver um, poderá fazer o dispositivo de medição de intensidade sonora apenas utilizando os leds.

Definições

Intensidade Sonora: "A intensidade sonora está associada àquilo que nós chamamos de volume. A diferença entre um som intenso - ou forte - e um som fraco vem da amplitude de vibração da onda. Quanto maior a amplitude da onda, maior a pressão que a onda irá exercer no ar." A unidade de medida da intensidade sonora ou intensidade do som é o decibel (Fonte: Entenda os conceitos de ondas sonoras: timbre, altura e intensidade e Intensidade do som)

Módulo sensor de som: Módulo eletrônico composto principalmente por um chip comparador de tensão, um potenciômetro (trimpot) e um microfone de eletreto. O sensor deverá identificar a presença e a intensidade do som em um determinado ambiente, variando o estado de sua saída digital ao detectar o som (LOW para HIGH) e ainda detectar a intensidade do som ao usar uma saída analógica.

O limite de detecção de saída digital pode ser ajustado pelo potenciômetro (trimpot) que regulará, caso necessário, o nível de sinal sonoro necessário para alterar o estado da saída digital. Veja na ilustração abaixo os principais elementos que compõem um sensor de som, no caso o módulo KY038. Saiba mais sobre módulo sensor de som em Sound Sensor Tutorial for Arduino, ESP8266 and ESP32.

Conforme a imagem acima, temos:

Microfone (condensador elétrico): Utilizado para captar o som, identificando a vibração das ondas no ambiente;
Trimpot: Potenciômetro utilizado para ajustar a sensibilidade do microfone;
Led de Alimentação: Indica se o sensor está sendo alimentado, acendendo sua luz;
Led de Saída Digital: Indica se a saída digital está sendo acionada, acendendo sua luz;

Pinagem do módulo KY038

GND: Terra;
D0: Saída Digital, retorna HIGH ou LOW;
A0: Saída Analógica, retorna o valor da intensidade do som captado;
Vcc: Tensão de entrada entre 3.3 e 5Vcc.

Atenção: A inversão na alimentação pode ocasionar a queima do módulo.

Exemplo de módulos mercado: Abaixo temos os dois tipos mais comuns de módulos de som. A diferença entre eles é apenas nos pinos de saída. O módulo à esquerda tem duas saídas: 1 saída digital D0 e 1 saída analógica A0, já o módulo à direita tem apenas um saída que pode ser digital ou analógica, dependendo da conexão com o Arduino.

Aplicação

Para fins didáticos e projetos para alarmes, automação residencial e segurança.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Módulo Sensor de Som Módulo Sensor de Som KY-038 1

– Modelo: KY-038 ou KY-037 
– Chip comparador de sinal LM393
– Tensão de Operação: 3.3-5v DC
– Sensibilidade ajustável via potenciômetro
– Saída Digital e Analógica
– Corrente elétrica
– Led indicador para tensão
– Led indicador para saída digital

(datasheet)

Obs.: Você poderá utilizar outros tipos de sensores de som que possuem saída digital.

Display LCD

Display LCD 16X2 (com pinos soldados) 1

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Módulo I2C para display LCD

Módulo I2C com CI PCF8574 1 Módulo I2C display LCD Arduino

O módulo I2C poderá vir separado ou já soldado no display LCD

(datasheet)

Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador.

Led difuso 5mm Led 5mm 6

Utilizar led de qualquer cor

                                     

Resistor Resistor 150 Ω ou maior 6 Se precisar usar outros valores, calcule o resistor apropriado para o led ou barra grafica utilizada
Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da energia enquanto você monta o circuito.


Atenção

1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Leds ligados em série e em paralelo.

Obs.: Resistores superiores a 150 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V.

2.1. Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

3. Para a montagem do módulo sensor de som, vamos utilizar a saída analógica para verificarmos o valor lido no sensor, servindo como parâmetro de leitura da intensidade sonora do ambiente. (Obs.: se desejar, poderá manter a conexão com a entrada digital do Arduino, pois isso não afetará no resultado do projeto).

3.1. Se o seu módulo sensor de som possuir 3 pinos, utilize apenas o pino de saída para a conexão analógica do Arduino.

3.2. Veja a montagem do nosso exemplo:

 

4. Neste projeto você poderá utilizar também um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão. Atenção: Utilize um display LCD com os pinos soldados ou com o módulo adaptador I2C conectado.

5. Para a montagem do display com adaptador, entenda a estrutura do módulo I2C para display LCD 16x2 / 20X4:

Módulo I2C - Detalhes

5.1. Na lateral do adaptador encontramos 4 pinos, sendo: 2 pinos para alimentação (Vcc e GND) e 2 pinos para conexão com a interface I2C (SDA e SCL) que deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560. Veja a tabela abaixo com onde temos as principais placas Arduino e suas conexões com o I2C.

5.2. Para controlar o contraste do display, utilize o potenciômetro de ajuste de contraste. O jumper lateral, quando utilizado, permite que a luz do fundo (backlight) seja controlada pelo programa ou permaneça apagada.

5.3. A seleção de endereço do adaptador I2C para display LCD, na maioria dos módulos fornecidos no mercado já vêm configurados com o com o endereço 0x27. Se você não sabe qual endereço que o seu módulo I2C e/ou módulo RTC DS3231 está configurado, baixe o seguinte "sketch":

DOWNLOAD - I2C_scanner.ino

2.3.1 Após instalar e rodar o sketch acima, abra o monitor serial que mostrará qual é o endereço que o seu módulo I2C está configurado:

5.3.2 Nos casos em que módulo I2C estiver configurado com uma faixa de endereços diferente do endereço 0X27 altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto.

5.4. Para saber mais sobre a montagem e utilização de display LCD com módulo I2C leia: Projeto 48 - Como controlar um display LCD com o módulo I2C.

4. A montagem do nosso exemplo foi realizada em um protoboard com 830 pontos de com linhas não contínuas:

4.1. Observe que na imagem abaixo conectamos o módulo sensor de som no pino analógico A0 e no pino digital 2 do Arduino (cabos amarelo e verde). Entretanto, a conexão com o pino digital do Arduino não é necessária para este projeto.

Incluindo biblioteca LiquidCrystal_I2C

Atenção: Caso você opte pela utilização do display de LCD sem o módulo I2C, siga os procedimentos do Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e não instale a biblioteca abaixo.

Para que o módulo I2C funcione corretamente é necessário adicionarmos a biblioteca LiquidCrystal_I2C no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação.  Veja a tabela Coletânea de bibliotecas para módulos.

Download dos arquivos da biblioteca LiquidCrystal_I2C 

 DOWNLOAD - NewliquidCrystal_1.3.4.zip

Para saber detalhes desta biblioteca clique aqui.

Instalando a biblioteca pelo IDE do Arduino

Após fazer o download do arquivo NewliquidCrystal_1.3.4.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Para instalação e utilização da biblioteca para o módulo I2C como comunicação para um display LCD siga o tutorial: Projeto 48 - Como controlar um display LCD com o módulo I2C.

Código do Projeto (Sketch)

1. Faça o download e abra o arquivo projeto99.ino no IDE do Arduino:  DOWNLOAD - projeto99.ino

1.1. Se você optou em utilizar também o display LCD, veja as observações abaixo:

Obs. 1: Nos casos em que módulo I2C estiver configurado com um endereço diferente do endereço 0X27, altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto. - Veja o tutorial Projeto 48 - Como controlar um display LCD com o módulo I2C

Obs. 2: Se estiver utilizando um display de LCD 20 X 4, altere o comando da linha 71 para lcd.begin (20,4);

Obs.3: Se não possuir o módulo I2C utilize apenas o display LCD conforme Projeto 38 - Controlando um display LCD (instalação e comandos básicos).

1.2. Caso não tenha optado pela utilização do display, faça o download do projeto apenas com leds e abra o arquivo projeto99a.ino no IDE do Arduino:  DOWNLOAD - projeto99a.ino

2. Se preferir, copie e cole o código abaixo no IDE do Arduino (leds e display):

/*******************************************************************************

     Projeto 99 - VU Meter - Módulo Sensor de Som e Arduino
     Autor: Angelo Luis Ferreira
     Data: 11/10/2021
             http://squids.com.br/arduino

*******************************************************************************/
#include <LiquidCrystal_I2C.h>                // inclui a biblioteca LCD com I2C

// conexões pinos Arduino
const byte pinSensor = A0;                     // entrada analógica A0 do Arduino
const byte pinLeds[] = {7,8,9,10,11,12};       // saídas digitais 07 a 12 do Arduino

const byte nLeds = 6;                         // constante que define a quantidade de leds 
int incremento = 1;                           // variável com o valor de incremento em função de leds

const int calibragem = 816;                   // ALTERE O VALOR PARA O SEU PROJETO  

unsigned long anterior = 0;                   // variável para o temporizador (calibragem)

// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);  

// definição do item customizado para o display
byte Bloco[8] = {0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};                                   


void setup() {
  Serial.begin(9600);                        // inicializa a comunicação serial
  lcd.begin (16,2);                          // inicializa o display LCD 16X2.
 
 // define pinMode leds (saída do Arduino)
 for (byte i=0;i limite ? digitalWrite(pinLeds[i],HIGH) : digitalWrite(pinLeds[i],LOW);
      limite += incremento;
   }
   
// vu meter no lcd
   limite = calibragem;                          // define o limite para acionar o led e o display 
   for (byte i=0;i<16;i++) {
    if (sound > limite) {
      for(byte j=0;j<2;j++){
            lcd.setCursor(i*2, j);
            lcd.write((uint8_t)0);
            lcd.setCursor(i*2+1, j);
            lcd.write((uint8_t)0); 
      }    
    } else {
      for(byte j=0;j<2;j++) {
          lcd.setCursor(i*2, j);
          lcd.write(" ");
          lcd.setCursor(i*2+1, j);
          lcd.write(" ");
      }
    }    
    limite += incremento;  
 }
} 

void mostraValores() {
  unsigned long atual = millis();               // define variável atual do temporizador
  // exibe valores a cada segundo
  if (atual - anterior > 500) {
    Serial.print(analogRead(pinSensor));
    Serial.print(" | Limite: ");
    Serial.println(calibragem);
    anterior = atual;
  }
}

Vídeo

Calibragem do medidor de intensidade sonora

1. Antes de usar o nosso VU meter, precisamos calibrar o programa com o som ambiente sem ruídos externos (sem música de fundo, por exemplo).

2. Abra o Monitor Serial para leitura dos valores obtidos no módulo sensor de som. Observe que esses valores sempre variaram entre 0 e 1023, dependendo do tipo de sensor utilizado e como ele foi ajustado.

2.1. Observe que no nosso exemplo, o valor médio obtido é 823 (aproximado). (Esses valores podem variar em função, tensão e do som ambiente. Você deverá usar um valor médio das leituras no seu projeto).

2.2. Com o valor médio obtido, acrescente o incremento, que no nosso projeto é 1. Portanto o novo valor será 824 para o nosso exemplo. Faça da mesma forma com o valor obtido no seu projeto.

3. No programa, altere a constante calibragem com o novo valor, como mostra a figura abaixo:

4. Rode novamente o programa e abra Monitor Serial e verifique os valores lidos comparado com o Limite. O valor médio obtido deverá ser ligeiramente inferior que o Limite. Veja como ficou o nosso exemplo:

4.1. Caso o valor obtido fique maior que o Limite, altere novamente o programa (sketch).

5. É recomendável que sempre faça a calibragem do nosso medidor de intensidade do som antes de utilizá-lo, pois os valores obtidos no módulo sensor de som podem variar em função de alterações no som ambiente, tensão do circuito ou regulagem do microfone.

Como o projeto deve funcionar

1. Ao reiniciar o programa depois de ter realizado a calibragem do medidor, como mostramos acima, os leds e o indicador exibido no display serão ativados apenas quando algum ruído com intensidade sonora maior que o limite que definimos, for detectado pelo sensor.

2. Assim, quanto mais forte for o som (maior amplitude de vibração da onda sonora), mais leds se acenderão. O mesmo acontecerá com o indicador no display LCD. Desta forma, podemos visualizar a intensidade sonora de uma música, por exemplo.

3. Caso não ocorra alterações nos leds ou no indicador do display, é recomendável que você refaça a calibragem do nosso medidor de som.

Observações: Como existem variações entre vários tipos e modelos de módulos sensor de som, pode ser que seja necessário alterar o valor da variável incremento, linha 16 do sketch. Este valor poderá variar dependendo do sensor utilizado e o ajuste deverá ser feito manualmente por tentativa e erro.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores