Arduino Mikrocontroller Tutorials - Module

Radar Bewegungssensor (Bsp. RCWL-0516)

Oberseite RCWL-0516 Unterseite RCWL-0516

Der RCWL-0516 Radar Bewegungsmelder sendet über eine Antenne Mikrowellen aus. Eine Empfangsantenne im Sensor empfängt reflektierte und zurückgeworfene Signale. Unterschiedet sich die empfangene von der gesendeten Frequenz deutet das auf eine Bewegung hin. Eine Bewegung zum Sensor hin erhöht die gemessene reflektierte Frequenz und eine Bewegung vom Sensor weg verringert sie (Suchbegriff "Doppler-Effekt"). Hochwertigere Sensoren können über den Frequenzunterschied sogar die Bewegungsgeschwindigkeit messen.

Der RCWL-0516 Sensor gibt als Ausgang nur an ob eine Bewegung erkannt wurde. Egal ob vom Sensor weg oder zum Sensor hin. Der Detektionsbereich ist dabei jeweils in Richtung der Antennen (also senkrecht zur Platine, egal ob in Richtung Vorder- oder Rückseite).

Solange eine Bewegung erkannt wird am Sensorausgang HIGH ausgegeben. Endet die Bewegung hält der Ausgang noch für weitere 2-3 Sekunden diesen HIGH-Pegel. Wichtig ist, dass der Sensor keinen Gegenstand an sich erkennt. Nur wenn sich etwas vor dem Sensor bewegt wird dies detektiert.

Einstellmöglichkeiten

Auf der Unterseite der Platine sind einige Lötpads zur Bestückung von SMD Bauteilen angebracht. Mit diesen Bauteilen lässt sich der Radarsensor optional einstellen.

Programmcode

Dieses Programm wertet den Sensorausgang OUT aus und überträgt die Information an den seriellen Monitor. Sobald ein Signal empfangen wird gibt das Programm "Bewegung erkannt ..." aus. Gleichzeitig beginnt eine Zeitmessung. Wenn die Bewegung endet und das OUT Signal auf LOW wechselt wird die Dauer der detektierten Bewegung übertragen.

void setup() { pinMode(7, INPUT); // Anschluss des OUT Signals an Pin 7 Serial.begin(115200); } void loop() { long int trigger = 0; while (digitalRead(7) == HIGH) { digitalWrite(LED_BUILTIN, HIGH); if (trigger == 0) { trigger = millis(); Serial.print("Bewegung erkannt..."); } } if (trigger != 0) { byte zeit = (millis() - trigger) / 1000; Serial.println("für " + String(zeit) + " Sekunden"); } }