(天津财经大学 天津 300202)
在21世纪发展的今天,由于压力以及各种原因所造成的视觉障碍者以及盲人众多,而我国又是世界上盲人数量最多的国家[1],对于导盲产品的需求日趋加大,传统的导盲手杖明显不能够适应现代的快节奏生活,所以新型导盲产品的出现是一种必然趋势。本文所研究并设计的基于单片机实现的超声波导盲杖可以利用超声波测距以及蜂鸣器报警的形式帮助这些人更好地避让障碍,具体实现的功能是当使用者距离障碍物的距离不同时,通过延时程序,定时器以及计数器还有中断原理来控制蜂鸣器发出不同的声音,从而提醒人们障碍物的方位以及自己距离该障碍物的长度。与此同时,距离障碍物的长度会通过1602液晶屏来进行显示,可以方便别人帮助使用者来校准精确度,还可以起到警示别人的作用,具有价格低廉,使用方便等优势,不必依赖于传统的精度不高的盲杖或者训练起来颇为麻烦的导盲犬,从而使这些人的生活更加便捷舒适。
当今世界上盲人众多,并且根据调查显示,我国是世界上目前拥有盲人数量最多的国家[1],为了提高这些人行走的能力,从而改善他们的生活质量以及品质,各个国家一直在致力于有关导盲产品的研究,以前大多使用的是传统的盲杖,这种盲杖不仅测量障碍的精度极低,而且使用起来十分不方便,还有一种方式是训练导盲犬,但这种方法不仅花费高昂,适应时间长,还有很大的不确定因素。因此在21世纪的今天,随着科技的进步,这种基于单片机控制的超声波导盲杖由于具有测量精度高,功能齐全,价格低廉等优点,将会占据导盲产品的主要市场,成为导盲产品的必然趋势。
根据研究的目的和意义,结合现有条件和能力,本文对整个设计的构想是将整个设计分为三个模块,首先是超声波测距模块,第二个模块为液晶屏显示模块,最后为蜂鸣器报警模块,使用STC89C52单片机来进行控制,主要原因是STC89C52单片机完全不需要使用专门的仿真器和编程器,而是利用p3.0或p3.1串行口直接下载编辑好的程序来进行系统编程,因此省去了每次编程和仿真时都要将单片机连接到编程器和仿真器上的麻烦,我们可以将单片机固定在开发板上,然后直接下载用户程序并进行调试。超声波模块我们使用的是HC-SR04,液晶屏使用的是SCM1602A液晶显示屏,蜂鸣器报警模块使用单片机开发板上自带的蜂鸣器,使用keil软件进行编译,并输出可以在单片机上运行的hex文件,最后用ISP软件将该hex文件烧录进单片机,使其运行。该导盲杖应该可以测量一定范围内距离障碍物的距离,并实时显示在液晶屏上可供他人确认以及校准,当距离障碍物的距离不同时,蜂鸣器会据此发出不同的声音提示使用者,这一功能需要应用定时器,计数器以及中断的原理来进行实现。借助各种元器件转换单片机的电平为电脑可以识别的电平。
超声波技术经常被用于测量距离,主要是由于超声波的几个优点。首先超声波的指向性强,其次超声波在介质中的传播距离相对较远,最后超声波检测的测量精度高,足够满足工业或者实用的要求,方便控制。日常生活中常见的物位测量仪以及测距仪等都用到了超声波技术。其测距原理是:首先由超声波发射器发出超声波,然后由超声波接收器进行接收,计算出接收与发射的时间差,再根据超声波在空气中的传播速度为340m/s就可以计算出使用者与障碍物的距离(即:s=340t/2)。这与雷达测距原理较为相似。需要注意的是超声波也属于声波,其声速v与温度变化有关,在使用时,若温度变化不大,则可以认为声速是不变的。如果对于精度的要求较高,则应该采用温度补偿的方法加以校准。在这里,由于我们对于精度的要求不是特别高,故认为声速不变,即340m/s。HC-SR04超声波测距模块共包括三个部分,分别为超声波发射器,超声波接收器还有控制电路。该模块的测距精度最高可达3mm,还可以提供非接触式测距功能,测量范围是2cm-400cm[2]。其工作原理是TRIG为触发口,高电平有效,持续时间不少于10US;超声波模块采用自动发送方波的方法,方波频率为40khz ,数量为8个,随后自动检测是否接收到返回信号;若接收到返回信号,则通过ECHO引脚输出一个高电平,超声波接收器接收信号与发射器发射信号之间的时间差就是高电平应持续的时间。从而计算出测试距离=(高电平的持续时间*声速(340m/s))/2。测距原理如下图:
在电路中字母“H”或“HA”就表示蜂鸣器,它是一种结构一体化的电子讯响器[3]。蜂鸣器的供电方式是直流电压供电,它能够发出某个固定频率或者某一单调的声音,比如如嘟嘟嘟,嘀嘀嘀等。蜂鸣器的类型主要有两种,分别为电磁式蜂鸣器和压电式蜂鸣器。每种蜂鸣器又分为有源和无源两种,我们本次设计所使用的HC6800-MS单片机开发板的蜂鸣器是无源蜂鸣器。有源蜂鸣器和无源蜂鸣器的区别在于内部是否带有震荡源,内部带有震荡源的就是有源蜂鸣器,内部没有震荡源的就是无源蜂鸣器,给有源蜂鸣器接通电源后它就会发声,但如果给无源蜂鸣器接通直流电源,它不会鸣叫,要想令其发出响声,就必须用范围2K-5K的方波来进行驱动。正是由于有源蜂鸣器内部含有振荡电路的这种特性,所以一般情况下有源蜂鸣器比无源蜂鸣器要昂贵。本设计中蜂鸣器报警模块的设计思路是根据蜂鸣器的原理图,将Beep设置为单片机的p21口,利用定时器,计数器以及中断原理,将蜂鸣器发声的频率加以改变,当距离障碍物不同距离时,蜂鸣器会发出不同的声音来进行警示。具体为当距离障碍物的长度在100cm到150cm之间时,延时函数运行一次,当距离障碍物的距离在50cm到100cm之间时,延时函数运行两次,当距离障碍物的距离小于50cm时,延时函数运行三次,与此对应的蜂鸣器发出的声音也会不同,从而使用者就可以根据蜂鸣器所发出的不同的警示音来辨别障碍物的方位以及障碍物与自己相隔的距离。在具体程序的设计中设计了一个名为bee()的子函数,在这个函数中利用if语句来实现距离不同,延时函数运行的次数不同这一功能。蜂鸣器原理图如下:
1、1602液晶能够很好地显示符号、字母和数字等,但不能够很好地显示图片。原因如下:1602字符型液晶是一种点阵型液晶模块,由无数个点阵字符位(5x7或者5x11)构成,每个字符位都能够显示字符,1602液晶显示模块可以同时显示2行16列(即共计32)个字符,各行与各行之间以及两两字符位之间都有间隔,所以字符之间和每行之间都存在间距[4],因此,该模块不能很好地显示图片。
2、每次我们在读写控制器内的状态字之前,都要先进行一次读写检测(即读忙)。是否进行读写操作取决于D7的值,当D7的值为1时,禁止读写操作;当D7的值为0时,允许读写操作。所以为了使LCD液晶显示模块能够正常工作,我们就要依据上述原理以及LCD1602的操作时序表来正确设置寄存器。在LCD1602的16个引脚中,我们最常用到引脚6(E:使能信号端)、引脚4(RS:寄存器选择端)和引脚5(RW:读写信号端)这三个引脚。其中使能信号端用来进行系统初始化,寄存器选择端用来进行写命令,读写信号端用来进行写数据[5]。其基本操作时序如下图:
LCD1602液晶显示模块程序的编写思路为:首先要表明LCD1602的引脚(包括寄存器选择端RS、读写信号端RW、使能端E等)分别与单片机的哪些I/O口相接,即对这些引脚分别进行定义。接下来要实现的是显示的初始化(延时和写入指令),具体包括设置显示方式,延时子程序,设置显示模式以及清理显示缓存等。最后要实现设置显示字符的具体位置以及显示字符的具体数值。编写代码时分为了读LCD状态、忙等待、LCD写指令、LCD写数据、LCD初始化、设置液晶显示位置、液晶显示程序、以及延时子程序几个部分。设计最后呈现出来的效果是LCD液晶屏会清晰地显示出使用者距离障碍物的长度,同时蜂鸣器会根据不同的距离从而发出不同的声音来提醒使用者。