Arduino Sound Sensor: Difference between revisions
(24 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 | |||
<syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
#define SENSOR_PIN 7 | #define SENSOR_PIN 7 | ||
Line 33: | Line 33: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Exercises === | |||
=== Code 1 === | |||
Turn on the one more LED if the sound is strong enough. | |||
<syntaxhighlight lang="C"> | |||
#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"); | |||
} | |||
} | |||
</syntaxhighlight> | |||
== Code 2 == | |||
# Turn all the LEDS to black in the SetUp() | |||
# Add delay when sound is noticed (not two LEDs turning on at the same time). | |||
# turn of the last led after a while. | |||
=== Code 3: test === | |||
<syntaxhighlight lang="C"> | |||
#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(); | |||
} | |||
} | |||
</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
- Turn all the LEDS to black in the SetUp()
- Add delay when sound is noticed (not two LEDs turning on at the same time).
- 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.