我是潘,曾经是个工程师。这是为 http://Ardui.Co 制作的 “Arduino 公开课” 系列的

超声波测距的原理是发射声波,声波遇到物体反射,模块接收,得出时间差,然后根据声速计算出物体距离。其应用非常之广,如现场测距,无人机避障、汽车雷达等,而且价格极为低廉,库成熟,是最常用的模块。这次我们介绍的是 HC-SR04、HC-SR05:

该模块一共有Vcc、GND、Trig 和 Echo,4个引脚。Arduino 通过 Trig 引脚给模块,不少于10us 数字信号(高电平),触发模块发射出 40KHz 的超声波,接收到返回声波后,Echo 输出高电平,根据触发和输出的时间差,就可以换算出距离。但我们不需要设计换算程序,因为这个模块有现成的库可以用,调用库里的方法即可。模块参数如下:

测量距离:2 ~ 450cm

分辨率:0.3cm

测量频率:40Hz(最快每25ms测量一次)

测量角度:15deg

工作电压:4.5 ~ 5.5V

工作电流:10 ~ 40mA

该模块实际测量距离约为 200cm,而且经常会有严重的漂移现象,因此建议多次采样,使用中位数,可以保证测量正确。

接线方式很简单:

开发程序之前,我们需要先下载 NewPing.h 库,这个库不在官方的索引里面,因此需要先下载:

下载后不要急着解压,在 IDE 界面顶部菜单,选择“项目”中的“加载库”,然后点击 “添加一个.zip库” 即可加载。我们在编写程序前,同样“加载库”中,选择插入需要的库函数,IDE就会自动插入:

/*

作者:Ardui.Co

效果:超声波测距

版本:1.0

更新时间:2017年2月14日

*/

#include

#define TRIGGER_PIN 12 // 宏定义12号数字端口为触发

#define ECHO_PIN 11 // 宏定义11号数字端口为接收模块反馈信号

#define MAX_DISTANCE 200 //宏定义模块的最大测量距离,规格标450cm,但实测一般为200cm

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); //声明模块的参数

void setup() {

Serial.begin(115200); // 设置串口的波特率,可以改为9600

}

void loop() {

delay(500); // 每次测量的时间间隔,模块规格为40Hz,因此最小为25ms,但一般不少于30ms

Serial.print("Ping: ");

Serial.print(sonar.ping_cm()); // 调用库里面的 ping_cm() 方法,直接输出距离

Serial.println("cm");

}

上面是常规的接线方式,但 NewPing.h 是个非常强大的库,为节省 Arduino 端口,我们还可以将 Trig 和 Echo 接在一起,只用一条数据引线传输两种信号,只要简单修改下程序:

/*

作者:Ardui.Co

效果:超声波测距模块,使用单线连接

版本:1.0

更新时间:2017年1月13日

*/

#include

#define PING_PIN 12 // 宏定义12号数字端口为触发和接收端口

#define MAX_DISTANCE 200 //宏定义模块的最大测量距离,规格标450cm,但实测一般为200cm

NewPing sonar(PING_PIN, PING_PIN, MAX_DISTANCE); //声明模块的参数,注意Trig和Echo都是同一个端口

void setup() {

Serial.begin(115200); // 设置串口的波特率

}

void loop() {

delay(500); // 每次测量的时间间隔,模块规格为40Hz,因此最小为25ms,但一般不少于30ms

Serial.print("Ping: ");

Serial.print(sonar.ping_cm()); // 调用库里面的 ping_cm() 方法,直接输出距离

Serial.println("cm");

}

如果测量距离超出了限定范围200cm,程序会怎么处理?答案是输出 0。

由于超声波测量容易受到环境因素影响,模块漂移几率较大,我们可以多次采样,然后取中位数(思考一下:为什么不是平均值?)避免忽大忽小的问题,NewPing.h 已经提供了 ping_median() 方法,但输出的是时间(毫秒),所以我们还要用到一个转换方法:

/*

作者:Ardui.Co

效果:超声波测距模块,使用单线连接

版本:1.0

更新时间:2017年1月13日

*/

#include

#define PING_PIN 12 // 宏定义12号数字端口为触发和接收端口

#define MAX_DISTANCE 200 //宏定义模块的最大测量距离,规格标450cm,但实测一般为200cm

NewPing sonar(PING_PIN, PING_PIN, MAX_DISTANCE); //声明模块的参数,注意Trig和Echo都是同一个端口

void setup() {

Serial.begin(115200); // 设置串口的波特率

}

void loop() {

delay(500); // 每次测量的时间间隔,模块规格为40Hz,因此最小为25ms,但一般不少于30ms

Serial.print("Ping: ");

int t = sonar.ping_median(5, 200);//测量5次并设定最大距离为200cm,然后取中位数输出

Serial.print(sonar.convert_cm(t)); // 使用convert_cm()方法,将时间转换为距离

Serial.println("cm");

}

NewPing.h 还提供了程序中断、积累计时等方法,在挑战篇中我们会用到。另外,阅读官方文档也是一个重要的学习途径:https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home

arduino 超声波测距原理_基础教程10 Arduino 超声波测距相关推荐

  1. 确定sw1开关信号输入端口_基础教程15 Arduino端口内部的上拉功能

    本专栏内容经修订后,已在豆瓣阅读集结成书出版: https://read.douban.com/ebook/106875966/​read.douban.com 我是潘,曾经是个工程师.这是为 htt ...

  2. ArcGIS二次开发基础教程(10):三维分析

    ArcGIS二次开发基础教程(10):三维分析 坡度分析 请务必学会使用帮助文档!!! //DEM数据的坡度分析 将分析结果添加到地图上 //首先获取DEM数据,方法有很多例如从个人地理数据库获取,也 ...

  3. GStreamer基础教程10——GStreamer工具

    目标 GStreamer提供了一系列方便使用的工具.这篇教程里不牵涉任何代码,但还是会讲一些有用的内容: 如何在命令行下建立一个pipeline--完全不使用C 如何找出一个element的Capab ...

  4. java 图片插件_[Java教程]10款功能强大的jQuery/CSS3图片特效插件

    [Java教程]10款功能强大的jQuery/CSS3图片特效插件 0 2014-11-26 03:01:04 1.CSS3实现的底部带滚动云彩效果的网站登录页面 CSS3实现的底部带滚动云彩效果的网 ...

  5. Gstreamer基础教程10: Gstreamer 工具

    文章目录 1. Goal 2. 介绍 3. gst-lanuch-1.0 3.1 Elements 3.2 Properties 3.3 Named elements 3.4 Pads 3.5 Cap ...

  6. Gstreamer基础教程10:GStreamer tools

    文章目录 目标 一.Introduction(简介) 二.gst-launch-1.0 1.Elements 2.Properties(属性) 3.Named elements(元素重命名) 4.Pa ...

  7. mbot机器人自动超声波模式程序_利用mBot智能机器人使用超声波传感器解决问题...

    一.观察图片,分析原理 教师引导学生分析(如图1):汽车在倒车过程中是如何判断出后方有障碍物的?这是根据什么原理实现的? 师生分析得出结论:汽车的尾部安装了倒车雷达,可以判断汽车与障碍物的距离,而倒车 ...

  8. arduino使用oled代码_如何做一个Arduino无线气象站

    今天我们来介绍如何利用DHT22传感器测量室外温度和湿度,并使用NRF24L01收发器模块将该数据无线发送到室内单元.在室内单元中,还有一个用于测量室内温度和湿度的DHT22传感器,以及一个DS323 ...

  9. arduino 超声波测距原理_超声波测距灯

    介绍硬件准备 本篇文章专门介绍用Arduino制作超声波测距灯,需要的材料是: 1. Arduino开发板 2. HC-SR04超声波模块 3. LED灯 4. 杜邦线若干 注意事项   之所以要写这 ...

  10. 【飞控开发基础教程10】疯壳·开源编队无人机-PID 基础原理

    COCOFLY教程 --疯壳·无人机·系列 PID 基础原理          图1               一.PID 简介     PID 控制是自动控制系统中最常用的一种控制手段,它的诞生主 ...

最新文章

  1. 配置项目启动的时候就加载 servlet
  2. hive报错(1)MoveTask/HIVE return code 1、2、3
  3. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机)
  4. windows linux cpu 抢占式 时间片_阿里技术专家谈:CPU飙高,系统性能问题如何排查?...
  5. [java8]时间差
  6. 李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
  7. 【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
  8. Oracle傻瓜手册
  9. 计算机图形学的学习心得,计算机图形学学习心得
  10. 遥感图像预处理—步骤
  11. 前端实现动画的7种方式
  12. 中国数学界为之骄傲--庞加莱猜想的完美证明
  13. 云计算时代的软件行业变化
  14. 掌握这几款高保真设计软件,百万年薪不再是梦想
  15. 1.1.1 操作系统的层次结构、基本概念、功能和目标
  16. Google Drive(谷歌网盘)下载超大文件方法
  17. 错误代码: 1305 PROCEDURE world.insert_data does not exist
  18. python兔子和獾_Pygame-依葫芦画瓢之兔獾大战
  19. Zookeeper端口和ip修改
  20. Matlab数字图像的傅里叶变换(FFT)

热门文章

  1. 图片转换html源代码,将图片转换成HTML格式的文字图程序源代码
  2. Routeros花生壳域名解析脚本
  3. 万万没想到,低功耗也会烧毁元器件?
  4. 用计算机刻录光盘,笔记本电脑刻录光盘 手把手教你刻录光盘
  5. google Play 应用被下架暂停
  6. 主机访问虚拟机Web服务器
  7. 2014腾讯实习生招聘武汉试题
  8. AARRR模型——变现:终极目标(上)
  9. 服务器运行cad慢,cad从服务器上打开很慢,在本地打开很快
  10. 版权符号--如何在页面完美显示版权符号,版权符号字体