Arduino Sound Sensor: Difference between revisions

From wikiluntti
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Introduction ==
== 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.
Simple sound sensor; output True or False.


== Code 1. The simple ==
=== Code 1. The simple ===
Tutorial page: https://arduinogetstarted.com/tutorials/arduino-sound-sensor
Tutorial page: https://arduinogetstarted.com/tutorials/arduino-sound-sensor


Line 28: Line 34:
</syntaxhighlight>
</syntaxhighlight>


=== Exercises ===


== Exercises ==
=== Code 1 ===
 
== Code 1 ==


Turn on the one more LED if the sound is strong enough.
Turn on the one more LED if the sound is strong enough.
Line 74: Line 79:
}
}
</syntaxhighlight>
</syntaxhighlight>


== Code 2 ==
== Code 2 ==
Line 83: Line 87:




== Code 3: test ==
=== Code 3: test ===


<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
Line 96: Line 100:
int numLeds = 0;
int numLeds = 0;
CRGB leds[NUM_LEDS];
CRGB leds[NUM_LEDS];
int turnOffStart;
unsigned long turnOffStart;


void setup() {
void setup() {
Line 138: Line 142:
}
}
</syntaxhighlight>
</syntaxhighlight>
== 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.
== MAX9814 ==
Electret Microphone Amplifier - MAX9814 with Auto Gain Controller is a mic with integrated pre-amp plus audio amplifier. It is analog.
== 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.

Latest revision as of 21:15, 20 June 2025

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.

MAX9814

Electret Microphone Amplifier - MAX9814 with Auto Gain Controller is a mic with integrated pre-amp plus audio amplifier. It is analog.

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.