本帖最后由 mfan 于 2024-3-24 19:28 编辑
微波雷达感应和红外感应是两种常见的探测目标的手段。红外感应主要是利用热释电红外传感器进行探测,一般情况下,它需要配合菲涅尔透镜,因此体积比较大且探测距离比较近;而雷达微波雷达感应则通过发射电磁波对目标照射并接收其回波的方式进行探测,体积可以做到很小,实现微动、生命存在检测等功能,稳定性也比较好。本次使用的是从安信可申请的RD-03E 24G雷达感应模块,不仅可以探测距离,而且还可以做到手势识别。其中对运动人体感应最远距离可达6 m,微动人体感应最远距离是3.5 m,因此准备使用本模块搭建一个自动调节灯光的系统,并能够上报相关数据到物联网平台。
一、RD-03E雷达模块
官方的在https://docs.ai-thinker.com/rd-03这个页面上提供了RD-03系列模块的相关资料。这个模块预留有SWD下载口,可以使用st-link、j-link等下载固件,便于用户自由切换精准测距固件和手势识别固件。本次申请到的默认固件是精准识别固件,因此先下载了
Rd-03E 快速入门文档、Rd-03E 规格书和Rd-03E 手势识别用户手册。该手册描述了手势识别的基本功能、硬件规格、软件配置和安装条件等,使用模块前最好通读一遍手册。特别是安装方式这里,如果随意放置,实测很难触发手势识别。官方手册中要求的安装示意图如下所示:
1、供电
手册提到模块使用5V供电,实测3.3V也能正常工作;
2、传输协议
模块采用串口通信,手势识别模块的串口输出的数据是已经解算好的数据。默认通信参数为:256000,N,8 ,1。应用层协议位自定的,每一包数据固定为个字节,以0xAA开头,以0x55结尾,中间前两个字节是探测距离,后边一个字节是手势。值得注意的是,探测距离采用的是小端序,这里在解算时需要注意。
为了便于用户测试,官方提供了RD-03E的上位机软件,同样为了配合两种固件的使用,也分精准测距和手势识别。手势识别的上位机软件使用了一个马桶开盖的图示来展示模块的工作情况,用3个LED灯的亮灭展示距离,在软件的appConfig.xml配置文件中可以自行修改阈值。为了熟悉这个软件的使用,可以使用VirtualSerialPortDriver虚拟一对串口,使用串口助手软件进行模拟发送报文,观察上位机软件的显示。例如,在电脑中模拟了一对串口1和2,串口调试助手连接串口2,手势识别连接串口1,通信参数设置正确就能正常模拟收发了。
二、使用树莓派4B采集模块数据
由于RD-03E预先对雷达数据做了处理,输出的数据就是最终数据,因此,使用普通的单片机就能很轻松的完成这个工作。为了快速搭建系统,这里使用了树莓派4B进行数据采集(有点高射炮打蚊子)并进行上传到onenet平台。
树莓派4B一共有6个串口,使用官方系统的话,默认情况下只开启两个串口,并且还需要手动开启串口通信并关闭console(两个同时开启,据说会影响串口通信,另外本身已经开启ssh登录和xrdp,也没必要留着这个串口登录)。这个串口是miniUART,没有独立时钟源,可能会受到cpu频率影响从而导致串口数据传输异常。开启后,就能看到一个ttyS0,另外一个ttyAMA0。其中,ttyS0就是miniUART,板子上的TX RX引脚映射到该串口,ttyAMA0有独立时钟源,被分配到蓝牙通信。看了很多教程,需要修改系统配置,关闭蓝牙,把ttyAMA0释放出来。
为了一探究竟,分别使用支持c语言的wiringPi库和支持python语言的serial库测试。wiringPi库配置串口波特率是256000,一直打开串口失败,降低波特率就正常能用,不知道是不是这个库做了限制;
- #include <stdio.h>
- #include <wiringPi.h>
- #include <wiringSerial.h>
-
- int main()
- {
- int fd;
- if(wiringPiSetup()<0)
- return 1;
- if((fd=serialOpen("/dev/ttyS0", 256000))<0)
- return 1;
- printf("Raspberry pi is ready ...\n");
- serialPrintf(fd,"hello C++!!\n");
- serialClose(fd);
- return 0;
- }
复制代码
另外一方面,使用python的serial库,同样配置,串口正常使用。直接把python的测试代码进行完善,就得到了读取并解析模块数据的python代码:
三、接入中移物联网onenet平台
onetnet平台支持MQTT、CoAP、HTTP等多种协议接入,其中MQTT是基于pub/sub的消息协议,非常适合网络带宽有限的场景,同时其可以保持长连接,具有一定的实效性。另外,最早接触onenet也是通过mqtt接入的,这次也准备尝试用MQTT协议接入onenet。
由于该平台一直修改,之前的方法不能完全照搬了,因此把主要精力花了一段时间在创建产品和可视化上。
1、创建产品和设备
先创建产品,选择接入协议是MQTT,数据协议使用onejson,以及产品的属性信息等等。
这里创建的产品增加了两个属性:距离和状态
注意:一旦确定后发布产品,就不能再修改,除非删除重建。
创建完产品就要创建设备了,这个就比较简单了。
2、正式接入
paho-mqtt库提供了非常简单的接口,能帮助用户快速使用MQTT服务。MQTT接入有多种认证方式,这里使用的是普通的用户名密码认证方式。
MQTT服务器信息:mqtts.heclouds.com
普通的认证方式的端口号是1883
client | 设备id | username | 产品ID | password | 经过 多个字段md5计算的后的结果(测试阶段可以用工具计算出后写死在代码) |
下图给出了工具计算时需要填的字段
最终的代码打包见附件。
注意:这个代码只是简单的演示,还有很多不完善的地方,例如,可以根据距离的远近设定开启不同数目的灯光;可以把采集雷达数据拆成一个线程等等。
3、可视化
数据到达onenet后,个人用户可以创建一个大屏用来显示状态信息。
免费账户能使用的控件比较少,但简单的展示距离信息也足够了。下图给出了效果图:
最后再来一张动图
|