Détection de volume sonore
recherches :
http://www.jaycollett.com/2009/08/sound-detection-with-the-arduino/
http://arduino.cc/forum/index.php/topic,2534.0.html
http://www.youtube.com/watch?v=fOlStxYiVqs
http://www.youtube.com/watch?v=h8Bu7fh-B6s&feature=endscreen&NR=1
http://blog.makezine.com/2008/03/24/explody-easter-peeps-high/
http://circuitdiagram.net/simple-audio-pre-amplifier.html
http://www.youtube.com/watch?v=ic_yEUV7Y3c
http://electronics.stackexchange.com/questions/36795/using-a-microphone-with-an-arduino
Besoin:
Créer une veilleuse de nuit asservie au volume sonore de la pieces.
Principe :
utiliser un Arduino pour détecter le niveau sonore d'une piece
Composants nécessaires:
1 arduino
1 micro electret
Il est nécessaire d'utiliser un circuit d'amplification du genre :
Code source
/* Détection de volume Audio Le circuit : http://design.ensa-nancy.net/detection-de-son http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay */ const int ledPin = 9; // no du connecteur de led const int ledPin_1 = 2; // no du connecteur de led const int ledPin_2 = 3; // no du connecteur de led const int ledPin_3 = 4; // no du connecteur de led const int ledPin_4 = 5; // no du connecteur de led const int sensorPin = A0; long previousMillis = 0; int volume = 0; int volume_min = 1023; int volume_max = 0; int volume_interval = 2; boolean led_etat = false; int led_value = 0; long led_timer = 10000; long led_delay = 10; long prev_delay = 0; void setup() { Serial.begin(9600); pinMode(ledPin_1, OUTPUT); pinMode(ledPin_2, OUTPUT); pinMode(ledPin_3, OUTPUT); pinMode(ledPin_4, OUTPUT); digitalWrite(13, HIGH); // calibrate during the first five seconds while (millis() < 5000) { volume = analogRead(sensorPin); // record the maximum sensor value if (volume > volume_max) { volume_max = volume; } // record the minimum sensor value if (volume < volume_min) { volume_min = volume; } } // signal the end of the calibration period digitalWrite(13, LOW); volume_interval = (volume_max - volume_min)/4; prev_delay = millis(); Serial.println(volume_min); Serial.println(volume_max); Serial.println(volume_interval); } void loop() { volume = analogRead(sensorPin); if (volume > volume_min + volume_interval ) digitalWrite(ledPin_1, HIGH); else digitalWrite(ledPin_1, LOW); if (volume > volume_min + volume_interval * 2 ) digitalWrite(ledPin_2, HIGH); else digitalWrite(ledPin_2, LOW); if (volume > volume_min + volume_interval * 3) digitalWrite(ledPin_3, HIGH); else digitalWrite(ledPin_3, LOW); if (volume > volume_min + volume_interval * 4) digitalWrite(ledPin_4, HIGH); else digitalWrite(ledPin_4, LOW); //int sensorValue = map(volume, volume_min, volume_max, 0, 255); //sensorValue = constrain(sensorValue, 0, 255); // fade the LED using the calibrated value: //analogWrite(ledPin, sensorValue); if ( volume >= volume_max){ if (led_etat == false){ led_etat = true; previousMillis = millis(); prev_delay = millis(); Serial.println(led_etat); } } else if (millis() - previousMillis > led_timer){ if ( led_etat == true){ led_etat = false; previousMillis = millis(); prev_delay = millis(); Serial.println(led_etat); } } if (millis() - prev_delay >= led_delay){ Serial.println(led_value); if (led_etat == true) { if (led_value < 255) led_value++; analogWrite(ledPin, led_value); } else { if (led_value > 0) led_value--; analogWrite(ledPin, led_value); } prev_delay = millis(); } }