Dans ce tutoriel, vous apprendrez à détecter le son avec un microphone MAX4466 et un Arduino ou ESP32. Nous utiliserons le MAX4466 pour mesurer le volume sonore, allumer une LED si le son est trop fort, et contrôler un appareil comme une lampe avec des claquements de mains.
Commençons par les pièces nécessaires.
Pièces requises
Vous aurez besoin d’un microcontrôleur Arduino, ESP32, ESP8266 ou similaire, ainsi que du module microphone MAX4466. Pour réaliser les exemples d’application, vous aurez aussi besoin d’un module relais, de quelques fils, résistances et LEDs.

Arduino Uno

Microphone MAX4466

Module relais

Jeu de fils Dupont

Plaque d’essai (breadboard)

Câble USB pour Arduino UNO

Kit résistances & LED
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Caractéristiques du module microphone MAX4466
Le module microphone MAX4466 est une carte d’interface avec un microphone électret 20-20KHz et le MAX4466 circuit préamplificateur. Au dos de la carte se trouve un petit potentiomètre permettant d’ajuster le gain de 25x à 125x. La photo ci-dessous montre le devant et le dos de la carte :

Le module fonctionne sous 2,4…5,5V avec un courant de repos très faible inférieur à 24μA. Pour de bonnes performances, utilisez l’alimentation la plus « silencieuse » possible, comme la broche 3,3V d’un Arduino ou ESP32.
Notez que la tension maximale en sortie sur la broche OUT va de 0 V à VCC. Si vous connectez la sortie à l’ADC de votre microcontrôleur, assurez-vous qu’il supporte cette tension maximale ! La sortie est décalée de VCC/2. Ainsi, en silence complet, la tension de sortie sera VCC/2 V.
Pour plus de détails techniques, consultez la fiche technique du MAX4466 dont le lien est ci-dessous :
Connexion du MAX4466 à Arduino/ESP32
Brancher le module MAX4466 à un Arduino UNO est simple. Connectez GND à GND, VCC à 3,3V et la sortie OUT du MAX4466 à l’entrée analogique A0 comme montré ci-dessous :

Vous pouvez aussi connecter la broche VCC du MAX4466 à 5V pour une meilleure résolution sur l’entrée analogique A0, mais le signal sera un peu plus bruité.
Si vous utilisez un ESP32, vous devez alimenter le MAX4466 en 3,3V, car la sortie maximale dépend de VCC et avec 5V, la tension sur l’entrée analogique serait trop élevée !
Exemples de code
Dans les sections suivantes, vous trouverez trois exemples de code pour utiliser le MAX4466.
Code : Afficher les mesures du MAX4466
Dans ce premier exemple, nous affichons les relevés du MAX4466 sur le moniteur série ou le traceur :
const byte micPin = A0;
void setup() {
Serial.begin(115200);
pinMode(micPin, INPUT);
}
void loop() {
int value = analogRead(micPin);
Serial.println(value);
delay(100);
}
Le code est très simple. Nous définissons d’abord la broche où est connecté le microphone MAX4466 (micPin = A0).
Dans la fonction setup, nous initialisons la communication série et déclarons la broche micPin comme entrée. Dans la fonction loop, nous lisons le signal du microphone sur micPin et affichons la valeur mesurée sur le moniteur série.
Le graphique suivant montre la sortie sur le traceur série lors de trois claquements de mains. On voit clairement les trois pics dans le signal :

J’ai utilisé un ESP32 pour ce graphique, qui offre une meilleure résolution sur l’entrée analogique. Avec un Arduino UNO, vous verrez des valeurs entre 0 et 1024 sur l’axe des ordonnées.
Notez que le signal en silence complet est environ à la moitié de la valeur maximale de l’entrée analogique. Pour un ESP32, avec une résolution de 0…4095, la valeur est autour de 2000. Pour un Arduino UNO, elle sera autour de 500.
Si vous regardez à nouveau le graphique, vous remarquerez que les pics peuvent être positifs ou négatifs. Cela s’explique par le fait que le microphone MAX4466 mesure essentiellement la variation de pression d’air causée par un son. Selon le moment où la mesure est prise dans la forme d’onde sonore, la pression peut être basse ou haute.
Cela signifie que pour mesurer le volume sonore, on ne peut pas simplement prendre le maximum, mais il faut calculer la différence par rapport à la ligne de base (silence). C’est ce que nous ferons dans l’exemple suivant pour contrôler une LED.
Code : Allumer une LED si le son est trop fort
Dans cet exemple, nous allumerons une LED si le microphone détecte un son fort. Voici le câblage. Il est identique au précédent avec en plus une LED connectée à la broche 11. Notez qu’il vous faudra une résistance de 220 Ω pour limiter le courant de la LED.

Le code suivant lit le signal du microphone, calcule une valeur de volume sonore et si celle-ci dépasse un seuil donné, allume la LED pendant une seconde :
const byte micPin = A0;
const byte ledPin = 11;
const int threshold = 100;
void setup() {
pinMode(micPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
static int last = 0;
int value = analogRead(micPin);
int loudness = abs(last-value);
if (last && loudness > threshold) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
last = value;
delay(1);
}
Le code commence par définir les broches du microphone et de la LED, ainsi que le seuil de volume. Dans la fonction setup, on déclare la broche microphone en entrée et la broche LED en sortie.
Dans la fonction setup, on déclare une variable statique last qui garde en mémoire la valeur last (précédente) mesurée par le microphone. En calculant la différence absolue abs entre la last et la valeur actuelle value, on obtient une mesure du volume sonore :
int loudness = abs(last-value);
Si la valeur last est présente et que loudness dépasse le threshold, on allume la LED pendant une seconde puis on l’éteint :
if (last && loudness > threshold) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
Vous pouvez ajuster la sensibilité en modifiant le seuil. Un seuil plus bas rendra la détection sonore plus sensible. De même, vous pouvez changer la durée d’allumage de la LED.
Ce montage peut servir de système simple d’éclairage ou d’alarme sans contact, qui active une lampe lorsqu’un son est détecté.
Code : Contrôler un relais/lumière avec des claquements
Dans cet exemple, nous activons un relais au premier claquement et le désactivons au second. Voici le câblage pour cet exemple. Il remplace essentiellement la LED de l’exemple précédent par un relais.

La broche DC+ (VCC) du relais est connectée au 5V et la broche DC- (GND) au GND. La broche d’entrée IN est reliée à la broche 11 de l’Arduino.
Le relais peut être utilisé pour commander des appareils haute tension et courant comme une lampe, comme montré dans le circuit. Soyez très prudent lorsque vous travaillez avec du 110 ou 220 volts ! Assurez-vous aussi que votre relais est suffisamment dimensionné pour les appareils que vous souhaitez contrôler.
Si vous voulez en savoir plus sur les relais, consultez notre How To Use A Relay With Arduino ou le Interfacing a Relay Module With ESP32 tutoriel. Le tutoriel sur How To Control a Fan using Arduino peut aussi être utile.
Voici le code pour cet exemple. Comme avant, il mesure le volume sonore mais garde aussi en mémoire l’état state du relais (HIGH ou LOW). Si le loudnes dépasse le threshold, l’état state du relais est inversé. Cela signifie que deux claquements successifs allument puis éteignent le relais. Il n’y a plus de durée fixe d’activation comme dans l’exemple précédent.
const byte micPin = A0;
const byte relayPin = 11;
const int threshold = 100;
void setup() {
pinMode(micPin, INPUT);
pinMode(relayPin, OUTPUT);
}
void loop() {
static uint8_t state = LOW;
static int last = 0;
int value = analogRead(micPin);
int loudness = abs(last-value);
if (last && loudness > threshold) {
state = state == HIGH ? LOW : HIGH;
digitalWrite(relayPin, state);
value = 0;
delay(100);
}
last = value;
delay(1);
}
Sinon, le code est quasiment identique à l’exemple précédent. La seule différence est la gestion de l’événement lorsque le volume dépasse le seuil. Ici, l’état du relais est inversé et le nouvel état est écrit sur la sortie numérique :
if (last && loudness > threshold) {
state = state == HIGH ? LOW : HIGH;
digitalWrite(relayPin, state);
value = 0;
delay(100);
}
Comme avant, vous pouvez modifier le niveau sonore nécessaire pour activer le relais en ajustant le paramètre threshold.
Conclusions
Cet article a présenté le module microphone MAX4466 pour détecter le son avec un Arduino, ESP32 ou microcontrôleurs similaires.
Nous avons utilisé le MAX4466 pour mesurer le volume sonore, allumer une LED pendant une durée fixe si le son dépasse un seuil, et commander un relais avec des claquements. Si vous avez des questions, n’hésitez pas à les poser dans les commentaires.
Bon bricolage ; )

