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, que você encontra na FILIPEFLOP, 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 LCD.
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 :
O circuito :
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | // 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.
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??
ResponderExcluirBoa tarde,
ExcluirEsse 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?
ExcluirVocês conhecem algum módulo que tenha melhor qualidade para detectar o som?
ExcluirMeu 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
ExcluirPreciso do valor em dB, como faz ?
Excluirboa 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 ???
ResponderExcluirBoa tarde Junior,
ExcluirEste 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 ????
ResponderExcluirBom dia Yuri,
ExcluirOs 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
ResponderExcluirPor favor, se puderem me auxiliem como devo cologar o programa e qual e o adequado para atender meu problema.Obrigado
Bom dia Rony,
ExcluirPenso 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 ?
ResponderExcluirBoa noite Igor,
ExcluirNã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á,
ResponderExcluirTem 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,
ExcluirNã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
ResponderExcluirOla 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 ...
ResponderExcluirEsperando resposta hehe!!!!
Boa tarde Leonardo,
ExcluirNã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 !
Este comentário foi removido pelo autor.
ExcluirOlá , teria como conseguir o esquematico deste modulo microfone?
ResponderExcluirOi Leonardo,
ExcluirVou 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.
ResponderExcluirJá comprei a placa arduino uno e a fita de led rgb
ResponderExcluirOlá,
ResponderExcluirGostaria 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,
ExcluirÉ 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 ?
ResponderExcluirBom dia Phablo,
ExcluirÉ 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!
ResponderExcluirconsigo utilizar apenas o sensor como uma chave para ativar um alarme quando o som do ambiente estiver muito alto?
Boa noite,
ExcluirConsegue 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.
ResponderExcluirOi Sérgio,
ExcluirProvavelmente 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?
ResponderExcluirboa tarde,
ExcluirSim, 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
ResponderExcluirTem como deixar esse sensor mais sensivel a fim de um estalar de dedos ele acione ?
ResponderExcluirBoa noite,
ExcluirO 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?
ResponderExcluirOlá qual é o simulador que vc usa neste post?
ResponderExcluir