Sonomètre à LED
Le sonomètre à LED est un dispositif électronique permettant de mesurer le niveau sonore ambiant et d’afficher son intensité de manière visuelle grâce à une série de LEDs. Conçu avec un microphone, un amplificateur audio, un microcontrôleur Arduino, et un registre à décalage SN74HC595, ce projet allie simplicité et efficacité pour fournir une représentation intuitive du niveau sonore.
Ce type de système est particulièrement utile pour des environnements où la pollution sonore doit être surveillée, comme les salles de classe, les usines ou les espaces publics. Grâce à son affichage lumineux, les utilisateurs peuvent rapidement identifier si le bruit dépasse un seuil acceptable.
Composant utilisé
- 3 LEDs vertes
- 1 Registre à décalage 74HC5951
- Carte Arduino UNO
- 3 LEDs rouges
- 8 Résistances de 330 ohms
- 2 LEDs bleues
- 1 Amplificateur MAX9814
Photo du circuit
Voici à quoi ressemble le circuit assemblé sur une breadboard (Plaquette de montage).
Cette photo est une vue détaillée des composants : microphone, amplificateur, LEDs et registre SN74HC595.
Voici une photo du schéma qu’il faudrait suivre afin d’obtenir le même résultat :
Vidéo du produit en utilisation
Voici une vidéo qui démontre l’utilisation du produit :
Description du fonctionnement du projet
Le sonomètre à LED fonctionne en captant les sons ambiants grâce à un microphone électret qui convertit les variations de pression acoustique en un signal électrique analogique. Ce signal est amplifié par un MAX9814 pour le rendre exploitable, puis envoyé à une entrée analogique d’un microcontrôleur comme l’Arduino. Le microcontrôleur utilise son convertisseur analogique-numérique (ADC) pour transformer ce signal en une valeur numérique et la compare à des seuils prédéfinis correspondant à différents niveaux sonores. En fonction de ces seuils, un certain nombre de LEDs s’allument, formant une barre lumineuse intuitive où le nombre de LEDs allumées augmente avec l’intensité sonore. Le SN74HC595, un registre à décalage, est utilisé pour contrôler efficacement les LEDs tout en économisant les broches d’E/S du microcontrôleur. Ce processus permet d’afficher visuellement le niveau sonore, facilitant ainsi l’identification rapide des environnements bruyants.
Code Arduino
const int micPin = A0; // Pin A0 est utilisé pour l’entrée du microphone
int sample; // Variable pour stocker l’échantillon sonore actuel
int maxVal = 0; // Variable pour suivre le niveau sonore maximum détecté
int minVal = 1023; // Variable pour suivre le niveau sonore minimum détecté
// Pins pour le registre à décalage (74HC595)
int LatchPin = 3; // Pin 3 connecté au LatchPin (ST_CP) du 74HC595
int ClockPin = 5; // Pin 5 connecté au ClockPin (SH_CP) du 74HC595
int DataPin = 2; // Pin 2 connecté au DataPin (DS) du 74HC595
// Modèles binaires pour les LEDs, représentant différents niveaux sonores
byte LEDs0 = 0b10000000; // Modèle pour le niveau sonore le plus bas
byte LEDs1 = 0b10000001;
byte LEDs2 = 0b10000011;
byte LEDs3 = 0b10000111;
byte LEDs4 = 0b10001111;
byte LEDs5 = 0b10011111;
byte LEDs6 = 0b10111111;
byte LEDs7 = 0b11111111; // Modèle pour le niveau sonore le plus élevé
void setup() {
// Configuration des pins du registre à décalage en sortie
pinMode(LatchPin, OUTPUT);
pinMode(ClockPin, OUTPUT);
pinMode(DataPin, OUTPUT);
// Configuration de la pin du microphone en entrée
pinMode(micPin, INPUT);
// Démarrage de la communication série pour le débogage (optionnel)
Serial.begin(9600);
}
void loop() {
// Traitement des données du microphone pour déterminer la valeur crête-à-crête (peak-to-peak)
for (int i = 0; i < 100; i++) { // Prendre 100 échantillons pour calculer l’écart des niveaux sonores sample = analogRead(micPin); // Lire le niveau sonore actuel du microphone if (sample > maxVal) { // Mettre à jour maxVal si l’échantillon est plus élevé
maxVal = sample;
}
if (sample < minVal) { // Mettre à jour minVal si l’échantillon est plus faible
minVal = sample;
}
}
int peakToPeak = maxVal – minVal; // Calculer la valeur crête-à-crête
// Convertir la valeur crête-à-crête en niveau de tension (0-5V)
float voltage = (peakToPeak * 5.0) / 1023.0;
// Préparation pour l’envoi des données au registre à décalage
digitalWrite(LatchPin, LOW); // Mettre le latch à LOW pour préparer l’envoi
// Déterminer quel modèle de LEDs afficher selon le niveau de tension
if(voltage > 2.4){ // Niveau sonore le plus élevé
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs7); // Envoyer le modèle correspondant
digitalWrite(LatchPin, HIGH); // Mettre à jour les LEDs
}
else if(voltage > 2.1){ // Deuxième niveau sonore le plus élevé
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs6);
digitalWrite(LatchPin, HIGH);
}
else if(voltage > 1.8){ // Troisième niveau sonore
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs5);
digitalWrite(LatchPin, HIGH);
}
else if(voltage > 1.5){ // Niveau sonore moyen élevé
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs4);
digitalWrite(LatchPin, HIGH);
}
else if(voltage > 1.2){ // Niveau sonore moyen
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs3);
digitalWrite(LatchPin, HIGH);
}
else if(voltage > 0.9){ // Niveau sonore moyen-bas
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs2);
digitalWrite(LatchPin, HIGH);
}
else if(voltage > 0.6){ // Niveau sonore bas
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs1);
digitalWrite(LatchPin, HIGH);
}
else if(voltage > 0.0){ // Niveau sonore le plus bas
shiftOut(DataPin, ClockPin, LSBFIRST, LEDs0);
digitalWrite(LatchPin, HIGH);
}
// Réinitialiser maxVal et minVal pour les prochains échantillons
maxVal = 0;
minVal = 1023;
}
Documentation et référence
https://projecthub.arduino.cc/greenvariable/hear-the-light-led-sound-level-meter-7d3ca6