前言
超声波测距常用于小车避障,当测距值为几时,他就会自动的转向,从而实现避障功能。
超声波测距的原理
- esp32 控制超声波测距发出超声波
- 遇到障碍物反弹超声波
- 计算接收超声波所用的时间
- 使用这个公式计算距离,单位为cm:Time* 0.034 / 2;
操作
连线说明
名称 | pin脚 | 功能 |
GND | GND | |
VCC | VCC | |
Trig | 22 | 发送超声波 |
echo | 23 | 接收返回的超声波 |
使用方法
发送超声波引脚和接收超声波引脚初始化如下:
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT)
OUTPUT:发送
INPUT:接收
发出超声波:
先高后低
digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
计算超声波回波的时间:
long duration = pulseIn(echoPin, HIGH);
利用公式进行计算:
long distance = duration * 0.034 / 2;
distance 就是我们的距离了。
测距代码如下:
const int trigPin = 22; const int echoPin = 23; void setup() { //设置超声波引脚为输入/输出 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(115200); } void loop() { //发出超声波脉冲 digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); //计算超声波回波的时间 long duration = pulseIn(echoPin, HIGH); //计算物体的距离 long distance = duration * 0.034 / 2; //输出物体的距离 Serial.println(distance); delay(700); }
注意:如果不延时,会出现错误信息。
示例
当距离大于5时,灯不闪,当距离小于5时,常亮:
代码如下:
const int trigPin = 22; const int echoPin = 23; const int Led = 2; void setup() { //设置超声波引脚为输入/输出 pinMode(trigPin, OUTPUT); pinMode(Led, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(115200); } void loop() { //发出超声波脉冲 digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); //计算超声波回波的时间 long duration = pulseIn(echoPin, HIGH); //计算物体的距离 long distance = duration * 0.034 / 2; if(distance >= 10) { digitalWrite(Led,LOW); } else if(distance < 10) { digitalWrite(Led,HIGH); } //输出物体的距离 Serial.println(distance); delay(700); }
总结
通过使用ESP32来控制超声波模块,我们可以实现测量物体距离的功能,从而可以用于安全报警系统、自动门等应用。