超声波传感器实验
- 一、实验目的:
- 二、实验设备:
- 三、实验内容:
- 四、实验步骤及数据分析:
- 五、实验小结:
一、实验目的:
1.了解超声波测距传感器的特性及工作原理;
2.掌握超声波测距传感器采集数据的使用方法;
3.熟悉传感器的操作、响应方式。
二、实验设备:
1.Proteus仿真软件;
2.keil c++编译软件;
3.串口调试工具和虚拟串口创建工具。
三、实验内容:
采集超声波测距传感器信息向单片机报告采集到的值;
四、实验步骤及数据分析:
1.传感器选型
超声波传感器是利用超声波的特性研制而成的传感器。超声波是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生振动产生的,它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,它可穿透几十米的深度。超声波碰到杂质或分界面会产生显著反射形成回波,碰到活动物体能产生多普勒效应。因此超声波检测广泛应用在工业、国防、生物医学等方面以超声波作为检测手段,必须产生超声波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。
电路图说明如下:
2.打开proteus新建工程“csb”,首先点击右上角“file”中的“新建工程”,选择新建工程的目录,如下图所示,之后直接选择默认下一步即可,最后出现Finish成功创建项目。
4.启动Kiel软件生成实验所需的hex文件,启动虚拟串口软件创建一对虚拟串口,启动Proteus创建文件画实验对应的电路图,将hex文件拷入到Proteus画好的单片机中,启动程序。具体操作如下所示:
首先,点击工具栏“project”中的“New uVision Project”,选择要保存的路径,输入文件名,点击“保存”,在新出现的窗口中的“search”中输入AT89C51,选中之后点击“OK”,项目创建成功。
最后,点击keil工具栏中的 ,编译代码。
5.点击proteus电路图中的芯片,将Program File中的路径设置成之前创建的keil项目的.hex文件所在的目录,然后点击“确定”即可,最后点击proteus左下角的“运行”
按钮 。
6. 通过数码管观察超声波测距传感器数据(注:串口号需要根据实际情况进行选择)。
7. 关键代码分析
(需要新建一个c文件)
Main.c
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit Tr = P1 ^ 0; // 触发信号
sbit Ec = P1 ^ 1; // 回响信号
void Delay10us(void); // 10us延时函数
void Delayms(unsigned int z); // ms延时函数
uint Read_value(void); // 读值函数
void InitTimer0(void); // 定时器0初始化
void show(uint Out); // 显示函数
void main()
{
Tr = 0; // 出发引脚首先拉低
InitTimer0(); // 初始化定时器0
while (1)
{
show(Read_value()); // 显示距离
Delayms(5);
}
}
/********************读值函数***********************/
uint Read_value()
{
uint result;
Tr = 1; // 触发引脚发出11us的触发信号(至少10us)
Delay10us();
Tr = 0;
while (!Ec)
; // 度过回响信号的低电平
TR0 = 1; // 开启定时器0
while (Ec)
; // 度过回响信号高电平
TR0 = 0; // 关闭定时器0
result = ((TH0 * 256 + TL0) * 0.034) / 2; // 距离cm=(时间us * 速度cm/us)/2
return result + 1; //+1修正补偿
}
/***********************10us延时函数*****************************/
void Delay10us()
{
TL0 = 0xF6;
TH0 = 0xFF;
TR0 = 1;
while (TF0 == 0)
;
TR0 = 0;
TF0 = 0;
}
/***********************ms延时函数*****************************/
void Delayms(unsigned int z)
{
uint i, j;
for (i = 0; i < z; i++)
for (j = 0; j < 112; j++)
;
// 延时函数
}
/************************定时器0初始化*****************************/
void InitTimer0(void)
{ // 选择定时器0,并且确定是工作方式1(为了超声波模块测量距离计时用的)
TMOD = 0x01;
TH0 = 0x00;
TL0 = 0x00;
TR0 = 0; // 先关闭定时器0
}
/**********************显示函数*************************************/
void Show(uint Out)
{
char duan[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 段码
P2 = 0x01; // 第四位(个位)
Delay10us();
P0 = duan[Out % 1000 % 100 % 10];
Delayms(1);
P0 = 0xff;
P2 = 0x02; // 第三位(十位)
Delay10us();
P0 = duan[Out % 1000 % 100 / 10];
Delayms(1);
P0 = 0xff;
P2 = 0x04; // 第二位(百位)
Delay10us();
P0 = duan[Out % 1000 / 100];
Delayms(1);
P0 = 0xff;
P2 = 0x08; // 第一位(千位)
Delay10us();
P0 = duan[Out / 1000];
Delayms(1)
;
P0 = 0xff;
}
五、实验小结:
实验结果截图:
完成此次实验后我对超声波传感器的工作原理有了更深刻的理解:
超声波传感器是根据超声波的一些特性制造出来的,用于完成对超声波的发射和接收,内部的换能晶片受到电压的激励而发生振动产生超声波,超声波的频率高、波长短、方向性好、可以线性传播、对液体或者固体有不错的穿透效果,比如一些不透明的物体,超声波可以穿透几十米,而且它在遇到杂质等等物体时会发生反射现象,从而产生回波。想要用超声波完成检测工作,必须要有一个既可以发出超声波又可以接收超声波的装置,能实现这样功能的装置我们称为超声波传感器,也叫作超声波换能器或者超声探头。
超声波传感器内部的主要部件是压电晶片,它在受到电压的刺激时就可以发射超声波,然后由接收端进行接收。
超声波传感器主要由发送部分、接收部分、控制部分和电源部分构成。
其中,发送部分由发送器和换能器构成,换能器可以将压电晶片受到电压激励而进行振动时产生的能量转化为超声波,发送器将产生的超声波发射出去;
接收部分由换能器和放大电路组成,换能器接收到反射回来的超声波,由于接收超声波时会产生机械振动,换能器可以将机械能转换成电能,再由放大电路对产生的电信号进行放大;
控制部分就是对整个工作系统的控制,首先控制发送器部分发射超声波,然后对接收器部分进行控制,判断接收到的是否是由自己发射出去的超声波,最后识别出接收到的超声波的大小;
电源部分就是整个系统的供电装置。这样,在电源作用下、在控制部分控制下,发送器与接收器两者协同合作,就可以完成传感器所需的功能。
超声波测距原理:
超声波测距的原理十分简单,由超声波的发射端发射一束超声波,在发射的同时,计时开始,发射出去的超声波在介质中传播,声波具有反射特性,当遇到障碍物时就会反射回来,当超声波的接收端接收到反射回来的超声波时,计时停止。介质为空气时,声速为340m/s,根据记录的时间t,利用公式计算出发射位置与障碍物之间的距离。这就是所谓的时间差测距法。超声波测距的原理就是已知超声波在介质中的传播速度,测量出从发射到接收所需的时间,根据测量出的时间来计算出障碍物的距离。因此,超声波测距的原理与回声定位是一样的。
完整版实验文档doc下载链接