本次试验使用Arduino ESP32-S 开发板
使用HC-SR04超声波传感器
注意事项/前要
HC-SR04是一款广泛使用的非接触式超声波传感器,它能够测量一个物体的距离而无需物理接触。其工作原理是发射一个超声波脉冲,然后听取该脉冲的回声。通过计算声波被发射和接收的时间差,可以计算出距离。
以下是HC-SR04超声波传感器的一些关键特性:
- 工作电压:一般为5V直流电。
- 工作频率:大约40kHz。
- 测量范围:从2cm到400cm,有较好的准确性。
- 接口:四个引脚(VCC, TRIG, ECHO, GND)。
- 分辨率:约0.3cm。
在使用HC-SR04时,首先向TRIG引脚发送至少10微秒的高电平脉冲,以启动超声波脉冲的发射。然后模块自动发射8个40kHz的超声波,并检测是否有回声。如果回声被检测到,ECHO引脚输出一个高电平脉冲,脉冲的持续时间与声波往返传感器与物体的时间成正比。通过测量这个时间,可以根据声速计算出传感器到物体的距离。
HC-SR04在机器人、障碍物避让系统、自动化工程等领域有很多应用。它因成本低、易于使用和相对准确而受到许多开发者和爱好者的青睐。
模块与开发板接线
首先,将HC-SR04超声波传感器与ESP32连接。HC-SR04模块通常有四个引脚:VCC、Trig(触发器)、Echo(回声)、和GND。
请注意,HC-SR04的Echo引脚输出的是5V信号。如果ESP32无法直接输入5V,你可能需要使用电平转换器,以避免损坏ESP32。
超声波传感器 模块引脚 | Arduino ESP32 引脚 |
---|---|
VCC | 3.3V or 5V |
TrigPin | GPIO 5 |
EchoPin | GPIO 18 |
GND | GND |
以下是模拟接线图
完整代码/实际执行
- 代码中
delay(1000);
用于控制测量的频率,避免过于频繁地测量。 pulseIn()
函数用于测量Echo引脚高电平的持续时间,即超声波发射后反射回来的时间。这个时间乘以声速(以厘米/微秒为单位),再除以2,就得到了从传感器到障碍物再返回传感器的距离。- 在实际应用中,可能需要添加错误检查,比如检查
pulseIn()
的返回值是否为0(超时),以处理超出测量范围的情况。
// 定义Trig和Echo引脚
const int trigPin = 5;
const int echoPin = 18;
// 定义声速 cm/us
const float speedOfSound = 0.0343;
void setup() {
// 初始化串口通信
Serial.begin(115200);
// 设置Trig引脚为输出,Echo引脚为输入
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// 清除Trig引脚状态
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// 产生一个10微秒的高电平脉冲到Trig引脚
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取Echo引脚,返回声波往返时间(微秒)
long duration = pulseIn(echoPin, HIGH);
// 计算距离
float distance = duration * speedOfSound / 2; // 距离=时间*声速/2
// 打印距离
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 每秒测量一次
delay(1000);
}