【雷达灯控】安信可+Rd-03E+激光二极管Arduino ESP8266

[复制链接]
查看440 | 回复11 | 2024-3-14 21:05:33 | 显示全部楼层 |阅读模式

【雷达灯控】安信可+Rd-03E+激光二极管Arduino ESP8266

Rd-03E基本资料

出厂固件默认烧录为手势识别

Rd-03是由深圳市安信可科技有限公司开发的一款搭载矽典微的S3KM1110芯片的雷达模组,Rd-03基于FMCW雷达收发器技术的集成单片机毫米波传感器SoC。它工作在24GHz的K波段,每个单频扫描的调制带宽高达1GHz。利用FMCW调频连续波,对设定空间内的目标进行探测。结合雷达信号处理,实现高灵敏度的运动检测和微动检测。Rd-03模组可实时 感知区域内是否有运动或者微动的人体 。提供可视化的配置工具,可轻松配置感应距离范围、不同区间的感应灵敏度和无人延时时间等。

元件清单

  • ESP8266或者其他Arduino控制板
  • 激光二极管
  • Rd-03雷达
  • 杜邦线
  • 一些固定用结构件

1710419215061.jpeg

上图是官方固定方式,下边这个是我的固定方式,需要用到一些结构件

1710419432162.jpeg

引脚连接图

我使用的处理器是NodeMcu主控是ESP8266,下面是连接图

1710420503157.png

下图是连接好的实物图

837a32e1c591a28fce39fa81c2b075c.jpg

程序部分

程序部分编写环境为Arduino ESP8266库

利用软串口接收数据防止和硬串产生干扰,注意固件默认波特率256000 下面是完整程序,当接收到手势信号后,灯的状态取反。

#include <SoftwareSerial.h>  

// 数据帧状态  
enum FrameState {  
  IDLE,       // 等待数据帧开始  
  RECEIVING,  // 接收数据帧中  
  COMPLETE    // 数据帧接收完毕  
}; 

// 创建SoftwareSerial对象,指定TX和RX引脚  
SoftwareSerial mySerial(D1, D2); // RX, TX 

void setup() {  
  // 初始化硬件串口,设置波特率为9600  
  Serial.begin(115200);  
  // 初始化软串口,设置波特率为9600  
  mySerial.begin(256000);  
  // 打印初始化信息  
  Serial.println("Ready");  
  pinMode(D3, OUTPUT); // 设置LED引脚为输出模式  
  digitalWrite(D3, LOW); // 初始时LED关闭  
}  

void loop() {  
// 检查串行端口是否有数据可读  
  if (mySerial.available() > 0) {  
    // 读取一个字节  
    byte incomingByte = mySerial.read();  

    static FrameState state = IDLE;  
    static byte frame[5]; // 假设数据帧最大长度为5个字节  
    static byte frameIndex = 0;  

    switch (state) {  
      case IDLE:  
        // 检查数据帧的开始字节  
        if (incomingByte == 0xAA) {  
          state = RECEIVING;  
          frameIndex = 0;  
          frame[frameIndex++] = incomingByte; // 存储开始字节  
        }  
        break;  
      case RECEIVING:  
        // 存储数据帧的字节,直到遇到结束字节或超出数据帧长度  
        if (frameIndex < 5) {  
          frame[frameIndex++] = incomingByte;  
          // 检查是否接收到完整的数据帧  
          if (frameIndex == 5 && frame[frameIndex - 1] == 0x55) {  
            state = COMPLETE;  
          }  
        } else {  
          // 数据帧过长,重置状态机  
          state = IDLE;  
        }  
        break;  
      case COMPLETE: 
        // 打印数据帧
        Serial.print(frame[0], HEX); 
        Serial.print(frame[1], HEX); 
        Serial.print(frame[2], HEX);
        Serial.print(frame[3], HEX); 
        Serial.println(frame[4], HEX); 
        processDataFrame(frame);  
        // 重置状态机以接收下一个数据帧  
        state = IDLE;  
        break;  
    }  
  }  
}

void processDataFrame(byte* frame) {  
  // 解析数据帧  
  // 由于distance是小端字节序,我们直接组合两个字节  55  00 转存为 00 55
  int distance = frame[1] | (frame[2] << 8);
  byte gesture = frame[3]; // 获取手势信息

  if (gesture == 1) {  
    // 反转LED状态  
    digitalWrite(D3, !digitalRead(D3));
  }  


  // 输出解析后的数据
  Serial.print("Received data frame: Distance = ");
  Serial.print(distance);
  Serial.print(" cm, Gesture = ");
  Serial.println(gesture, HEX);
}

以下是串口输出数据截图

1710420927139.png

视频展示效果

<iframe src="https://player.bilibili.com/player.html?aid=1151935463&bvid=BV1BZ421b73g&cid=1469900183&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

回复

使用道具 举报

zlook119 | 2024-3-14 21:06:52 | 显示全部楼层
大家注意激光LED别照眼
回复 支持 反对

使用道具 举报

1084504793 | 2024-3-15 08:34:18 | 显示全部楼层
回复

使用道具 举报

WT_0213 | 2024-3-15 08:42:00 | 显示全部楼层
回复

使用道具 举报

1055173307 | 2024-3-15 08:52:44 | 显示全部楼层
回复

使用道具 举报

hdydy | 2024-3-15 09:05:03 | 显示全部楼层
向大佬学习
回复 支持 反对

使用道具 举报

物联网 | 2024-3-15 09:29:27 | 显示全部楼层
赞一下
回复

使用道具 举报

putin | 2024-3-15 10:56:36 | 显示全部楼层
可以学习了
回复 支持 反对

使用道具 举报

干簧管 | 2024-3-15 11:14:14 | 显示全部楼层
👍
回复

使用道具 举报

lazy | 2024-3-15 11:34:04 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则