arduino 超声波测距原理_[Arduino]超声波测距
一切开始之前,我们需要先来温习一个中学就学习过的物理原理:
常温常压下空气中的声速: 340m/s
德罕姆冲你微笑
声波雷达原理
超声波也是声波,它在1个标准大气压下,15℃的空气中的传播速度为340m/s。而声波在传播的过程中遇到障碍物时,会反射也会衍射,所以当我们测量出发出声波和听到回声的时间差,就能估算出声音传播的距离。同时因为超声波频率高波长短,所以衍射低,拘束性好,因此能量衰减也更少,传播的距离也更长,更比耳朵能听到的低频率声音更适合做长距离测量。
超声波测距原理
如上图所示,测量步骤为:
发出n个mHz的超声波脉冲,超声波脉冲发射结束时开始计时,记作t0
开始监听mHz的超声波脉冲的回声,监听到n个后结束计时,记作t1
计算时间差t = t1 - t0,为超声波来回两程所花费的时间
计算超声波走过的距离s = v * (t1 - t0) / 2(v为声速)
声波速度与空气温度的关系
声波传播速度与传播介质的温度成正比,与传输介质的密度成正比。声波在1个标准大气压下的传播速度与空气温度的关系为:
v = 331.5 + 0.607t
v为声波的速度,单位m/s
t为空气的温度,单位℃
超声波测距模块
现在市面上的超声波测距模块很多,比较常见的就算HC-SRxxx系列和US-100系列了,它们甚至可以用于汽车的倒车雷达。基本上都长这个样子,一定会有一个或者两个圆筒筒的超声波收发器。
超声波模块
目前这个超声波模块都是使用40kHz的声波,人耳可辨识的声音频率范围在20 ~ 20kHz,模块使用的声音频率超过人耳可识频率上限的2倍,完全对人类的正常生活产生影响。
它们的测距方式都是大同小异的,通常有TTL方式和GPIO方式两种,GPIO是最通用的一种控制方式,我们就用这个方式为例说明超声波测距模块的用法。
接线方式如下:
Trigger,触发输入端,默认低电平,输入一个时常超过10μs的高电平脉冲即可触发模块发射一组超声波脉冲
Echo,回声输出端,默认低电平,模块发射超声波脉冲结束后,回声端就会输出高电平,直到监听到所有超声波脉冲的回声(或监听超时)后才会重新输出低电平
超声波测距时序
使用步骤如下:
在拉高Trigger端10μs以上后拉低,以触发模块发射8个40kHz的超声波脉冲
开始监听Echo端,Echo输出高电平时开始计时,Echo输出低电平时结束计时
计算出计时的时长,即为声波一来一回花费的时间
计算声波走过的路程
如果想要测量得更精确,可以测量环境温度,然后如声波速度与空气温度的关系所述,利用环境温度来修正声波的速度后,再计算声波的距离。温度测量的实现方法详见[Ardunio] DS18B20温度传感器
编码实现
#define ULTRASONIC_ECHO_PIN 2
#define ULTRASONIC_TRIGGER_PIN 4
#define ULTRASONIC_DISCOVERING_STATE_PIN 13
#define ULTRASONIC_DISCOVERING_INTERVAL 500000
volatile bool mReadyToDiscovering = true;
unsigned long mEchoStartTime = 0;
unsigned long mEchoEndTime = 0;
float mDistance = 0.0f;
void trigger();
void calcDistance();
void onEcho();
bool isReadyToDiscovering();
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("Ultrasonic ranging ready");
// UltraSonic pins setup
pinMode(ULTRASONIC_ECHO_PIN, INPUT);
pinMode(ULTRASONIC_TRIGGER_PIN, OUTPUT);
pinMode(ULTRASONIC_DISCOVERING_STATE_PIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ULTRASONIC_ECHO_PIN), onEcho, CHANGE);
// UltraSonic pins initialization
digitalWrite(ULTRASONIC_TRIGGER_PIN, LOW);
digitalWrite(ULTRASONIC_DISCOVERING_STATE_PIN, LOW);
}
void loop() {
if (isReadyToDiscovering()) {
calcDistance();
trigger();
}
}
bool isReadyToDiscovering() {
if (mReadyToDiscovering) {
unsigned long now = micros();
if (now - mEchoEndTime > ULTRASONIC_DISCOVERING_INTERVAL) {
mReadyToDiscovering = false;
return true;
}
}
return false;
}
void trigger() {
digitalWrite(ULTRASONIC_TRIGGER_PIN, HIGH);
delayMicroseconds(50);
digitalWrite(ULTRASONIC_TRIGGER_PIN, LOW);
}
void onEcho() {
uint8_t echo = digitalRead(ULTRASONIC_ECHO_PIN);
unsigned long now = micros();
if (echo == HIGH) {
mEchoStartTime = now;
digitalWrite(ULTRASONIC_DISCOVERING_STATE_PIN, HIGH);
} else {
mEchoEndTime = now;
digitalWrite(ULTRASONIC_DISCOVERING_STATE_PIN, LOW);
mReadyToDiscovering = true;
}
}
void calcDistance() {
long deltaTime = mEchoEndTime - mEchoStartTime;
mDistance = 340L * deltaTime / 2000000.0; // s = vt = 340 m/s * time / 2
Serial.print("Distance = ");Serial.print(mDistance * 100.0);Serial.print("cm, Time = ");Serial.print(deltaTime);Serial.println("us");
}
arduino 超声波测距原理_[Arduino]超声波测距相关推荐
- 超声波测距仪编程_简易超声波测距仪的制作
没有进行补偿, 能达到简单应用的基本要求. 3 电路结构 根据超声波测距基本原理, 可 以设计出超声波测距系统的 组成框图如图 3- 1 所示. 3.1 单片机系统及显示电路 单片机用 P1.0 端口 ...
- arduino 超声波测距原理_超声波测距灯
介绍硬件准备 本篇文章专门介绍用Arduino制作超声波测距灯,需要的材料是: 1. Arduino开发板 2. HC-SR04超声波模块 3. LED灯 4. 杜邦线若干 注意事项 之所以要写这 ...
- 双摄测距原理_技术科普 | 一颗不够就再来一颗!双摄手机原理解析
原标题:技术科普 | 一颗不够就再来一颗!双摄手机原理解析 第18期 今天给大家伙带来双摄技术的"小秘密". 什么是双摄? 从结构上来看,双摄就是两颗单摄模组通过支架组装成一个双摄 ...
- 双摄测距原理_“双摄”火遍天 工作原理大揭秘
OFweek电子工程网讯 手机拍照自功能机时代就已经成为人们日常经常使用的一个功能,自进入智能机以来地位更是被不断的拔高.注意力所在之地往往就是创新的迸发处,这一点在手机拍照上再恰当不过,无数的技术越 ...
- 双摄测距原理_双摄的工作原理分析及双摄像头的理论基础分享
手机拍照自功能机时代就已经成为人们日常经常使用的一个功能,自进入智能机以来地位更是被不断的拔高.注意力所在之地往往就是创新的迸发处,这一点在手机拍照上再恰当不过,无数的技术越来越多的被应用到手机拍照上 ...
- (十)基于Linux算时差——超声波测距原理及代码实现
学习日志(十) 基于Linux算时差--超声波测距原理及代码实现 测距原理基本说明 超声波测距模块:是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离 ...
- matlab智能小车避障,Arduino智能小车系列教程4——超声波避障
Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...
- 汽车环境感知技术详解【 持续更新ing 】— 超声波传感器原理及应用
专栏解读: 本专栏针对自动驾驶技术(智能网联汽车技术)中的感知技术进行详细介绍. 包含: 汽车感知技术概念 多传感器融合原理 各传感器原理及应用(超声波,毫米波,激光雷达,视觉传感器,全球定位系统) ...
- UWB测距原理及实现
1.测距 距离(长度)是最常用的物理量之一,距离的测量是我们日常生活中最常见的,如日常生活工作中的物体的长度尺寸测量,人身高的测量. 长度是一维空间的度量,是点到点的距离.长度的国际单位是" ...
- mbot机器人自动超声波模式程序_利用mBot智能机器人使用超声波传感器解决问题...
一.观察图片,分析原理 教师引导学生分析(如图1):汽车在倒车过程中是如何判断出后方有障碍物的?这是根据什么原理实现的? 师生分析得出结论:汽车的尾部安装了倒车雷达,可以判断汽车与障碍物的距离,而倒车 ...
最新文章
- NPTL简介 (NATIVE POSIX Thread Library)
- 系统上线后关键用户的工作建议
- 02_Nginx基本配置与参数说明 + 辅助命令
- 三星w系列vip服务器,高端人士候机专属特权 三星W2017一张行走的VIP卡
- bzoj2756 [SCOI2012]奇怪的游戏 结论+网络流
- 如何跨越线程调用窗体控件?(1)
- 十大笔记本品牌型号命名规则【三星、苹果、明基】
- 泰康应用盒子Android,泰康医疗app下载-泰康医疗 安卓版v1.8.8-PC6安卓网
- 深入理解JVM虚拟机读书笔记——类的加载机制
- Linux下安装宋体
- 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)
- 金蝶服务器修改ip,金蝶客户端修改服务器ip地址
- Activision解散《吉他英雄》,取消《真实犯罪》
- 小程序源码:全新超火的微信小说小程序源码-自带采集带安装教程-多玩法安装简单
- 计算机神经网络sci,神经网络方向sci期刊
- linux终端里面的光标很粗,怎么调细
- 随时随地掌上邮,飞邮Android版邮件客户端正式提供试用
- 算术分解定理取根号的注意点
- Java毕设项目保险公司风险测评管理系统(java+VUE+Mybatis+Maven+Mysql)
- linux 查询库版本,数据库版本查询(linux数据库版本查询)
热门文章
- 服务器信号满格网速很慢,网速变得很慢(wifi信号满格但网速慢)
- 《三联生活周刊》2017年第26期:3星。终南山隐士现状。
- UE4母材质之法线贴图
- 0055-空气质量检测
- Oracle数据库上机练习6
- oracle 表空间满了排查和解决(ORA-1653: unable to extend table test by 128 in tab)
- python知识点总结2
- linux raid 监控,如何使用CentOS 6监控Dell PERC H710 Raid控制器背后的硬盘状态?
- Foxmail:修改签名和模板(邮箱、邮件)
- 学计算机怎能不知道电脑配置