Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 99 - Como medir a intensidade sonora com módulo sensor de som e Arduino
Projeto 99 - Como medir a intensidade sonora com módulo sensor de som e Arduino
Angelo Luis Ferreira | 11/10/2021
Acessos: 10.327
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 |
|
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 |
|
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:
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