1.Einführung
Bewegungsmelder sind heutzutage unverzichtbare Bestandteile unseres Alltags:
- Sie übernehmen die automatische Öffnung und Schließung von Türen.
- In Räumen oder im Freien steuern sie die Beleuchtung, indem sie sie automatisch ein- und ausschalten.
- Wasserhähne, Seifenspender und Händetrockner werden durch sie aktiviert.
- Auch die Sirene einer Alarmanlage wird von Bewegungsmeldern gesteuert.
Die gestellte Aufgabe besteht darin, einen Piezo-Lautsprecher dazu zu bringen, ein Piepen von sich zu geben, sobald eine Bewegung durch den Bewegungsmelder (HC-SR501) erkannt wird. Der Lerninhalt konzentriert sich darauf, die Spannung des Bewegungsmelders auszulesen und sie dann für eine entsprechende Ausgabe zu verwenden.
Der HC-SR501 Bewegungsmelder, auch als PIR-Sensor (Passive Infrared Sensor) bekannt, zeichnet sich durch seine einfache Konstruktion aus. Im Moment der Bewegungserkennung gibt der Sensor auf einem Pin eine Spannung von 5 Volt aus. Die Aufgabe besteht darin, diese Spannung mit einem Mikrocontroller auszulesen und weiter zu verarbeiten.
Zur Anpassung des Bewegungsmelders an unterschiedliche Anforderungen können zwei Drehregler genutzt werden. Der linke Regler ermöglicht die Einstellung der Dauer des Ausgangssignals, während der rechte Regler die Sensibilität des Sensors steuert. Beide Regler sind auf der rechten Seite des Sensors zu finden (siehe Bild rechts). Durch die gezielte Anpassung dieser Parameter kann der HC-SR501 an spezifische Anwendungsfälle angepasst werden.
Die Kunststofflinse des Bewegungsmelders ist lediglich leicht aufgesteckt. Durch Anheben dieser Linse wird der Infrarotdetektor sichtbar, und anhand der Beschriftung unter der Linse kann die korrekte Verkabelung des Sensors ermittelt werden. Die Bezeichnungen lauten: GND (–) für den Erdungspunkt, OUT für den Ausgang des Signals und VCC (+) für die Versorgungsspannung.
Das Bild oben zeigt am oberen Rand die Kennzeichnungen der einzelnen Kontakte.
1) Wenn der Jumper ganz außen platziert ist, wird das Ausgangssignal nach der Erkennung einer Bewegung für eine festgelegte Zeitspanne aktiviert und danach auf jeden Fall wieder deaktiviert, selbst wenn im Aktionsbereich des Bewegungsmelders weiterhin Bewegung erkannt wird. Nach Ablauf dieser Zeit wird das Ausgangssignal erneut generiert.
Hinweis: In der neuesten Version des Bewegungsmelders entfällt die Jumperbrücke. Stattdessen kann der Sensor direkt über die Potentiometer kalibriert werden.
2. Schaltpläne
2.1. Arduino UNO
2.2. ESP32-Wroom
3.Code
3.1. Arduino UNO
// Der "Piezo"-Pin wird durch die Zahl 5 repräsentiert.
int Piezo = 5;
// Der "Bewegungsmelder"-Pin wird durch die Zahl 7 repräsentiert.
int Bewegungsmelder = 7;
// Der "Bewegungsstatus" startet mit dem Wert 0.
// Er wird später dazu verwendet, zu speichern, ob eine Bewegung erkannt wurde oder nicht.
int Bewegungsstatus = 0;
// Das eigentliche Setup beginnt hier.
void setup()
{
// Der Pin für den Piezo (Pin 5) wird als Ausgang festgelegt.
pinMode(Piezo, OUTPUT);
// Der Pin für den Bewegungsmelder (Pin 7) wird als Eingang festgelegt.
pinMode(Bewegungsmelder, INPUT);
}
// Nun startet der Loop-Teil.
void loop()
{
// Der Code liest den Status des Bewegungsmelders (HIGH für 5 Volt oder LOW für 0 Volt)
// und speichert diesen Status in der Variable "Bewegungsstatus".
Bewegungsstatus = digitalRead(Bewegungsmelder);
// Wenn eine Bewegung erkannt wird (das Signal ist HIGH),
// wird der Piezo für 5 Sekunden aktiviert.
if (Bewegungsstatus == HIGH)
{
digitalWrite(Piezo, HIGH);
delay(5000); // ... und zwar für 5 Sekunden.
digitalWrite(Piezo, LOW); // Danach wird der Piezo ausgeschaltet.
}
// Andernfalls, wenn das erkannte Signal LOW ist,
else
{
// ... bleibt der Piezo-Lautsprecher ausgeschaltet.
digitalWrite(Piezo, LOW);
}
}
// Hiermit wird der Loop-Teil abgeschlossen.
3.2. ESP32-Wroom
Beim ESP32-Wroom gibt es im setup-Teil eine Besonderheit:
Der pinMode des Bewegungsmelders muss mit INPUT_PULLDOWN definiert werden.
// Der "Piezo"-Pin ist nun auf den Wert 22 festgelegt.
int Piezo = 22;
// Der "Bewegungsmelder"-Pin ist nun auf den Wert 23 festgelegt.
int Bewegungsmelder = 23;
// Der "Bewegungsstatus" startet mit dem Wert 0.
// Später wird unter dieser Variable gespeichert, ob eine Bewegung erkannt wird oder nicht.
int Bewegungsstatus = 0;
// Hier beginnt das Setup.
void setup()
{
// Der Pin für den Piezo (Pin 22) wird als Ausgang konfiguriert.
pinMode(Piezo, OUTPUT);
// Der Pin für den Bewegungsmelder (Pin 23) wird als Eingang konfiguriert.
// INPUT_PULLDOWN: Der interne Widerstand wird auf LOW gezogen.
pinMode(Bewegungsmelder, INPUT_PULLDOWN);
}
// Nun startet der Loop-Teil.
void loop()
{
// Hier wird der Pin 23 ausgelesen. Das Ergebnis wird in der Variable "Bewegungsstatus"
// mit dem Wert „HIGH“ für 5 Volt oder „LOW“ für 0 Volt gespeichert.
Bewegungsstatus = digitalRead(Bewegungsmelder);
// Wenn eine Bewegung erkannt wird (das Signal ist HIGH), soll der Piezo piepsen.
if (Bewegungsstatus == HIGH)
{
digitalWrite(Piezo, HIGH);
delay(5000); // ... und zwar für 5 Sekunden.
digitalWrite(Piezo, LOW); // Danach wird der Piezo ausgeschaltet.
}
// Andernfalls, wenn das erkannte Signal LOW ist,
else
{
// ... bleibt der Piezo-Lautsprecher ausgeschaltet.
digitalWrite(Piezo, LOW);
}
}
// Hiermit wird der Loop-Teil abgeschlossen.
Zusammengefasst: Der Code überwacht den Status des Bewegungsmelders und steuert den Piezo-Lautsprecher entsprechend. Bei erkannter Bewegung wird der Piezo für 5 Sekunden aktiviert, andernfalls bleibt er ausgeschaltet. Die Verwendung von `INPUT_PULLDOWN` zieht den Eingang auf LOW, wenn keine externe Spannung anliegt.
Cover und Case aus dem 3D-Drucker
3D-Druck: Für den Bewegungsmelder gibt es bei Thingiverse diverse Cover und Case zum ausdrucken:
https://www.thingiverse.com/thing:2386494