In diesem Tutorial lernst du, wie man mit einem MAX4466-Mikrofon und einem Arduino oder ESP32 Geräusche erkennt. Wir verwenden den MAX4466, um die Lautstärke zu messen, eine LED einzuschalten, wenn es zu laut ist, und ein Gerät wie eine Lampe mit Klatschen zu steuern.
Fangen wir mit den benötigten Teilen an.
Benötigte Teile
Du benötigst einen Arduino, ESP32, ESP8266 oder einen ähnlichen Mikrocontroller sowie das MAX4466 Mikrofonmodul. Für die Beispielanwendungen brauchst du außerdem ein Relaismodul, einige Kabel, Widerstände und LEDs.

Arduino Uno

MAX4466 Mikrofon

Relaismodul

Dupont-Kabelset

Breadboard

USB-Kabel für Arduino UNO

Widerstands- & LED-Kit
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.
Eigenschaften des MAX4466 Mikrofonmoduls
Das MAX4466 Mikrofonmodul ist ein Breakout-Board mit einem 20-20kHz Elektretmikrofon und dem MAX4466 Vorverstärker-IC. Auf der Rückseite des Boards befindet sich ein kleiner Trimmer, mit dem du die Verstärkung von 25x bis 125x einstellen kannst. Das Bild unten zeigt Vorder- und Rückseite des Boards:

Das Modul läuft mit 2,4…5,5V und hat einen sehr niedrigen Ruhestrom von <24μA. Für eine gute Leistung solltest du die „ruhigste“ Spannungsquelle verwenden, z.B. den 3,3V-Pin eines Arduino oder ESP32.
Beachte, dass die maximale Ausgangsspannung am OUT-Pin von 0 V bis VCC reicht. Wenn du den Ausgang an den Analog-Digital-Wandler (ADC) deines Mikrocontrollers anschließt, stelle sicher, dass dieser die maximale Ausgangsspannung verträgt! Der Ausgang hat eine Vorspannung von VCC/2. Bei absoluter Stille liegt die Ausgangsspannung also bei VCC/2 V.
Für weitere technische Details wirf einen Blick ins Datenblatt des MAX4466, das unten verlinkt ist:
Anschluss des MAX4466 an Arduino/ESP32
Den MAX4466 an einen Arduino UNO anzuschließen ist einfach. Verbinde GND mit GND, VCC mit 3,3V und den Ausgangspin OUT des MAX4466 mit dem analogen Eingang A0, wie unten gezeigt:

Du kannst den VCC-Pin des MAX4466 auch mit 5V verbinden, dann erhältst du eine bessere Auflösung am analogen Eingang A0, allerdings wird das Signal etwas verrauschter sein.
Wenn du einen ESP32 verwendest, musst du das MAX4466-Modul mit 3,3V betreiben, da die maximale Ausgangsspannung vom VCC abhängt und bei 5V die Spannung am analogen Eingang zu hoch wäre!
Code-Beispiele
In den folgenden Abschnitten findest du drei Code-Beispiele zur Verwendung des MAX4466.
Code: MAX4466 Messwerte anzeigen
Im ersten Beispiel zeigen wir die Messwerte des MAX4466 im Serial Monitor oder Plotter an:
const byte micPin = A0;
void setup() {
Serial.begin(115200);
pinMode(micPin, INPUT);
}
void loop() {
int value = analogRead(micPin);
Serial.println(value);
delay(100);
}
Der Code ist sehr einfach. Zuerst definieren wir den Pin, an dem das MAX4466 Mikrofon angeschlossen ist (micPin = A0).
Im setup initialisieren wir dann die serielle Kommunikation und deklarieren den micPin als Eingang. In der loop-Funktion lesen wir das Mikrofonsignal vom micPin und geben den gemessenen Sensorwert im Serial Monitor aus.
Die folgende Grafik zeigt die Ausgabe im Serial Plotter beim dreimaligen Klatschen. Man sieht deutlich die drei Signalspitzen im Diagramm:

Für diese Grafik habe ich einen ESP32 verwendet, der eine bessere Auflösung am analogen Eingang hat. Bei einem Arduino UNO siehst du Werte zwischen 0 und 1024 auf der y-Achse.
Beachte, dass das Signal bei kompletter Stille etwa die Hälfte des maximalen analogen Eingangs beträgt. Beim ESP32 mit einer Auflösung von 0…4095 liegt der Wert ungefähr bei 2000. Beim Arduino UNO liegt der Wert bei Stille etwa bei 500.
Wenn du dir das Diagramm nochmal ansiehst, fällt auf, dass die Spitzen sowohl positiv als auch negativ sein können. Das liegt daran, dass das MAX4466-Mikrofon im Grunde die Luftdruckänderung durch den Schall misst. Je nachdem, zu welchem Zeitpunkt der Schallwelle die Messung erfolgt, kann der Druck niedriger oder höher sein.
Das bedeutet, wenn wir die Lautstärke eines Geräusches messen wollen, können wir nicht einfach den Maximalwert nehmen, sondern müssen die Differenz zum Grundwert (Stille) berechnen. Genau das machen wir im nächsten Beispiel, um eine LED zu steuern.
Code: LED einschalten, wenn es zu laut ist
In diesem Beispiel schalten wir eine LED ein, wenn das Mikrofon einen lauten Ton erkennt. Unten ist die Schaltung. Sie ist wie zuvor, mit der Ergänzung einer LED an Pin 11. Beachte, dass du einen 220 Ω Widerstand für die LED brauchst, um den Strom zu begrenzen.

Der folgende Code liest das Mikrofonsignal, berechnet einen Lautstärkewert und schaltet die LED für eine Sekunde ein, wenn die Lautstärke einen bestimmten Schwellenwert überschreitet:
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);
}
Der Code beginnt mit der Definition der Pins für Mikrofon und LED sowie des Lautstärke-Schwellenwerts. In der setup-Funktion deklarieren wir den Mikrofon-Pin als Eingang und den LED-Pin als Ausgang.
In der setup Funktion deklarieren wir eine statische Variable last, die den last (vorherigen) Wert des Mikrofons speichert. Durch die Berechnung der absoluten Differenz abs zwischen dem last und dem aktuellen value erhalten wir eine Maßzahl für die Lautstärke:
int loudness = abs(last-value);
Wenn wir einen last Wert haben und die loudness größer als der threshold ist, schalten wir die LED für eine Sekunde ein und danach wieder aus:
if (last && loudness > threshold) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
Du kannst einstellen, wie laut ein Geräusch sein muss, um die LED auszulösen, indem du den Schwellenwert änderst. Ein niedrigerer Schwellenwert macht die Lautstärkeerkennung empfindlicher. Ebenso kannst du die Verzögerung anpassen, um die LED länger oder kürzer einzuschalten.
Dieser Schaltkreis eignet sich gut als einfache berührungslose Lampe oder Alarmsystem, das eine Lampe bei Geräuscherkennung aktiviert.
Code: Relais/Lampe mit Klatschen steuern
In diesem Beispiel schalten wir ein Relais ein, wenn ein erstes Klatschen erkannt wird, und schalten es aus, wenn ein zweites Klatschen erkannt wird. Unten ist die Schaltung für dieses Beispiel. Sie ersetzt im Wesentlichen die LED aus dem vorherigen Beispiel durch ein Relais.

Der DC+ (VCC) Pin des Relais ist mit 5V verbunden, der DC- (GND) Pin mit GND. Der Eingangspin IN ist mit Pin 11 des Arduino verbunden.
Das Relais kann verwendet werden, um Geräte mit hoher Spannung und Stromstärke wie eine Lampe zu schalten, wie in der Schaltung gezeigt.Sei sehr vorsichtig beim Arbeiten mit 110 oder 220 Volt!Stelle außerdem sicher, dass dein Relais für die Geräte, die du steuern möchtest, ausreichend ausgelegt ist.
Wenn du mehr über Relais lernen möchtest, schau dir unser How To Use A Relay With Arduino oder das Interfacing a Relay Module With ESP32 Tutorial an. Auch das Tutorial zu How To Control a Fan using Arduino könnte hilfreich sein.
Unten ist der Code für dieses Beispiel. Wie zuvor misst er die Lautstärke, verfolgt aber auch den state des Relais (HIGH oder LOW). Wenn die loudnes den threshold überschreitet, wird der state des Relais geändert. Das bedeutet, zweimaliges Klatschen schaltet das Relais erst ein und dann wieder aus. Es gibt keine feste Einschaltzeit mehr, wie im vorherigen Beispiel.
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);
}
Ansonsten ist der Code fast identisch zum vorherigen Beispiel. Der einzige Unterschied ist die Behandlung des Ereignisses, wenn die Lautstärke den Schwellenwert überschreitet. In diesem Fall wird der Zustand des Relais umgeschaltet und der neue Zustand an den digitalen Ausgang geschrieben:
if (last && loudness > threshold) {
state = state == HIGH ? LOW : HIGH;
digitalWrite(relayPin, state);
value = 0;
delay(100);
}
Wie zuvor kannst du den Geräuschpegel, der das Relais aktiviert, durch Anpassen des threshold Parameters ändern.
Fazit
Dieser Artikel hat das MAX4466 Mikrofonmodul vorgestellt, um mit einem Arduino, ESP32 oder ähnlichen Mikrocontrollern Geräusche zu erkennen.
Wir haben den MAX4466 verwendet, um die Lautstärke von Geräuschen zu messen, eine LED für eine feste Zeit einzuschalten, wenn die Lautstärke einen Schwellenwert überschreitet, und ein Relais mit Klatschen zu steuern. Wenn du Fragen hast, kannst du sie gerne im Kommentarbereich stellen.
Viel Spaß beim Tüfteln ; )

