21 julho 2015

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 um outro módulo muito parecido, o Sensor de Som KY-038:

Medindo a intensidade do som com o sensor 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 D0 conforme a regulagem do potenciômetro presente no módulo.


Sensor de Som KY-038 - Detalhes


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 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 captado pelo microfone, primeiro o verde (baixa intensidade), depois o amarelo (intensidade média), e por fim o vermelho (intensidade alta).

Circuito Arduino Uno e Sensor de Som

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) para determinar quando os leds devem ser 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.

 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
//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:

KY-038 Serial Monitor

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.

Circuito sensor de som montado


42 comentários:

  1. 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 :)

    ResponderExcluir
    Respostas
    1. Opa ! Tem razão. Corrigido ! :)

      Muitissimo obrigado. Abraços, valeu !

      Excluir
  2. 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??

    ResponderExcluir
    Respostas
    1. Boa noite Vinicius,

      Acho que nesse caso você vai ter que recorrer ao Mercado Livre. Para compras online, indico a FILIPEFLOP: www.filipeflop.com

      Abraço!

      Excluir
  3. Boa Tarde !
    Comprei um sensor KY-038, o microfone dele está muito baixo. Tento regular e nada. =/
    Devo trocar algum componente ou fazer algo ?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Como assim ? Ele só detecta o som se estiver bem perto ?

      Abraço.

      Excluir
    2. Estou com o mesmo problema do Waldemar.

      Excluir
  4. 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

    ResponderExcluir
    Respostas
    1. Boa noite,

      Apenas a intensidade do som.

      Abraço!

      Excluir
  5. 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?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Não sei informar o alcance exato, mas o sensor que eu tenho também funcionou assim.

      Abraço!

      Excluir
    2. Ok, mas qual o alcance que você conseguiu?

      E qual a configuração do POT que você usa?

      Excluir
    3. 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.

      Excluir
  6. 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

    ResponderExcluir
  7. 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?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Mesmo mexendo no potenciômetro que ajusta a sensibilidade ?

      Abraço!

      Excluir
  8. Como você atribuir o Fritzing desenho?

    ResponderExcluir
    Respostas
    1. Bom dia!

      Dentro do fritzing tem uma opção para gerar o arquivo PNG.


      Saudações!

      Excluir
    2. 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.

      Excluir
    3. Queria mais explicações como colocar a imagem desse sensor no Fritzing, procurei e não encontrei..

      Excluir
    4. 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.

      Excluir
  9. 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!

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
    2. 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!

      Excluir
  10. 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?

    ResponderExcluir
    Respostas
    1. Oi Luciano,

      Consegue confirmar se realmente é uma porta analógica ? Já vi sensores desse tipo que tem apenas saída digital.

      Abraço!

      Excluir
  11. 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?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Isso acontece mesmo mexendo no ajuste de sensiblidade ?

      Abraço!

      Excluir
  12. 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.

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  13. 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.

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  14. 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.

    ResponderExcluir
  15. 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...

    ResponderExcluir
  16. Pessoal, tenho uma dúvida:
    Poderia utilizar este shield para o input de um sinal de áudio no lugar do eletreto ? Funcionaria ?

    ResponderExcluir
  17. 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.

    ResponderExcluir
  18. Qual a faixa de Decibéis que este sensor capta e a qual distância?

    ResponderExcluir
  19. 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

    ResponderExcluir