Skip to Content

Menschliche Anwesenheitserkennung mit mmWave C4001

Menschliche Anwesenheitserkennung mit mmWave C4001

Der mmWave C4001 ist ein 24-GHz-Radar-basierter Sensor zur Personenerkennung. Ein wesentlicher Vorteil des C4001 gegenüber herkömmlichen PIR-Sensoren ist die Fähigkeit, statische Präsenz zu erkennen. PIR-Sensoren reagieren nur auf Bewegung, während der C4001 Mikrobewegungen wie Atmung erfassen kann. Er ist zudem widerstandsfähiger gegenüber Umwelteinflüssen wie Licht, Temperatur und Staub.

Der Sensor unterstützt Bewegungsmeldung bis zu 25 Metern und Personenerkennung bis zu 16 Metern. Er bietet UART- und digitale Ausgänge für eine einfache Integration mit Mikrocontrollern. In diesem Tutorial lernst du, wie du den mmWave C4001 Sensor an ein Arduino oder ESP32 anschließt. Wir verwenden ihn zur Bewegungserkennung sowie zur Messung von Entfernung und Geschwindigkeit von Objekten.

Benötigte Teile

Den mmWave C4001 Sensor kannst du bei Amazon oder DFRobot erwerben. Außerdem benötigst du ein Arduino oder ESP32. In diesem Tutorial verwende ich ein Arduino UNO und ein ESP32 Lite, aber auch andere Arduino-, ESP32- oder ESP8266-Modelle funktionieren. Schließlich sind ein Breadboard und einige Dupont-Kabel zum Verdrahten hilfreich.

mmWave C4001 Radar Sensor

ESP32 lite Lolin32

ESP32 lite

USB C Kabel

Arduino

Arduino Uno

USB Data Sync cable Arduino

USB-Kabel für Arduino UNO

Dupont wire set

Dupont Kabelsatz

Half_breadboard56a

Breadboard

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Hardware des mmWave C4001 Sensors

Der C4001 Sensor basiert auf 24-GHz-Millimeterwellen-Radartechnologie. Er verwendet FMCW (Frequency-Modulated Continuous Wave) Modulation zur Messung von Entfernung und Bewegung. Der Sensor sendet kontinuierlich ein frequenzmoduliertes Signal aus und analysiert die reflektierte Wellenform.

Die Frequenzdifferenz zwischen gesendetem und empfangenem Signal wird zur Berechnung der Entfernung genutzt. Der Dopplereffekt dient zur Erkennung von Bewegung und Geschwindigkeit. So kann der Sensor sowohl große Bewegungen als auch sehr kleine Bewegungen wie Atmung erfassen.

Im Gegensatz zu PIR-Sensoren beruht diese Messmethode nicht auf Infrarotstrahlung. Sie funktioniert unabhängig von Umgebungslicht und Temperaturbedingungen. Das Bild unten zeigt die Rück- und Vorderseite des mmWave C4001 Sensormoduls. Die goldfarbenen Radarantennen sind an der Vorderseite der Platine zu sehen.

Rück- und Vorderseite des mmWave C4001 Sensors (source)

Erkennungsfähigkeiten

Der Sensor unterstützt mehrere Messmodi parallel. Er kann Personenerkennung, Bewegung, Entfernung und Geschwindigkeit erfassen. Die maximale Bewegungsmelder-Reichweite beträgt bis zu 25 Meter. Die Personenerkennung ist bis etwa 16 Meter zuverlässig.

Der Entfernungsbereich beginnt bei ca. 1,2 Metern und reicht bis 25 Meter. Der Geschwindigkeitsbereich liegt zwischen 0,1 m/s und 10 m/s.

Der Radarstrahl hat einen horizontalen Sichtwinkel von etwa 100° und vertikal 40°. Das ermöglicht eine großflächige Abdeckung mit nur einem Sensor.

Erfassungsbereich des mmWave C4001 Sensors (source)

Elektrische Eigenschaften

Der C4001 arbeitet mit einer Versorgungsspannung (VIN) von 3,3 V oder 5 V. Damit ist er kompatibel mit gängigen Mikrocontrollern wie Arduino und ESP32.

Die Standard-Baudrate der seriellen Kommunikation beträgt 9600. Der Sensor bietet sowohl UART-Kommunikation als auch einen digitalen Ausgangspin. Die UART-Schnittstelle ermöglicht den Zugriff auf detaillierte Messdaten wie Entfernung und Geschwindigkeit. Der digitale Ausgang kann für einfache Präsenzsignale genutzt werden.

Das Modul verfügt über Pins für Stromversorgung (VIN), Masse (GND), serielles Senden (TX), serielles Empfangen (RX) und einen digitalen Ausgang (OUT). Das Bild unten zeigt das Pinout des Moduls:

 Pinout of the mmWave C4001 Sensor
Pinbelegung des mmWave C4001 Sensors (source)

Signalverarbeitung und Ausgabe

Der Sensor verarbeitet Radarreflexionen intern und gibt strukturierte Daten aus. Über UART liefert er Echtzeitinformationen zu erfassten Zielen. Dazu gehören Präsenzstatus, Bewegungszustand, Entfernung und Geschwindigkeit.

Der digitale Ausgangspin liefert ein HIGH- oder LOW-Signal basierend auf dem Erkennungsstatus. Das ist nützlich für einfache triggerbasierte Anwendungen. Die interne Verarbeitung reduziert den Bedarf an komplexer Signalverarbeitung im Mikrocontroller.

Umweltbeständigkeit

Der C4001 ist sehr widerstandsfähig gegen Umwelteinflüsse. Er wird nicht durch Lichtverhältnisse, Staub, Feuchtigkeit oder Temperaturschwankungen beeinträchtigt.

Der Betriebstemperaturbereich liegt zwischen −40 °C und 85 °C. Das ermöglicht den Einsatz sowohl in Innen- als auch Außenbereichen.

Der Sensor liefert stabile Leistung auch unter Bedingungen, bei denen Infrarotsensoren typischerweise versagen. Dazu gehören warme Umgebungen oder Szenarien mit minimaler menschlicher Bewegung.

Technische Spezifikationen

Die folgende Tabelle fasst die technischen Spezifikationen des mmWave C4001 Sensors zusammen.

Parameter Wert
Betriebsspannung 3,3 V / 5 V
Betriebsstrom 10 mA (durchschnittlich), 100 mA (Spitze)
Betriebsfrequenz 24 GHz
Modulationstyp FMCW (Frequency-Modulated Continuous Wave)
Bewegungserkennungsreichweite Bis zu 25 m
Personenerkennungsreichweite Bis zu 16 m
Entfernungs-Messbereich 1,2 m bis 25 m
Geschwindigkeits-Messbereich 0,1 m/s bis 10 m/s
Strahlwinkel 100° (horizontal) × 40° (vertikal)
Kommunikationsschnittstellen UART, Digital I/O
Standard-Baudrate 9600
Betriebstemperatur −40 °C bis 85 °C
Modulabmessungen 26 mm × 30 mm

Verwendung des mmWave C4001 Sensors ohne Mikrocontroller

Du benötigst einen Mikrocontroller (oder Computer), um spezifische Einstellungen des mmWave C4001 Sensors zu programmieren. Zum Beispiel kannst du die Erkennungsdistanz oder Empfindlichkeit einstellen. Nach der Konfiguration kannst du den C4001 jedoch auch ohne Mikrocontroller verwenden.

Das folgende Schaltbild zeigt, wie du eine LED anschließt, die leuchtet, wenn der Sensor eine Person erkennt. Du musst lediglich Strom (3,3…5 V) an die VIN- und GND-Pins anlegen und dann eine LED mit Widerstand an den OUT-Pin anschließen:

Connecting the mmWave C4001 Sensor to LED
Anschluss des mmWave C4001 Sensors an eine LED

Für die meisten praktischen Anwendungen möchtest du wahrscheinlich ein Relais statt einer LED anschließen, um ein Gerät mit höherer Spannung oder Strom zu schalten. Das ist möglich, aber du musst ein Relay Module mit integriertem Verstärker verwenden, da der OUT-Pin die Relaisspule nicht direkt treiben kann. Unten ist ein Beispielschaltplan:

Connecting the mmWave C4001 Sensor to Relay Module
Anschluss des mmWave C4001 Sensors an ein Relaismodul

Für weitere Informationen zu Relaismodulen siehe das How To Use A Relay With Arduino, Interfacing a Relay Module With ESP32 und das Control AC devices with Solid State Relay Tutorials.

In den nächsten Abschnitten zeige ich dir, wie du den mmWave C4001 Sensor an ein Arduino oder ESP32 anschließt. Nach der Konfiguration kannst du entscheiden, ob du den Sensor mit oder ohne Mikrocontroller verwenden möchtest. Für komplexere Steueraufgaben benötigst du den Mikrocontroller.

Anschluss des mmWave C4001 Sensors an Arduino

Der Anschluss des mmWave C4001 Sensors an ein Arduino UNO ist einfach. Verbinde zuerst VIN mit 5 V oder 3,3 V des Arduino. Dann verbinde GND mit GND. Schließlich verbinden wir die UART-Schnittstelle, indem RX an GPIO 5 und TX an GPIO 4 angeschlossen wird. Das Bild unten zeigt die komplette Verdrahtung:

Connecting the mmWave C4001 Sensor to an Arduino UNO
Anschluss des mmWave C4001 Sensors an ein Arduino UNO

Zur Übersicht hier eine Tabelle mit den Verbindungen, die du herstellen musst:

C4001 Arduino Uno
VIN 5 V oder 3,3 V
GND GND
RX GPIO 5
TX GPIO 4

Du benötigst nicht einmal ein Breadboard, um den Sensor an ein Arduino UNO anzuschließen. Vier Dupont-Kabel reichen aus. Das Foto unten zeigt meine Verdrahtung:

mmWave C4001 Sensor connected to an Arduino UNO
mmWave C4001 Sensor angeschlossen an ein Arduino UNO

Anschluss des mmWave C4001 Sensors an ESP32

Der ESP32 hat drei serielle Schnittstellen und du kannst die Pins und Schnittstelle frei konfigurieren. Hier verbinde ich TX mit GPIO 17 und RX mit GPIO 16. Das müssen wir beim Schreiben des Codes beachten. Schließlich verbinden wir VIN mit 3,3 V und GND mit G. Das Bild unten zeigt die komplette Verdrahtung:

Connecting the mmWave C4001 Sensor to an ESP32
Anschluss des mmWave C4001 Sensors an ein ESP32

Zur Übersicht hier eine Tabelle mit den Verbindungen, die du herstellen musst:

C4001 ESP32 Lite
VIN 3,3 V
GND G
RX 17
TX 16

Installation der DFRobot_C4001 Bibliothek

Bevor wir Code für die Bewegungserkennung schreiben können, müssen wir die DFRobot_C4001 Bibliothek installieren. Um diese Bibliothek zu installieren, gehe zum DFRobot_C4001 Repository, klicke auf den grünen „<> Code“ Button und dann auf „Download ZIP“, um die Bibliothek als ZIP-Datei herunterzuladen, wie unten gezeigt:

Erstelle dann einen neuen Arduino Sketch, gehe zu Sketch -> Include Library -> Add .ZIP Library … und installiere die heruntergeladene ZIP-Bibliothek (DFRobot_C4001-master.zip):

Code-Beispiel: Bewegungserkennung mit C4001

Der folgende Code initialisiert den C4001 Radarsensor über eine UART-Schnittstelle und wartet, bis der Sensor erkannt wird. Anschließend konfiguriert er den Sensor für den Geschwindigkeitsmodus und aktiviert die Mikro-Bewegungserkennung für höhere Empfindlichkeit. In der Hauptschleife wird kontinuierlich nach erfassten Zielen gesucht und deren Entfernung sowie Geschwindigkeit ausgelesen. Wenn ein Ziel erkannt wird, werden die Messwerte an den seriellen Monitor gesendet.

// Libraries:
// - DFRobot_C4001 V 1.0.0
//   https://github.com/DFRobot/DFRobot_C4001
// - ESP32 Core V 3.3.8

#include "DFRobot_C4001.h"

#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
  SoftwareSerial mySerial(4, 5);
  DFRobot_C4001_UART radar(&mySerial, 9600);
#elif defined(ESP32)
  DFRobot_C4001_UART radar(&Serial2, 9600, /*rx*/ 17, /*tx*/ 16);
#endif

void setup() {
  Serial.begin(115200);
  while (!radar.begin()) {
    Serial.println("Can't find sensor");
    delay(1000);
  }

  radar.setSensorMode(eExitMode);
  radar.setDetectionRange(/*min*/ 30, /*max*/ 1000, /*trig*/ 1000);
  radar.setTrigSensitivity(1);  // 0-9
  radar.setKeepSensitivity(2);    // 0-9
  radar.setDelay(/*trig*/ 0, /*keep*/ 4);
  radar.setPwm(/*pwm1*/ 50, /*pwm2*/ 0, /*timer*/ 10);
  radar.setIoPolaity(1);
}

void loop() {
  if (radar.motionDetection()) {
    Serial.println("Motion detected");
  }
  delay(100);
}

Bibliothek einbinden

Der Code beginnt mit dem Einbinden der DFRobot_C4001.h Bibliothek für den Sensor. Sie enthält die Klassendefinitionen und Kommunikationsfunktionen für den Sensor.

#include "DFRobot_C4001.h"

Plattform-spezifische Konfiguration

Der Code unterstützt Arduino Uno, ESP8266 und ESP32. Er verwendet bedingte Kompilierung, um die richtige serielle Schnittstelle auszuwählen. Für Arduino Uno und ESP8266 wird eine softwarebasierte serielle Schnittstelle verwendet, da diese Boards nur begrenzte Hardware-UARTs haben.

#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
  SoftwareSerial mySerial(4, 5);
  DFRobot_C4001_UART radar(&mySerial, 9600);

Pin 4 ist als RX und Pin 5 als TX konfiguriert. Der Sensor kommuniziert mit 9600 Baud.

Für den ESP32 wird stattdessen eine Hardware-UART verwendet. Das verbessert Zuverlässigkeit und Leistung.

#elif defined(ESP32)
  DFRobot_C4001_UART radar(&Serial2, 9600, /*rx*/ 17, /*tx*/ 16);
#endif

Der ESP32 ist so konfiguriert, dass Serial2 mit GPIO17 als RX und GPIO16 als TX verwendet wird. Andere Pins können hier angegeben werden.

Objektinitialisierung

Das DFRobot_C4001_UART Objekt repräsentiert den Radarsensor. Es übernimmt die gesamte Kommunikation und Konfiguration. Der Konstruktor erhält eine serielle Schnittstelle und eine Baudrate. Beim ESP32 werden zusätzlich die RX- und TX-Pins definiert.

Setup-Funktion

Die Setup-Funktion initialisiert die serielle Kommunikation und konfiguriert den Sensor.

void setup() {
  Serial.begin(115200);

Die Hauptserielle Schnittstelle wird mit 115200 Baud gestartet. Diese dient zur Ausgabe von Debug-Informationen im Serial Monitor.

  while (!radar.begin()) {
    Serial.println("Can't find sensor");
    delay(1000);
  }

Die radar.begin() Funktion initialisiert die Kommunikation mit dem Sensor. Sie prüft, ob das Modul korrekt antwortet. Wenn der Sensor nicht erkannt wird, gibt der Code eine Fehlermeldung aus und versucht es jede Sekunde erneut.

Sensormodus

Der Sensormodus definiert, wie Erkennungsereignisse behandelt werden.

radar.setSensorMode(eExitMode);

Der eExitMode ist ein triggerbasierter Modus. Der Sensor erzeugt ein Ausgangssignal, wenn Bewegung erkannt wird, und setzt sich nach einer definierten Bedingung zurück. Dieser Modus ist für einfache Bewegungserkennungsanwendungen optimiert.

Andere Modi können kontinuierliche Daten liefern, aber der Exit-Modus konzentriert sich auf ereignisbasierte Erkennung.

Erkennungsbereich-Einstellungen

Der Erkennungsbereich definiert, in welchem Bereich der Sensor aktiv Bewegungen erkennt.

  radar.setDetectionRange(/*min*/ 30, /*max*/ 1000, /*trig*/ 1000);

Der Mindestbereich ist auf 30 cm gesetzt. Objekte, die näher sind, werden ignoriert. Der Maximalbereich ist auf 1000 cm gesetzt. Objekte darüber hinaus werden ignoriert.

Der Triggerbereich definiert die Entfernung, bei der Erkennungsereignisse ausgelöst werden. In diesem Fall entspricht er dem Maximalbereich, sodass die gesamte Erkennungszone aktiv ist.

Empfindlichkeitseinstellungen

Der Sensor bietet zwei Arten von Empfindlichkeitseinstellungen.

  radar.setTrigSensitivity(1);  // 0-9

Die Trigger-Empfindlichkeit steuert, wie leicht Bewegung erkannt wird. Ein niedriger Wert wie 1 reduziert die Empfindlichkeit und hilft, Fehlalarme zu vermeiden.

  radar.setKeepSensitivity(2);    // 0-9

Die Keep-Empfindlichkeit steuert, wie der Sensor die Erkennung nach Bewegungserkennung aufrechterhält. Ein etwas höherer Wert sorgt dafür, dass kleine Bewegungen die Erkennung aktiv halten.

Diese beiden Parameter erlauben eine Feinabstimmung zwischen Reaktionsfähigkeit und Stabilität.

Timing-Einstellungen

Die Timing-Einstellungen definieren, wie schnell der Sensor reagiert und wie lange er aktiv bleibt.

  radar.setDelay(/*trig*/ 0, /*keep*/ 4);

Die Trigger-Verzögerung ist auf 0 gesetzt. Das bedeutet, der Sensor reagiert sofort bei Bewegungserkennung.

Die Keep-Verzögerung ist auf 4 gesetzt. Das definiert, wie lange der Erkennungszustand nach Bewegungsende aufrechterhalten wird. Das verhindert schnelles Umschalten zwischen erkannt und nicht erkannt.

PWM-Ausgangseinstellungen

Der Sensor kann PWM-Signale für externe Steuerungen erzeugen.

  radar.setPwm(/*pwm1*/ 50, /*pwm2*/ 0, /*timer*/ 10);

Der erste PWM-Kanal ist auf einen Wert von 50 gesetzt. Das definiert das Tastverhältnis.

Der zweite PWM-Kanal ist deaktiviert, indem er auf 0 gesetzt wird.

Der Timerwert definiert die PWM-Periode. Diese Funktion kann verwendet werden, um externe Geräte wie LEDs oder Relais direkt vom Sensor aus zu steuern.

Ausgangspolarität

Die Ausgangspolarität definiert den Logikpegel des Erkennungssignals. Beachte, dass der Funktionsname in der Bibliothek falsch geschrieben ist („Polaity“ statt „Polarity“).

  radar.setIoPolaity(1);

Ein Wert von 1 setzt den Ausgang auf aktiv HIGH. Das bedeutet, das Ausgangssignal wird HIGH, wenn Bewegung erkannt wird. Bei 0 wäre die Logik invertiert und das Signal wird LOW bei Bewegungserkennung.

Loop-Funktion

Die Loop-Funktion prüft kontinuierlich auf Bewegung.

void loop() {
  if (radar.motionDetection()) {
    Serial.println("Motion detected");
  }
  delay(100);
}

Die Funktion radar.motionDetection() gibt true zurück, wenn Bewegung erkannt wird. Die Erkennungslogik nutzt alle konfigurierten Parameter, einschließlich Reichweite, Empfindlichkeit und Timing.

Wenn Bewegung erkannt wird, wird eine Meldung an den seriellen Monitor ausgegeben.

Die kurze Verzögerung von 100 Millisekunden sorgt für schnelle Updates bei gleichzeitig geringem CPU-Verbrauch.

Code-Beispiel: Geschwindigkeits- und Entfernungs-Messungen mit C4001

Der nächste Code initialisiert den C4001 mmWave Radarsensor über UART und konfiguriert ihn für Bewegungserkennung und Geschwindigkeitsmessung. In der Hauptschleife prüft der Code kontinuierlich, ob ein Ziel erkannt wird, und liest dann Entfernung und Geschwindigkeit des Ziels aus. Die Messwerte werden an den seriellen Monitor ausgegeben, was eine Echtzeitverfolgung bewegter Objekte ermöglicht.

// Libraries:
// - DFRobot_C4001 V 1.0.0
//   https://github.com/DFRobot/DFRobot_C4001
// - ESP32 Core V 3.3.8

#include "DFRobot_C4001.h"

#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
  SoftwareSerial mySerial(4, 5);
  DFRobot_C4001_UART radar(&mySerial, 9600);
#elif defined(ESP32)
  DFRobot_C4001_UART radar(&Serial2, 9600, /*rx*/ 17, /*tx*/ 16);
#endif


void setup() {
  Serial.begin(115200);

  while (!radar.begin()) {
    Serial.println("Can't find sensor");
    delay(1000);
  }
  Serial.println("Sensor connected");

  radar.setSensorMode(eSpeedMode);
  radar.setFrettingDetection(eON);

  delay(500);
  Serial.println("Ready");
}


void loop() {
  if (radar.getTargetNumber() > 0) {
    Serial.print("Distance: ");
    Serial.print(radar.getTargetRange());
    Serial.print(" m  Speed: ");
    Serial.print(radar.getTargetSpeed());
    Serial.println(" m/s");
  }
  delay(100);
}

Bibliothek einbinden

Wie zuvor beginnt der Code mit dem Einbinden der benötigten Bibliothek für den Radarsensor.

#include "DFRobot_C4001.h"

Plattform-spezifische Konfiguration

Anschließend folgt die gleiche bedingte Kompilierung zur Unterstützung mehrerer Plattformen. Sie wählt die korrekte serielle Schnittstelle je nach Board aus.

#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
  SoftwareSerial mySerial(4, 5);
  DFRobot_C4001_UART radar(&mySerial, 9600);
#elif defined(ESP32)
  DFRobot_C4001_UART radar(&Serial2, 9600, /*rx*/ 17, /*tx*/ 16);
#endif

Bei Arduino Uno und ESP8266 ist Pin 4 als RX und Pin 5 als TX konfiguriert. Beim ESP32 wird Serial2 mit GPIO17 als RX und GPIO16 als TX initialisiert.

Setup-Funktion

Die Setup-Funktion initialisiert die serielle Kommunikation und bereitet den Sensor vor.

void setup() {
  Serial.begin(115200);

Der serielle Monitor wird mit 115200 Baud gestartet. Er dient zur Ausgabe der Messergebnisse.

  while (!radar.begin()) {
    Serial.println("Can't find sensor");
    delay(1000);
  }
  Serial.println("Sensor connected");

Die radar.begin() Funktion initialisiert die Kommunikation mit dem Sensor. Die Schleife sorgt dafür, dass das Programm wartet, bis der Sensor antwortet. Nach erfolgreicher Verbindung wird eine Bestätigung ausgegeben.

Sensormodus

Der Sensor wird auf den Geschwindigkeitsmodus eingestellt.

  radar.setSensorMode(eSpeedMode);

Der eSpeedMode ermöglicht Bewegungsanalyse mit Geschwindigkeitsmessung. In diesem Modus verfolgt der Sensor bewegte Ziele und berechnet deren Geschwindigkeit mittels Dopplereffekt. Dieser Modus unterscheidet sich von einfacher Präsenzdetektion, da er dynamische Bewegungsinformationen liefert.

Mikrobewegungserkennung

Der Code aktiviert die Fretting-Erkennung.

  radar.setFrettingDetection(eON);

Die Fretting-Erkennung erlaubt dem Sensor, sehr kleine Bewegungen zu erfassen. Dazu gehören Mikrobewegungen wie Atmung oder leichte Körperbewegungen. Ist sie aktiviert, wird der Sensor empfindlicher für subtile Bewegungen und kann im Grunde auch stationäre Personen erkennen.

Stabilisierungsverzögerung

Nach der Konfiguration wird eine kurze Verzögerung eingefügt.

  delay(500);
  Serial.println("Ready");

Die Verzögerung gibt dem Sensor Zeit, die neuen Einstellungen anzuwenden. Danach ist das System bereit für Messungen.

Loop-Funktion

Die Loop liest kontinuierlich Daten vom Sensor aus.

void loop() {
  if (radar.getTargetNumber() > 0) {

Die Funktion getTargetNumber() gibt die Anzahl der erfassten Ziele zurück. Wenn mindestens ein Ziel vorhanden ist, liest der Code die Messdaten aus.

    Serial.print("Distance: ");
    Serial.print(radar.getTargetRange());

Die Funktion getTargetRange() gibt die Entfernung zum erfassten Ziel zurück. Der Wert wird in Metern angegeben.

    Serial.print(" m  Speed: ");
    Serial.print(radar.getTargetSpeed());

Die Funktion getTargetSpeed() gibt die Geschwindigkeit des erfassten Ziels zurück. Diese wird mittels Dopplereffekt berechnet und in Metern pro Sekunde angegeben.

    Serial.println(" m/s");
  }
  delay(10);
}

Die Ergebnisse werden im seriellen Monitor in lesbarer Form ausgegeben. Die Schleife läuft kontinuierlich mit einer kurzen Verzögerung von 100 Millisekunden.

Ausgabe-Beispiel

Der Screenshot unten zeigt, was du im Serial Monitor sehen solltest, wenn der Sensor ein Objekt erkennt.

Bewege deine Hand mit unterschiedlichen Geschwindigkeiten näher und weiter weg vom Sensor, und du solltest sehen, wie sich die gemessenen Entfernungs- und Geschwindigkeitswerte ändern.

Fazit

In diesem Tutorial hast du gelernt, wie du den mmWave C4001 Sensor an ein Arduino oder ESP32 für die Bewegungserkennung anschließt. Im Vergleich zu passiven Infrarot- (PIR) Bewegungssensoren ist der radarbasierte C4001 zuverlässiger und kann stationäre Personen in bestimmten Entfernungsbereichen erkennen.

Wenn du nur ein binäres Erkennungssignal (erkannt, nicht erkannt) benötigst, kannst du den Sensor einmal über einen Mikrocontroller programmieren (z. B. Erkennungsdistanz einstellen) und dann den OUT-Pin verwenden. Für komplexere Steueraufgaben kannst du den Mikrocontroller programmieren, um auf die Sensormessungen zu reagieren.

Beachte, dass es auch den Gravity: C4001 mmWave Human Presence Detection Sensor gibt, der dem C4001 sehr ähnlich ist, aber eine kürzere Reichweite (12 Meter) hat und über I2C statt UART kommuniziert. Schau dir auch die mmWave C4002 und mmWave C1001 Sensoren an.

Für weitere Informationen zum mmWave C4001 Sensor siehe die Wiki Seite, das Datasheet und das repo mit weiteren Codebeispielen.

Wenn du Fragen hast, kannst du sie gerne im Kommentarbereich stellen.

Viel Spaß beim Tüfteln ; )