一. HC-SR04超声波模块简介
- HC-SR04超声波模块是一种常用的测距模块,通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差,并据此求出距离。它主要由两个压电陶瓷超声传感器和一个外围信号处理电路构成,其中一个传感器用于发出超声波信号,另一个用于接收反射回来的超声波信号。
- 由于其成本低、精度高、使用简便等特点,该模块被广泛应用于各种场景,如避障机器人、智能家居等。在避障机器人中,HC-SR04超声波模块可以用于检测障碍物与机器人的距离,实现避障控制;在智能家居中,它可以用于人体检测和距离测量,如检测人的接近并触发开门动作或用于室内的距离测量和触发自动照明等。
- 引脚介绍:
1)4 个引脚由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成。
2)Vcc 接 5V DC 电源。
3)Trig 引脚用来接收来自Arduino的控制信号。开始设置为低电平,当检测到高电平时工作,可连接任意IO口。
4)Echo 引脚用来发送测距结果给Arduino,可连接任意 IO口。
二.HC-SR04参数
1)测量范围:2cm~400cm
2)测量精度:3mm
3)工作电压:DC-5V
4)工作电流:15mA
三.超声波测距原理
在工作时,该模块通过IO口触发测距,发送一个40kHz的脉冲信号,此信号通过传输介质(通常为空气)传播出去。当超声波信号遇到障碍物时,会被反射回来,并被接收传感器捕获。通过计算超声波发出后到达障碍物再反射回传感器的时间差,并结合已知的超声波传播速度(通常为340m/s,但易受温度、湿度、压强等因素影响),就可以得出障碍物与传感器的距离。
四.Arduino 编程原理
1)使用 trig 引脚触发测距,给该引脚至少 10us 的高电平信号;
2)超声波模块自动发送8个40khz的方波,并自动检测是否有信号返回;
3)当有信号返回,通过 echo引脚输出高电平,高电平持续的时间为距离的2倍;
4)记录超声波从发射到返回的时间,计算距离公式如下:
测试距离=(高电平时间*声速(340M/S))/2
5)换算成单位cm:
测试距离(cm)= 接收到的高电平时间(us)*340m/s /2 = 接收到的高调平的时间(us)*17000cm/1000000us = 接收到的高电平时间(us)*17/1000
五. 源代码
#define trigPin 2
#define echoPin 3
void setup() {
// put your setup code here, to run once:
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
float value1 = getDistance();
Serial.print("value1 ");
}
float getDistance()
{
//10us高电平脉冲触发超声波模块
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float valueCM = 0;
valueCM = float(pulseIn(echoPin,HIGH)*17/1000);
Serial.print(valueCM);
Serial.println("cm");
delay(2000);
return valueCM;
}
注:pulseln(pin,value)函数
1)读取一个引脚的脉冲(HIGH 或 LOW)。例如,如果 value 是 HIGH,pulseln()会等待引脚变为 HIGH,开始计时,再等待引脚变为 LOW 并停止计时。
2)返回脉冲的长度,单位微秒。如果在指定的时间内无脉冲,则函数返回。
3)参数:
pin:需要要进行脉冲计时的引脚号。
value:要读取的脉冲类型,HIGH 或 LOW