一切开始之前,我们需要先来温习一个中学就学习过的物理原理:

常温常压下空气中的声速: 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]超声波测距相关推荐

  1. 超声波测距仪编程_简易超声波测距仪的制作

    没有进行补偿, 能达到简单应用的基本要求. 3 电路结构 根据超声波测距基本原理, 可 以设计出超声波测距系统的 组成框图如图 3- 1 所示. 3.1 单片机系统及显示电路 单片机用 P1.0 端口 ...

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

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

  3. 双摄测距原理_技术科普 | 一颗不够就再来一颗!双摄手机原理解析

    原标题:技术科普 | 一颗不够就再来一颗!双摄手机原理解析 第18期 今天给大家伙带来双摄技术的"小秘密". 什么是双摄? 从结构上来看,双摄就是两颗单摄模组通过支架组装成一个双摄 ...

  4. 双摄测距原理_“双摄”火遍天 工作原理大揭秘

    OFweek电子工程网讯 手机拍照自功能机时代就已经成为人们日常经常使用的一个功能,自进入智能机以来地位更是被不断的拔高.注意力所在之地往往就是创新的迸发处,这一点在手机拍照上再恰当不过,无数的技术越 ...

  5. 双摄测距原理_双摄的工作原理分析及双摄像头的理论基础分享

    手机拍照自功能机时代就已经成为人们日常经常使用的一个功能,自进入智能机以来地位更是被不断的拔高.注意力所在之地往往就是创新的迸发处,这一点在手机拍照上再恰当不过,无数的技术越来越多的被应用到手机拍照上 ...

  6. (十)基于Linux算时差——超声波测距原理及代码实现

    学习日志(十) 基于Linux算时差--超声波测距原理及代码实现 测距原理基本说明 超声波测距模块:是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离 ...

  7. matlab智能小车避障,Arduino智能小车系列教程4——超声波避障

    Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...

  8. 汽车环境感知技术详解【 持续更新ing 】— 超声波传感器原理及应用

    专栏解读: 本专栏针对自动驾驶技术(智能网联汽车技术)中的感知技术进行详细介绍. 包含: 汽车感知技术概念 多传感器融合原理 各传感器原理及应用(超声波,毫米波,激光雷达,视觉传感器,全球定位系统) ...

  9. UWB测距原理及实现

    1.测距 距离(长度)是最常用的物理量之一,距离的测量是我们日常生活中最常见的,如日常生活工作中的物体的长度尺寸测量,人身高的测量. 长度是一维空间的度量,是点到点的距离.长度的国际单位是" ...

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

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

最新文章

  1. NPTL简介 (NATIVE POSIX Thread Library)
  2. 系统上线后关键用户的工作建议
  3. 02_Nginx基本配置与参数说明 + 辅助命令
  4. 三星w系列vip服务器,高端人士候机专属特权 三星W2017一张行走的VIP卡
  5. bzoj2756 [SCOI2012]奇怪的游戏 结论+网络流
  6. 如何跨越线程调用窗体控件?(1)
  7. 十大笔记本品牌型号命名规则【三星、苹果、明基】
  8. 泰康应用盒子Android,泰康医疗app下载-泰康医疗 安卓版v1.8.8-PC6安卓网
  9. 深入理解JVM虚拟机读书笔记——类的加载机制
  10. Linux下安装宋体
  11. 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)
  12. 金蝶服务器修改ip,金蝶客户端修改服务器ip地址
  13. Activision解散《吉他英雄》,取消《真实犯罪》
  14. 小程序源码:全新超火的微信小说小程序源码-自带采集带安装教程-多玩法安装简单
  15. 计算机神经网络sci,神经网络方向sci期刊
  16. linux终端里面的光标很粗,怎么调细
  17. 随时随地掌上邮,飞邮Android版邮件客户端正式提供试用
  18. 算术分解定理取根号的注意点
  19. Java毕设项目保险公司风险测评管理系统(java+VUE+Mybatis+Maven+Mysql)
  20. linux 查询库版本,数据库版本查询(linux数据库版本查询)

热门文章

  1. 服务器信号满格网速很慢,网速变得很慢(wifi信号满格但网速慢)
  2. 《三联生活周刊》2017年第26期:3星。终南山隐士现状。
  3. UE4母材质之法线贴图
  4. 0055-空气质量检测
  5. Oracle数据库上机练习6
  6. oracle 表空间满了排查和解决(ORA-1653: unable to extend table test by 128 in tab)
  7. python知识点总结2
  8. linux raid 监控,如何使用CentOS 6监控Dell PERC H710 Raid控制器背后的硬盘状态?
  9. Foxmail:修改签名和模板(邮箱、邮件)
  10. 学计算机怎能不知道电脑配置