刘怡沛,江龙韬,秦 岭,张 卓
(河海大学 物联网工程学院,江苏 常州 213002)
随着国内智慧环保理念的发展,如何推动智慧环保落地成为各地政府关心的问题[1-3]。在推进智慧环保落地的过程中,最重要的是环境监测任务[4]。但由于部分地区环境复杂多样,传统的非移动式监测无法检测空间狭小,环境恶劣、位置险要的环境[5-6];人力监测方式耗费过多力资源,且效率低下;部分地区森林火灾频发,如何在保障消防员安全的前提下进行环境监测,避免不必要的牺牲,也成为当下的焦点问题[7-8]。
因此设计出一种可远程控制的环境监测机器人成为亟待解决的问题[9]。针对此需求,郭威[9]等设计了一种可移动滑杆式环境监测机器人,环境监测效果良好,但对环境要求高,需搭建滑杆供机器人滑行;赵静[10]等设计了一种基于树莓派的VR环境监测机器人,解决了监测对环境要求高的问题,但树莓派成本较高。本文设计了一种基于STM32嵌入式系统的可移动环境监测机器人。通过控制平台的摇杆模块控制检测平台的移动,检测平台上通过蓝牙实时传送监测数据给控制平台,并将环境参数等显示在远程控制平台的OLED上,且当前方存在障碍物时,检测平台发出警报,操控者此时需改变行进方向。该机器人具备环境监测、无线传输、远程控制的功能,解决了监测环境受限的问题,也降低了成本,对于推动智慧环保的建设和检查火灾等灾情情况,保障消防员安全等具有重要帮助。
该系统方案采用意法半导体公司生产的STM32F103C8T6微控制器作为机器人的主控芯片。其中,该系统由远程控制平台和检测平台两部分组成。其中,硬件电路由温湿度传感器模块、光照传感器、烟雾传感器和超声波测距模块、OLED显示模块、蜂鸣器报警模板等组成。主要完成对环境中温度、湿度、光照强度、障碍物距离和空气中颗粒的浓度的测量及障碍物判断和报警。软件部分主要由蓝牙、测试平台的行进算法和舵机控制算法组成。检测平台和远程控制平台通过HC-05蓝牙传递数据。远程控制设备的主控输入有按键模块和摇杆模块;机器人的主控输入有和超声波测距模块,4个传感器的数据通过蓝牙传递给远程控制设备的主控,再通过OLED分别显示。通过按键模块的4个按键实时更新对应的4个传感器的数据并通过OLED显示,摇杆模块控制机器人行进方向的目标。基于嵌入式的环境监测机器人系统总体设计如图1所示。
图1 系统构成
具体实现流程如下:
1)操控远程控制平台上的摇杆控制检测平台的行进方向,摇杆的偏移度控制行进速度。检测平台能够实时读取与障碍物的距离,设定安全距离阈值,当实时读取的距离小于安全阈值时,蜂鸣器报警,操控人员需改变行进方向。
2)远程控制平台上有4个按键,分别对应机器人的温湿度检测模块、光照检测模块、空气质量检测模块和超声波测距模块的数据读取,并更新显示在远程控制平台的OLED上。
系统目标为实现可远程控制的环境监测机器人。能够实时监测环境状态、解决日常环境下监测低效的难题,提高了测量精度,实现了智能化控制,因此需要实现以下两个目标。
1)高效性:若检测平台的MCU实时采集4个环境传感器的监测数据,则系统总体的反应速度将会被影响,且过于频繁的数据接收将会使系统内部系统稳定性降低。因此设计的机器人系统通过按键控制读取目标传感器的数值并在OLED更新显示,避免了长时间连续的接收冗杂传感器数据的问题,能够有效提高环境监测的效率和实际情况下工作的稳定性[11]。
2)智能化:环境监测机器人前行的过程中会出现障碍物或道路崎岖的困境,系统设定了障碍物安全距离阈值,当真实距离小于阈值时,蜂鸣器发出警报,提示操作者更改行进方向。
系统设计中需满足硬件的使用要求及设计要求,参数的具体范围如表1所示。
表1 系统相关参数表
系统硬件涉及到的硬件模块主要有主控模块、温湿度传感器电路、光照传感器电路、烟雾传感器电路和超声波测距电路。
系统主控选择意法半导体公司的基于Cortex-M3内核的32位微控制器STM32F103C8T6作为主芯片,系统最高工作频率可达72 MHz,内存包含64 Kb的Flash和20 Kb的SRAM。其系统主要由4个控制单元和4个受控单元(SRAM、FLASH、FSMC和AHB2APBx)组成,其中AHB是一种高性能的系统总线,用于连接CPU和DMA等高性能模块,由主模块、从模块和基础结构3个部分过程;APB是一种高级外围总线,主要用于UART等外设的连接,其主模块是APB桥,数据的传输均由主模块发起、从模块回应。
且含有3个16位的计时器和1个16位的PWM计时器、2个SPI、3个UART,37个GPIO口和12位的ADC,由于其外设资源众多,工作的时钟频率不尽相同,因此采用5个时钟源,有8 MHz的系统内部时钟振荡器HSI,40 MHz的实时时钟振荡器。芯片的封装体积小,性价比高,更具实用性。
温湿度传感器选择的型号是DHT11,是一款经校准后传输数字信号的复合型传感器。该传感器与MCU间通过DATA数据线传输,传输方式属于半双工通信方式。数据传输格式为一次传输40 bit,顺序依次为:8 bit的温度整数部分+8 bit的温度小数部分+8 bit的湿度整数部分+8 bit的湿度小数部分+8 bit的校验和[12]。通过校验位判断传输过程是否出错,提高传输的稳定性和高效性。
其电路应包含一个电阻式感湿元件和一个NTC感温元件。外界湿度越高,电阻值越小; NTC感温元件与1 kΩ的电阻串联,通过采集电阻两端电压值的变化来确定环境温度。其中需要加入一个4.7 kΩ的上拉电阻,可以提高输入信号的噪声容限,增强电路的抗干扰能力。电路设计如图2所示。
图2 温湿度传感器的电路设计
光照传感器选择的型号是GY-30,采用BH1750FVI芯片。该传感器有5个端口,除VCC和GND外,还有SCL、SDA和ADDR,因此BH1750FVI通过IIC协议与MCU进行通信,其中ADDR在该传感器中的作用为控制读写指令,当ARRD=0xB8/0x46时为写操作,ARRD=0xB9/0x47时为读操作。MCU传递8 bit控制字,由7 bit的发送器地址和1 bit的写命令组成,BH1750FVI收到后应答,再由MCU发送测量指令,BH1750FVI收到后发送高8位的数据,在单片机应答后,在传送低8位数据,此时一次通信结束[13]。
BH1750内部由光敏二极管、运算放大器、ADC采集和晶振等组成。光敏二极管将光信号转变为电流信号,经过运算放大器放大后,通过ADC采集电压,转换成16位二进制数存贮到内部寄存器中。且光照强度越高,光电流越大,采集到的电压越大。光照强度与电压之间存在对应关系,但二者之间不是严格的线性关系。BH1750FVI芯片内部对于采集到的电压又进一步地进行了线性处理,因此处理后的电压与光照强度近似线性。
从BH1750采集到的数据并不是最终的光照强度,需要下列公式进行转换,其中,Value为实际值,Measured为测量值,trans为透光率,mode为模式:
(1)
图3中,C3电源的滤波电容,能够使工作性能更加稳定。光照传感器的电路设计如图3所示。
图3 光照传感器电路设计
烟雾传感器选择的型号是MQ-135。对空气中的硫化物、氨气和污染气体的灵敏度高,是适应森林火灾监测、城市环保等多场合的低成本传感器。MQ-135有两种输出:AOUT和DOUT,分别对应模拟量输出和数字量输出,选择模拟量输出,将LM393的输出电压作为参考值,按照换算关系:电压每升高0.1 V,实际被测气体的浓度增加200 pm。满足以下换算公式:
(2)
烟雾传感器常用电路有两种,本文选用比较器电路监控。将MQ135的2引脚,即随烟雾浓度变化的直流信号做比较器的2脚,IN作为比较器的门槛电压。当烟雾浓度高于门槛电压时,LM393的输出电平为0 V,则D1灯亮;当烟雾浓度低于门槛电压时,LM393的输出电平为VCC,D1灯灭。电路设计如图4所示。
图4 烟雾传感器的电路设计
超声波测距模块选择的型号为HC-SR04,有4个端口:VCC、GND、Trig(控制端)、Echo(接收端)。其中模块会自动发送方波,即通过TRIG端通过传输10 μs的高电平型号触发测距,此时模块会自动发送8个40 kHz的方波,并检测是否有信号返回。若前方存在障碍物,则通过Echo输出高电平,则距障碍物的距离dis(m)为:
(3)
其中:Vvoice为声速,t为超声波从发射到返回的时间。
图5 超声波测距的电路设计
超声波电路主要由放大电路、选频电路和比较电路组成。其中Net端是漏极开路。当开始测距时,TRIG端发送一个10 μs的高电平触发脉冲,此时NET端引脚置低,滤除干扰信号,此时该模块发送8个40 kHz的脉冲来启动定时器和开中断,等待接收到接收触发中断信号后再关闭定时器、中断,计算计时器的时间。在此电路中,用到两级运放,均由GS324运算放大器放大,该放大器具有低输入偏置电流、失调电流和快速电压转换率的优点。在第一级放大中,放大倍数为6.2倍,二级放大倍数为7.5倍。超声波的电路设计如图5所示。
系统的软件部分采用STM32F103C8T6系统进行C语言的编辑,Keil 5 MDK编译软件作为系统的编译平台。
首先完成各类传感器的初始化和蓝牙配对,OLED显示各传感器参数的显示界面,若此时按键未按下,机器人跟随远程控制设备的控制状态行进或停止;若按键按下,则读取对应传感器的数据,并通过OLED更新显示,并判断此时距障碍物的距离是否小于安全阈值,若小于安全阈值,则蜂鸣器报警,发出警告。软件设计部分主要分为三方面:蓝牙配对、串口中断算法和机器人行进控制算法。具体流程如图6所示。
图6 软件系统的设计流程图
环境监测机器人的蓝牙选择了正点原子公司的HC-05模块。该模块是一款高性能、主从一体的蓝牙串口,支持波特率范围为4 800~1 382 400 baud,机器人的蓝牙波特率设定为38 400 baud,8位数据位,1位停止位,无校验位。机器人传输读取到的传感器数据至远程控制设备,需通过蓝牙的AT指令完成蓝牙配对,并设置主机和从机。
实际应用中的步骤如下:
1)进入AT模式。将AT引脚置高,当蓝牙模块state灯变为慢闪,则表明已经进入AT模式;
2)恢复蓝牙的默认状态:打开串口调试助手,调用AT+ORGL/r/n 即恢复默认设置;
3)设置蓝牙名称:配置第一个蓝牙的名称:AT+NAME= Bluetooth-Marster/r/n(主),第二个蓝牙:AT+NAME= Bluetooth-Slave/r/n(从);
4)设置蓝牙的配对码为:AT+PSWD= 0000/r/n;
5)将第一个蓝牙设置为主机: AT+ROLE=1/r/n,并将第二个蓝牙设置为从机:AT+ROLE=0/r/n;
6)配置串口参数:配置波特率、停止位和校验位:AT+UART=115 200,0,0/r/n,设置蓝牙通信串口波特率为9 600,停止位1位,无校验位;
7)查询地址: AT+ADDR?/r/n,得到地址为:2015:2:120758;
8)绑定蓝牙: AT+CMODE=1/r/n(调节为绑定模式) AT+BIND=2015,2,120758/r/n
至此,蓝牙已完成配对。此时机器人可实现与远程控制设备的数据传输。
3.2.1 远程控制设备的传输协议
蓝牙完成配对后,通过串口传输数据。远程控制设备控制机器人运动和按键选择对应的传感器读取数据需要通过串口函数USART_SendData()传递给机器人,串口通信协议如表2所示,采用数据帧格式:{0xFF、0xFE、spe_dat,x_value&0x00FF、x_value&0xFF00、y_value&0x00FF、y_value&0xFF00}。
表2 远程控制设备传输协议的语法解释
由数据帧顺序,0xFF和0xFE为数据帧的帧头,两个帧头能够大幅提高数据传递的准确性,同时避免过多帧头导致的数据传输效率低的问题。spe_dat是中断检测到的被按下按键的值,取值为0-4,0则是未按下,无需检测,1-4分别对应远程控制设备上的4个按键、也对应检测平台的4个传感器:空气质量传感器、温湿度传感器、光照传感器和超声波传感器。x_value&0x00FF和x_value&0xFF00分别代表x_value的低八位和高八位,y_value&0x00FF和y_value&0xFF00分别代表y_value的第八位和高八位。通过将高八位左移八位,与低八位相加,即可恢复x_value和y_value的原始数据。
x_value=x_value&0x00FF+x_value&0xFF00≪8
(4)
y_value=y_value&0x00FF+y_value&0xFF00≪8
(5)
检测平台获得x_value和y_value的原数据后,可按照机器人的行进控制算法,计算运行方向。
3.2.2 机器人的传输协议
检测平台接收到通过串口传递来的按键数值后,读取响应的传感器数据,将读取到的参数再次通过串口传输,串口传输协议如表3所示。
由于一次仅传输一个传感器的读取数据,此次的传输的具体值根据检测平台接收到的按键值变化。当检测平台收到远程控制设备传来的参数spe_dat=1时,此时对应空气质量传感器,读取到空气质量数据air,则Temp1此时为空气质量air的低八位,Temp2此时为空气质量air的高八位,光照传感器和距离传感器的格式也是如此。当机器人收到远程控制设备传来的参数spe_dat=2时,此时对应温湿度传感器,读取到温度数据wendu、湿度数据shidu,则Temp1此时为温度值,Temp2此时为湿度值。
表3 系统间传输协议的语法解释
3.3.1 舵机控制算法
舵机是一种带有输出轴的伺服电机,是由可变宽度的脉冲信号进行控制的。PWM信号是脉宽调制信号,即通过改变脉冲时间宽度实现信号控制,舵机的PWM信号控制周期是20 ms,基准宽度为1.5 ms,即对应图7中的中间位置,此时的转动角度为90°。脉冲持续时间每增加/减少0.5 ms,对应转动顺时针/逆时针45°。本系统中,检测平台选用的舵机型号为MG995R,为180°可转动舵机,可控制的角度范围为0~180°,脉冲宽度范围为0.5~2.5 ms[14],脉冲范围对应的多级转动如图7所示。
图7 PWM信号控制舵机示意图
1)分频值的确定:脉冲输出是利用通用定时器通过GPIO引脚输出。检测平台的主控中选用定时器3,先初始化TIM3,选择向上计数模式[15]。由舵机信号的控制周期20 ms计算对应频率脉冲50 Hz。
设置自动重装载寄存器周期的值为1 999,TIMx时钟频率的预分频值为719,根据分频计算公式可知:
(6)
式中,arr为PWM输出高电平的计数时间,psc为预分频计数器的值。
2)由信号控制舵机转动:定时器输出模式选择PWM1模式。在输出不同高电平占空比的过程中需要通过调用定时器通道1比较函数TIM_SetCompare1(TIM2,arr)来装填TIMx->CCR1寄存器的值。第一个参数TIM2是操作的定时器,第二个参数arr是输出PWM的高电平计数时间。通过设定不同的计数时间,就可以输出不同高电平占空比的PWM方波[16]。通过输出的舵机信号来控制检测平台的方向转动角度,定义函数Steer_Angle(u16arr);
void Steer_Angle(u16 arr)
{
TIM_SetCompare1(TIM2,arr);
}
其中,arr的值为机器人接收到的摇杆模块x值经过转换后,范围在[50,250]之间。将arr值装填进入TIMx->CCR1之后,arr的值将会与TIMx_CNT寄存器的计数值对比,当计数值低于arr时引脚为高电平,当计数值高于arr时引脚为低电平,因此,通过控制arr的值就可以控制舵机输出对应的角度中arr的值与角度转换关系如下所示:
(7)
其中:θ为舵机输出角度,当其为90°时,检测平台方向回正。
3.3.2 检测平台行进控制算法
图8为行进控制算法的流程图,通过远程控制设备的摇杆模块转动控制检测平台前进、后退和左右转弯的方向,摇杆模块具有(X,Y)2轴模拟输出,且输出电压值x和y的范围为0~4 095。x和y的数值由蓝牙通过USART通信传递给检测平台的主控。由于检测平台是由舵机控制转向,因此将转化后用于控制舵机的参数tempx控制范围在[50,250],对应舵机的占空比(0.5~2.5 ms),同时对应舵机的转动角度[-90°,90°]。将控制方向的参数tempy控制范围在[-100,100],利用转换公式即可完成转换:
tempx=150-(x-2 048)*0.048 828 125
(8)
tempy=(y-2 048)*0.048 828 125
(9)
图8 机器人行进控制算法流程图
控制前进/后退方向:当tempy>0时,标记方向dir=1,即检测平台前进;
当tempy<0时,标记方向dir=0,即检测平台后退,并将取反,取绝对值。
控制左右转弯方向:由于tempx和tempy的范围不一致,因此先通过公式
tx=tempx-150
(10)
因此将tx的范围控制为[-100,100]。行进速度为:
(11)
通过函数Steer_Angle(tempx)控制左右转弯角度,Motor_Power(speed,dir)函数控制行进方向和速度。
此部分函数定义为Motor_Power(power,dir), power为速度,dir为前进和后退的标志位,代码如下:
void Motor_Power(u16 power,u8 dir)
{
u8 arr;
if(dir==1)
{
arr = power;
TIM_SetCompare1(TIM4,arr);
TIM_SetCompare3(TIM4,arr);
TIM_SetCompare2(TIM4,0);
TIM_SetCompare4(TIM4,0);
}
else
{
arr = power;
TIM_SetCompare1(TIM4,0);
TIM_SetCompare3(TIM4,0);
TIM_SetCompare2(TIM4,arr);
TIM_SetCompare4(TIM4,arr);
}
}
当计算出的y<0时,dir=0,检测平台后退;计算出的y>0时,dir=1,检测平台前进。此处调用了库函数TIM_SetCompare1 (TIM4,arr),该函数的作用是设置TIM4->CCR1的值,通过比较TIM4_CNT与TIM4->CCR1, 就可以控制定时器引脚高低电平的输出,进而通过设定不同的arr就可以输出不同高电平占空比的PWM波来类比不同的电压模拟量,以此来控制检测平台前行的速度。
由上文的舵机控制算法和检测平台行进控制算法,就可以将远程控制设备的X,Y双轴模拟偏移量,通过蓝牙传输给检测平台,进而控制其方向和速度。
为了验证本文设计的基于嵌入式的可移动环境监测机器人在现实生活中的环境监测准确性,与各试验点的真实环境数据进行对比。实验地点分别在操场、实验室和地下停车场,各试验点经过30次实验。本次实验主要针对传感器读取的准确度测试[17-18],同时判断其遇障报警功能。
首先测试环境状态监测机器人的远程控制功能是否正常,通过对检测平台及远程控制设备进行供电,待蓝牙连接完成后,推动摇杆进行上下左右移动的测试,测试结果表明,检测平台可以根据发出的指示进行运动,当改变摇杆在Y轴上的状态时,检测平台会相应的向前向后变速行驶,当改变摇杆在X轴上的状态时,检测平台的舵机会相应的转动,决定检测平台的前进方向。
检测平台的舵机跟随远程控制设备的转动正常行驶,经过实际的测试表明,检测平台可以很好的听从远程控制设备的命令进行移动,可以满足日常场景下的远程控制需求。
接着对各传感器的检测功能进行测试,看其是否能够传回实时环境的目标监测数据,传送回来的数据在OLED上更新显示。
OLED显示屏上包括了DHT11温湿度传感器、GY-30光照传感器、HCSR04超声波传感器、MQ135空气质量检测传感器回传回来的各种数据,从上到下分别是距离、温度、湿度、光照强度、空气质量等环境监测状态[19]。实验的测试结果如下:
经过30次测试,部分测试数据如表4所示。
表4 实验室部分测试结果
操场测试结果:经过30次测试,部分测试数据如表5所示。
表5 操场部分测试结果
地下停车场测试结果:经过30次测试,部分测试数据如表6所示。
由上述在3个不同的测试地点中,检测平台各传感器的测试结果和实际结果对比基本一致,综合准确率达到97.7%。
表6 地下停车场部分测试结果
但在实验室和地下停车场时,由于在室内时受到照明灯的影响,在不同的位置上光照强度会由于有轻微波动,因此在实验室和地下停车场的光照强度有波动。本次测试中,将安全距离设定为10 cm,在实验过程中遇到障碍物时报警功能正常。综上,实验结果达到预期目标。
未来无论在消防救助领域还是在狭隘、复杂空间下的环境监测和高污染地区的环境检测等,可移动的环境监测机器人都将发挥巨大的作用,推进智慧环保落地,检测危险环境、保护消防员安全[20-21]。本文设计的基于嵌入式的可移动环境监测机器人能够通过远程控制平台的摇杆控制检测平台行驶,并通过检测平台上的传感器完成对周围环境的高精度检测,通过蓝牙传递回远程控制平台,并通过OLED显示实时的监控数据。经过多场景测试,环境监测机器人具有较高的稳定性,各项指标达到了预期结果,执行任务时运行稳定。未来考虑将蓝牙换用传输距离更远的WIFI模块;加入摄像头模块,返回检测现场环境状态和拓展环境监测的指标[22]。