Hochsensible Erfassung von menschlicher Präsenz mit Radar

In diesem kleinen Projekt habe ich nach einer Alternative zu einem Infrarot-Bewegungsmelder gesucht, der z.B. das Licht automatisch schaltet. Diese Lösung kann problematisch sein, wenn man nur ruhig im Sessel ein Buch liest und dann irgendwann das Licht aus geht.
Den Unterschied zwischen einem leeren Raum und der Anwesenheit von Personen im Raum, auch wenn sie sich nicht bewegen, zu erkennen, darum geht es in diesem Beitrag.

Dafür habe ich mir das Radar-Modul LD2410C besorgt, das ein hochsensibler 24-GHz-Bewegungssensor sein soll.
Er verwendet die FMCW-Frequenzmodulation, um menschliche Ziele im festgelegten Raum zu erfassen mit einer Frequenz von 24G bis 24,25GHz.
Die Radar-Signalverarbeitung sowie der passende Algorithmus ermöglicht eine hochsensible Erfassung von menschlicher Präsenz, sowohl in Bewegung als auch in Ruhe, in Form eines Energy-Wert.

Quasi da ist Leben in der Bude

Das funktioniert, weil das Modul kontinuierlich ein frequenzmodulierte Signalwelle aussendet, das von einer minimalen zu einer maximalen Frequenz ansteigt (Up-Chirp) und dann wieder abfällt (Down-Chirp). Wenn dieses Signal auf ein Objekt trifft, wird es reflektiert und vom Radar wieder empfangen. Durch Analyse dieser Frequenzverschiebung zwischen dem ausgesendeten und dem empfangenen Signal kann das Radar feine Entfernungsänderungen und Geschwindigkeit des Objekts berechnen. Diese werden in Form von stehenden und bewegenden Objekten, mit einer Art Energy Wert verbunden mit der Distanz ausgegeben.

Das Modul ist kompakt in der Größe von 22 x 16 mm und sollte stabil an der Decke oder Wand platziert werden und funktioniert am besten, wenn keine starke Luftbewegungen oder plötzliche Temperaturänderungen auf ihn einwirken.

Die Stromversorgung benötigt 5V mit bis zu 200mA, aber abweichend muss darauf geachtet werden, das der Ausgangspegel der seriellen Schnittstelle nur zwischen 3,3V und 0V liegen darf.
Erfassungsentfernung liegt laut Degenblatt zwischen 0,75 bis 6m mit einem einstellbaren Erkennungswinkel von ± 60°.

Der Hersteller bietet eine App (weiter unten) und auch ein visuelles Tool an –> Interface an LD2410B Sensor with USB-UART Converter (cytron.io)

Hardware:
ESP32 Board —> Belegungsplan
LD2410C
Breadboard incl Jumper-Kabel
LEDˋs mit Vorwiderstände

Verdrahtung:

Radar Pin TX –> ESP32 Pin32
Radar Pin RX –> ESP32 Pin33
Radar Pin Out –> LED Kathode
Radar Pin GND –> ESP32 Pin GND
Radar Pin VCC –> ESP32 Pin 5V
LED Anode –> Vorwiderstand –> Radar Pin GND

Sketch:

Zum ersten Start habe ich das Beispiel Sketch „basicSensor“ aus der installierten ld2410 Bibliothek Vers. 0.1.4 verwendet.

#if defined(ESP32)
  #ifdef ESP_IDF_VERSION_MAJOR // IDF 4+
    #if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
      #define MONITOR_SERIAL Serial
      #define RADAR_SERIAL Serial1
      #define RADAR_RX_PIN 32
      #define RADAR_TX_PIN 33
    #elif CONFIG_IDF_TARGET_ESP32S2
      #define MONITOR_SERIAL Serial
      #define RADAR_SERIAL Serial1
      #define RADAR_RX_PIN 9
      #define RADAR_TX_PIN 8
    #elif CONFIG_IDF_TARGET_ESP32C3
      #define MONITOR_SERIAL Serial
      #define RADAR_SERIAL Serial1
      #define RADAR_RX_PIN 4
      #define RADAR_TX_PIN 5
    #else 
      #error Target CONFIG_IDF_TARGET is not supported
    #endif
  #else // ESP32 Before IDF 4.0
    #define MONITOR_SERIAL Serial
    #define RADAR_SERIAL Serial1
    #define RADAR_RX_PIN 32
    #define RADAR_TX_PIN 33
  #endif
#elif defined(__AVR_ATmega32U4__)
  #define MONITOR_SERIAL Serial
  #define RADAR_SERIAL Serial1
  #define RADAR_RX_PIN 0
  #define RADAR_TX_PIN 1
#endif

#include <ld2410.h>

ld2410 radar;

uint32_t lastReading = 0;
bool radarConnected = false;

void setup(void)
{
  MONITOR_SERIAL.begin(115200); //Feedback over Serial Monitor
  
  #if defined(ESP32)
    RADAR_SERIAL.begin(256000, SERIAL_8N1, RADAR_RX_PIN, RADAR_TX_PIN); //UART for monitoring the radar
  #elif defined(__AVR_ATmega32U4__)
    RADAR_SERIAL.begin(256000); //UART for monitoring the radar
  #endif
  delay(500);
  MONITOR_SERIAL.print(F("\nConnect LD2410 radar TX to GPIO:"));
  MONITOR_SERIAL.println(RADAR_RX_PIN);
  MONITOR_SERIAL.print(F("Connect LD2410 radar RX to GPIO:"));
  MONITOR_SERIAL.println(RADAR_TX_PIN);
  MONITOR_SERIAL.print(F("LD2410 radar sensor initialising: "));
  if(radar.begin(RADAR_SERIAL))
  {
    MONITOR_SERIAL.println(F("OK"));
    MONITOR_SERIAL.print(F("LD2410 firmware version: "));
    MONITOR_SERIAL.print(radar.firmware_major_version);
    MONITOR_SERIAL.print('.');
    MONITOR_SERIAL.print(radar.firmware_minor_version);
    MONITOR_SERIAL.print('.');
    MONITOR_SERIAL.println(radar.firmware_bugfix_version, HEX);
  }
  else
  {
    MONITOR_SERIAL.println(F("not connected"));
  }
}

void loop()
{
  radar.read();
  if(radar.isConnected() && millis() - lastReading > 1000)  //Report every 1000ms
  {
    lastReading = millis();
    if(radar.presenceDetected())
    {
      if(radar.stationaryTargetDetected())
      {
        Serial.print(F("Stationary target: "));
        Serial.print(radar.stationaryTargetDistance());
        Serial.print(F("cm energy:"));
        Serial.print(radar.stationaryTargetEnergy());
        Serial.print(' ');
      }
      if(radar.movingTargetDetected())
      {
        Serial.print(F("Moving target: "));
        Serial.print(radar.movingTargetDistance());
        Serial.print(F("cm energy:"));
        Serial.print(radar.movingTargetEnergy());
      }
      Serial.println();
    }
    else
    {
      Serial.println(F("No target"));
    }
  }
}

ESP32 mit PC verbinden,
Sketch unverändert hochladen,
Seriellen Monitor einschalten und auf 115200 Baud einstellen:

Dieser BasicSensor Sketch aus der LD2410 Library, zeigte im seriellen Monitor Bewegungen, Entfernungen und eine Art „Energie“, die bewegende und statische Objekte unterscheidet, wie schon oben gezeigt.

Die erste Library LD2410 hat auch einen zweiten Beispiel Sketch für Setup.
Über den seriellen Monitor konnte ich die Firmware auslesen, jedoch keine Einstellungen ändern.


Da das Modul auch per Bluetooth angesprochen werden kann, habe ich als nächstes das HLKRadarTool aus dem Apple Store verwendet und mich per Bluetooth verbunden. Es erfolgt eine Standardpasswort Abfrage. Hier „HiLink“ eintragen.
Damit konnte ich nun unter anderen, die Bewegungsenergie auch im „Stillstand“ erkennen

Und dort geht dann auch, über „Settings“ Anpassungen zur Sensibilität und weiteren Einstellungen zu setzen.


Hier kann auch Firmware aus den neusten Stand gebracht werden.

Die beste Ausrichtung der Platine war stehend im Regal, wie auf diesem Bild zu sehen.

Die angeschlossene LED leuchtete immer, während ich im Raum war, selbst wenn ich versuchte bewegungslos dazusitzen. Wenn ich so ab 5 Meter Entfernung ruhig stehen blieb , dann kamen die Werte so langsam wieder in Ruhe. Dies spiegelte sich gleichzeitig in der Anzeige der App wieder.

Eine weitere interessante Funktion ist die Fähigkeit des Sensormoduls, die Lichtintensität zu messen und diesen Wert mit in der Entscheidung für eventuell dadurch auszuführende Aktionen mit einbinden zu können.


Da es noch eine zweite Library in der Arduino IDE angeboten wurde, hier ein kleiner Einblick:

Diese beinhaltet deutlich mehr Beispiel Sketche

Bei dem „print_parameters“ Sketch musste nur noch der RX und TX Pin angepasst werden und nach dem Aufspielen sieht die Ausgabe im Seriellen Monitor dann so aus:

Fazit:
Es ist gut zu wissen das es weitere Arten der Anwesenheitserkennung gibt.
Der Sensor ist vielseitig einsetzbar, z.B. als Bewegungssensor für die Lichtsteuerung, Bewegungsauslösung von Informationsdisplays, Lebenssicherheitsschutz, automatische Abschaltung von Smart-Home-Geräten und intelligente Sicherheit.
Es hat sich gezeigt das mehr Optionen zur Auswahl stehen, die als Auslöser verwendet werden können, als ein Ultraschall oder Infrarot Sensor.

, ,
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzerkomfort bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst und hilft uns zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.