摘 要
随着时代的发展,汽车行业也在不断地发展,技术也在不断地提高,使人们的生活更加方便、快捷,但也随之
而来了一系列安全问题。据世界卫生组织报告表明:近年来,每年由交通事故造成的伤亡中,由于驾乘人员开门下
车时不注意观测后方车况,这导致了相当大比例的人员伤残,其中约占总伤残人数的11.6%。“突然开车门”导致
的交通意外已经成为了最常见的交通事故原因之一。
为了尽可能减少因车内人员不当开门造成的交通意外,本文设计了一种基于单片机的防撞预警系统。本设计选
定以STC89C52为核心控制芯片,由按键按钮设置安全距离,通过超声波测距传感器来与障碍物的距离,并且可以通
过温度传感器实时采集当前环境温度,同时将测得的距离及温度上传至单片机控制芯片,之后通过单片机控制器内
部的程序将此距离计算出来,并且可由显示模块将数据展示给用户。此距离经过系统内部逻辑处理如果低于设定的
阈值时,系统将通过报警模块发出警报,如果大于设定的阈值则只通过显示模块显示当下距离,不报警。
本论文所阐述的内容介绍了基于单片机的车门开门防撞预警系统的研究设计,所完成的内容包括:各项模块方
案选型、系统硬件设计、系统软件编程、系统安装与调试。最终所研究的该防撞预警系统可以满足本设计任务书的
设计要求。
关键词:汽车开门防撞;超声波测距;语音提示
第1章 绪论
现如今随着社会各方面不断进步发展,汽车使用率也不断在增加,同时也带来了一系列安全问题,在社会上引
起了高度重视。本文就汽车车门开门防撞预警系统课题进行各方面研究。
1.1 课题背景及研究意义
随着人类生活质量的不断提高,汽车工业也在不断发展,家家户户越来越离不开汽车。2016年,国家统计局报
告,车辆之间的交通事故造成的损失已经达到12亿多[1]。目前,交通事故的类型已经从传统的汽车碰撞发展到人、
车、路的结合。
现如今,由于交通所导致的伤亡事故频频发生,面对这些交通事故,我们国家也采取了一系列的措施,比如:
禁止马路边乱停车、乱放杂物,传播驾驶文明理念,各地公安交管部门举行违法行为整治工作。近些年,我国通过
大量的智能技术对汽车自动防撞系统进行研究,并且取得了不错的成绩,智能科技的不断进步,大大提升了此系统
研究的稳定性,从而有效的减少了交通意外的发生,为汽车的使用用户不断提升舒适度与安全感。但是目前的汽车
防撞系统主要是集中在纵向的防撞报警研究中,在侧向碰撞越来越多的交通事故中,侧向防撞的系统研究还处在起
步的阶段,大多数汽车的侧向防撞主要依靠驾驶员的技术与经验进行[2]。为降低由汽车事故导致的人员伤亡及财产
损失,研制一种在可能发生危险前,能及时提醒人们注意周围环境的报警的安全系统具有实际意义[3]。
设计一套基于单片机的车门开门防撞预警系统,该系统可以从一定程度上避免交通事故,主要应用于侧方防撞
问题。该测距系统测量范围最低可至2cm,最高可达500cm。设定最小安全距离后,若有障碍物靠近距离小于设定值
时,系统可通过MP3语音芯片驱动扬声器提示距离值,并能通过LCD1602显示屏显示当前距离提示给用户,本设计可
以有效的解决侧方相撞安全问题。
1.2 国内外研究情况
(1)国外研究情况
目前,人们对汽车使用控制还是通过人机交互形式,其优点也表现为实用简单,安全性高,使用灵活性高。但
是这种形式也存在很多危险,比如,在操作时,驾驶人员因自身原因,无法专心控制汽车行驶,此时外界环境出现
危险时,无法及时提示驾驶员做出反应,随时会引发交通事故。而语音提示控制系统刚好可以有效弥补这一缺陷,
此预警系统的研发使得汽车的使用安全性大大提高,并且其操作方式上也比较简单方便。但现在世界上每年仍会因
交通事故造成巨大的人身伤亡及财产损失,汽车防撞预警系统研究受到世界上越来越多的国家重视。不同的国家和
汽车制造商在智能汽车安全辅助系统方面各有不同的研究方向。
在2013年的6月份,韩国就已研究了一种汽车提前预警的一种装置。这种装置是关于行车轨道上一种预警设备。
它的工作原理是当车离开了正确的行车轨道,系统就会进行报警,提示已经偏离了轨道,最后将报警的信息发送到该系统。
之后,丰田公司也开发了一种防撞的装置,通过毫米波雷达和CCD摄像机实现对本车和前车的距离检测,当两辆
汽车之间的间距较小的时候进行报警,提示司机当前的车距较小,注意安全。
(2)国内研究情况
2013年,广汽研究院研制出一种通过定位技术实现防撞预警功能的系统,这套系统通过与手机的网络连接,可以随
时对车辆状态进行检查,还可以实现远程操作车辆,自动报警等功能。
2015年,奇瑞汽车股份有限公司采用雷达技术研发了一种开门预警系统,通过雷达实时检测进入车辆后方报警区域
的动态目标,并进行及时报警以减少汽车碰撞事故[4]。
2016年的9月份,捷豹汽车股份有限公司也研发了一种报警系统,该系统利用声音和光的感应,来提醒车内人员注意
开门,提高乘车安全度。
之后在2018年,中南大学王兴华和彭勇教授对骑自行车和骑摩托车发生碰撞进行了研究,结果发现:在碰撞条
件相同的情况下,骑自行车的人头部被受撞击的可能性更大,而骑摩托车的人小腿更容易受到撞击。该研究结果为
骑自行车和摩托车的人们安全保护策略提供了参考[5]。
1.3 设计的主要目的与内容
本设计的主要目的是当汽车停车开门时,能够避免碰撞到车外物体的预警系统,在汽车与物体距离达到所设置
的安全距离时,发出报警信号,提醒人员注意安全,减少事故发生的概率。
本设计分为硬件部分和软件部分两个部分。首先通过查阅资料了解车门开门防撞预警系统的研究历史及研究的
必要性,为内部结构的进一步研究打好基础。在硬件电路中,包括测距、语音提示、报警、显示等模块以及单片机
最小系统,将这些小模块组合到一起,完成此次车门开门防撞的硬件设计任务。软件设计部分进行分功能、分模块
编写,包括主程序、LCD显示程序、超声波测距程序等,模块化编程既可以使代码便于管理,在查找方面也十分方
便。之后在单片机开发板上调试成功后,进入硬件调试阶段,然后进行元器件的焊接,最终完成该系统设计,最后
对各方面认真全面调试。
第2章 系统总体设计
了解了该课题的背景意义及目的后,需对系统的总体构成以及各项模块设计的方案选型进行设计,明确设计方
法及内容,为之后的设计部分打下坚实基础。
2.1 系统总体构成
本文是基于单片机的车门开门防撞预警系统设计,针对现在汽车停驻问题引发的一系列交通事故,用与消除用
户在停车后由于不当开门造成同行人或骑车人相撞的安全隐患。系统工作原理为由主控制单片机使用硬件电路和软
件程序控制。当系统通电后,通过按键设置安全距离后,由超声波测距传感器获取车门与障碍物的距离,温度补偿
模块对超声波测距传感器所受环境影响,而产生的偏差进行补偿,距离及温度由显示模块显示出来。当障碍物距离
低于设定值时,系统会通过语音模块、报警模块进行报警,并且将危险距离显示出来。系统总体设计框图如图 2-1 所示。
图 2-1 系统总体设计框图
2.2 系统方案选型
由于有多种可以组成该系统的不同硬件方案,且市面上各器件也有很多选择。首先通过查阅资料对各方案硬件
进行对比,可以为后续进程节约大量时间,同时可以使设计过程更加顺利。
2.2.1 单片机中心控制模块方案选型
在整个系统的设计中,最核心的模块是单片机最小系统,其主要完成传感器信号的接收处理,因此,选择合适的单
片机芯片是非常有必要的。
。AVR可以在任两个寄存器之间进行逻 方案一:AVR单片机,AVR单片机具有高性能、高速度、低功耗等特点[6]
辑运算。但它没有位操作,并且,指令以字为单位,大部分指令为单周期指令。
方案二:STC89C52单片机,它的能耗比较低。指令码可以完全兼容8051,并且运行速度很快,STC单片机具有应
用编程,调试比较方便的特点,带有10位AD、内部EEPROM[7]。
通过比较可以发现,51单片机更值得选择,本设计将采用STC89C52RC芯片作为本设计的主控芯片。单片机实物
图如图 2-2 所示,引脚图如图 2-3 所示。
图 2-2 单片机实物图
图 2-3 单片机引脚图
2.1.2 测距模块方案选型
在众多的测距传感器中,本文选择了激光、红外、超声波进行了比对。
方案一:激光测距传感器
激光测距传感器的优点有:使用寿命长;结构简单,取材利便。但其输出阻抗高,输出信号弱,在对电路检测
前,传感器输出信号必须经由放大电路放大后才能送检。激光测距距离远、速度快,但存在安全隐患,而且成本
高、难度大[8]。
方案二:红外线测距传感器
。虽然它的成本相对来说较低, 红外测距是通过红外线反射回来的信号不同,来对障碍物的距离进行检测的[9]
但是其测量的精度也同比另外两种相对较低,而且它的测量的距离比较近,存在一定的风险。
方案三:超声波传感器
超声波测距传感器是将超声波信号转换成其他能量信号的传感器,它的振动频率已经超过了我们人类所能听到
的范围。上电后发射端将电信号转化成超声波信号发射出去,接收超声波时,传感器接收端将超声波转化为电信号
送到单片机芯片AT89S52中[10]。超声波不仅传播效率高,在成本、安全、能耗等方面也占有一定的优势。
综合各种因素来看,在激光、红外线、超声波这几种传感器中,本设计选择超声波传感器。并且超声波测距的
电路也比较简单,更容易实现,还有很强的抗干扰的能力。本文选用超声波HC-SR04的模块来进行距离的测量。HCSR04实物图如图 2-4 所示,引脚图如图 2-5 所示。
图 2-4 HC-SR04实物图
图 2-5 HC-SR04引脚图
2.1.3 温度补偿模块选型
本设计中所用测距传感器容易收到外界环境的影响,需要对其进行偏差补偿。
方案一:数字信号温度传感器,它的优点有:电路简单,端口少,抗干扰能力强,并且成本还低等优点。测温
范围为(-55℃~+125℃)[11]。它的特点为:(1)有着稳定的测量效果。(2)测量的精度较高。
方案二:另外还有一种选择是红外温度传感器,它是利用红外线来进行数据测量的一种传感器,但是反应速度
相对来说比较慢,没有办法进行连续的测量,虽然可以进行较远距离测量温度,但是极其容易受到外界环境的影
响。它的特点为:(1)可以远距离测量温度[12]。(2)容易受干扰。
综上所述,本设计选用数字信号温度传感器,考虑到系统测量准确性以及指标等问题,选用了综合方面更合适
的DS18B20传感器。该温度传感器实物图的如图 2-6 所示,引脚图如图 2-7 所示。
图 2-6 DS18B20温度传感器实物图
图 2-7 DS18B20温度传感器引脚图
2.1.4 显示模块选型
本设计的距离设置及检测距离显示需通过显示模块展示给用户,以便用户更直观的判断,做出及时解决动作。
以下为显示模块的选型。
方案一:液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄性等优点,近年来,它被广泛应用于由单片机控制的
各类智能仪表和低功耗电子产品中,使用方便。
方案二:LED,也被称为发光二极管。可以将电能转化为光能[13]。LED显示屏是通过数个发光二极管组合而成
的一种显示器。它具有很多优点,比如清楚显示,能耗低,成本也不高,但是它的耗电量大且价格较贵。
在本次的设计中,选用了1602型液晶显示器,LCD1602采用+5V电压驱动,可显示两行,有背光,屏幕每行可以
显示16个字符[14],显示容量为16×2个字符。
2.1.5 语音提示模块选型
语音提示芯片在生活中一大作用体现在报警功能上,常见的有烟雾报警和汽车防盗报警,语音报警功能的声音
大传播范围广泛,可以在短时间之内让在场的人员得知警告,尽快撤离现场或者尽快前往出事地点进行查看。本设
计也用到此功能,以下为语音模块选型介绍。
方案一:MP3-TF-16P语音提示,它有多种工作状态可以实现声音的报警,可以同时进行多个工作,具备多种性
能的特点。
方案二:OTP语音芯片播放语音提示。该芯片只能烧写一次语音数据[15]。它能将语音信号通过采样转化为数字
信号。可对较短语音进行播放,而且存储的数据量极小。
2.1.6 声光报警模块选型
声光报警是一种以声音、光、气压等方式来提示或警示人们应当采纳某种行动,能使人们及时提高警觉性。
方案一:压电蜂鸣器,其主要是陶瓷的声音形成电流,但慢慢的,声音的大小将变得更小,安装蜂鸣器时声音援助
是必要的改善响度。
方案二:电磁蜂鸣器,工作时,单片机I/O口输出高电平时,三极管截止,线圈内部无电流,蜂鸣器不发声
[16];当单片机I/O口为低电平时,晶体管导通,形成电路回流,蜂鸣器发出声音。
LED发光二极管能够把电能转换成光能,转换效率非常高,而且它的寿命较长,维护起来也比较的方便,应用领
域非常广泛。通过软件部分控制相关的闪亮、熄灭时间及闪烁的频率,来进行亮、灭、闪,进而表示不同的状态,
操作起来也比较简单,直观。
本设计选用通过蜂鸣器和LED配合来实现声光报警功能。蜂鸣器实物图如图 2-12 所示,
2.3 最终方案
本设计最终选定以AT89C52RC单片机为主控芯片,采用HC-SR04测距传感器检测障碍物的距离,同时通过DB18B20
温度传感器对HC-SR04进行温度补偿,提高测量精度。距离及温度显示选用LCD1602展现给用户,若达到报警值,通
过蜂鸣器及LED光进行声报警并且由MP3-TF-16P语音芯片提示报警距离。各模块硬件型号如图 2-14 所示。
图 2-14 系统的整体硬件结构框图
2.4 本章小结
本章主要是对系统的总体构成以及各项模块设计的方案选型进行设计,包括单片机中心控制模块方案选型、测
距模块方案选型、温度补偿模块选型、显示模块选型、语音提示模块选型、声光报警模块选型等几个方面进行详细
的介绍。下一章将对系统的硬件进行设计。
第3章 系统硬件设计
本章主要介绍对系统的硬件的进行设计,该系统由主控电路以及各模块电路组成。模块电路包括超声波测距电
路、声光报警提示电路和显示电路等。设计电路的过程不仅可以加深本设计的理解,同时也方便了本次设计顺利的
进行。
3.1 单片机中心控制模块电路设计
STC89C52RC单片机是由Macrocrystal Technology公司的一款单片机,它的运行速度很快,并且能耗很低,能完
全冗余8051的单片机,正常工作的电压范围为3.3V~5.5V。用户可以应用8K字节的程序空间,并且它有512K字节的数
据存储内存,同时具有32个通用I/O接口,3个16位定时器/计数器。其内部具有转换功能,编程转换便捷,使用非常
自由好用。除单片机主控芯片外,最小系统还包括晶振电路、复位电路及电源电路。以下展开介绍这3种电路。
(1)晶振电路
时钟电路就是晶振电路,一般选择11.0592Mhz的晶振,方便使用定时器、计数器的功能。 XTAL2和引脚XTAL1分
别是系统中反向放大器的输出端和输入端,电容Cl、C2外接石英晶体,构成了并联反馈振荡电路。电容容量的大小
会轻微影响振荡器频率的稳定性、振荡频率的幅值和温度稳定性等,通常电容选择30pF。晶振电路原理图如图 3-1
所示。
图 3-1 晶振电路原理图
(2)电源电路
电源电路持续为单片机的稳定电源,此设计采用是5V电压。稳定可靠的电源能够保持系统稳定运行,按下自锁
开关本系统的电路就会接通。系统的电源电路设计如图 3-2 所示。
图 3-2 电源电路原理图
(3)复位电路
复位电路在上电后,可以有效保障系统的数据稳定性,系统开机后若发生卡顿或初始化失败等,此时该电路可
以将单片机恢复初始状态,并从这个状态开始工作。若想使其工作必须给RST引脚高电平。
3.2 超声波测距模块电路设计
(1)超声波测距芯片HC-SR04
超声波测量距离,在我们的生活中已经无处不在了,应用非常的广泛。本文选用了HC-SR04测距传感器,它不仅
能够很好地满足人们的要求,而且它的精度相对较高。HC-SR04它的检测距离能从2cm高达600cm,精度在3mm范围之
内。它一共由四个引脚构成,分别为电源引脚,输入引脚、输出引脚以及接地引脚。
(2)超声波测距模块电路
HC-SR04的引脚连接端口如图 3-4 所示。在运时,通过给Trig引脚一个触发信号,,Echo引脚传出信号回响,
通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
3.3 温度补偿模块电路设计
(1)DS18B20温度传感器
DS18B20温度传感器是美国达拉斯公司生产的一种温度传感器。它运用单总线来进行连接。并且发送或接受信息
时只需用一个引脚,用一条数据线就能和单片机连接起来。DS18B20温度传感器的特点有:(1)电压范围为3V~5.5V,
并且可以用数据线供电。(2)它的连接方式比较特别,采用单总线,一根线,就能进行双向的通信,简单方便,效率
很高。(3)可通过并联的方式,对多种温度进行测量。(4)测温范围-55℃~+125℃[18]。
(2)温度补偿模块电路
DS18B20温度传感器动作时,需要先复位,然后建立通信,收到通信后,开始进行字节的写入,然后读取写入的
字节数据。以上操作完成后,就可以从DS18B20中读取温度[19]。
3.4 声光报警模块电路设计
本设计的声光报警模块,声功能选用蜂鸣器来实现,光部分选用LED灯。当检测到有可疑物体或者障碍时,就会
发出报警,来提醒人们注意安全。
声光报警电路的原理是利用三极管和变压器来实现声音信号的放大效果,蜂鸣器发出声音作为警告,随之LED灯
也会进行发光来进行警示。
3.5 语音提示模块电路设计
(1)MP3-TF语音模块管脚说明
MP3-TF语音模块管脚说明如下表3-1
表 3-1 MP3-TF语音模块管脚说明
引脚序号 引脚名称 功能描述 备注
1 VCC 模块电源输入3.3V-5V 建议用5V,不可超过5.2V
2 RX UART 串行数据输入
3 TX UART 串行数据输出
4 DAC_R 音频输出右声道 驱动耳机、功放
5 DAc_L 音频输出左声道 驱动耳机、功放
6 SPK2 接小喇叭+ 驱动小于3W 喇叭
7 GND 地 电源地
续表 3-1 MP3-TF语音模块管脚说明
引脚序号 引脚名称 功能描述 备注
8 SPK1 接小喇叭- 驱动小于3W 喇叭 驱动小于3W 喇叭
9 IO1 触发口 默认上一曲(长按音量-)
10 GND 地 电源地
11 IO2 触发口 默认下一曲(长按音量+)
12 DKEY1 AD口1 当触发时是第一段(长按循环第一段)
13 ADKEY2 AD口2 当触发时是第五段(长按循环第五段)
14 USB+ USB+DP 接U盘或插电脑USB口
15 USB- USB-DM 接U盘或插电脑USB口
16 Busy 播放指示 有音频输出低,无音频输出高
(2)MP3-TF语音模块电路
人们的生活在不断改善提升,生活中有很多情况下语音提示都带来了极大的便利,所以它的应用范围也越来越
更加的广泛。语音的功能有很多,它能够提示当下的状态、产生的结果,以及是否有错误等等。本设计选用MP3-TF-
16P来进行语音的录音。它能够分段进行录音,如果丢失了,也可以找回来播放。MP3-TF-16P是一个提供串口的语音
模块,完美的集成了MP3、WAV、WMA的硬解码[20]。
语音广播,它的程序是在单片机中的,通过中断等程序来实现。单片机进入串口中断子程序,并连接地址为P1单
片机的端口,然后单片机就可以广播记录在指定地址里的内容(目前的距离,温度和声速)。
3.6 显示模块电路设计
(1)1602型LCD简介
1602型液晶显示器运行电压为+5V,有背光的功能,并且能够显示两行字符,每行都能显示16个字符,只存在并
行接口[21]。
(2)显示器引脚接口如表 3-2 所示。
表 3-2 1602 型 LCD 各引脚功能
编号 符号 说明 编号 符号 说明
1 VSS 接地端 9 D2 数据端口
2 VDD 接电源正极 10 D3 数据端口
3 VO 液晶显示对比度调节端 11 D4 数据端口
4 RS 数据/命令选择端 12 D5 数据端口
5 R/W 读写选择端 13 D6 数据端口
6 E 使能信号端 14 D7 数据端口
7 D0 数据端口 15 BLA 背光电源正极
8 D1 数据端口 16 BLK 背光电源负极
(3)关于基本的操作时序说明
系统的硬件设计1602型LCD的操作时序说明如表 3-3所示。
表 3-3 1602型LCD操作时序
编号 操作时序 输入 输出
1 读状态 E=H RS=L R/W=H D0-D7=状态字
2 读数据 E=H RS=H R/W=H 无输出状态
3 写命令 E=H RS=L R/W=L
D0-D7=指令码 D0-D7=数据
续表 3-3 1602型LCD操作时序
编号 操作时序 输入 输出
4 写数据 E=H RS=L R/W=L
D0-D7=数据 无输出状态
(4)LCD显示电路
LCD的显示电路图如图 3-8 所示。该芯片有八个数据引脚,来进行指令和数据的传输。LCD的三个端口相连的功
能是使LCD进行读写。另外加了一个上拉电阻,用它来限制电流的大小。
图 3-8 LCD1602型显示电路原理图
3.7 本章小结
本章主要对系统电路设计进行了介绍,包括单片机最小系统电路、超声波测距电路、声光报警电路和显示电路
等,对各个模块电路动作时序及可以实现的功能等进行了详细的介绍。下一章将对系统的软件设计进行介绍。
第4章 系统软件设计
本章主要根据任务书的要求设计和编写各个模块的驱动,包括一个主程序以及五个子程序的模块。在主程序的
调用下,来完成不同的执行命令,从而进行下一步的动作,下面详细介绍一下系统的软件设计。系统软件框图设计
如图 4-1 所示。
图 4-1 系统软件框图
4.1 系统主程序设计
主程序是整个系统的逻辑核心,系统上电后,首先会进行初始化,然后调用超声波测距程序,实时获取车门与
障碍物之间的距离,用户可以实时对系统的距离阈值进行修改,然后系统会对实时采集的距离进行判断,当距离小
于设定的阈值时,系统会调用语音播报子程序,进行语音播报提示,为了保证用户可以接收到预警,同时系统也会
使蜂鸣器发出警报,双重保障,如果距离没有小于阈值,则系统会重复之前的进程,继续检测距离。系统主程序流
程图如图 4-2 所示。
图 4-2 系统主程序流程图
4.2 超声波测距子程序设计
单片机在使用HC-SR04传感器来测量距离的时候,必须要先初始化了定时器,再采用定时器来定时。随后发出高
电平证明可以开始动作,之后超声波模块会自动回检,发出来超声波,如果此时有了阻碍的物体,声波信号会被反
射回去,这时单片机需要打开定时器,开始计时,当接收到回波信号后,单片机关闭定时器,然后可以对定时器的
数据进行处理,转换成距离信息,已知声速是340m/s,所以距离等于定时器的时间乘声速然后除以2,这样就可以得
到距离信息。超声波测距子程序设计如图 4-3 所示。
图 4-3 超声波测距子程序流程图
4.3 温度采集子程序设计
温度传感器采用DS18B20,该传感器采用单总线通信,需要按照DS18B20的时序进行读取温度,初始化,通过总
线发出来脉冲,来进行复。DS18B20传感器等待时间大约15us和60us之间,使总线的时间拉低,之后将释放总线,这
时,代表初始化序列结束,之后就可以传输数据了。
在获取温度阶段DS18B20首先需要发送启动转换指令,进行复位,使总线时间下拉,之后就会进行响应。单片机
接收到信号后,会发出来读取温度的指令,当温度传感器接收到这个指令之后,对此数据进行处理,采集和转换
等,温度采集程序流程图如图 4-5 所示。
图 4-5 温度采集子程序流程图
4.4 液晶显示子程序设计
LCD1602采用HD44780芯片驱动,按照HD44780的通讯协议进行编程,LCD模块的显示比较慢,当模块处于不忙状
态时电平为低电平,就会正常运行,否则,就会出现错误。
按照LCD1602的时序图进行程序编写,首先对LCD1602初始化,然后读显示屏是否是忙状态。在空闲状态下将显
示地址输入,然后写入数据,就可以显示在液晶屏上。程序流程图如图 4-6 所示。
图 4-6 液晶屏显示子程序流程图
4.5 语音播报子程序设计
语音播报子程序设计需要按照MP3-TF模块的协议来编写底层驱动程序,MP3-TF模块跟单片机采用串口通信的方
式,首先需要了解MP3-TF模块的命令和传输的帧格式,查阅相关手册了解MP3-TF模块在交互时,帧格式包括起始
位、版本号、要传输的字节个数、命令字、命令字反馈、校验位和结束位。
了解MP3模块的传输帧格式后,就可以按照其帧格式编写底层程序,在编写程序时,需要了解MP3模块的通讯指
令,查阅手册,部分命令如表 4-1 所示。
表4-1 MP3模块通讯命令
指令码 功能 参数
0X01 下一曲 无
0X02 上一曲 无
0X03 指定曲目(num) 1-2999
0X04 音量+ 无
0X05 音量- 无
0X06 指定音量 0-30
0X0A 进入睡眠模式 无
0X0D 播放 无
0X0E 暂停 无
0X18 随机播放 无
0X19 循环播放 [1:循环播放][0:停止循环]
0X1A 开启和关闭DAC 无
0X3F 发送初始化参数 0-0x0F
22
0X43 查询当前状态 无
0X4C 查询TF卡当前曲目 无
0X4E 查询文件夹中文件数目 无
0X4F 查询总文件夹数 无
0X12 指定MP3文件夹曲目 0-9999
0X10 扩音设置 [DH=1:开扩音][DL:设置增益0-31]
了解指令码之后,单片机通过串口发送指令代码与MP3进行通信,并能控制MP3进行语音广播。当单片机控制MP3
进行语音广播时,首先需要查询MP3模块是否在忙,在空闲状态下,发送音量设置指令,由于本次设计是播放指定的
语音就行,提前存储在内存卡中,只需要发送播放第一条曲目的指令即可。语音播报子程序流程图如图 4-8 所示。
图 4-8 语音播报子程序流程图
4.6 按键检测子程序设计
本设计还需通过按键设置安全距离,设计了四个按键,分别是进入设置按键、加按键、减按键和确认按键。在
本次设计中,系统上电后就开始监视这四个按键的状态。按下进入设置按键后,会跳转到设置界面,然后可以通过
加按键和减按键对阈值进行设置,设置完成后,按下确认按键,屏幕会跳转到主界面,系统会持续检测距离并且实
时判断。按键检测子程序流程图如图 4-9 所示。
图 4-9 按键检测子程序流程图
4.7 本章小结
本章主要对系统的软件进行设计,采用模块化的编程方法,首先设计软件系统框图,然后设计各个子程序,将
子程序封装成函数的形式,方便在主程序中调用,主程序主要实现系统的主要逻辑,最终实现预想的功能,下一章
将对系统进行安装和调试。
第5章 系统安装与调试
本章主要介绍系统硬件及软件的安装和调试,之后需要根据电路原理图进行实物的焊接,再将程序烧录到单片
机中,通过实物调试完成系统的演示。
5.1 系统软件调试
(1)首先本设计在Keil中需要创建一个工程文件,选择AT89C52型号芯片。选用芯片图如图 5-1 所示。
图 5-1 创建工程时选择芯片图
(2)创建工程文件后,需要在工程文件的目录下创建需要的各个子文件和头文件。然后就可以进行编写程序,
点击编译按钮后,软件会将编写的程序翻译成机器码,自动生成Hex文件,当程序有语法错误时,系统会提示错误,
并且会指出是在那行出错,什么类型的错误都会提示,程序调试如图 5-2 所示。
图 5-2 程序调试图
(3)当程序调试无误后,系统会显示“0 error”字样并且提示成功生成Hex文件,这样表示程序没有语法错
误,可以将程序烧录到单片机中观察现象。如图 5-3 所示。
图 5-3 程序调试成功图
5.2 系统硬件调试
(1)经过上一小节的软件调试,程序编译没有任何问题,成功的生成了Hex文件,现在对硬件进行调试,首先
按照第三章设计的电路图进行实物焊接,在焊接时注意先测试单片机最小系统,将之前编译好的程序烧录到单片机
中,烧录成功则说明,单片机最小系统已经正常工作。在烧录程序时,需要用到STC-ISP软件,需要选择芯片的型
号,选择之前编译的Hex文件,点击烧录,如图 5-4 所示。
图 5-4 程序烧录图
(2)程序烧录成功后,说明单片机已经可以正常工作,接下来按照原理图将本次设计的外围电路焊接完成,焊
接时需要注意焊接顺序,先焊接小的器件,然后再焊接比较大的器件,还需要注意,器件需要焊接底座,方便调
试,本次设计焊接正面图如图 5-5 所示。
图 5-5 实物焊接正面图
5.3 测试结果演示
(1)系统上电后,首先显示屏幕的第一行会显示“Fang Zhuang”字样,第二行会显示实时检测距离和设置的
安全距离,最后会实时采集显示当前的环境温度。如图 5-6 所示。
图 5-6 实物演示结果图
(2)当点击设置按键后系统会跳转到设置界面,会在要设置的阈值下面显示光标,可以通过加按键和减按键对
阈值进行设置,如图 5-7 所示,当设置距离为22cm时,前方无障碍物或未达到安全距离时,系统不报警。
图 5-7 系统调试图
(3)当点击设置按键后系统会跳转到设置界面,会在要设置的阈值下面显示光标,可以通过加按键和减按键对
阈值进行设置,如图 5-8 所示。例如前方18cm处设有障碍物,此时距离小于阈值22cm,系统会自动进行语音提示,
同时会进行声光报警,双重提示以保障开门时的安全。
图 5-8 系统报警提示图
5.4 本章小结
本章主要是对系统的安装以及调试,首先对系统进行软件调试,包括如何建立工程,调试程序和编译文;然后
是焊接实物,焊接时首先焊接单片机最小系统,然后按照电路图焊接外围电路,将程序烧录到单片机中,最后对系
统是实现的功能进行了演示。
结论
本文设计了一个以单片机为主控芯片的车门开门防撞预警系统,使用超声波传感器在开门时实时监测车门与周
围的距离。当该距离小于阈值时,系统会语音提示,同时会进行声光报警,从而保障用户在开门时的安全。系统还
配备有显示屏,可以实时显示车门与周围的距离,同时配备温度传感器可以获取周围环境的温度,为超声波测距进
行温度补偿,使之更加精准。
本次设计的第一个工作是对车门开门防撞系统的市场进行调研,了解该系统的国内外发展现状。在这方面日本
和德国的公司做的比较好,主要还是在一些高端车上有这种预警系统。第二个工作是对本次课题进行总体方案设
计,包括系统的框图和需要的元器件的选型等等,确定本次设计的最终方案和需要使用的元器件。第三个工作是按
照之前预设的方案,在设计系统的硬件电路时,需要掌握本设计中所用元件的工作原理,然后设计各模块的电路,
并绘制电路图供以后检查。第四个工作是对系统的软件进行设计,首先需要了解本次设计的软件开发环境,然后再
编写程序,采用模块化的编程方式,设计各个模块的子程序。第五个工作是对系统进行调试,首先需要焊接实物,
然后将程序烧录到单片机中,调试实物以到达预期目标,经试验验证可以完成任务书中的要求。
由于时间的和个人能力的原因,本次设计还有许多不足,还需要以后深入了解,继续完善本次课题,争取将这
个课题做到完美。
附录
附录A 原理图
图 A-1 电路原理图
附录B 元器件清单
表 B-1 元器件清单
序号 名称 数量
1 STC89C52单片机 1
2 HC-SR04超声波 1
3 DS18B20温度传感器 1
4 LCD1602 1
5 MP3-TF-16P语音模块 1
6 蜂鸣器 1
7 LED 1
8 电源母头 1
9 电源开关 2
10 1K排阻 1
11 独立按键 5
12 U-T串口接口 1
13 晶振 1
30
14 扬声器 1
15 电阻 2
16 滑动变阻器 1
17 电容 2
附录C 核心程序
#include <reg52.h>
#include <intrins.h>
#include <ds18b20.h>
#include <lcd1602.h>
#include <uart.h>
/**********引脚定义***************/
sbit Echo = P2^4;
sbit Trig = P2^3; //超声波控制引脚
sbit k_1 = P1^0;
sbit k_2 = P1^1;
sbit k_3 = P1^2;
sbit k_4 = P1^3; //按键引脚
sbit buzzer = P2^0; //蜂鸣器引脚
/**********全局变量************/
unsigned long time = 0; //时间变量
unsigned long s = 0; //距离变量
bit flag = 0; //溢出变量
unsigned long juli_d = 20; //距离下限
char sec = 0; //计时变量
char temp = 0; //温度变量
int jishu = 0;
/**********延时函数*************/
void delay10ms(unsigned int c) //误差 -0.000000000002us
{
unsigned char a,b;
for(;c>0;c--)
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
///********蜂鸣报警************/
//void beep(void)
//{
// buzzer = 0;
// delay10ms(20);
// buzzer = 1;
// delay10ms(20);
//}
/*测距*/
//发射脉冲
void StartModule() //T1中断用来扫描数码管和计800MS启动模块
{
Trig = 1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig = 0;
}
//计算距离
void Conut_1(void)
{
float a;
time=TH1*256+TL1;
TH1=0;
TL1=0;
a = (331.5+0.607*temp);
s = (unsigned long)(float)((time*12/11.0592)*a/200)/100; //算出来是mM 11。0592M晶振
if(s>=500)
{
s = 500;
}
if(flag==1) //超出测量
{
flag=0;
s = 0;
}
}
void read_juli() //读取4路超声波距离
{
StartModule();
while(!Echo); //当接收引脚为零时等待
31
TR1=1; //开启计数
while(Echo); //当接收引脚为1计数并等待
TR1=0; //关闭计数
Conut_1();
delay10ms(5);
}
/***********设置距离限值**************/
void set_juli(void)
{
char h = 0;
int s = 0;
h = juli_d/100;
for(;;)
/*********按键判断函数*************/
void key_warn(void)
{
if(k_1==0)
{
buzzer = 1;
delay10ms(20);
while(k_1==0);
set_juli();
}
}
/**********定时器中断函数************/
void time_c() interrupt 3 //定时器溢出超出测量范围
{
flag = 1; //中断溢出
}
void Timer1Interrupt(void) interrupt 1
{
TH0 = 0x0DC;
TL0 = 0x00;
jishu++;
if(jishu==100)
{
temp = get_DS18B20()/100;
jishu = 0;
if(s<juli_d)
{
sec++;
}
}
}
/*********主函数***********/
void main(void)
{
InitUART();
Lcd1602_Init();
while(1)
{
key_warn();
read_juli();
display();
warn();
delay10ms(20);
}
}