Detector de presencia con radar LD2410

            El sensor LD2410 es un radar con una frecuencia de unos 24Ghz. Su tamaño es minúsculo y puede detectar la presencia de personas en movimiento o estáticos. El sensor es capaz de detectar a una persona totalmente quieta solo por el movimiento de su respiración.
            Su tamaño permite ocultarlo (por motivos estéticos o de seguridad) tras muros o maderas (dentro de un cajón de escritorio) ya que su capacidad de detección permanece..
            Un dato negativo del LD2410 es su elevado consumo de unos 80mA lo que impide su uso con baterias.
            Hay una versión B con BLE.
            Para el control del radar he usado un ESP32, pero en su versión C3 que es bastante más pequeña. La comunicación con el microprocesador es via serie a la velocidad de 256000 baudios. Micro y LD2410 solo están conectados con tres cables VCC, GND y TX al RX del ESP32 ya que no es necesaria la comunicación del micro al radar.  Alimentación a través del conector USB C.
          Montaje provisional. Se alimenta de los 6v de la cerradura eléctrica

          El sensor está puesto en un lateral de la puerta, justo en el borde donde no llega la plancha metálica de la puesta blindada.
          El programa para el ESP32 es una modificación del ejemplo de la librería del LD2410.

          Cuando el LD2410 detecta, se envía una notificación via Telegram a nuestro teléfono móvil.

          Aclarar que en mi puerta he sustituido la mirilla  normal por una del mismo tamaño pero con cámara analógica conectada a un DVR con Internet y por tanto puedo ver quien ha activado el sensor en tiempo real.

  

//Para ESP32C3
#define MONITOR_SERIAL Serial
#define RADAR_SERIAL Serial1
#define RADAR_RX_PIN 4
#define RADAR_TX_PIN 5

#include <WiFi.h>
#include <Callmebot_ESP32.h>

const char* ssid = "Jopapa";
const char* password = "xxxxxxxxxxxxx";
String username = "XXXXXXXXX";  //De Telegram
String messsage = "Persona detectada frente a puerta";

#include <ld2410.h>
ld2410 radar;

uint32_t lastReading = 0;
bool radarConnected = false;

void setup(void){
  MONITOR_SERIAL.begin(115200);
  RADAR_SERIAL.begin(256000, SERIAL_8N1, RADAR_RX_PIN, RADAR_TX_PIN); //UART for monitoring the radar
  WiFi.begin(ssid, password);
  delay(1000);
  WiFi.setTxPower(WIFI_POWER_8_5dBm);  //Necesario para wifi en ESP32 C3
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Conectado a WiFi con IP Address: ");
  Serial.println(WiFi.localIP());
  if(radar.begin(RADAR_SERIAL)){
    MONITOR_SERIAL.println(F("OK LD2410"));
  }
  else{
    MONITOR_SERIAL.println(F("No conectado"));
  }
}


void loop(){
  radar.read();
  if(radar.isConnected() && millis() - lastReading > 2000){  //informa cada 2 segundos
    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.stationaryTargetDistance() < 90){
          Serial.print("Persona detectada");
          Callmebot.telegramMessage(username, messsage);
          delay(10000);
        }
      }
//      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("Sin detección"));
    }
  }
}


Menu