Arduino Uno 超声波传感器HC-SR04测距
目录
介绍
在本教程中,我们将学习Arduino和超声波传感器的基础知识,并探索如何用它们制作一个简单的障碍物检测器。
实现效果
在超声波前放置障碍物,串口输出距离数据。
元件说明
HC-SR04 是一款常用的超声波传感器模块,它具有以下几个特点:
-
工作电压为 +5V,相对简单,易于使用。
-
测量距离范围为 2cm - 400cm,精度可以达到 3mm。
-
有效测量角度为 15度。
-
接口为TRIG触发脉冲输入、ECHO脉冲宽度输出。
-
接收到TRIG信号后会自动发送大于8 cycles的超声波,然后自动接受返回的ECHO信号。
-
ECHO持续的高电平时间就是超声波从发射到返回的时间,通过这个时间可以计算出测量距离。
-
封装小巧,便于集成到各种设备和产品中。
-
支持5V和3.3V功率接口,易于微控制器或者Arduino控制。
-
噪声抗干扰能力强,精度高。
-
价格低廉,易于获取。
超声波在稳定性上还有以下缺点:
- 声波速度会受温度影响,所以有些超声波传感器带有温度补偿。
- 声波的反射面积有要求,例如面积过小的柱子,无法反射声波。
- 声波对反射的表面材料有要求,有一些衣物布料会吸收声波,无法反射。
- 多个超声波传感器一起工作,容易收到干扰。
- 精度不足,测量精度大约在3mm左右,对于要求高精度的应用可能还不够。
- 存在死区,最小只能测量2cm左右的距离,小于2cm的距离无法测量。
所以HC-SR04是一个性价比很高,使用方便,功能实用的超声波传感器模块。它的这些特点使其在距离测量、避障等领域有很广泛的应用。多应用于机器人避开障碍物,距离测量。
引脚说明
HC-SR04超声波模块一般有4个引脚,每个引脚的作用如下:
-
VCC:电源正端,接5V电源
-
Trig :输入触发信号,给这个脚发送一个>=10us的高电平信号来触发传感器,让它发出超声波
-
Echo:输出回波信号,它会返回一个高电平,高电平维持的时间就是超声波从发射到返回的时间
-
GND:电源地端
工作原理是:
-
用Trig脚发送一个>=10us的高电平信号,触发模块发出超声波。
-
模块会在Trig信号结束后自动发送8个40KHz的超声波脉冲,并接收Echo。
-
当接收到回波信号时,Echo会由低电平变高电平,并维持高电平时间就是超声波运行时间。
-
通过读取Echo高电平时间,就可以计算出距离。时间和距离公式为:Distance = (高电平时间*声速)/2
-
最后Echo会恢复低电平,等待下一次测距。
所以通过控制Trig触发信号,并读取Echo的回波时间,就可以实现HC-SR04的距离测量功能。
BOM表
- Arduino Uno板
- 超声波传感器HC-SR04
- 杜邦线(至少需要5根)
- 面包板
- 障碍物
接线图
程序代码
//welcome to lingshunlab.com
#define Trig 2 //引脚Tring 连接 IO D2
#define Echo 3 //引脚Echo 连接 IO D3
float cm; //距离变量
float temp; //
void setup() {
Serial.begin(115200);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
void loop() {
//给Trig发送一个低高低的短时间脉冲,触发测距
digitalWrite(Trig, LOW); //给Trig发送一个低电平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //给Trig发送一个高电平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //给Trig发送一个低电平
temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
//返回脉冲的长度
//声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
//因为发送到接收,实际是相同距离走了2回,所以要除以2
//距离(厘米) = (回波时间 * (34 / 1000)) / 2
//简化后的计算公式为 (回波时间 * 17)/ 1000
cm = (temp * 17 )/1000; //把回波时间换算成cm
Serial.print("Echo =");
Serial.print(temp);//串口输出等待时间的原始数据
Serial.print(" | | Distance = ");
Serial.print(cm);//串口输出距离换算成cm的结果
Serial.println("cm");
delay(100);
}
测试
将传感器朝向一个物体,您会看到串口监视器输出的数字会随着物体离传感器的距离而变化。
结论
Arduino和超声波传感器的组合使得制作一个障碍物检测器变得非常简单。在此基础上,您可以实现更复杂的项目,例如应用于智能机器人、车辆倒车雷达等。祝您好运!