一.前言

HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物,所以,我们今天就来学习一下这个传感器。

二.工作原理

1.给超声波模块接入电源和地。
      2.给脉冲触发引脚(trig)输入一个长为20us的高电平方波

3.输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动定时器计时)
      4.当超声波返回被模块接收到时,回波引 脚端的电平会由1变为0;(此时应该停止定时器计数),定时器记下的这个时间即为超声波由发射到返回的总时长。
      5.根据声音在空气中的速度为344米/秒,即可计算出所测的距离。

要学习和应用传感器,学会看懂传感器的时序图是很关键的,所以我们来看一下HC-SR04的时序触发图。

我们来分析一下这个时序图,先由触发信号启动HC-RS04测距模块,也就是说,主机要先发送至少10us的高电平,触发HC-RS04,模块内部发出信号是传感器自动回应的,我们不用去管它。输出回响信号是我们需要关注的。信号输出的高电平就是超声波发出到重新返回接收所用的时间。用定时器,可以把这段时间记录下来,算出距离,别忘了结果要除于2,因为总时间是发送和接收的时间总和。

三.程序

#include<reg52.h>

#define uchar unsigned char

#define uint  unsigned int

sbit Echo=P3^2;

sbit Trig=P1^5;

bit flag=0;

/***********************************    函数:void Delay5us()  ----------------------    说明:5微秒延时函数    参数:无  返回值:无 ***********************************/

void Delay5us()

{  uchar i;  i--;  i--;  i--;  i--;  i--;  i--; }

void DelayMs(uint ms)

{  uint x,y;  for(x=ms;x>0;x--)

for(y=110;y>0;y--); }

void  Init()

{

TMOD=0x21;

SCON = 0x50;

EA=1;

ES=1;

ET0=1;

ET1=1;

TH1=0Xfd;

TL1=0xfd;

TR1=1;

}

void Send(uint dat)

{

SBUF=(dat/100)+ 48;   // 发送 百 位

while(!TI);

TI=0;

SBUF=(dat%100/10)+48;  // 发送 十 位

while(!TI);  TI=0;

SBUF=(dat%10)+48;   // 发送 个 位

while(!TI);  TI=0;

}

uint Conut(void)

{

uint time;            // 用于记录测得的时间

uint ss;      // 用于记录测得的距离

time = (TH0*256+TL0)*1.09;  // 总时间

TH0=0;  TL0=0;

if(flag==1)         // 如果超出测量距离,则不传输数据

{   flag=0;   ss=0;  }

else

{

ss=time*1.7/100;      // 空气中声音的速度是340m/s

}

return ss; }

void main(void)     {

uint ss;     Init();

while(1)

{

Trig=1;

Delay5us();

Delay5us();

Trig=0;

while(!Echo);

TR0=1;

while(Echo);

TR0=0;

ss=Conut();   // 计算

Send(ss);   // 将计算的值通过串口发送出去

DelayMs(800);

}

四.总结

上面这个程序的功能就是从测距传感器获得距离的数值,进行单位的转化后用串口进行输出,显示在串口助手中,转化后的单位为厘米,还有一点需要注意的是,触发输入和回响输出端在不同的板子上是不一样的,大家要根据自己的原理图及单片机自己修改,有什么问题可以互相交流0.0

}

void zd0() interrupt 1 {  flag=1;     }

传感器之超声波测距HC-SR04的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l HC-SR04超声波测距

    我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 超声波测距模块HC-SR04可以测量2cm~40 ...

  2. [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发

    前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分 ...

  3. [自娱自乐] 3、超声波测距模块DIY笔记(三)

    前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...

  4. [自娱自乐] 2、超声波测距模块DIY笔记(二)

    前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发 ...

  5. 树莓派超声波测距+蜂鸣器(c语言)

    前边我们已经详细的讲解了树莓派控制超声波模块测距(http://www.cnblogs.com/yuemo/p/8888342.html)和超声波控制蜂鸣器模块发声(http://www.cnblog ...

  6. 如何编写51单片机超声波测距SR04_lcd1602显示程序

    超声波测距在我们日常生活中很常见,比如说车在倒退的时候,为了防止车撞到障碍物,会在车尾加上一个超声波测距模块.在智能车比赛中,也有超声波测距模块等等.可见超声波非常的重要,接下来,我们上代码研究一下如 ...

  7. STM32(HY-SRF05)超声波测距项目

    参考资料: https://www.cnblogs.com/qsyll0916/p/6964638.html http://blog.csdn.net/zhangdaxia2/article/deta ...

  8. 基于FPGA的超声波测距(一)

    硬件平台:CycloneII EP2C5Q208C8+DYP-ME007 1:超声波原理 DYP-ME007超声波测距模块可提供3cm--3.5m的非接触式距离感测功能,图1为DYP-ME007外观, ...

  9. Arduino的光敏传感器和超声波测距传感器测试代码

    光敏传感器测试代码 使用的是一个未知名4pin模块, 4pin依次为Vcc, Gnd, DO, AO, 板载一个可调电阻以及一个LED, 调节电阻大小, 可以控制LED亮灭和DO输出变化对光亮的灵敏度 ...

随机推荐

  1. 带你玩转JavaWeb开发之五-如何完成响应式开发页面

    响应式页面开发 使用BootStrap开发一个响应式的页面出来 响应式开发就是同一个页面在PC端与手机端Pad端显示不同的效果,以给用户更好的体验 需求分析 开发一套页面,让用户能够在PC端, Pad ...

  2. Qt之创建桌面和开始菜单快捷方式

    将安装好的酷狗拷贝到C:\data目录中 1.创建桌面快捷方式 QFile::link("C:/data/KuGou.exe", QStandardPaths::writableL ...

  3. JS笔记一

    最近有时间,觉得应该整理一下,额,就从很久之前的基础开始吧,正好也巩固下,菜鸟需要扎实基础. 下面是一个简单的调查表,因为没有写任何样式,所以就是简单的表单输入框之类的.选择“男”或者“女”时,会出现 ...

  4. ndt histogram_direction

    histogram_direction N_FLAT_BINS=40; dlong = pi*(3-sqrt(5.0)); % ~2.39996323 dz = 2.0/N_FLAT_BINS; lo ...

  5. PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

    -自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...

  6. doPost()和doGet()

    GET 请求的一些特点: GET 请求会有 cache GET 请求会保留在浏览历史中 GET 请求可以保存到书签 GET 请求不应用于处理敏感数据 GET 请求有长度限制 GET 请求应该只用于获取 ...

  7. Leetcode: Bomb Enemy

    Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...

  8. HDU 5047 Sawtooth(大数优化+递推公式)

    http://acm.hdu.edu.cn/showproblem.php?pid=5047 题目大意: 给n条样子像“m”的折线,求它们能把二维平面分成的面最多是多少. 解题思路: 我们发现直线1条 ...

  9. html radio check

    {% if classes|count > 1 %} <div class="class_checkbox" id="class_checkbox" ...

  10. Android Activity 管理 (AppManager)(非原创)

    AppManager 类: /** * 应用程序Activity管理类:用于Activity管理和应用程序退出 *  */ public class AppManager {     private ...