How to use the KY-37 sound sensor with Arduino

In this tutorial I will share with you how the KY-37 sound sensor works and how to use it with an Arduino board to turn on an LED with two claps.

Sensor Pinout

  • The AO pin is the analog output, and it will output a sinusoidal signal corresponding to the detected sound.
  • The GND and the “+” are for powering up the sensor with 5V.
  • The DO pin is the digital output, and it will output HIGH or LOW voltage corresponding to the detected sound and according to the potentiometer position.

The KY-37 sound sensor potentiometer is for adjusting the sensitivity of the microphone by setting a threshold to trigger the DO pin. Rotating the potentiometer to the right increases the sensitivity and to the left decreases it.

How does the KY-37 sensor work

The KY-37 sound sensor mainly uses an electret microphone to detect sound vibrations and convert them into electrical energy. This microphone uses a special capacitor but does not function like a normal one. Therefore, to have a better understanding of how the sensor works, you need basic knowledge of capacitors, including their definition, operation, and composition.

The sound sensor capacitor is manufactured in such a way that one of its metal plates is coated with an electret material, which keeps the capacitor permanently charged for years.
The second plate is a membrane that is sensitive to sound vibrations. When the membrane moves according to the pressure of the sound waves, the distance between itself and the other plate will change. As a result, the capacitance of the capacitor changes, and thus the electrical voltage changes.
Source: wikipedia

Controlling an LED with two claps using KY-37 Sensor and Arduino board

int sensorPin = 2;
int sensorState;
int ledPin = 3;
int ledState = 0;
int clap = 0;
long first_clap_time = 0;
long last_clap_time = 0;
void setup() {
  pinMode(sensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
}
void loop() {
sensorState = digitalRead(sensorPin);
if (sensorState == 1)
{
  if (clap == 0)
  {
    clap++;
    first_clap_time = last_clap_time = millis();
  }
  else if (clap > 0 && millis()-last_clap_time >= 50)
  {
    clap++;
    last_clap_time = millis();
  }
}
if (millis()-first_clap_time >= 500)
{
  if (clap == 2)
  {
    if (ledState == 0)
    {
      ledState = 1;
      digitalWrite(ledPin, HIGH);
    }
    else if (ledState == 1)
    {
      ledState = 0;
      digitalWrite(ledPin, LOW);
    }
  } 
clap = 0;
}
}
Scroll to Top