Radar Bewegungsmelder Modul RCWL-0516 am Multi Function Shield
Das Multi Function Shield, das ich ja bereits vorgestellt habe , bietet mit der Möglichkeit zur einfachen Anzeige von Daten auf seinem 4-fach-7-Segment-Display und den freien Anschlusspins eine gute Grundlage, Sensoren ausprobieren.Aus Fernost habe ich mir für kleines Geld zwei Radar-Bewegunsmeldungsmodule RCWL-0516 kommen lassen, die einen guten Ersatz für die bisher bei mir eingesetzten HC-SR501-PIR-Module auf Infrarot-Basis.
Denn im Gegensatz dazu funktionieren sie auf Basis des Doppler-Effekts von ausgesendeten Mikrowellen und nicht auf Auswertung von empfangener Infrarot-Strahlung. Das heißt, sie funktionieren auch durch Wände hindurch und brauchen kein Sichtfenster wie den charakteristischen weißen Dom bei PIR-Meldern.
Damit lassen sich die kleinen, flachen Module ideal in Gehäuse integrieren, ohne von außen überhaupt erahnt werden zu können.
Radar Bewegungsmeldung Modul RCWL-0516
Auf der Komponentenseite des Modul befindet sich der Controller Chip RCWL-9196 und weitere kleinere Komponenten. Außerdem ist hier eine geschlängelte Antenne als Leiterbahn.
Auf der Rückseite gibt es eine kreisrunde Antenne. Welche Antenne für das Senden und welche für den Empfang, kann ich nur raten. Fest steht, dass das Modul Mikrowellenstrahlen im Gigahertz-Bereich aussendet und deren Echo wieder einfängt (Radar-Technologie), um über einen Vergleich von Ausgangs- und Echosignal eine Veränderung festzustellen.
Ist dies der Fall, wird das Signal an OUT für 2 Sekunden auf HIGH gezogen, um eine Bewegung anzuzeigen.
Die Lötstelle CDS ist frei. Hier kann ein zusätzlicher Fotowiderstand eingelötet werden.
Alternativ kann auf der Rückseite an den SMD-Pads R-CDS oder zwischen dem herausgeführten Pin CDS am Header ein Fotowiderstand (10-20 kΩ) angeschlossen werden.
Ich habe es nicht ausprobiert, aber ich kann mir gut vorstellen, dass dann bei Bewegungen nur durchgeschaltet wird, wenn es dunkel ist. Ein prädestinierter Anwendungszweck ist also der Einbau in Flurleuchten, die automatisch angehen, sobald eine Person den Flur betritt und eine Beleuchtung nötig ist, sobald es nötig ist.
Fur ein Flurlicht sind 2 Sekunden Einschaltzeit natürlich recht kurz, so eins, zwei Minuten sollte es schon sein. Dafür kann ein Widerstand an C-TM (für Time) eingelötet werden. Es empfiehlt sich, mit einem Potentiometer zu experimentieren, um der richtigen Widerstand für die gewünschte Zeit zu finden.
Zudem gibt es ein Lötpad namens R-GN auf der Rückseite, in den ein Widerstand von 1 MΩ eingelötet werden kann, um die Empfindlichkeit von ca. 7m auf ca. 5m herabzusetzen.
Anschlüsse des RCWL-0516:
- 3V3 = Ausgang mit 3.3V zur Stromversorgung weiterer Komponenten
- GND = Ground / Masse
- OUT = Ausgangssignal, geht bei Bewegung auf HIGH
- VIN = Voltage in, Versorgungsspannung des Moduls, 4 ... 28V
- CDS = zum Anschluss eines Fotowiderstandes
- Funkfrequenz ca. 3.18 GHz
- Erkennungswinkel: sollen 120° sein, scheint aber fast 360° zu erkennen
- Erkennungsweiter: bis 7m
- Stromverbrauch: ca. 2.5 mA
Für den normalen Gebrauch als PIR-Ersatz braucht man keine zusätzlichen Komponenten. Die Empfindlichkeit ist sehr gut und die 2 Sekunden sind ein ganz brauchbarer Wert, um eine Bewegung im Programm zu registrieren und nicht zu übersehen und eine Aktion auszuführen.
Die Erkennung funktionierte mit meinem Modul auf der Bestückungsseite als auch auf der Rückseite mit der kreisrunden Antenne. Sogar oberhalb des Moduls wurde noch etwas erkannt. Offiziell soll wohl die bestückte Seite die Detektoren-Seite sein, bei mir war die blanke Seite allerdings die empfindlichere. Egal wie herum, die Erkennung funktioniert selbst durch eine Zimmerwand hindurch. Das Modul kann also erkennen, wenn sich jemand im Nebenraum bewegt.
Metallische Wände dürften die Radarstrahlen aufhalten, allerdings reicht eine dünne Blechdose nicht aus, wie sich bei einem Experiment von mir zeigte.
Die Bewegungserkennung funktioniert zuverlässig. Die Einschränkung auf einen bestimmten Bereich allerdings könnte sich schwierig gestalten.
Für den Versuchsaufbau kommt das bereits bekannte Multi Function Shield zum Einsatz. Das Modul findet auf einem Mini-Breadboard Platz. Ich habe einen 3-poligen, 90°-gewinkelten Header ins Modul gelötet, so dass es aufrecht im Breadboard stehen kann. So lässt es sich gut ausrichten. Wobei, wie bereits erwähnt, die Ausrichtung gar nicht so wichtig ist.
Das OUT-Signal des Moduls wird an GPIO D5 des Arduinos weitergeleitet, wo es mit einem kleinen Programm ausgewertet wird. Die LED 1 zeigt den Pegel des OUT-Signals an, also jeweils für 2 Sekunden. Das war mit als Gepiepe dann allerdings zu lang, so dass ich die Zeit im Programm auf 200 ms verkürzt habe. Mit Taster 1 kann der Arduino auch ganz stumm geschaltet werden.
Die 7-Segment-Anzeige zeigt einen Zähler an, der jeweils erhöht wird, wenn eine Bewegung erkannt wurde. Man könnte das Modul also so z. B. in ein Schaufenster stellen und mitzählen, wieviele Personen (-gruppen) im Laufe eines Tages daran vorbeigelaufen sind. Das funktioniert allerdings nur, soweit zwischen den Personen eine Pause von 2 Sekunden wäre.
Hier eine kleine Demonstration des Programmes als Video:
Source-Code
////////////////////////////////////////////////////////
// (C) 2019 by Oliver Kuhlemann //
// Bei Verwendung freue ich mich über Namensnennung, //
// Quellenangabe und Verlinkung //
// Quelle: http://cool-web.de/arduino/ //
////////////////////////////////////////////////////////
#include <TimerOne.h> // für Timings und Interrupts
#include <MultiFuncShield.h> // API für das Multi Function Shield
#define PinData 5 // wo ist der Sensor angeschlossen ?
void setup() {
Timer1.initialize();
MFS.initialize(&Timer1); // initialize multi-function shield library
pinMode (PinData, INPUT);
}
void loop() {
boolean silent = false;
int cnt=0;
int wert = 0;
int wertBefore = 0;
MFS.beep(1, 5, 2); // bereit
while (1) {
int wert = digitalRead(PinData);
if (wert && wert != wertBefore) {
cnt++;
if (!silent) MFS.beep (20);
}
if (MFS.getButton() == BUTTON_1_PRESSED) { digitalWrite(3,HIGH); silent=true; }
MFS.writeLeds(LED_1, wert);
MFS.write(cnt);
delay(10);
wertBefore=wert;
} //end while 1
} //end loop()