轮椅的远程多模感知技术

197 阅读5分钟

本文已参与「新人创作礼」活动.一起开启掘金创作之路。

1 多模感知方案-自身感知与环境感知

项目基于AIOT开发板研究了智能轮椅的多模感知,包括对自身自身状态的感知和对环境的感知,并通过手机小程序进行查看。结构图如图4.1所示,包括以下几部分:

(1)自身感知:

1、定位信息感知:采用ATK S1216F8 BD GPS/北斗模块,采集轮椅的定位信息(经、纬度)和移动速度;

2、姿态信息感知:采用ATK-MPU6050六轴传感器,采集轮椅的姿态角(俯仰角pitch,偏航角yaw和翻滚角roll);

(2)外部环境感知:

1、温度、湿度感知:采用DHT11传感器,输出轮椅所在环境的温湿度;

2、光照强度感知:采用BH1750传感器,输出轮椅所在环境的光强;

(3)开发板上云,在小程序上查看感知上报数据。

image.png

2 数据采集板介绍与通信协议设计

为了简便系统设计,在开发的时候采用了数据采集板(Cortex-M3),在采集完MPU6050、GPS和DHT11传感器的数据后,采集板通过串口2发送数据,AIOT开发板通过E53模块的串口5接收数据并处理。

数据协议如下图所示:

image.png

数据采集板端按照上述协议封装数据的函数如下:

//串口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六轴传感器模块采集轮椅的实时姿态角信息,传感器如下图所示:

image.png

ATK-MPU6050 模块具有体积小、自带 DMP、自带温度传感器、支持IIC从机地址设置和中断、兼容3.3V/5V系统、使用方便等特点,基本特性如下图所示。模块仅通过一个IIC接口与外部通信,并可以通过MPU_AD0设置模块的IIC地址,当MPU_AD0悬空接GND的时候,模块的IIC从机地址为:0X68;当MPU_AD0接VCC的时候,模块的IIC从机地址为:0X69。

image.png

3.2 定位信息、速度信息感知

项目采用正点原子的ATK-S1216F8 BD GPS北斗模块采集轮椅的经纬度定位信息和移动速度,模块如下图所示:

image.png

模块特性如下图所示,该模块能够通过串口输出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勒克斯的高精度测定。

image.png

读取传感器数据的程序如下:

**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;

}