Medindo a intensidade do som com o sensor KY-038
Aqui no blog eu já tive a oportunidade de testar um sensor de som com microfone, e hoje vou testar o módulo Sensor de Som KY-038 com Arduino, um módulo muito parecido com o anterior.
Vamos dar uma olhada nesse módulo.
O módulo sensor de som KY-038
O sensor de som KY-038 com microfone é uma versão mais atualizada do módulo, agora com o chip LM393. O princípio de funcionamento é simples: ao detectar som, o microfone varia a tensão na saída analógica A0, e também aciona a saída digital D0conforme a regulagem do potenciômetro presente no módulo.
A alimentação do módulo vai de 4 à 6VDC, e ele possui dois leds indicadores: um que mostra se o módulo está ligado, e o outro que acende quando a saída digital estiver en nível alto (HIGH).
Conexão do módulo sensor de som KY-038 ao Arduino
Para testar o módulo sensor de som vamos utilizar um circuito com 3 leds, que vão acender conforme a intensidade do som. Conforme o som captado pelo microfone, serão acesos primeiro o verde (baixa intensidade), depois o amarelo (intensidade média), e por fim o vermelho (intensidade alta).
Os resistores são usados para limitar a corrente sobre os leds, e no nosso circuito usamos 3 resistores de 330 ohms.
Programa medidor de intensidade de som
No nosso programa vamos utilizar o sinal da entrada analógica A5 do Arduino (ligado ao pino A0 do módulo). Quando o pino A0 for acionado, os leds correspondentes serão acesos.
Vamos ler o valor dessa entrada (que estará entre 0 e 1023), e testar, com três comandos IF (linhas 37, 44 e 51), qual é o nível de sinal que foi detectado pelo microfone.
//Programa: Sensor de som KY-038 //Autor: Arduino e Cia //Definicao pinos leds int pinoled_ver = 3; int pinoled_ama = 4; int pinoled_verm = 5; //Definicao pinos sensor int pino_analogico = A5; int pino_digital = 7; int valor_A0 = 0; int valor_D = 0; void setup() { Serial.begin(9600); //Define pinos led como saida pinMode(pinoled_ver, OUTPUT); pinMode(pinoled_ama, OUTPUT); pinMode(pinoled_verm, OUTPUT); //Define pinos sensor como entrada pinMode(pino_analogico, INPUT); pinMode(pino_digital, INPUT); } void loop() { valor_A0 = analogRead(pino_analogico); valor_D = digitalRead(pino_digital); Serial.print("Saida A0: "); Serial.print(valor_A0); Serial.print(" Saida D0: "); Serial.println(valor_D); //Intensidade baixa if (valor_A0 > 20 && valor_A0 < 300) { digitalWrite(pinoled_ver, HIGH); digitalWrite(pinoled_ama, LOW); digitalWrite(pinoled_verm, LOW); } //Intensidade media if (valor_A0 > 301 && valor_A0 < 700) { digitalWrite(pinoled_ver, HIGH); digitalWrite(pinoled_ama, HIGH); digitalWrite(pinoled_verm, LOW); } //Intensidade alta if (valor_A0 > 701) { digitalWrite(pinoled_ver, HIGH); digitalWrite(pinoled_ama, HIGH); digitalWrite(pinoled_verm, HIGH); } delay(50); //Apaga todos os leds digitalWrite(pinoled_ver, LOW); digitalWrite(pinoled_ama, LOW); digitalWrite(pinoled_verm, LOW); }
Os valores também são mostrados no serial monitor, e você pode usar essa informação para verificar se o módulo está funcionando corretamente:
No serial monitor também é mostrado o valor da porta 7, onde está ligada a saída digital (D0). Configure a sensibilidade ajustando o potenciômetro do módulo.
Gostou do post do sensor de som KY-038 com Arduino? Confira outros posts com módulos para Arduino aqui mesmo no blog!
olá
Tem um erro nesse código !!!
void loop()
{
valor_A0 = analogRead(A1);
valor_D = digitalRead(3);
O correto seria (A5) E (7)
//Definicao pinos sensor
int pino_analogico = A5;
int pino_digital = 7;
Valeu abraços ótimo site 🙂
Opa ! Tem razão. Corrigido ! 🙂
Muitissimo obrigado. Abraços, valeu !
o meu não funciona o ckt. alguem pode me ajudar?
Pergunta muito genérica. "Minha TV não liga, o que pode ser?". Ninguém pode te ajudar.
Somente serve para medir a intensidade?
Olá, primeiramente quero parabenizar pelo Blog. Muito bom mesmo!
Gostaria de saber onde consigo comprar este sensor de som (KY-038) sem ser pela internet.
Você sabe??
Boa noite Vinicius,
Acho que nesse caso você vai ter que recorrer ao Mercado Livre. Para compras online, indico a FILIPEFLOP: http://www.filipeflop.com
Abraço!
Boa Tarde !
Comprei um sensor KY-038, o microfone dele está muito baixo. Tento regular e nada. =/
Devo trocar algum componente ou fazer algo ?
Boa noite,
Como assim ? Ele só detecta o som se estiver bem perto ?
Abraço.
Estou com o mesmo problema do Waldemar.
Olá,
estou fazendo um trabalho de final de curso, e vou produzir um robô que se deslocará de acordo com uma determinada nota musical, produzida por uma flauta.
Para isso , eu comprei esse sensor. Ele consegue diferenciar as notas,ou ele mede somente a intensidade?
Obrigada
Boa noite,
Apenas a intensidade do som.
Abraço!
Sei que já está tarde para responder a essa pergunta, mas fundamentalmente uma nota musical não é dada mais nada menos que uma sucessão de intensidades de som numa frequência específica. Ou seja, o que vai diferenciar uma nota da outra é o seu código e não o sensor.
O sensor vai captar as intensidades e cabe a você identificar qual a frequência do som, contando, por exemplo, quantas vezes por segundo a intensidade máxima foi alcançada. Isso é feito por código. Uma vez sabendo a frequência, você pode associar ou não à nota que você quer.
Esqueci de clicar em "notifique-me", hehe, apague esse comentário depois e mantenha o anterior!
Você pode utilizar o sistema de detecção de frequência de tom que, se não me engano, pode utilizar o piezo do arduino.
Comprei esse sensor no FilipeFlop e estou achando que ele é pouco sensível. Girei o pot para ambos extremos, até ter leitura A0=26 ou A0=1023, e também no meio, onde A0=300. Testei a uma distância de um palmo e não consegui nenhuma leitura. Só conseguia mudança se por acaso assoviasse em cima ou batesse no microfone e, mesmo assim, a mudança não era muito significativa.
O sensor é pouco sensível assim mesmo?
Boa noite,
Não sei informar o alcance exato, mas o sensor que eu tenho também funcionou assim.
Abraço!
Ok, mas qual o alcance que você conseguiu?
E qual a configuração do POT que você usa?
Eu tenho algo parecido com o seu caso. Não consigo programar nada usando o sensor. tentei acender um led com palmas, mas ele parece não perceber o som.
Este projeto está totalmente errado!!!
Ele tem dois tipos de saída: A0 – saída analógica e D0 – saída digital.
Dependendo do projeto se usa um ou outro. Neste caso está se usando os dois. Por isso o conflito no sinal
Você tem um exemplo do que seria o correto?
Boa noite,
Meu sensor esta acendendo os dois leds que vem nele mesmo. Já li que pode ser calibração. Alguem sabe o que é ou como se faz isso?
Bom dia,
Mesmo mexendo no potenciômetro que ajusta a sensibilidade ?
Abraço!
Como você atribuir o Fritzing desenho?
Bom dia!
Dentro do fritzing tem uma opção para gerar o arquivo PNG.
Saudações!
Serkam, você pode perguntar em inglês e em seu idioma nativo, por favor? Pois em português ficou muito confuso. O colega Arduino e Cia respondeu a você, mas não estou certo de que ele acertou o alvo.
Queria mais explicações como colocar a imagem desse sensor no Fritzing, procurei e não encontrei..
Se não me engano, a pessoa desenha em SVG. Pode ser usando o Inkscape. Pegue outros componentes no GitHub e imite o projeto. A busca lá com certeza vai a ajudar a encontrar.
Boa noite, obrigado pelo conhecimento transmitido. Tenho um sensor desse, porém já tentei de tudo ele só tem alguma variação quando muito perto, e mesmo assim bem pouco. ele não consegue perceber o som como deveria. Já tentei ajustar e não consigo um bom funcionamento. Alguém poderia ajudar. Agradeço!
Boa noite Cleber,
O seu módulo pode estar com algum problema. Se você mexer no potenciômetro, nota alguma diferença ? Pode ser que ele (o potenciômetro), não esteja funcionando/ajustando.
Abraço!
Obrigado! acho que realmente está com algum problema. consegui acender e apagar um LED com palmas, mas não consigo essa variação de valores para acender vários LEDs dependendo do valor obtido, como mostrado no seu tutorial.
Agradecido!
Bom dia, estou com uma duvida, estou com um sensor que tem apenas uma saída,. estou tentando ler variação de volume na porta analogica, porem ele apenas mostra o valor de 1023.. o que pode ser?
Oi Luciano,
Consegue confirmar se realmente é uma porta analógica ? Já vi sensores desse tipo que tem apenas saída digital.
Abraço!
Estou com um problema. Eu estou usando esse sensor mas não consigo fazer uma leitura exata. A saída analógica e a saída digital sempre mostram o mesmo valor, independente do som no ambiente. Poderia me ajudar?
Boa noite,
Isso acontece mesmo mexendo no ajuste de sensiblidade ?
Abraço!
Bom dia !
Com esse modulo eu consigo fazer a medição por decibeis ? Necessito fazer um projeto que detect quando passar de 90 decibeis no ambiente.
Desde já agradeço pela atenção.
Att.
Boa noite Rafael,
Esse módulo já é um pouco antigo, eu preciso ver se os módulos mais novos tem a saída analógica, assim teoricamente você consegue associar a variação de sinal ao nível de decibéis no ambiente.
Abraço!
Cara! Já lutei muito com este sensor, e descobri q o microfone dele não é muito sensível. Por isso, fica difícil você reproduzir um decibelímetro…
A sensibilidade dele ideal, é a seguinte. Bota pra tocar uma música, e vai girando o potenciômetro do sensor, até você perceber que um dos LED's do sensor, acompanha o ritmo da música.
Oi Rafael, você conseguiu saber que tipo de sensor tem que usar para obter u número de decibéis no ambiente?> Muito grata Pela resposta.
Abraços
Lorena
olá,
por acaso, sabe se tem como eu modificar esse código de forma que gere um gráfico de intensidade do som/tempo em seg.? Por exemplo: intensidade do som ficou acima de tantos decibéis por 20seg.
desde já, muito obrigado!
Att.
Oi Tarcio,
Realmente não sei. O que você precisa primeiro é de uma forma de calibrar o sensor (ex. x decibéis correspondem ao valor y da saída analógica). Depois disso, o resto é relativamente fácil. 🙂
Abraço!
muito obrigado!
O módulo é péssimo não consegue capturar o som ambiente mesmo com o potenciômetro bem alto. Tem que gritar no microfone pra variar, joguei dinheiro fora.
ÓTIMO SITE
bom dia!
estou pensando em montar um modulo desses, mas surgiu uma duvida, teria problema trocar o lm393 por um lm2409? li os datasheet's de cada e não divergem muito as especificações…
Pessoal, tenho uma dúvida:
Poderia utilizar este shield para o input de um sinal de áudio no lugar do eletreto ? Funcionaria ?
Boa tarde, minha dúvida é como regular a sensibilidade do sensor, queria saber quantas voltas e o sentido para regula… Estou achando que meu potenciômetro está com algum defeito, pelo motivo de girar várias vezes para ambos os lados e não consigo regular.
Qual a faixa de Decibéis que este sensor capta e a qual distância?
Boa noite
Alguém tem algum sensor ou esquema alternativo a este sensor? O meu também só capta sons muito próximo dele, mesmo com a sensibilidade alta.
Obrigado
Boa Noite, este sensor tem a capacidade de capitar a fala e "escrever" o que foi dito?
Oi Nicole,
Para montar um sistema desse tipo você vai precisar de um módulo de reconhecimento de voz como esse: http://www.filipeflop.com/pd-3765cf-modulo-reconhecimento-de-voz-geeetech-com-microfone.html
Abraço!
Este tipo de módulo não tem como característica capturas níveis sonoros baixos, é indicado para captar palmas, gritos, …, do tipo "tem barulho ou não". Sugestão de leitura (http://blog.yavilevich.com/2016/08/arduino-sound-level-meter-and-spectrum-analyzer/).
O primeiro sensor seria mais indicado para a maioria dos interessados aqui, MAX9814 ou MAX4466.
Boa Noite,
Precisava de um programa para o arduino UNO, que faça:
-Quando houver um/dois latidos de um cão, active uma saída para a placa de relé, saída essa temporizada por 2/3 segundos.
Agradecerei a quem me puder ajudar…
Veja se te ajuda. É simples:
Um latido, significa saída HIGH do módulo.
Aí vc utiliza IF e caso a saída seja HIGH, dentro do IF coloca delay(2000), que é 2 segundos e logo depois coloca DigitalWrite com valor HIGH no pino que você colocou como saída pro relé.
Bom, agora se o que você quer é que o módulo diferencie se é um cão latindo ou uma pessoa batendo palma ou gritando… aí é bem complexo. Ou você compra um módulo específico ou se embrenha em distinguir as frequências do latido de um cão…
Existe alguma possibilidade dessa variação de tensão na saída analógica A0 ser convertida em Hz.
Boa noite estou à procura de um aparelho que me de uma saída de 12v acoplado a um decibelímetro quando atingir 90 db,alguém pode me ajudar 27 992528468
A lógica do código é a mesma se for usar o NodeMCU ESP8266 ao em vez do Arduino?
Oi Jonny,
Em parte sim. Tome cuidado com a saída para a porta analógica, pois o NodeMCU trabalha com uma tensão diferente.
Abraço!
Adilson
Estou com dúvida em relação a porta analógica do módulo ky-038.
O problema é que quando vou ler o resultado do valor Analógico e ele recebe por exemplo 300, ele acende o led correspondente a esse valor, se eu fizer silêncio ou barulho o valor continua o mesmo e o led continua acesso, ai eu vou e regulo a sensibilidade do sensor, o valor analógico abaixa ou aumenta de acordo com a forma que estou regulando e os leds vão acendendo. O problema é que os leds não estão acendendo com barulho e sim com a forma que estou regulando o sensor.
Eu tenho dois módulos ky-038, eu fiz testes com os dois e ainda continuo tendo o mesmo resultado.
Alguém sabe informar qual é a sensibilidade dele?
Boa tarde,
Não tenho essa informação, mas creio que esteja mais relacionado à sensibilidade do microfone.
Abraço!
Adilson
Você saberia me dizer qual a programação se eu quisesse adicionar um mini alarme/sirene nesse projeto? Aí ele apitaria quando atingisse HIGH no vermelho.
Boa tarde,
Adicione um digitalWrite() para o pino ligado na sirene, no 3o. IF do programa (intensidade alta). É simples de fazer. 🙂
Abraço!
Adilson
Olá, na minha programação todos os LEDs estão acendendo independente da intensidade sonora. Sabe me dizer por que isso ocorre?
Boa tarde Adquiri um modulo como este e notei que a entrada Analógica sempre pega os mesmos valores, mesmo fazendo ajuste com potenciômetro, notei também que o LED da porta digital fica aceso o tempo todo. Seria um problema no modulo que comprei?
Oi Charles,
Sim, se você faz o ajuste do potenciômetro e não há nenhuma alteração, pode ser um problema no módulo.
Abraço!
Adilson
Olá, estou usando esse sensor mas a porta analógica só fica em 5V não varia, o que pode ser?
Oi Marcos,
Alguns sensores tem a porta analógica sem função (fica sempre estável, logo, não serve para muita coisa). A digital está funcionando?
Abraço!
Adilson
poderia me ajudar estou fazendo um sistema para funcionar uma maquina por voz porem preciso que ele não funcione se o som for agudo estou usando um sensor de som. preciso que ele funcione com sons mais graves
segue a programação
const int pinoRele = 7;
const int pinoSom = 4;
int val = 1;
void setup() {
pinMode(pinoRele, OUTPUT);
pinMode(pinoSom, INPUT);
}
void loop () {
val = digitalRead(pinoSom);
//digitalWrite(pinoRele, LOW);
if (val == LOW) {
digitalWrite(pinoRele, LOW);
delay(300);
digitalWrite(pinoRele, HIGH);
delay(4000);
}
}
Há um erro de conceito aí. LOW e HIGH dizem respeito apenas ao valor da tensão (intensidade sonora), o que é diferente de som grave ou agudo, que diz respeito à frequência. Tem que haver um sistema de detecção de frequência.
Não sei como fazer isso, mas não é com HIGH/LOW.
Sou leigo em eletrônica mas pretendia montar um sistemainha simples para ligar um fio de 30 micrileds, através de palmas e que ficasse ligado durante tempo ajustável (alguns minutos) . Este sensor seria a solução ligada diretamente a fonte (3 pilhass AA) que também alimentam o fio de led?
Se pudessem me ajudar eu agradeceria.
Oi Roberto,
Legal, com esse sensor é perfeitamente possível fazer isso. Também tenho alguns posts com fitas de led como a WS2812, dê uma olhada, por favor.
Abraço!
Adilson
Tenho microfone ligado no meu DVD INTELBRAS sensacional so que não sei a intensidade do som em dB Tem alguma placa pronta para interface com sistema DVR onde eu tenha a informação em tela REMOTAMENTE via Internet? ?obrigado NIKOLAS SP