arduino 激光测距模块

本文最后更新于:2021年10月13日 下午

摘要
这里记录了关于 arduino 超声波模块的使用方法

知识准备

–超声波测距

​ 超声波,即人耳可听见频率以上的声波,可用来探测距离,其原理和雷达类似:从发射超声波到接收反射波所需的时间经过计算可以得到距离。

​ 可在空气中传播的超声波频率大约介于 20~299kHz 之间,其衰减程度与频率成正比(频率越高,传播距离越短),我们平常能买到的超声波模块通常采用 38kHz、40kHz 或 42kHz。

​ 在室温 20℃ 的环境中,声波的传播速度约为 344m/s(水中比空气中快 60 倍),因此,假设超声波往返的时间为 600μs 从公式可计算出被测物体的距离为 10.3cm。

距离计算公司

​ 从声音的传播速度和时间,可求出距离,而物体的实际距离是传播时间的一半,所以可以求得 1cm 距离的声波传递时间为 58μs。


空气的密度会影响声音的传播速度,空气的密度越高,声音传播速度越快,而空气的密度又与温度密切相关。考虑温度变化的声音传播速度的近似公式如下:

image-20210222024944129

​ 此外,物体的形状和材质会影响超声波测距的效果和准确度,反射表面平整时,声波会照入射角反射回来,但要是表面粗糙的话,声音将被散射或吸收。不过,只要物体表面的坑洞尺寸小于声波波长的四分之一,即可视为平整表面。

image-20210222025426787

BTW,假如超声波的发射和接收装置不在同一点,那么声音的传播途径不是直线,计算距离时要考虑传感器造成的夹角。

image-20210222025624215

–超声波传感器模块

我记得高中时候有一次去区里答辩,我的项目是一个基于 arduino 的实验设备,然后有个老师就问我 “超声波传感器局限在哪,和红外测距有什么区别?” 当时我是懵了一下。

答:被测物体运动速度超过声速就无法测量了

超声波模块一般有两个超声波元器件,一个用于发射,一个用于接收。电路板上一般四个引脚:VCC(正电源)、Trig(触发)、Echo(回应)、GND(接地)。大部分实验用的超声波传感器模块参数如下:

指标
工作电压 5V
工作电流 15mA
感测角度 ≤15°
被测物 面积不小于 50cm² 且平整

在超声波模块的触发脚位输入 10微秒以上的高电位,即可发射超声波,发射超声波以后,与接收到传回的超声波之前,响应脚位呈现高电位。程序通过响应脚位的高电位脉冲持续时间,换算出被测物的距离。

image-20210222031200008

串口通信

这玩意儿比较复杂,之间抛链接吧!维基百科-Serial communication.

这里看见个有意思的东西—— Mac OS 与 Linux 的通信端口。Windows 系统使用 COM(原意是COMmunication, 通信)代表通信端口,Mac OS( 一种基干Unix 的操作系统)和 Linux 则用TIY 代表通信端口。TIY 的原意是 ‘’ teletypewriter “(早期用来操作和大型电脑联机的终端机)。Mac OS 和Linux 系统把每个设备都看成文件,位千/dev 路径底下,因此在Mac
的终端机窗口输入ls -l /dev/tty.*, 将能列举所有通信端口。

除了 TTY,Mac 和 Linux 上的通信端口还有包含—个同名的 CU。TTY 用于输入信息给设备,CU 代表 call up,用于从设备传出细信息,两者合作能同时收发信息,被称为全双工。在 Arduino 上,无论使用 TTY 还是 CU,都能传递信息,但一般选用 TTY。

串行数据传输协议

传输协议代表通信设备双方所遵循的规范和参数,通信双方的设置要一致,才能相互沟通。

对于 USB 设备,像是键盘、鼠标等 “人机接口” 类、打印机的 “打印设备” 类、移动设备的 “存储设备” 类等,每个设备都有不同的传输协议,也需要安装对应的驱动程序。

当我们接上 Arduino Uno 开发板,在设备管理器中可以观察并更改其通信属性。

每秒位数(bit per second,简称 bps)是串口的传输速率,也称为波特率(Baud rate)。两个通信设备的波特率必须一致,一般为两部机器所能接受的最高速率,常见的选择为 9600bps 和115200bps。
开始传输数据之前,RS-232 的传送(TX)与接收(RX)脚都处于高电位状态,传送数据时,它将先送出—个代表 “要开始传送囖! ” 的起始位(start bit, 低电位),接着才送出真正的数据内容(称为数据位,data bit ),每一组数据位的长度可以是5~8 个位,通常选用 8 个位。

image-20210222034431685

一组数据位后面,会跟着代表 “传送完毕” 的停止位(stop bit),停止位通常占 1 位,某些低速的设备要求使用 2 位。

除了数据传输线。还需要一条确保信息收发两端步调一致的频率同步线。但 RS -232 和 USB 串口线不需要同步线,因为它们会在数据前后加上“开始” 和 “结束“ 信息。这种传送方式统称通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,简称 UART)。

设计方案

fritzing 找不到超声波模块了,用网图代替下吧,毕竟不难。

image-20210222175711285

材料清单

名称 数量
Adruino 1
超声波传感器模块 HC-SR04 1

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
首先要安装 Ultrasonic 的函数库
VCC接5V,GND接地。Trig接到pin 12,Echo接到pin 13。
*/

#include <Ultrasonic.h>

Ultrasonic ultrasonic(12, 13);
int distance;

void setup() {
Serial.begin(9600);
}

void loop() {

distance = ultrasonic.read(); //不加参数就是输出CM,可用read(INC)输出英寸

Serial.print("Distance in CM: ");
Serial.println(distance);
delay(500); //每次间隔0.5秒
}

成果展示

侵删


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!