amc2021:groupl:code:sound_detection
This is an old revision of the document!
For noise disturbance detection in the environment
/* This code is meant to monitor the sound intensity using LM393 sensor connected to Arduino UNO board.
//The used sensor has only a digital output. Therefore, the number of times the sensor detects a sound is summed up over a sampling time called "SAMPLE_TIME".
//Then the sum called "sampleBufferValue" is printed on a Serial Monitor (laptop), and visualized with the Serial Plotter.
// The code allows to communicate with a LED in order to provide a visual alarm if the "sampleBufferValue" surpasses a preset Threshold "Threshold" */
// 0 means silence and 1 means noise
const int OUT_PIN = 12; // The OUTPUT of the sound sensor is connected to the digital pin D12 of the Arduino
const int SAMPLE_TIME = 10; // The sampling time in milliseconds, can be set differently if required
const int Threshold = 90; // Threshold on decibel value for LED switching ON, the value has been optimized with respect to the used sampling time (900 cumulative digital counts ≈ 90 dB from "Schall")
unsigned long millisCurrent; // current time
unsigned long millisLast = 0; //previous time
unsigned long millisElapsed = 0; // difference between current time and previous time (time interval)
int sampleBufferValue = 0; // initiate the sum of digital outputs over the sampling time
int led = 8; // LED on pin 4 of Arduino
int dB = 0; //initiate sound intensity dB value
void setup() {
Serial.begin(9600); //Arduino starts serial communication with baud rate 9600
pinMode(led,OUTPUT); // the LED is connected as output for alarm purpose
}
void loop() {
millisCurrent = millis(); //the current time is assigned to the dedicated variable
millisElapsed = millisCurrent - millisLast; //the elapsed time is updated
if(digitalRead(OUT_PIN) == HIGH){ //HIGH means noise
sampleBufferValue++; //increments the sum variable by 1
}
if (millisElapsed > SAMPLE_TIME) { //if the elapsed time surpasses the sampling time, print the sampleBufferValue and test threshold for alarm
dB = 0.0666 *(sampleBufferValue) + 30.223; //linear regression to calculate the decibel value based of the rough calibration of the sensor response
Serial.println(dB); // print decibel values on the Serial Monitor
Serial.print("dB"); // print sound unit decibel
if (sampleBufferValue > Threshold) { // test if the threshold is surpassed
digitalWrite(led, HIGH); //blink LED 2 ms ON and 1 ms OFF
delay(2);
digitalWrite(led, LOW);
delay(1);
}
digitalWrite(led, LOW); // the LED is turned off to be ready for the next sample
sampleBufferValue = 0; // re-initialization of the sampleBufferValue variable for the new sampling time
millisLast = millisCurrent; // update the previous time to be the start for the next sample
}
}
amc2021/groupl/code/sound_detection.1630626263.txt.gz · Last modified: 2023/01/05 14:38 (external edit)