Como usar o sensor de som Arduino
O assunto hoje do Arduino e Cia é som. Mais precisamente, Sensor de Som.
Já vimos aqui no site como gerar sons a partir do Arduino usando o comando tone. O que eu vou utilizar hoje é esta pequena mas eficiente placa com microfone embutido, o Sensor de Som Arduino. Com ela, vou mostrar como detectar o som ambiente e como tratar o sinal gerado por esse módulo.
Esta placa, além do microfone, tem um pequeno amplificador embutido (o circuito integrado LM386), pois apenas o microfone não seria capaz de enviar os dados para o Arduino.
O esquema de conexão é bem enxuto, composto por apenas 3 pinos: Vcc, GND e S (sinal). No meio da placa, há um potenciômetro para ajuste da sensibilidade.
A placa trabalha com tensão de 5v, e o pino de sinal deve ser ligado de preferência à uma porta analógica do Arduino, já que o sinal gerado é variável, e com isso podemos observar os diferentes níveis de ruído captados pelo microfone.
O circuito de testes será composto pelo módulo Sensor de Som, mais o display LCD Winstar WH1602A, que já abordamos aqui no site, neste artigo. Se você não tem esse display, não se preocupe, pois o programa é facilmente adaptável à outros modelos de displays.
O display, na sua parte superior, vai mostrar o nível do som (Baixo, Médio e Alto), e na parte inferior, será mostrada uma barra que vai acompanhar em tempo real o nível do som detectado pelo microfone:
Conexão do sensor de som com Arduino
Para conexão do sensor de som em uma placa Arduino Uno junto com display LCD, siga o esquema abaixo:
O programa não utiliza nenhuma biblioteca própria para o módulo sensor de som, já que vamos apenas efetuar a leitura do sinal variável recebido pelo Arduino na porta analógica. Para o display LCD, é utilizada a já conhecida LiquidCrystal.
Para melhorar a precisão do programa, optei por fazer a leitura do sinal 128 vezes, utilizando a variável NUM_LEITURA. Depois, calculo o valor médio e uso este valor para gerar no LCD a indicação de nível de som. O gráfico na linha inferior do display utiliza as informações do sinal em tempo real. Caso você opte por não utilizar o display, os dados também são mostrados no Serial Monitor.
// Programa : Niveis de ruido com Sensor de Som // Autor : Arduino e Cia int num_leitura = 128; //Define o numero de medicoes int pinosinal = A0; //Pino ligado ao pino S do modulo sensor de som long sinal; //Armazena o valor lido do Sensor de Som long soma = 0; //Armazena o valor total das n medicoes long nivel =0; //Armazena o valor medio int mostranivel = 0; //Utilizado para gerar o grafico inferior int apaga = 0; //Variavel auxiliar para gerar o grafico inferior #include <LiquidCrystal.h> //Carrega a biblioteca LCD //Define os pinos que serao ligados ao LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Array para montar o simbolo grafico byte a[8]= {B10000, B11000, B11100, B11110, B11110, B11100, B11000, B10000,}; void setup() { pinMode(pinosinal, INPUT); //Define o pino de sinal como Entrada Serial.begin(9600); lcd.begin(16,2); //Inicializa LCD lcd.clear(); //Limpa o LCD lcd.setCursor(0,0); //Posiciona o cursor na coluna 0, linha 0 lcd.print("Nivel : "); lcd.createChar(1, a); //Atribui a "1" o valor do array "A", //que desenha o simbolo grafico } void loop() { //Efetua 128 leituras do sinal for (int i=0; i<num_leitura ; i++) { sinal = analogRead(pinosinal); soma = soma + sinal; } nivel = soma/num_leitura; //Calcula o valor medio //Converte o valor lido para um valor entre 0 e 15 mostranivel = map(sinal, 0, 500, 0, 15); //Gera o grafico inferior for (int i = 0; i<mostranivel; i++) { lcd.setCursor(i,1); lcd.write(1); apaga = 15 - i; for (int x = i; x<15;x++) { lcd.setCursor(x+1,1); lcd.write(" "); } } //Verifica o nivel de sinal e exibe na tela if (nivel >0 && nivel < 100) { lcd.setCursor(8,0); lcd.print("Baixo"); Serial.print("Nivel Baixo"); Serial.print(" - Media : "); Serial.println(nivel); } if (nivel >100 && nivel < 200) { lcd.setCursor(8,0); lcd.print("Medio "); Serial.print("Nivel Medio"); Serial.print(" - Media : "); Serial.println(nivel); } if (nivel > 200) { lcd.setCursor(8,0); lcd.print("Alto "); Serial.print("Nivel alto"); Serial.print(" - Media : "); Serial.println(nivel); } soma = 0; //Reinicia a soma dos valores das medicoes }
Lembrando que os valores utilizados como comparação podem ser ajustados de acordo com o nível de sensibilidade definido pelo potenciômetro.
Finalmente, no vídeo abaixo você confere o projeto em funcionamento:
Gostou? Confira outros posts com Arduino aqui mesmo no Arduino e Cia!
Não estou conseguindo nenhum resultado com esta placa. A tensão de saída fica constante independente do nível de ruído ambiente. Atuações no POT fazem somente variar o nível da tensão de saída. Alguma sugestão??
Boa tarde,
Esse módulo é bem simples, não tem muito o que mexer. Tente ligar apenas o módulo, e verificar a saída no serial monitor para ver se há alguma alteração. Se não funcionar, recomendo testar com outro sensor.
Abraço !
Vocês conhecem algum módulo quem tenha melhor qualidade para detecar o som?
Vocês conhecem algum módulo que tenha melhor qualidade para detectar o som?
Meu problema e parecido, porém se gritar bem alto próximo ao sensor, ele reconhece, acho que falta um segundo potrnciometro, ou alteração no código
Preciso do valor em dB, como faz ?
boa tarde , gostaria de saber qual e a biblioteca que uso pra fazer o sensor funcionar , eu quero ele para ligar leds de acordo com a musica e n no lcd ???
Boa tarde Junior,
Este sensor não precisa de biblioteca para funcionar. Para o seu caso, acho mais recomendado um módulo MP3.
Abraço !
map(sinal, 0, 500, 0, 15); pq de 0 a 500 e 0 a 15 ????
Bom dia Yuri,
Os valores iniciais poderiam ser de 0 a 1024 ao invés de 0 a 500, mas eu coloquei esse valor pq, se não me engano, 500 foi o valor máximo que eu consegui ler do sensor.
Quanto ao 0 à 15, eu fiz isso para calcular o número de caracteres que serão mostrados no LCD (que tem 16 posições.
Abraço !
Estou com um problema. Irei colocar três microfones em uma sala. A media deste som definirá quanto será o som do microfone do locutor, para que o som do locutor atraves do microfone principal sejá sempre maior que o som das amostras obtidas nos microfones de coleta….não sei se fui claro. Peço ajuda dos colegas de como posso fazer isto. Obrigado
Por favor, se puderem me auxiliem como devo cologar o programa e qual e o adequado para atender meu problema.Obrigado
Bom dia Rony,
Penso que o mais adequado seja colocar um sensor perto de cada microfone, e efetuar comunicação com o Arduino via rede sem fio, ou mesmo com fio, se a distância permitir.
Mas tudo vai depender do seu projeto, do tempo de resposta que você precisa e também do nível de som que você precisa detectar.
Abraço !
Esse sensor de som Arduíno consegui medir até quantos decibéis ? qual sua capacidade máxima ? tem algum site informando os detalhes dessa maneira dele ?
Boa noite Igor,
Não tenho essa informação. Esse sensor é bem simples, só tem um microfone, o LM386 e alguns outros componentes, não sei se você vai conseguir esse nível de precisão.
Abraço !
Olá,
Tem como transformar o sinal, recebido pelo módulo, em frequência, a fim de plotar o gráfico da frequência recebida?
Obrigado!
Bom dia Angelo,
Não sei se com esse módulo você terá esse nível de precisão, mas é uma boa sugestão de post. 🙂
Abraço !
Olá, eu posso amostrar na tela lcd a frequencia captada pelo microfone de eletrodo da placa?? Preciso criar um projeto para identificar frequencias de 1hz ate 10khz para identificar ruidos no rotor de motores eletricos . Se alguem puder me ajudar
Ola bacana o modulo, preciso realizar um projeto para captar a frequencia que o rotor de um motor eletrico gera queria saber se consigo fazer isso atravez desde modulo utilizando o microfone perto do rotor eu conseguiria captar a frequencia?? Estou procurando como fazer isso a meses …
Esperando resposta hehe!!!!
Boa tarde Leonardo,
Não sei se é possível, a não ser que você consiga "calibrar" esse módulo. Apesar de bem sensível, ele gera na saída apenas uma variação de sinal, creio que não seja suficiente para o que você precisa.
Abraço !
Olá , teria como conseguir o esquematico deste modulo microfone?
Oi Leonardo,
Vou ficar te devendo, não achei. E esse sensor já é meio antigo também, agora nas lojas você encontra esse modelo aqui: http://www.filipeflop.com/pd-b473d-sensor-de-som-ky-038-microfone.html
Abraço!
Boa noite. Tem como vocês me ajudar. Um cliente quer que eu monte um projeto para ele. o seguinte, uma fita de led rgb e que ela fica alternando as cores conforme a batida da musica.
Já comprei a placa arduino uno e a fita de led rgb
Olá,
Gostaria de saber se é possível montar um sistema para acender um holofote atraves da detecção de ruídos tipo vozes e carros com som alto, utilizando este sensor de som arduino.
Grato,
Kimura
Boa noite Kimura,
É possível sim. Você terá que usar algum sistema de acionamento do holofote por relé, provavelmente. Tenho alguns posts aqui no site falando sobre relés.
Abraço!
Boa noite, como ficaria o código para esse novo sensor com uma saída analógica e a outra digital ?
Bom dia Phablo,
É o KY-038 ? eu tenho um artigo sobre ele: http://www.arduinoecia.com.br/2015/07/sensor-de-som-ky-038-microfone-arduino.html
Abraço!
bom dia!
consigo utilizar apenas o sensor como uma chave para ativar um alarme quando o som do ambiente estiver muito alto?
Boa noite,
Consegue sim. Faça um IF (condição), para que o alarme seja acionado quando o sensor detectar, por exemplo, o nível 200.
Abraço!
Boa tarde por favor qual o sensor devo utilizar para detectar voz de comando para um arduino em por exemplo 4 ambiente diferentes.
Oi Sérgio,
Provavelmente o que você precisa é de um sensor de reconhecimento de voz, como o utilizado neste post:
http://www.instructables.com/id/Arduino-voice-control/
Abraço!
Olá, estou fazendo uma babá eletrônica para um trabalho da faculdade. Como utilizo esse sensor para detectar o choro do bebe? Necessito mexer no pontenciometro?
boa tarde,
Sim, você precisa ajustar a sensibilidade do microfone mexendo no potenciômetro da placa.
Abraço!
Tem como o sensor de som ficar mais sensível no meu projeto tenho que bater palma em cima dele para acender a led e queria maid ou menos 1 metro de distancia
Tem como deixar esse sensor mais sensivel a fim de um estalar de dedos ele acione ?
Boa noite,
O ajuste de sensibilidade pode ser feito no potenciômetro do módulo.
Abraço!
Com esse modulo consigo escutar o som ambiente de uma sala? Tipo pessoas conversando?
Olá qual é o simulador que vc usa neste post?