潘承斌,蒋旭中,温怀疆
(浙江传媒学院 媒体工程学院,浙江杭州, 310018)
近年,人们日常出行经常采用自行车、摩托车、电动车。骑行越来越多,在骑行中,会经常用到左转弯、右转弯、刹车等操作。由于摩托车、电动车和自行车等的行车状态没有提示灯或者是提示灯不够醒目,在光线不好时或改变行车状态时(比如突然刹车、转弯等),容易让行人或其他车辆避让不及引发交通事故。为此我们研究设计了一种骑车人使用的安全骑行辅助设备,同时头盔也能通过传感器自动感应转弯和车距,并自动亮起相应的转弯提示灯和提示语音,提醒周围的车辆或行人注意避让,从而有效地减少交通事故,提高骑车的安全性。在保证传统头盔的安全性前提下,对其进行智能化的嵌入,更好地给人们带来便利。
本安全骑行辅助设备装置的系统分为两个系统,一个部分为仪表系统,另一个为头盔系统。首先,仪表系统中,通过JY61姿态传感器把车把手地转向的变化信息转化为信息数据传送到主MCU2处理。MCU2通过算法处理将数据显示在0.96寸的OLED屏幕上,同时通过HC-05蓝牙模块将姿态数据传送到安装在头盔上的主MCU1。另一个系统中,通过蓝牙模块得到车身转向的数据,相应的控制对应方向的WS1812灯条闪烁,以实现提示功能。MVR2EB激光测距模块通过检测后方的车辆距离,主控MCU1接收并处理传感器数据,当距离到达设定的阈值,车距过近。MUC1控制语音模块发出对应的提示音。实现提醒功能。电源模块使用7.4V/2550mAh的锂电池为两个系统的各个模块供电,通过LDO转化5V给两个MCU供电。
本系统采用的主控MCU是Arduino Nano单片机,在设计前期我们使用的是Arduino UNO开发板,设计过程中发现该开发板体积过大,而且不适合便携开发。Arduino Nano有尺寸小,易便携、性能良好的特点,而且适用于作为本系统的处理核心,其处理器核心ATmega328(NANO 3.0),同时具有14路数字输入/输出口(其中6路可作为PWM输出),8路模拟输入,一个16MHz晶体振荡器,一个mini-B USB口,一个ICSP header和一个复位按钮。另外该开发板相应配套的软件(Arduino IDE,集成开发环境)功能强大,界面简洁,编译烧录程序方便,大幅度提升编写代码的效率。
图1 系统整体结构设计图
Arduino Nano芯片自带的一个硬件串口外,Arduino还提供了Software Serial类库,可以将其他数字引脚通过程序模拟成串口通信引脚,在本系统设计中,传感器与单片机之间通信都使用串口通信,Nano开发板的这个优点让它适合多串口通信开发。
JY61模块此六轴模块采用高精度的陀螺加速度计MPU6050,通过STM8处理器读取 MPU6050 的测量数据。然后通过串口输出,同时精心的 PCB布局和工艺保证了MPU6050 收到外接的干扰最小,测量的精度最高。模块内部自带电压稳定电路,可以兼容 3.3V/5V 的嵌入式系统,连接方便。采用先进的数字滤波技术,内部结合了动力学解算与动态卡尔曼滤波算法,能有效降低测量噪声,提高测量精度。配备相应的上位机,通过上位机监测模块传输数据,与实际结果的校正。
卡尔曼滤波算法简述:对于姿态传感器模块来说,角度解算来源于两种类型的数据,第一种是通过加速度和磁场数据进行运动学解算可以求出三轴的姿态角,优点是没有长期漂移和误差累计,但缺点是精度差,而且仅在静态时能保证精度。第二种是通过陀螺仪测量出来的角速度进行积分运算,可以得出三轴姿态角,优点是精度高,可以进行动态测量,对加速度不敏感,缺点是有累积误差和漂移,时间越长累积误差越大。卡尔曼滤波就是一种数据融合算法,结合加速度计和陀螺仪的信息,共同来解算姿态,集合二者的优点获得在动态环境下可以准确测量姿态的方法。
该模块内部MPU6050输出的数据为姿态的欧拉角数据,其中滚转角是z轴与通过x轴的铅垂面的夹角,x轴投影到水平面与导航系的夹角即为航向角,俯仰角则是x轴与水平面的夹角。本设计中运用了模块输出的航向角来表示车身转向信息, JY61模块通过串口(TTL)将姿态数据传送给Nano开发板处理,最后做出相应提示操作。
图2 模块与单片机连接图
本模块的设计,我们分析了现有几种测距方式的优缺点,其间对测距模块进行了测试和数据分析。
该MVR2EB模块利用激光对目标的距离进行准确测定,激光测距模块在工作时向目标射出一束很细的激光,由光电元件接收目标反射的激光束,计时器测定激光束从发射到接收的时间,计算出从观测者到目标的距离,采用 TOF(Time-of-Flight 飞行时间)技术,850nm 光源,配合独特的光学、电子、结构设计而成的激光测距模组,模组会计算通过发射调制过的红外光信号,在被测物体反射之后返回到模组接收传感器的时间来计算出相对距离值,可以实现0.3~14m高速测距需求(室外),且测试速度快而准确。模块小巧玲珑,体积小适合集成化,重量轻,仅9 克,对于佩戴和使用者该重量没有不适感。模块UART串口通信,将数据以HEX形式发送到MCU中。数据简洁易读取,方便进行数据转化处理。
图3 模块外形和测距原理图
由于仪表系统和头盔系统是分开运行,在仪表系统中传感器得到数据之后需要通过数据通讯,让头盔系统的MCU做出对应处理。中间的数据通讯桥梁,本系统采用两片HC-05蓝牙模块进行数据通讯。
该蓝牙模块连接迅速、连接稳定、易于开发、性价比高,在智能家居、远程控制、监控系统方面有着广泛应用。从蓝牙适用距离和性能参数考虑,该蓝牙模块可以用于本系统完成两个系统的数据通讯。
在使用该蓝牙模块需要设置主从机,根据系统要求将仪表系统的蓝牙模块设置为从机,用于传输传感器的数据。头盔系统的蓝牙模块设置为主机,用于接受从机发送的数据。
图4 蓝牙规格
图5 AT指令配置蓝牙
本装置设计使用0.96寸,像素点为128×64的OLED显示屏,用于显示传感器获得数据。模型调试阶段,可以通过屏幕显示的信息直接判断转向姿态数据。后期可以通过屏幕实时反馈车身姿态数据。
图6 OLED连接示意图
转向提示灯部分采用WS2812灯条。WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外形与一个505LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证像素点的颜色高度一致。
数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。我们采用三个灯条为一组提示灯,将三个灯条的信号线统一,单片机输入程序,产生一种闪烁流水灯的效果,该视觉效果比简单的亮灯,流水灯动态更吸引人体视觉注意,本设计的提示效果。
图7 典型电路设计
图8 灯条流水效果示意
本系统采用LX-MP3模块和一个4Ω3W的扬声器组成。在电脑端提前将使用到的语音录入到模块的SD卡中,再将单片机的IO口接入到模块预留的A1~A9端口。该模块有两种触发模式,在使用语音少的情况下可以使用单键触发模式,可以直接用单片机拉低电平触发。另一种在使用语音数量较多时可以使用编码触发模式,最多可以触发31首语音。本系统使用了单键触发模式。
图9 模块示意图
对于本系统使用到多种传感器和模块,设计一个可以集成化的PCB电路板,预留传感器模块接口,方便安装,可以减小设备的体积,并且提高整个电路的连接稳定性。
根据需求预留了单片机接口、蓝牙模块接口、OLED显示屏接口、传感器模块接口、灯带接口。设计电压转化电路,保留电源指示灯。
图10 语音模块和扬声器实物图
图12 MCU1电路原理图
软件部分流程主要从传感器数据获取外部信息—单片机读取传感器反映的外部数据—通过蓝牙实现双MCU的数据传输—单片机执行相应设定的行为—最终实现相应功能。根据两个功能的实现要求,分别设计相应代码,具体细节如下。
图13 MUC2的电路原理图
图14 头盔系统PCB电路板
图15
图16
在该部分设计中,首先对于姿态模块JY61的数据获取,我们调用JY901.h库文件处理基础数据,将处理后的有效的姿态数据以串口方式读取到单片机中。通过SoftwareSerial.h定义软串口,使数据通过蓝牙模块进行传输。最后,在主MCU程序中,将偏航角进行补正,将偏航角限定在1°~360°内,然后前后两次的偏航角数据进行对比,如果偏差幅度超过设定值,并执行对应的亮灯闪烁程序。提示灯部分使用数组编码,达到流水灯提示效果。
在该部分设计中主要从测距模块中获取到实时距离数据,通过阅读数据模块手册确定距离数据在第三和第四字节,将该字节获取,并进行高位转换,将十六进制转化为十进制数,读取到单片机中,将读取的数据与设定值比较,距离过近,则拉低控制语音模块引脚电平,发出提示语音。
本文介绍了一种以Arduino nano[4]为主 控 系 统,将转向检测、安全提示、距离监测和蓝牙数据通信等多种功能有机结合的智能安全骑行辅助装置。该系统硬件电路简单、实时性好,软件设计成本低、功能可扩展,能够提高骑行交通安全事故的发生率、减少人员伤亡。该系统作为智能设备的一个典型应用,具有功能多样化、应用广泛的特点,对交通安全骑行建设起到一定的推动作用。