基于超声波测距的导盲仪设计研究

2018-08-20 19:01张孟阳翟士余
科学与财富 2018年19期
关键词:导盲数码管蜂鸣器

张孟阳 翟士余

摘 要:为了让盲人对障碍物进行安全避让,导盲仪的应用与设计十分重要。导盲仪具备多样性,并且其工作原理也各不相同。本文对基于STC89C52单片机的超声波测距导盲系统进行设计,并对其工作原理、机构设计进行阐述。

关键词:超声波测距;导盲仪;STC89C52单片机;US-100模块

超声波具备良好的传播特性,在社会的多个领域得到了广泛应用。应用超声波进行测距,不论是在硬件设计方面,还是在软件编程方面都具备较强的便利性。同时基于超声波测距的导盲系统较为轻便、快捷、携带方便,并且测量更加精准。

1超声波测距原理

超声波测距的方法主要由声波幅值检测法、渡越时间法等,本文利用渡越时间法实现测距。首先由超声波发射器发出声波,并由单片机对计时器进行控制开始计时。超声波在碰到障碍物会产生回波,并立即返回,当接收器接收到回波时,计时器会停止计时。超声波的空气传播速度v,计时器所记录时间Δt,对传播距离s进行计算:

s=v×Δt/2 (1)

超声波在空气中的传播不仅与温度有关,还与湿度有关。在干燥空气中超声波速度v0=331.5m/s。在室温为t℃时,空气中的声速:

v=v01+tT0 (2)

因为空气具备相应湿度,所以在温度为t℃,相对湿度为r时,声速:

v=331.51+tT0(1+0.31rPsP) (3)

2硬件及电路设计

测距系统包括单片机、检测温度、发射、接受处理、报警、数码显示模块。以单片机STC89C52为主控单元,应用自带温度补偿功能的US-100为超声波传感器。对系统电路进行设计:时钟电路。单片机STC89C52中包含具备高增益的一个反相放大器,以组建振荡器,并产生时钟信号;数码管显示电路。应用单片机STC89C52通过P0口利用锁存器SN74HC573DW对两个共阴的4为一体8位数码管进行驱动;蜂鸣报警电路。通过单片机STC89C52的P2.3管脚对蜂鸣器进行控制,当所测距离小于0.5米,蜂鸣器就会出现报警;US-100模块。在非接触情况下的测量距离为2-4.5米,带有温度补偿功能,可以对测量结果进行有效校正。

3软件设计

3.1整体设计与程序

利用US-100串口测距原理对程序进行编写,先要对串口实施初始化,然后对超声波脉冲进行有效发射,并对检测状态进行等待,在对回波进行接收后,对距离进行有效计算,再由单片机进行处理,并在数码管上进行显示。在距离低于0.5米时,蜂鸣器就会发出报警。所以主程序为:

void main(void)

{

unsigned long distance=0;

UART_init(); //串口和波特率初始化

while(1)

{

distance=rebuf[0]*256+rebuf[1]; //计算距离

DisplayLED(distance); //数码管显示距离

if(distance<500) //距离<0.5米时报警

{

int a;

for(a=0;a<500;a++)

{

buzzer=~buzzer;

}

}

}

}

程序中rebuf[0]、rebuf[1]為接收缓冲区,定义于idata区。rebuf[0]对距离值的高8位进行接收,rebuf[1]对距离值的低8位进行接收。主程序中包括蜂鸣器报警程序。

3.2初始化程序

初始化程序主要是对定时器工作以及串口通信的相应模式进行设置。初始化程序:

void UART_init()

{

…………….

TMOD=0x21; //设计定时器工作方式

…………….

SM0=0; //设置串口通信模式

SM1=1;

……………

}

3.3超声波发送程序

void MeterTempByUART() //发送超声波脉冲

{

UASTSnd(0X55);

}

3.4写字符程序

void UARTSnd(unsigned char dat)

{

TI=0; //清零发送标志,如果TI为0等待

SBUF=dat; //写字节带特殊控制寄存器SBUF

while(!TI);

TX=~TX; //启动超声波发射器

}

3.5数码管扫描程序

void UART_ISR(void)interrupt4

{

uchar temp,K;

ES=0; //关中断

if(RI)

{

RI=0; //清接收标志

temp=SBUF;

rebuf[k]=temp;

k++;

if(k==2) //k=数据长度

k=0;

RX=~RX;

}

ES=1; //开中

}

3.6数码管显示程序

void DisplayLED(unsigned long number)

{

if(number>4500)

{

dispbuf[0]=10;

dispbuf[1]=10;

dispbuf[2]=10;

dispbuf[3]=10;

}

else if(number<4500)

{

dispbuf[0]=number/1000;

dispbuf[1]=number%1000/100;

dispbuf[2]=number%100/10;

dispbuf[3]=number%10;

}

P0=Tab[dispbuf[dispcount]];

…………………………………

dispcount++;

if(dispcount==4) //4位数码管显示位

{

dispcount=0;

}

count++;

if(count==100)

{

count=0;

MeterTempByUART();

}

4结束语

通过仿真实验显示,实际值和测量值之间有着0-10mm的误差,并且具备良好的稳定性以及重复性,满足实际的使用需求。同时超声波测距导盲仪的应用更加便捷、精准,便于盲人进行携带。

参考文献:

[1]基于单片机的超声波导盲杖设计研究[J].张超.科技信息.2014(04).

猜你喜欢
导盲数码管蜂鸣器
基于云端技术的多功能导盲手杖的设计与实现
电动自行车产品车速提示音检测现状和整改技术研究(2)
基于物联网的导盲机器犬的研究与设计
掌控板制作简易钢琴
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
单片机驱动蜂鸣器的程序设计
基于Qt的数码管数字编码系统的设计与实现
路口导盲及马路障碍物检测提醒系统的设计