HC-SR501 motion sensor with Arduino

FunduinoLast updated on

Bewegungen erkennen und ein Warnsignal auslösen

Bewegungsmelder sind aus unserem Alltag nicht wegzudenken:

  • Sie öffnen und schließen automatisch Türen.
  • Sie schalten die Beleuchtung in Räumen oder im Freien.
  • Sie setzen Wasserhähne, Seifenspender und Händetrockner in Gang.
  • Sie schalten die Sirene einer Alarmanlage.

Aufgabe: Ein Lautsprecher soll piepen, sobald eine Bewegung erkannt wird.

Lerninhalt: Die Spannung eines Bewegungsmelders (HC-SR501) auslesen und für eine Ausgabe verwenden.

Bewegungsmelder HC-SR501 ohne Kunststofflinse mit sichtbarem Infrarotdetektor
Unter der Kunststofflinse sitzt der Infrarotdetektor – am oberen Rand stehen die Kontaktbezeichnungen

Choose a microcontroller

Pins, schematic, and sketch in the steps change with your selection. It remains saved.

Den Bewegungsmelder kennenlernen

Der Bewegungsmelder HC-SR501, auch PIR-Sensor (Passive Infrared Sensor) genannt, ist sehr einfach konstruiert. Sobald er eine Bewegung erkennt, gibt er auf einem Pin eine Spannung von 5 Volt aus. Diese musst du nur auslesen und vom Mikrocontroller verarbeiten lassen.

Die Dauer des Ausgangssignals (linker Regler) und die Empfindlichkeit (rechter Regler) stellst du über die beiden Drehregler ein.

Die Kunststofflinse ist nur leicht aufgesteckt. Wenn du sie abhebst, erkennst du den Infrarotdetektor und siehst anhand der Beschriftung unter der Linse, wie du den Sensor verkabeln musst: GND (–), OUT (Ausgang des Signals), VCC (+).

Bewegungsmelder HC-SR501 mit den beiden Potentiometern für Dauer und Empfindlichkeit
Die beiden Drehregler: links die Dauer, rechts die Empfindlichkeit
Bewegungsmelder HC-SR501 ohne Kunststofflinse mit sichtbarem Infrarotdetektor
Unter der Kunststofflinse sitzt der Infrarotdetektor – am oberen Rand stehen die Kontaktbezeichnungen
1 / 2

Den Jumper richtig setzen

Für den Jumper gibt es zwei Stellungen:

  • Jumper ganz außen: Das Ausgangssignal bleibt nach einer erkannten Bewegung für eine gewisse Zeit aktiv und wird danach auf jeden Fall wieder abgeschaltet – auch dann, wenn im Bereich des Bewegungsmelders noch eine Bewegung stattfindet. Nach einer gewissen Zeit erzeugt der Sensor das Ausgangssignal erneut.
  • Jumper leicht nach innen versetzt: Das Ausgangssignal bleibt pausenlos aktiv, solange der Bewegungsmelder eine Bewegung erkennt.

Die neueste Version des Bewegungsmelders kommt ohne Jumperbrücke aus. Dort kalibrierst du den Sensor direkt über die Potentiometer.

Jumperpositionen am Bewegungsmelder HC-SR501
Die beiden möglichen Jumperstellungen

Verkabeln und programmieren

Pin assignment Arduino UNO

LED 1Pin 5
LED 2Pin 7
Logikspannung5 V

Beim Arduino UNO schreibst du die Pin-Nummer direkt in den Sketch, also 5 und 7 ohne Zusatz.

Der Bewegungsmelder kommt an Pin 7, der Lautsprecher an Pin 5.

Schaltplan mit HC-SR501 an Pin 7 und Lautsprecher an Pin 5 des Arduino UNO
Schaltplan: Bewegungsmelder und Lautsprecher am Arduino UNO
Programmcode – Arduino UNO
// Das Wort "Piezo" steht jetzt für den Wert 5.
int Piezo = 5;
// Das Wort "Bewegungsmelder" steht jetzt für den Wert 7.
int Bewegungsmelder = 7;
// Das Wort "Bewegungsstatus" steht jetzt zunächst für den 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 mit dem Lautsprecher (Pin 5) ist jetzt ein Ausgang.
  pinMode(Piezo, OUTPUT);
  // Der Pin mit dem Bewegungsmelder (Pin 7) ist jetzt ein Eingang.
  pinMode(Bewegungsmelder, INPUT);
}
// Der loop-Teil beginnt
void loop()
{
  // Hier wird Pin 7 ausgelesen. Das Ergebnis wird in der Variablen "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 Lautsprecher piepsen.
  if (Bewegungsstatus == HIGH)
  {
    digitalWrite(Piezo, HIGH);
    delay(5000);              // ... und zwar für 5 Sekunden.
    digitalWrite(Piezo, LOW); // ... danach wird er ausgeschaltet.
  }
  // ansonsten, wenn das erkannte Signal LOW ist ...
  else
  {
    // ... soll der Lautsprecher aus sein.
    digitalWrite(Piezo, LOW);
  }
}
// Mit dieser letzten Klammer wird der loop-Teil geschlossen.

Download: programmcode-arduino-uno.ino

Board in the Arduino IDEArduino Uno

Ein zusätzliches Board-Paket brauchst du dafür nicht. Der UNO ist in der Arduino IDE ab Werk dabei.

Done!

Cover und Gehäuse aus dem 3D-Drucker

Für den Bewegungsmelder findest du bei Thingiverse diverse Cover und Gehäuse zum Ausdrucken:

Rate the instructions

Comments

Ask a question or share an experience

Contact us if something doesn’t work. Please include your board and the error message.

We review every comment before publication. Your email address remains with us.