文档章节

基于arduino Nano的超声波测距

limit_tian
 limit_tian
发布于 2016/04/15 17:15
字数 814
阅读 181
收藏 0

原理:超声波(声音)在空气中传播的速度为已知340m/s(也会受温度影响轻微,在粗测中可忽略),超声波遇到障碍物时就会原路反射回来,根据L=V T1/2 可求得发出声波的位置到障碍物的距离(因为时间T是超声波来回两段路程的时间,所以要除以2)。

 

HC-SR04模块介绍:

VCC引脚:接+5V

GND引脚:接GND

Trig引脚:实际是trigger,有触发引发的意思,到时候只需要给这个引脚一个持续10us的高电平,HC-SR04就会自动地发射840KHz的方波(即为超声波)。

Echo引脚:echo实际是是回声回波的意思,当HC-SR04成功的向外发射超声波的时刻开始,这个引脚就会变成高电平,高电平会一直持续到HC-SR04接收到回波为止。

注意:由上面的各引脚的功能我们可知道TrigEcho必须接在arduinoD口(即数字端口)


程序示例:(trig引脚我是接在了arduinoD3口,echo就接在了D4口)

/*
日期:2016.04.06
编辑器:sublime text 3 (基于arduino-1.6.5)
功能:通过SR04超声波传感器进行测距,并通过串口监视器显示测出的距离
*/

const int Trig = 3;                                           // 设定SR04连接的Arduino引脚
const int Echo = 4; 
double distance,time ; 
void setup() 
{   
        Serial.begin(9600);                                    // 初始化串口通信及连接SR04的引脚
        pinMode(Trig, OUTPUT); 
  
        pinMode(Echo, INPUT);                                  //要检测引脚上输入的脉冲宽度,需要先设置为输入状态
    Serial.println("The distance is :");
} 
void loop() 
{ 
    
        digitalWrite(Trig, LOW);                                 
        delayMicroseconds(2);                                   
        digitalWrite(Trig, HIGH);                               
        delayMicroseconds(10);                                  //产生一个10us的高脉冲去触发SR04
        digitalWrite(Trig, LOW);                                
        
        time = pulseIn(Echo, HIGH);                              // 检测脉冲宽度,注意返回值是微秒us
        distance = time /58 ;                                  //计算出距离,输出的距离的单位是厘米cm

        Serial.print(distance);                                //把得到的距离值通过串口通信返回给电脑,通过串口监视器显示出来
        Serial.println("cm"); 
        delay(1000); 
}

把模块与arduino连接好,然后把程序写好后就下载到arduino里面运行,然后打开串口监视器,就可以看到有数据不断地在屏幕上输出。


pulseIn(Echo, HIGH)的作用是把Echo引脚高电平的持续时间测出,并返回,返回值的单位是微秒us


计算过程:L =  (1/2) * 340 *time /10^6) * 100 = time / 58

上面计算过程包括了把us变成s , 速度乘时间, m变成cm 三个部分。 


注意:在把超声波对着目标障碍物的时候,模块与目标障碍物之间的其他障碍物【有可能】会影响测距的准确性,因为声波的方向性并不强,并不是只朝着一个方向传播的,当沿某一个方向传播的超声波遇到的障碍物比目标障碍物的距离要近并且回波成功的被超声波模块接收到的时候测出的距离值就是不准的了。下面是一个示意图,可能有点夸张了,但 想要表达的意思是在的。

















































© 著作权归作者所有

limit_tian
粉丝 0
博文 1
码字总数 814
作品 0
深圳
程序员
私信 提问
51单片机课程设计:基于51单片机的超声波测距

51单片机课程设计:基于51单片机的超声波测距(测距原理介绍) 本程序利用超声波模块来进行距离的测量,并显示在数码管上,其他朋友可以在本程序的基础上,修改部分代码,应用到智能小车上或...

世界都一样
2016/12/30
0
0
超声波传感器测距原理与模块使用

超声波 ultrasonic (waves): 人类耳朵能听到的声波频率为20HZ~20KHz。当声波的振动频率大于20KHz或小于20Hz时,我们便听不见了。因此,我们把频率高于20KHz赫兹的声波称为“超声波”。因其...

u014224380
2018/03/28
0
0
[自娱自乐] 3、超声波测距模块DIY笔记(三)

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

史迪奇2号
2017/08/09
0
0
pcDuino在使用GPIO控制舵机时能够用多线程吗?

曾经在arduino制作超声波避障小车,在控制动力电机、摇头舵机的同时还要读取超声波测距,最后效果不是特别理想。 pcDuino既然是32位linux系统,不知道能不能在控制GPIO输入输出的时候使用多线...

e休
2014/04/06
399
1
钛极OS(TiJOS)物联网操作系统之小试牛刀(2)——超声波测距

钛极OS(TiJOS)物联网操作系统之小试牛刀(2)——超声波测距 作者:crashMaker 说明 开发环境的搭建以及应用工程的创建方法在这里不再赘述,可参考笔者文章《钛极OS(TiJOS)物联网操作系统之初体...

crashMaker
2017/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
36分钟前
3
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
47分钟前
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
56分钟前
6
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部