ESP32 LD2410B模组实验:24GHz雷达人体感应检测与串口输出数据分析

实验效果

使用LD2410B人体存在感应模组检测人的存在,并在串口中输出数据。

image-20240524115314350

元件介绍

LD2410B 是一款高灵敏度的 24GHZ 人体存在感应模组。工作原理是利用 FMCW 调频连续波,对设定空间内的人体目标进行探测,结合雷达信号处理精确人体感应算法.实现高灵敏度的人体存在状态感应,可识别运动和静止状态下的人体,并可计算出目标的距离等辅助信息。
产品主要应用在室内场景,感知区域内是否有运动或者微动人体,实时输出结果。最远感应距离可达 6米,分辨率 0.75m。提供配置工具,可配置感应距离范围、不同区间的感应灵敏度和无人延时时间等。支持 GPIO 和 UART 输出,即插即用,可灵活应用于不同的智能场景和终端产品。

产品特征:

  • 频率: 24G-24.25GHz
  • 调制方式: FMCW
  • 检测距离: 0.75~6m
  • 可调探测角度: 土60
  • 供电: 5V
  • 电流: ~79mA
  • 输出串口电平: 3.3V
  • 扫频带宽:250MHz(符合CE/FCC认证标准
  • 环境温度:-40°C~+85°C
  • 数据格式:串口ASCII输出/高低电平3.3V&OV
  • 封装形式:默认带插针,可定制座子或不带插针

这个模块调试非常简单,只要模块通电,即可使用手机通过蓝牙连接模块,查看里面的数据和配置灵敏度。

引脚说明

image-20240523124256914

  • OUT:目标状态输出
    检测到有人体存在:输出高电平,无人体存在:输出低电平
  • UART_Tx:串口Tx
    串口Tx引脚
  • UART_Rx:串口Rx
    串口Rx引脚
  • GND:电源地
    电源地
  • VCC:电源输入
    供电输入 5V

BOM

ESP32 x1
LD2401B 人体存在检测模块 x1

接线图

image-20240524111847362

LD2410B 引脚 <-> ESP32 引脚
5V <-> 5V
GND <-> GND
UART Rx <-> IO 33
UART Tx <-> IO 32

安装库

LD2410

用于 Hi-Link LD2410 24Ghz FMCW 雷达传感器的 Arduino 库,也适用于ESP系列开发板。该传感器是一种频率调制连续波雷达,可用于存在检测,并可配置其在不同范围内对静态和移动目标的灵敏度。

https://github.com/ncmreynolds/ld2410

可在Arduino IDE的「库管理」中搜索「LD2410」并安装,也可以在Github上下载手动安装。

程序提点

1,关于接线

  • 如果未定义ESP_IDF_VERSION_MAJOR或者是在IDF版本4+以下,那么使用默认的GPIO引脚32和33。
  • 如果是ESP32芯片,使用GPIO引脚32和33。
  • 如果是ESP32S2芯片,使用GPIO引脚9和8。
  • 如果是ESP32C3芯片,使用GPIO引脚4和5。
  • 如果当前编译目标不是支持的芯片,则引发编译错误。

2,setup() 函数用于初始化:

  • 使用115200波特率初始化MONITOR_SERIAL,在串行监视器上提供反馈。
  • 根据不同的微控制器板,初始化RADAR_SERIAL,并使用不同的引脚(如果是ESP32)和波特率(256000)。
  • 输出初始化信息,并尝试使用radar.begin()来初始化雷达模块。

3,loop() 函数是程序的主循环,其中包括雷达数据的读取和处理:

  • 调用radar.read()读取雷达数据。
  • 如果雷达已连接且自上次读取数据以来已过了1000毫秒,则更新lastReading
  • 检测是否有静止或移动的目标。如果有,通过MONITOR_SERIAL输出目标的信息,包括目标的距离和能量。
  • 如果没有探测到目标,则输出“没有目标”。

完整程序

// welcome to www.lingshuunlab.com

/*
 * Example sketch for reporting on readings from the LD2410 using whatever settings are currently configured.
 * 
 * This has been tested on the following platforms...
 * 
 * On ESP32, connect the LD2410 to GPIO pins 32&33
 * On ESP32S2, connect the LD2410 to GPIO pins 8&9
 * On ESP32C3, connect the LD2410 to GPIO pins 4&5
 * On Arduino Leonardo or other ATmega32u4 board connect the LD2410 to GPIO pins TX & RX hardware serial
 * 
 * The serial configuration for other boards will vary and you'll need to assign them yourself
 * 
 * There is no example for ESP8266 as it only has one usable UART and will not boot if the alternate UART pins are used for the radar.
 * 
 * For this sketch and other examples to be useful the board needs to have two usable UARTs.
 * 
 */

#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
  //radar.debug(MONITOR_SERIAL); //Uncomment to show debug information from the library on the Serial Monitor. By default this does not show sensor reads as they are very frequent.
  #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"));
    }
  }
}

把程序上传,打开串口就可以开始测试,并观察数据。

image-20240524115319501

参考资料

HLK LD2410B生命存在感应模组说明书 V1.07.pdf:

https://r0.hlktech.com/download/HLK-LD2410B-24G/1/HLK%20LD2410B%E7%94%9F%E5%91%BD%E5%AD%98%E5%9C%A8%E6%84%9F%E5%BA%94%E6%A8%A1%E7%BB%84%E8%AF%B4%E6%98%8E%E4%B9%A6%20V1.07.pdf

LD2410B 串口通信协议 V1.06 230221.pdf:

https://r0.hlktech.com/download/HLK-LD2410B-24G/1/LD2410B%20%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE%20V1.06%20230221.pdf

毫米波传感器天线罩设计指南:

https://r0.hlktech.com/download/HLK-LD2410B-24G/1/%E6%AF%AB%E7%B1%B3%E6%B3%A2%E4%BC%A0%E6%84%9F%E5%99%A8%E5%A4%A9%E7%BA%BF%E7%BD%A9%E8%AE%BE%E8%AE%A1%E6%8C%87%E5%8D%97_%E6%B5%B7%E5%87%8C%E7%A7%91.pdf