Ein Bewegungsmelder bemerkt dich im Dunkeln, und eine LED wird sanft heller. Nach 30 Sekunden ohne Bewegung dimmt sie langsam wieder aus. Du brauchst dafür nicht einmal einen Lötkolben.
Level
Einsteiger
Alter
ab 10
Zeit
2 Std.
Kosten
ca. 12 €
Werkzeug
Steckbrett, ESP32, USB-Kabel
Bauteile
Was
Menge
Preis
ESP32 DevKit V1 (oder ähnliches Board)
1
ca. 6 €
Bewegungsmelder HC-SR501 (PIR-Sensor)
1
ca. 2 €
LED, weiß oder warmweiß, 5 mm
1
ca. 0,20 €
Widerstand 220 Ω
1
ca. 0,10 €
Steckbrett und Steckkabel
1 Satz
ca. 4 €
USB-Kabel (passend zum Board)
1
vorhanden
Verkabelung
Bauteil
Anschluss
ESP32-Pin
HC-SR501
VCC
VIN (5 V)
HC-SR501
OUT
GPIO 13
HC-SR501
GND
GND
LED
langes Bein (+)
über 220 Ω an GPIO 25
LED
kurzes Bein (−)
GND
Der Sensor braucht 5 V, sein Ausgang liefert aber nur 3,3 V – das verträgt der ESP32 problemlos.
Schritt für Schritt
Arduino IDE einrichten
Arduino IDE installieren. Unter Datei → Einstellungen die Boardverwalter-URL von Espressif eintragen, dann im Boardverwalter „esp32“ installieren und dein Board auswählen.
Tipp: Die genaue URL steht in der Dokumentation von Espressif („Arduino core for ESP32“).
ESP32 aufs Steckbrett
Den ESP32 so in die Mitte des Steckbretts stecken, dass auf beiden Seiten noch eine Reihe Löcher frei bleibt.
Sensor anschließen
Den Bewegungsmelder mit drei Kabeln laut Tabelle verbinden. Die Beschriftung VCC, OUT und GND findest du unter der weißen Kuppel.
LED anschließen
Den Widerstand von GPIO 25 zum langen Bein der LED stecken, das kurze Bein mit GND verbinden.
Achtung: Ohne Widerstand fließt zu viel Strom – LED und Pin können kaputtgehen.
Code hochladen
Den Code unten kopieren, in die Arduino IDE einfügen und hochladen.
Sensor einstellen
Am HC-SR501 sind zwei Drehregler: einer für die Empfindlichkeit, einer für die Haltezeit. Die Haltezeit ganz nach links drehen, denn die Leuchtdauer regelt jetzt dein Programm.
Tipp: Nach dem Einschalten braucht der Sensor etwa eine Minute zum Aufwärmen. In der Zeit kann er Fehlalarme geben.
Der Code
const int PIR_PIN = 13; // Ausgang vom Bewegungsmelder
const int LED_PIN = 25; // LED über 220-Ohm-Widerstand
const unsigned long LEUCHTDAUER = 30000; // 30 Sekunden
unsigned long letzteBewegung = 0;
bool licht = false;
int helligkeit = 0;
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Bewegung erkannt: Licht an und Zeit merken
if (digitalRead(PIR_PIN) == HIGH) {
letzteBewegung = millis();
licht = true;
}
// Zu lange keine Bewegung: Licht aus
if (licht && millis() - letzteBewegung > LEUCHTDAUER) {
licht = false;
}
// Sanft heller oder dunkler werden
int ziel = licht ? 255 : 0;
if (helligkeit < ziel) helligkeit++;
if (helligkeit > ziel) helligkeit--;
analogWrite(LED_PIN, helligkeit);
delay(8); // bestimmt, wie schnell gedimmt wird
}
Tipp: Teste die Zahlen: Ändere LEUCHTDAUER auf 5000 oder delay(8) auf delay(2) und beobachte, was passiert.
Wenn’s nicht klappt
Die LED leuchtet gar nicht.
Prüfe die Richtung der LED: Das lange Bein gehört zum Widerstand. Steckt der Widerstand wirklich an GPIO 25?
Das Licht geht ständig an, obwohl niemand da ist.
Empfindlichkeit am Sensor etwas zurückdrehen und den Sensor nicht auf Heizung oder Fenster richten – er reagiert auf Wärme.
Fehlermeldung beim Hochladen.
Richtiges Board und richtigen Port auswählen. Manche Boards brauchen beim Hochladen einen Druck auf die BOOT-Taste.
Weiter geht’s
Einen Lichtsensor (Fotowiderstand) ergänzen, damit das Licht nur im Dunkeln angeht.
Statt einer LED einen WS2812-LED-Streifen mit warmem Farbverlauf ansteuern.
Ein Gehäuse für Sensor und Board im 3D-Drucker entwerfen.