APP下载

基于Arduino的电动车与摩托车安全报警装置

2018-12-17任环宇曹虎李道全

电脑知识与技术 2018年25期
关键词:串口通信上位机

任环宇 曹虎 李道全

摘要:电动车、摩托车在为了人们出行提供方便的同时,也带来了安全隐患。本设计开发了一款用于安装在电动车、摩托车后置的危险探测装置。探测手段主要通过超声测距传感的方式,尽早地探测出电动车、摩托车在行驶过程中遇到的距离过近的“危险”,考虑到电动车、摩托车在形式过程中的“视野盲区”,该设计为超声测距探头搭载了旋转舵机,以方便探头周期性地对“视野盲区”的各个方向进行有效探测。同时设计开发了多种预警模块,包括语音提示预警模块、灯光闪烁预警模块,模块是基于arduino上位机、语音芯片做下位机的技术实现的。通过声光交替预警的方式,提高后方车辆的警惕性,尽可能地避免追尾。

关键词: arduino;超声测距;上位机;串口通信;语音合成;预警装置

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)25-0273-04

随着经济的快速发展,人们生活水平的提高,出行方式的选择成为与百姓生活息息相关的问题。在较为发达的城市,为了避免出行的拥堵,越来越多的人选择使用电动车、摩托车等便携式的出行方式。而在農村,电动车、摩托车也更是成为人们出行的主要交通工具。尽管这些交通工具较为方便,但是安全成为一大隐患,尤其是相对”铁包肉”的汽车来说,无疑增大了安全隐患[1]。本项目旨在通过相关的设计开发来解决这一隐患。

1 系统总体设计

1.1 总体设计概述

本项目的重点在各个模块的独立开发以及各个模块的拼接。通过调研,各个模块所使用的外设都在arduino有统一的协议,有较为丰富的开发资源(Arduino ide),非常方便开发者做各种功能的组合实现。同时,语音模块和主控arduino板都是支持统一的串口通信协议,因此只需要做一个arduino上位机的通信逻辑,就可以完成该模块的设计。

整个系统的功能可以分为如下的几个模块:超声测距传感器测距、舵机旋转、灯条闪烁逻辑、语音报警模块、主控板与语音模块的串口通信。

系统的流程图如图1所示。

1.2 主要设备介绍

1.2.1 Arduinomega2560

Arduino是一款便捷灵活、方便上手的开源电子原型平台[2],如图2所示。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。同时其软件平台的高级设计语言是基于c语言开发的,非常利于开发者快速学习和开发。同时其开源平台里有丰富的库可用,降低了编程的难度,并提高了本项目的可行性。

1.2.2 超声波探测头

超声波模块是一个用来测量距离的电子模块,如图3 所示。本项目采用的超声模块有如下参数特性:工作电压: 5V DC,工作温度:-25~+80℃,测量角度:30度范围内,测量范围:3-400cm(误差小于1cm),超声波频率:42kHz,控制方式:单数字口控制。

根据其参数特性我们能够看到,它的测量角度难以完成对“视角盲区”的全部覆盖,所以搭载舵机模块非常有必要。同时其的探测距离是3~400cm,在实际的使用是非常适合的。

1.2.3 舵机

本设计实用的舵机型号是MEDS15,如图4。相对于市面上最便宜的9g小舵机,虽然旋转功能二者都可以实现,但是实践设计过程中发现,9g小舵机的舵机臂固定超声模块非常不稳定,而这一款舵机的舵机臂有一个常见尺寸的螺丝口,非常容易进行结构上的拓展,如图5所示。

1.2.4 灯条

针对灯光闪烁预警模块,这里简单的LED灯闪烁显然报警效果太差,所以这里我们采用的是多个RGB灯串联而组成的灯条,如图6所示。

1.2.5 语音模块

语音模块采用的是外包公司基于固定语料库开发的独立智能语音模块,如图7所示。该模块本身是为语音处理所进行量身剪裁的处理芯片,因此从概念上,语音模块(语音处理芯片和喇叭)虽然也是作为“外设”,但是与上面给出的外设是有一些区别的。

1.2.6 串口通信、上位机、下位机简介

上文提到,语音模块是一个独立的处理芯片,为其独立供电时,它可以进行固定词条的识别和反馈发声。加上控制灯条、舵机、超声模块的主控arduino处理芯片,因此在本设计中,有两个处理器,这就存在处理芯片之间的通信逻辑的实现以及二者“地位”的关系,作为要控制灯条、舵机、超声模块、语音模块的主控板arduino,它是上位机,而语音模块仅仅是用于接收通信信号之后,完成特定的预警输出,因此它是一个下位机。而两个处理器都支持统一的串口通信标准,因此他们之间的信号传输通过串口通信协议实现即可[3]。上下位机组合图如图8所示。

2 系统实现

对照上文给出的模块功能的分类,下面依次进行模块化的逻辑过程设计。

2.1 超声模块

上文提到,arduino开发资源丰富,针对超声模块,本设计的arguinomega2560开发板自带了常用的模块函数库,针对超声模块,直接调用函数即可返回测距结果。独立模块的测试参考如下[4]:

#include"MeMegaPi.h"

#include

#include

MeUltrasonicSensorultraSensor(PORT_8);

void setup(){

Serial.begin(9600);

}

void loop(){

Serial.print("Distance:");

Serial.print(ultraSensor.distanceCm());

Serial.println("cm");

delay(100);

}

2.2 舵机旋转:

舵机模块的功能设计很简单,为了能够让其搭载的超声模块扫描身后180°的视野盲区,设计舵机有如下的逻辑:

While(1){

舵机臂转动到0°处;

延时1秒;

舵机臂转动到90°处;

延时1秒;

舵机臂转动到180°处;

延时1秒

}

通过这样一个简单的算法设计,我们就能够保证超声模块一直在做周期性的等时间间距的扫描动作。关于舵机的驱动程序的设计此处略去,主函数程序如下:

voidloop(){

servo_6_1.write(0);

_delay(1);

servo_6_1.write(90);

_delay(1);

servo_6_1.write(180);

delay(1);

_loop();

}

2.3 燈条闪烁逻辑

考虑到预警效果,这里灯条的闪烁逻辑为红灯并且间隔延时较短。定义Dis是当前时间超声探头模块返回的障碍物距离,单位是厘米。

Void LightWarning()

If(Dis < 250){//后方障碍物距离小于2.5m,有追尾危险,开始灯光报警

灯条各灯的RGB参数设置成(255, 0 ,0);

延时0.2s;

灯条各灯的RGB参数设置成(0,0,0);//达到闪烁效果

延时0.2s;

}

灯条驱动程序细节略去,主程序如下:

void LightWarning(){

rgbled_6_2.setColor(0,255,0,0);

rgbled_6_2.show();

_delay(0.2);

gbled_6_2.setColor(0,0,0,0);

rgbled_6_2.show();

_delay(0.2);

_loop();

}

2.4 语音报警模块

上文提及,该模块是基于语料库的外包处理器,使能够单独工作的。其能够完成固定词条的识别、对应反馈文本的语音输出,在这个设计中,我们只需要它的文本转语音功能,以提示使用本设计的自电动车、摩托车车主尾部存在追尾危险。

语音模块内部实现了一个语音相关功能的指令协议,针对本设计所需要的功能,如下指令有关:

@TextToSpeech#文本$

对该指令进行简要的说明”@”、“#”、“$”均为指令的控制符,用于指令编译使用。TextToSpeech是关键字,表示这一条指令的功能是将文本转化成语音。而想要转换的具体的文字就在“文本”中体现。其工作模式是,语音模块在通电之后自动从串口中读取字符串指令,当遇到“$”控制符,完成一条指令的读取,然后语音模块中集成的编译器对指令进行解读,将其转化成可执行代码,然后执行。

将语音模块与PC进行连接,打开串口。

2.5 主控板与语音模块的串口通信

对照上文给出的数据流图,arduino作为探测传感并发出控制指令的上位机,在探测到障碍物距离过近的时候,将发送控制指令给串口,语音模块下位机将自动读取串口中的数据并执行指令[5]。算法伪代码如下:

上位机:

Void SpeechWarning()

Begin:

超声探测模块探测,返回给整型变量Dis;

If(Dis < 250)//超声模块返回值单位是cm

Serial.print(“@TexttoSpeech#正前方/左后方/右后方存在障碍!$”);

End;

2.6 模块综合

分别完成各个模块的独立调试后,需要完成对各个模块的连接工作,参照上文给出的数据流图,本设计总的逻辑设计如下:

Void Solve(){

If(Dis > 250) retrun;

Else {

SpeechWarning();

LightWarning();

}

}

While(通电){

舵机旋转到0°;

Dis = getDistance();

Solve();

Delay(1500);

舵机旋转到90°;

Dis = getDistance();

Solve();

Delay(1500);

舵机旋转到180°;

Dis = getDistance();

Solve();

Delay(1500);

}

3 结束语

通过上述设计与实现,完成电动车与摩托车后置安全的报警功能。本设计的优点与创新主要有以下两点:

1) 采用声音和语音报警模块相结合的方式,对使用者后车体尾部的车进行的双向报警,这样的模式能够大大铲除潜在危机。

2) 本设计将超声模块搭载在舵机上的创意思维,将超声测距模块的扫描范围覆盖了尾部的180°视野盲区,这样做能够再次降低危险发成的概率。

该系统当前阶段的缺陷在于,系统的稳定性有待于进一步测试和改善,在以后的升级过程中,将考虑主控模块、芯片的进一步裁剪工作。

参考文献:

[1] 熊和金.一种电动车安全行驶的智能声光报警装置[P].实用新型专利:CN201521074280.7,2016.07.06.

[2] Makeblock硬件官方参数参考表目.http://learn.makeblock.com/cn/megapi/,2017,2.

[3] 赵司琦,俞继伟,王广田,谢怡宁.基于Arduino的Tennsy BadUSB改良型共享云盾的设计与研究[J].电脑知识与技术,2017(36):36-38+45.

[4] Wolfram Donat .Chaim Krause. Learn Raspberry PiProgramming with Python[M].韩德强译.北京:机械工业出版社,2017.

[5] 章杰瑞,周屹.基于Arduino和PIC单片机智能小车平台的研究与设计[J].电脑知识与技术,2017(29):187-190.

【通联编辑:梁书】

猜你喜欢

串口通信上位机
基于Qt和Flash的嵌入式Linux软件架构设计