carlosvolt
Published © LGPL

LD2410C Configuration with App, Circuit and Test with Arduin

Welcome to the tutorial on using the LD2410C human presence status detection module.

IntermediateFull instructions provided334
LD2410C Configuration with App, Circuit and Test with Arduin

Things used in this project

Story

Read more

Code

Source code

C/C++
Source code
/*
 * Ejemplo de boceto para informar sobre lecturas del LD2410 utilizando la configuración actualmente configurada.
 * 
 * Esto ha sido probado en las siguientes plataformas...
 * 
 * En ESP32, conecta el LD2410 a los pines GPIO 32 y 33
 * En ESP32S2, conecta el LD2410 a los pines GPIO 8 y 9
 * En ESP32C3, conecta el LD2410 a los pines GPIO 4 y 5
 * En Arduino Leonardo u otras placas ATmega32u4, conecta el LD2410 a los pines GPIO TX y RX de serie de hardware
 * 
 * La configuración serie para otras placas variará y deberás asignarlos tú mismo
 * 
 * No hay un ejemplo para ESP8266 ya que solo tiene una UART utilizable y no arrancará si los pines UART alternativos se usan para el radar.
 * 
 * Para que este boceto y otros ejemplos sean útiles, la placa debe tener dos UART utilizables.
 * 
 */
int redPin = 11; //  R pin rojo 
int greenPin = 9; // G pin verde
int bluePin = 10; // B pin azul
byte com = 0; 
#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 El objetivo CONFIG_IDF_TARGET no es compatible
    #endif
  #else // ESP32 antes de 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 ultimaLectura = 0;
bool radarConectado = false;
void setup(void)
{
  pinMode(redPin, OUTPUT); // Establece el redPin como una salida
  pinMode(greenPin, OUTPUT); // Establece el greenPin como una salida
  pinMode(bluePin, OUTPUT); // Establece el bluePin como una salida
  MONITOR_SERIAL.begin(115200); // Retroalimentación por el Monitor Serial
  // radar.debug(MONITOR_SERIAL); // Descomenta para mostrar información de depuración de la biblioteca en el Monitor Serial. Por defecto, esto no muestra lecturas de sensor ya que son muy frecuentes.
  #if defined(ESP32)
    RADAR_SERIAL.begin(256000, SERIAL_8N1, RADAR_RX_PIN, RADAR_TX_PIN); // UART para monitorear el radar
  #elif defined(__AVR_ATmega32U4__)
    RADAR_SERIAL.begin(256000); // UART para monitorear el radar
  #endif
  delay(500);
  MONITOR_SERIAL.print(F("\nConecta el TX del radar LD2410 al GPIO:"));
  MONITOR_SERIAL.println(RADAR_RX_PIN);
  MONITOR_SERIAL.print(F("Conecta el RX del radar LD2410 al GPIO:"));
  MONITOR_SERIAL.println(RADAR_TX_PIN);
  MONITOR_SERIAL.print(F("Inicializando el sensor de radar LD2410: "));
  if(radar.begin(RADAR_SERIAL))
  {
    MONITOR_SERIAL.println(F("OK"));
    MONITOR_SERIAL.print(F("Versión del firmware LD2410: "));
    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("no conectado"));
  }
}
void loop()
{
  radar.read();
  if(radar.isConnected() && millis() - ultimaLectura > 1000)  // Reportar cada 1000ms
  {
    ultimaLectura = millis();
    if(radar.presenceDetected())
    {
      if(radar.stationaryTargetDetected())//Si detecta un objetivo quieto, se pone de color azul
      {
        Serial.print(F("Objetivo quieto LUZ AZUL: "));
        Serial.print(radar.stationaryTargetDistance());
        Serial.print(F("cm energia:"));
        Serial.print(radar.stationaryTargetEnergy());
        Serial.println(' ');
        color(0, 0, 255); //led RGB como azul
      }
      if(radar.movingTargetDetected())//Si detecta un objetivo en movimiento, se pone de color roja
      {
        Serial.print(F("SE HA DETECTADO OBJETIVO EN MOVIMIENTO LUZ ROJA!: "));
        Serial.print(radar.movingTargetDistance());
        Serial.print(F("cm energia:"));
        Serial.print(radar.movingTargetEnergy());
        color(255, 0, 0);//led RGB como rojo
      }
      Serial.println();
    }
    else
    {
      Serial.println(F("Sin objetivo LUZ VERDE"));//Sin objetivo al alcance, se pone de color verde
      color(0,255, 0);//led RGB como verde
    }
  }
}
//Función para la generación del color
void color (unsigned char red, unsigned char green, unsigned char blue) 
{
analogWrite(redPin, red*102/255);
analogWrite(bluePin, blue*173/255);
analogWrite(greenPin, green*173/255);
}

Credits

carlosvolt
34 projects • 3 followers
Contact

Comments

Please log in or sign up to comment.