本文已参与「新人创作礼」活动.一起开启掘金创作之路。
1 多模感知方案-自身感知与环境感知
项目基于AIOT开发板研究了智能轮椅的多模感知,包括对自身自身状态的感知和对环境的感知,并通过手机小程序进行查看。结构图如图4.1所示,包括以下几部分:
(1)自身感知:
1、定位信息感知:采用ATK S1216F8 BD GPS/北斗模块,采集轮椅的定位信息(经、纬度)和移动速度;
2、姿态信息感知:采用ATK-MPU6050六轴传感器,采集轮椅的姿态角(俯仰角pitch,偏航角yaw和翻滚角roll);
(2)外部环境感知:
1、温度、湿度感知:采用DHT11传感器,输出轮椅所在环境的温湿度;
2、光照强度感知:采用BH1750传感器,输出轮椅所在环境的光强;
(3)开发板上云,在小程序上查看感知上报数据。
2 数据采集板介绍与通信协议设计
为了简便系统设计,在开发的时候采用了数据采集板(Cortex-M3),在采集完MPU6050、GPS和DHT11传感器的数据后,采集板通过串口2发送数据,AIOT开发板通过E53模块的串口5接收数据并处理。
数据协议如下图所示:
数据采集板端按照上述协议封装数据的函数如下:
//串口2发送1个字符 //c:要发送的字符
void usart2_send_char(u8 c)
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
USART_SendData(USART2,c);
}
//fun:功能字. 0XA0~0XAF//data:数据缓存区//len:data区有效数据个数
void usart2_niming_report(u8 fun,u8*data,u8 len)
{
u8 send_buf[64];
u8 i;
send_buf[len+3]=0; //校验数置零
send_buf[0]=0X88; //帧头
send_buf[1]=fun; //功能字
send_buf[2]=len; //数据长度
for(i=0;i<len;i++)send_buf[3+i]=data[i]; //复制数据
for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i]; //计算校验和
for(i=0;i<len+4;i++)usart2_send_char(send_buf[i]); //发送数据到串口1
}
AIOT开发板利用串口5接收数据,数据存储在rx_buff数组中:
**void** **LPUART5_IRQHandler**(**void**){
/* If new data arrived. */
**int** i=0;
**if** ((*kLPUART_RxDataRegFullFlag*)&LPUART_GetStatusFlags(LPUART5)){
data = LPUART_ReadByte(LPUART5);
**if**(len<19){
rx_buff[len++]=data;
**if**(rx_buff[0]!=0x88)
len=0;
}
**else** **if**(len>=19)
len=0;
}
SDK_ISR_EXIT_BARRIER;
}
3 自身状态感知
轮椅自身状态的感知包括姿态角信息、定位信息和速度信息,接下来对各个模块的开发过程进行介绍。
3.1 姿态信息感知
在轮椅移动过程中,采用正点原子的ATK-MPU6050六轴传感器模块采集轮椅的实时姿态角信息,传感器如下图所示:
ATK-MPU6050 模块具有体积小、自带 DMP、自带温度传感器、支持IIC从机地址设置和中断、兼容3.3V/5V系统、使用方便等特点,基本特性如下图所示。模块仅通过一个IIC接口与外部通信,并可以通过MPU_AD0设置模块的IIC地址,当MPU_AD0悬空接GND的时候,模块的IIC从机地址为:0X68;当MPU_AD0接VCC的时候,模块的IIC从机地址为:0X69。
3.2 定位信息、速度信息感知
项目采用正点原子的ATK-S1216F8 BD GPS北斗模块采集轮椅的经纬度定位信息和移动速度,模块如下图所示:
模块特性如下图所示,该模块能够通过串口输出NMEA 0183协议的定位数据,包括经度、纬度、UTC时间、速度、可见GPS/北斗卫星数量等信息。
数据采集板通过串口4接收到传感器数据后,将数据存放在USART1_TX_BUF数组中,然后利用GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF)函数分析字符串,并将模块提供的信息存储到gpsx数据结构中,在使用时读取该结构的数据即可。
4 外部环境感知
轮椅在移动过程中,还需要对外部环境进行感知,项目结合温湿度传感器和光照传感器开发了轮椅的外部感知功能。
4.1 温度、湿度感知
温度、湿度数据采集采用DHT11传感器,该传感器采用单总线数据格式发送数据,数据格式为8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。
4.2 光照强度感知
轮椅外部环境的光照强度感知采用AIOT开发板板载的BH1750传感器,该传感器是一种用于两线式串行总线接口的数字型光强度传感器,具有接近视觉灵敏度的光谱灵敏度特性,利用它的高分辨率可以探测较大范围的光强度变化。传感器内置16bit AD转换器,可对亮度进行1勒克斯的高精度测定。
读取传感器数据的程序如下:
**static** **int** **bh1750_read_dat**(uint8_t* dat)
{
status_t reVal = *kStatus_Fail*;
**if** (*kStatus_Success* != LPI2C_MasterStart(BH1750_I2C_MASTER, BH1750_DEVICE_ADDR_7BIT, *kLPI2C_Read*)) {
**return** -1;
}
reVal = LPI2C_MasterReceive(BH1750_I2C_MASTER, dat, 2);
**if** (reVal != *kStatus_Success*)
{
**if** (reVal == *kStatus_LPI2C_Nak*)
{
LPI2C_MasterStop(BH1750_I2C_MASTER);
}
**return** -1;
}
reVal = LPI2C_MasterStop(BH1750_I2C_MASTER);
**if** (reVal != *kStatus_Success*)
{
**return** -1;
}
**return** 0;
}