Hardware components | ||||||
![]() |
| × | 1 |
More info in and updates https://rogerbit.com/wprb/2024/04/ld2410c/
Welcome to the tutorial on using the LD2410C human presence status detection module. This device, developed by Hi-link, is a versatile and highly sensitive tool that uses frequency modulated continuous waves (FMCW) to detect the presence of humans in a designated area.
Electronic componentsArduino microfemale female dupont cables
male pins
Socket for arduino micro
Download gerber file –> arduino micro keyboard
Circuit
/*
* 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);
}
Comments
Please log in or sign up to comment.