本帖最后由 dawei 于 2024-3-26 23:42 编辑
有幸收到安信可的RD-03E 雷达模块;
一、模块熟悉;
通过入门资料了解该模块的两种类型的功能:
1、精准测距;
2、手势识别;
收到默认是手势识别功能;根据指导说明,从解析数据可以看见, 获取的数据中包含了距离和手势的数据;
Rd-03e 模块是包含了MCU(GD32E230K8)+24G 雷达芯片 S3KM111L,MCU 通过解析24G 雷达的数据实现精准测距和手势识别的功能;
二、参数测试:
24G雷达能实现的功能(测试和手势)在智能家居中应用非常广泛,与传统的PIR相比较,雷达的准确度和可靠性更好;
最常见的一个应用:
智能电视中,通过检查人体与电视机的距离,防止儿童过近距离靠近电视剧导致视力下降,也可以通过手势控制来切换不同频道和音量控制等;
测试硬件准备:
ESP32 Dev kit;
Rd-03E 雷达模组;
TM1668 显示模块;
其他功能: 待加;
最终成本组装如下:
开发环境采用Arduino 开发;
- /*****************************************************/
- #include <HardwareSerial.h>
- #include <WiFi.h>
- #include <TM1668.h>
- #include <TM16xxDisplay.h>
- /*****************************************************/
- /*****************************************************/
- unsigned char led_dislay_num[10]={0xD7,0x12,0xCE,0x5e,0x1b,0x5d,0xDd,0x16,0xdf,0x5f};
- /*****************************************************/
- // 全局变量用来存储合数据
- volatile uint16_t g_rd03e_distance;
- volatile uint8_t g_rd03e_gesture;
- unsigned char g_rd03e_receive_date[5];
- unsigned char i= 0x00;
- TM1668 module(19, 18, 5); // DIO=8, CLK=9, STB=7
- TM16xxDisplay display(&module, 8); // TM16xx object, 8 digits
- const char* ssid = "TP-LINK_C3608";
- const char* password = "Wifi@1jcsxd6";
- WiFiClient client;
- void ESP32_get_rd03e_value()
- {
- if (Serial2.available()) { // 当串口接收到信息后
- Serial2.readBytesUntil(0x55, g_rd03e_receive_date, 5); //读取串口信息直到遇到55或5个字节
- if (g_rd03e_receive_date[0] == 0xAA) { //校验帧头是否为AA
- g_rd03e_distance = (g_rd03e_receive_date[2] << 8) | g_rd03e_receive_date[1];
- g_rd03e_gesture = g_rd03e_receive_date[3];
- Serial.print("g_rd03e_distance=");
- Serial.println(g_rd03e_distance); //输出距离值
- Serial.print("g_rd03e_gesture=");
- Serial.print(g_rd03e_gesture); //输出距离值
- } else {
- for (i = 0; i < 5; i++) {
- g_rd03e_receive_date[i] = 0x00;
- }
- }
- }
- }
- void TM1688_Display_distance(uint16_t s_distance)
- {
- if(s_distance<999)
- {
- module.setSegments(led_dislay_num[s_distance/100], 1); //BYTE1
- module.setSegments(led_dislay_num[(s_distance%100)/10], 0); //BYTE2
- module.setSegments(led_dislay_num[s_distance%10], 2); //BYTE3
- }else{
- Serial.print(" Date error");
- }
- }
- void setup() {
- Serial.begin(115200, SERIAL_8N1, 3, 1); // 串口1初始化,用于调试输出
- Serial2.begin(256000, SERIAL_8N1, 16, 17); // 串口2初始化
- pinMode(12, OUTPUT); // 初始化GPIO引脚为输出模式
- digitalWrite(12, 1);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- Serial.println("Connecting to WiFi...");
- }
- Serial.println("Connected to WiFi!");
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- }
- void loop() {
- ESP32_get_rd03e_value();
- TM1688_Display_distance(g_rd03e_distance);
-
- if(g_rd03e_distance != 0x00)
- {
- digitalWrite(12, 0);
- }else{
- digitalWrite(12, 1);
- }
- }
复制代码
测试效果:
无人时显示距离:
无人不亮灯:
有人测试距离:
有人亮灯
B站视频效果:
https://www.bilibili.com/video/B ... share_source=weixin
|