In diesem kleinen Projekte möchte ich dir zeigen wie du ein Relais mit Geräuschdetektor am Arduino UNO schalten kannst.

Die Idee zu diesem kleinen Projekt entstand aus einem Kommentar von einem Leser meines Blogs. Hier sei Erst T. bestens gegrüßt.
Natürlich kannst du für diesen Aufbau auch einen anderen Microcontroller als den Arduino UNO verwenden. Es geht also auch genauso mit einem Arduino Nano, Leonardo, Pro Mini usw.
benötigte Bauteile für dieses Projekt
Für dieses Projekt benötigst du folgende Bauteile:
- einen Arduino UNO,
- ein Relaismodul,
- ein Geräuschdetektor KY-037,
- sechs Breadboardkabel, 20cm, Stecker – Buchse
Das Relaismodul / Relaisshield habe ich bereits im Beitrag Arduino Lektion 13: 2 fach Relaisplatine ansteuern und den Geräuschdetektor KY-037 im Beitrag Arduino Lektion 19 – Teil 1: Hochempfindlicher Geräuschdetektor „Klatschdetektor“ ausführlich behandelt.
Aufbau & Schaltung
Die Sensoren / Aktoren werden mit dem Arduino UNO wiefolgt verbunden:
Sensor / Aktor | Arduino UNO |
---|---|
Geräuschdetektor | |
A0 | analoger Pin A0 |
G | GND |
+ | 5V |
Relaismodul | |
In1 | digitaler Pin D8 |
VCC | 5V |
GND | GND |

Dadurch das wir an beiden Sensoren / Aktoren 5V Spannung benötigen empfehle ich zusätzlich die Verwendung von einem 170 Pin Breadboard.
Programmieren
Im nachfolgenden möchte ich dir zwei Möglichkeiten zeigen wie du das Relais steuern kannst.
einfaches Programm um ein Relais mit Geräuschdetektor am Arduino schalten
Da die gesamte Schaltung mit wenigen Bauteilen daher kommt ist der Quellcode selber sehr übersichtlich.
#define relaisPin 8 //Relaismodul am digitalen Pin D8 #define soundSensor A0 //Geräuschdetektor am analogen Pin A0 void setup(){ Serial.begin(9600); //digitalen Pin des Relais als Ausgang definieren pinMode(relaisPin, OUTPUT); //analogen Pin des Geräuschdetektor als Eingang definieren pinMode(soundSensor, INPUT); } void loop(){ //lesen des aktuellen Wertes des Geräuschdetektors int value = analogRead(soundSensor); Serial.println(value); //wenn der Wert größer als 300 ist dann... if(value > 300){ //Relais aktivieren digitalWrite(relaisPin, LOW); } else { //Relais deaktivieren digitalWrite(relaisPin, HIGH); } }
In dem oben gezeigten Sketch musst du den Schwellwert für das aktivieren / deaktivieren des Relais „hart“ in den Quellcode schreiben. D.h. immer wenn du diesen Wert ändern möchtest musst du einen neuen Sketch auf den Microcontroller schreiben.
Video
Drehpotentiometer zum Regeln des Schwellwertes für das aktivieren / deaktivieren des Relais
Der Drehpotentiometer verfügt über 3 Beinchen somit benötigen wir zusätzlich 3 weitere Breadboardkabel (Stecker – Stecker) sowie ein 170 Pin Breadboard.
Auf dem Geräuschsensor KY-037 ist ein Drehpotentiometer verbaut über welchen man den Schwellwert für das aktivieren / deaktivieren des digitalen Ausgangs des Sensors einstellen kann. Jedoch hat man das Problem das dieser Drehpotentiometer nicht vernünftig erreichbar ist man kann zbps. keine Kappe montieren oder diesen aus dem Gehäuse führen um diesen zu bedienen.
Aufbau der Schaltung
In der neuen Schaltung verwende ich einen Arduino Nano. Dieser kleine Microcontroller ist dem Arduino UNO ähnlich und verfügt über die selbe Anzahl der Pins.
Ein großer Vorteil ist die kleine Bauform so dass, dieser auf ein Breadboard 400 oder 720 Pin gesteckt werden kann.
Zusätzlich verbauen wir einen Drehpotentiometer welcher an den analogen Pin A1 angeschlossen wird.

Programmieren
Der neue Sketch wird lediglich um den zusätzlichen Drehpotentiometer erweitert.
#define relaisPin 8 //Relaismodul am digitalen Pin D8 #define soundSensor A0 //Geräuschdetektor am analogen Pin A0 #define rotaryResistor A1 //Drehpotentiometer am analogen Pin A1 void setup(){ //digitalen Pin des Relais als Ausgang definieren pinMode(relaisPin, OUTPUT); //analogen Pin des Geräuschdetektor als Eingang definieren pinMode(soundSensor, INPUT); //Ausgang des Drehpotentiometers als Eingang am Microcontroller definieren pinMode(rotaryResistor, INPUT); } void loop(){ //lesen des aktuellen Wertes des Geräuschdetektors int value = analogRead(soundSensor); //wenn der Wert größer als der eingestellte Wert am Drehpotentiometer ist dann... if(value > analogRead(rotaryResistor)){ //Relais aktivieren digitalWrite(relaisPin, HIGH); } else { //Relais deaktivieren digitalWrite(relaisPin, LOW); } }