arduino 超声波测距原理_基础教程10 Arduino 超声波测距
我是潘,曾经是个工程师。这是为 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 超声波测距相关推荐
- 确定sw1开关信号输入端口_基础教程15 Arduino端口内部的上拉功能
本专栏内容经修订后,已在豆瓣阅读集结成书出版: https://read.douban.com/ebook/106875966/read.douban.com 我是潘,曾经是个工程师.这是为 htt ...
- ArcGIS二次开发基础教程(10):三维分析
ArcGIS二次开发基础教程(10):三维分析 坡度分析 请务必学会使用帮助文档!!! //DEM数据的坡度分析 将分析结果添加到地图上 //首先获取DEM数据,方法有很多例如从个人地理数据库获取,也 ...
- GStreamer基础教程10——GStreamer工具
目标 GStreamer提供了一系列方便使用的工具.这篇教程里不牵涉任何代码,但还是会讲一些有用的内容: 如何在命令行下建立一个pipeline--完全不使用C 如何找出一个element的Capab ...
- java 图片插件_[Java教程]10款功能强大的jQuery/CSS3图片特效插件
[Java教程]10款功能强大的jQuery/CSS3图片特效插件 0 2014-11-26 03:01:04 1.CSS3实现的底部带滚动云彩效果的网站登录页面 CSS3实现的底部带滚动云彩效果的网 ...
- 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 ...
- Gstreamer基础教程10:GStreamer tools
文章目录 目标 一.Introduction(简介) 二.gst-launch-1.0 1.Elements 2.Properties(属性) 3.Named elements(元素重命名) 4.Pa ...
- mbot机器人自动超声波模式程序_利用mBot智能机器人使用超声波传感器解决问题...
一.观察图片,分析原理 教师引导学生分析(如图1):汽车在倒车过程中是如何判断出后方有障碍物的?这是根据什么原理实现的? 师生分析得出结论:汽车的尾部安装了倒车雷达,可以判断汽车与障碍物的距离,而倒车 ...
- arduino使用oled代码_如何做一个Arduino无线气象站
今天我们来介绍如何利用DHT22传感器测量室外温度和湿度,并使用NRF24L01收发器模块将该数据无线发送到室内单元.在室内单元中,还有一个用于测量室内温度和湿度的DHT22传感器,以及一个DS323 ...
- arduino 超声波测距原理_超声波测距灯
介绍硬件准备 本篇文章专门介绍用Arduino制作超声波测距灯,需要的材料是: 1. Arduino开发板 2. HC-SR04超声波模块 3. LED灯 4. 杜邦线若干 注意事项 之所以要写这 ...
- 【飞控开发基础教程10】疯壳·开源编队无人机-PID 基础原理
COCOFLY教程 --疯壳·无人机·系列 PID 基础原理 图1 一.PID 简介 PID 控制是自动控制系统中最常用的一种控制手段,它的诞生主 ...
最新文章
- 配置项目启动的时候就加载 servlet
- hive报错(1)MoveTask/HIVE return code 1、2、3
- ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机)
- windows linux cpu 抢占式 时间片_阿里技术专家谈:CPU飙高,系统性能问题如何排查?...
- [java8]时间差
- 李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
- 【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
- Oracle傻瓜手册
- 计算机图形学的学习心得,计算机图形学学习心得
- 遥感图像预处理—步骤
- 前端实现动画的7种方式
- 中国数学界为之骄傲--庞加莱猜想的完美证明
- 云计算时代的软件行业变化
- 掌握这几款高保真设计软件,百万年薪不再是梦想
- 1.1.1 操作系统的层次结构、基本概念、功能和目标
- Google Drive(谷歌网盘)下载超大文件方法
- 错误代码: 1305 PROCEDURE world.insert_data does not exist
- python兔子和獾_Pygame-依葫芦画瓢之兔獾大战
- Zookeeper端口和ip修改
- Matlab数字图像的傅里叶变换(FFT)