Arduino Sound Sensor

From wikiluntti
Revision as of 16:53, 3 December 2025 by Mol (talk | contribs) (→‎Introduction)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Introduction

Measuring sound is difficult due to its logarithmic nature. There are digital and analog measuring systems available. Digital are either pure on/off or they might give I2C data.

A good explenation about sensors is at https://www.atomic14.com/2020/09/12/esp32-audio-input

Digital Sound sensor

Simple sound sensor; output True or False.

Code 1. The simple

Tutorial page: https://arduinogetstarted.com/tutorials/arduino-sound-sensor

#define SENSOR_PIN 7

int lastState = HIGH;  // the previous state from the input pin
int currentState;      // the current reading from the input pin

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT);
}

void loop() {
  currentState = digitalRead(SENSOR_PIN);
  if (currentState){
     Serial.println( currentState );
  }else{
     Serial.print("Schii");
  }

}

Exercises

Code 1

Turn on the one more LED if the sound is strong enough.

#include <FastLED.h>

#define SENSOR_PIN 7
#define NUM_LEDS 10
#define LED_PIN 5

int soundState = HIGH;  // the previous state from the input pin
int numLeds = 0;
CRGB leds[NUM_LEDS];


void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT);
  FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(20);
}

void loop() {
  soundState = digitalRead(SENSOR_PIN);
  if (soundState){
    numLeds++;
  }

  for (int i=0; i<min( numLeds, NUM_LEDS); i++){
    leds[i] = CRGB::Green;
    FastLED.show();
  }

  if (soundState){
    Serial.println("");
     Serial.println( soundState );
  }else{
     Serial.print("Schii");
  }

}

Code 2

  1. Turn all the LEDS to black in the SetUp()
  2. Add delay when sound is noticed (not two LEDs turning on at the same time).
  3. turn of the last led after a while.


Code 3: test

#include <FastLED.h>

// Arduino's pin connected to OUT pin of the sound sensor
#define SENSOR_PIN 7
#define NUM_LEDS 10
#define LED_PIN 5

int soundState = HIGH;  // the previous state from the input pin
int numLeds = 0;
CRGB leds[NUM_LEDS];
unsigned long turnOffStart;

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT);
  FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(20);
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB::Black;
    FastLED.show();
  }
  turnOffStart = millis();

}



void loop() {
  soundState = digitalRead(SENSOR_PIN);
  if (soundState){
    numLeds++;
    turnOffStart = millis();
    delay(50);

  }
  if (millis() - turnOffStart > 200){
    turnOffStart = millis();
    numLeds = max( 0, numLeds--);
  }

  for (int i = min( numLeds, NUM_LEDS); i<NUM_LEDS; i++){
    leds[i] = CRGB::Black;
    FastLED.show();
  } 

  for (int i=0; i<min( numLeds, NUM_LEDS); i++){
    leds[i] = CRGB::Green;
    FastLED.show();
  }

}

HQ: Gravity: Analog Sound Level Meter

https://www.dfrobot.com/product-1663.html and the Wiki https://wiki.dfrobot.com/Gravity__Analog_Sound_Level_Meter_SKU_SEN0232

MAX4466 / GY4466

MAX4466 Microphone Amplifier Module. Analog.

MAX9812

MAX9814

Introduction

Electret Microphone Amplifier - MAX9814 with Auto Gain Controller (AGC, built-in Automatic Gain Control) is a mic with integrated pre-amp plus audio amplifier. It is an analogic sensor.

Caption text
Pin Arduino
Vdd 5 V Power supply (2.7 V - 5.5 V)
GND GND GND
OUT A0 Analog audio output
AR No Attack /release control for AGC timing
Gain Selects fixed gain. Default 40 dB.
VDD (mic) mic?
const int micPin = A0;  // Analog pin for MAX9814 output

void setup() {
  Serial.begin(9600);
}

void loop() {
  int micValue = analogRead(micPin);
  Serial.println(micValue);
  delay(50);
}

Sound level meter

Frequency Detection

https://www.instructables.com/Arduino-Frequency-Detection/

https://forum.arduino.cc/t/arduino-pitch-detection-in-realtime-using-autocorrelation-and-peak-detection/519783/42

  • Post #42 of that thread.
  • 9615.4 samples per second.
  • Works!

Guitar tuner

The guitar's strings should have the following frequencies:

  • E: 82.4 Hz
  • A: 110 Hz
  • D: 146.8 Hz
  • G: 196 Hz
  • B: 246.9 Hz
  • E: 329.6 Hz

INMP441

Digital I2S MEMS microphone.

SPH0645

Digital I2S MEMS microphone.

Hiwonder sound module

A microphone and LM358 amplifier.

LM358 Operational Amplifier Module

To amplify the analog data.