Bei­spiel­pro­gramm Bewegungsmelder

Befin­det sich ein Objekt im „Sicht­be­reich“ des Bewe­gungs­mel­ders, wird im Seri­el­len Moni­tor ange­zeigt, ob eine Bewe­gung erkannt wurde.

Der Bewe­gungs­mel­der HC-SR501 hat auf der Vor­der­sei­te zwei Poten­tio­me­ter: Der lin­ke stellt die Dau­er des Aus­gangs­si­gnal ein (Zeit, wie lan­ge das Signal HIGH bleibt) , der rech­te die Reichweite/Empfindlichkeit.
Die Reich­wei­te beträgt 3 - 7 m, bei einem Win­kel von 120°.

Auf der Rück­sei­te befin­det sich ein Jum­per, der den Trig­ger-Mode ein­stellt:
H: Solan­ge sich ein Objekt im "Sicht­be­reich" bewegt, wird wie­der­holt HIGH aus­ge­löst, die Zeit für das Aus­gangs­si­gnal star­tet bei jeder neu­en Bewe­gung von vor­ne (ret­rig­ge­ring)
L: wird eine Bewe­gung ent­deckt, wird für die Dau­er des Aus­gangs­si­gnal nur ein­mal HIGH aus­ge­löst. Dabei spielt es kei­ne Rol­le, wie oft sich das Objekt im "Sicht­be­reich" bewegt (non-ret­rig­ge­ring)

Der Bewe­gungs­sen­sor HC-SR505 hat eine fest ein­ge­stell­te Reich­wei­te von 3 m und deckt eine Win­kel von 120° ab.

Beach­te bei der Ver­ka­be­lung des HC-SR501, dass die bei­den Poten­tio­me­ter nach vorn zeigen.

Der Schalt­plan

Das Pro­gramm

// Pin des Bwegungsmelders
int BEWEGUNGSMELDER = 7; 

void setup()
{
  // Bewegungsmelder als Eingang definieren
  pinMode(BEWEGUNGSMELDER, INPUT); 
  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

}

void loop() 
{
  // die Variable Sensorwert beinhaltet den mit digitalRead abgefragten Zustand des Sonsors (HIGH/LOW)
  int SensorWert = digitalRead(BEWEGUNGSMELDER);

  // es wurde eine Bewegung erkannt
  if (SensorWert == HIGH)   
  {
   Serial.println("Bewegung erkannt!");
  } 

  else Serial.println("Keine Bewegung erkannt!");
  delay(500);
}

Quel­len


letz­te Aktua­li­sie­rung: Feb. 5, 2025 @ 14:01