本帖最后由 青果 于 2024-4-1 16:29 编辑
嘻嘻,很多人和我一样,都是参加测评RD-03E。安信可雷达模块有好几产品,在官网资料有展示。
以前没有用过雷达模块,对这些型号也没有时间和精力对比了解,不知道互相的区别。只能有哪个就学习哪个。一起看收到的RD-03E图片
先来看看官方给的资料,打开官方资料网站。然后就可以看见RD-03E的资料。
大概看了一下,模块有两个固件,一个精准测距固件,一个是手势识别固件。不同的固件识别精度和功能不一样。拿到模块后,第一步就是想体验一下。看了其他人介绍,送的模块默认是手势识别固件。所以先验证一下手势识别的内容。下载手势识别的上位机。可以先看一下手势识别的手册再测试比较好。
然后找个usb转ttl工具连接上就行,注意usb转ttl的rx、tx接雷达模块的tx(OT1)、rx就行。打开刚刚下载的软件,找到串口(部分电脑ch340模块需要安装驱动才会显示)
直接点开始就会有数据产生了。
一开始挺懵的,这个咋是测量距离的,不是手势吗?我以前用的手势识别传感器,手靠近以后,可以检测手往哪个方向运动,向左还是向右挥舞。
然后去看用户手册,说实话看的挺懵逼。给的是一个开关马桶的,要是不看文档,很难利用传统经验很快上手。还有就是那个距离跳动挺快的,也不知道这个人体检测距离是从离传感器最近的距离算起,还是说人体大部分距离平均值。大概测试了一下那个距离,还是比较准确,手势看文档太复杂了,以后有空再研究。
重点来了,把精力花在精准测距比较有意义
现在测试精准测距固件,这里先要刷固件。大多数小伙伴有串口下载器,主要以keil为主
Rd-03E固件烧录
大多数ch340模块都自带3.3v模块,可以拿一个杜邦线,代替文章中的镊子。先将usb转ttl模块断电,其它导线正常连接就行。然后将3.3v用杜邦线引出来,杜邦线针头怼在他说的那个电阻上,然后给usb转ttl模块上电,这时候就可以松开,不需要接3.3v,按照文章提示操作就行,补一张他缺的图。 测试结果还是可以,确实比那个手势识别准确。 打开串口工具,看一下数据 文档对于十六进制数据描述
单片机接收分析,这里主要是arduino UNO。雷达模块串口通信波特率是256000,而arduino uno一般是115200,太高就乱码,接收有问题,所以测试基本都是收到有乱码。实验没有办法继续,stm32又不会玩,后续再研究
翻了论坛,发现还有不同 波特率版本的固件,这一下又可以实验测试了,还是按照前面的步骤下载
下载了115200波特率,然后可以工作。那就写个arduino程序。
先串口观察接受的程序。
- #include <SoftwareSerial.h>
- SoftwareSerial mySerial(10, 11); // 10为RX, 11为TX。接雷达的tx和rx
- int distance = 0; //测量的距离
- int stateHuman = 0; // 0为无目标 1为运动 2为微动
- unsigned char serialBuff[5]; //缓存串口数据
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(115200); //电脑串口观察数据
- mySerial.begin(115200); //与雷达模块串口连接注意波特率为25600,
- }
- void loop() {
- // put your main code here, to run repeatedly:
- readSerialData();
- }
- void readSerialData() {
- if (mySerial.available()) { //当前串口接收到信息
- if (mySerial.read() == 0xAA) {
- mySerial.readBytesUntil(0x55, serialBuff, 5); //读取串口信息直到遇到0x55,长度5个字节
- if (serialBuff[0] == 0xAA) { //校验帧头是否为AA
- Serial.print("Received Serial Data: "); // 输出serialBuff接收到的内容
- for (int i = 0; i < 5; i++) { // 然后通过串口监视器输出readBytesUntil
- Serial.print(serialBuff[i], HEX); // 函数所读取的信息
- Serial.print(" ");
- }
- Serial.println("");
- } else {
- Serial.print("Data error"); //若不是AA,则重置数组serialBuffer
- for (int i = 0; i < 5; i++) {
- serialBuff[i] = 255;
- }
- }
- }
- }
- }
复制代码代码先判断接收的数据是不是0xAA,是的话再接收下来的数据,并把数据存到serialBuffer里。然后可以根据数组serialBuffer[1]来判断运动情况,serialBuffer[2],serialBuffer[3]合并成十进制来得到测得距离 |