一:超声波模块知识分享:
HC-SR04超声波传感器是通过发送和接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离的一种传感器模块。与蝙蝠寻找猎物的回声定位基本原理相同,可以广泛应用于无损测量、水文液位测量、工业场地等领域。
CS100A超声波测距模块有两个超声波探头,分别用于发射和接收超声波,TRIG脚用于触发发射超声波,若接收到返回的超声波ECHO脚会输出高电平,根据高电平的持续时间计算目标距离
二:模块参数:
测距芯片:CS100A
晶振:8MHz
超声波发射频率:40KHz
测距范围:最大距离约5m(受实际测量环境影响)
方向角:60°+15°
探测精度:0.3cm+1%
测量盲区:小于2cm
工作温度范围:-40°C-85°C
工作电压范围:3V~5.5V
具体说明如下所示:
模块上有两个超声波探头,LS1发射探头用于发射超声波,LS2接收探头用于接收超声波更加敏感,模块选用10MQ(建议范围10M0~22MQ)
LS2接收探头接了下拉电阻,可以调节测距灵敏度,减小这个电阻,可以增强抗干扰能力,但也会减小灵敏度,降低测距范围;增大这个电阻,可以得到更远的测量距离,但也会对周围小物体的回波信
在TRIG脚输入一个10us 的高电平(通常建议50us左右),CS100A芯片的TP和TN脚即可发出8个40KHz的超声波脉冲,接着通过RP和RN脚检测回波信号。当检测到回波信号,ECHO脚输出高电平,其持续时间可用于计算距离值,距离(m)=高电平持续时间(s)*声速(340m/s)/2
即使测量距离超过测量范围,CS100A芯片仍会通过ECHO脚输出高电平信号,持续时间约为33ms
三:软件代码如下所示:
选取任意GPIO脚做普通输出脚,选取任意一条定时器TIM通道做输入捕获脚普通输出脚接到超声波测距模块的TRIG脚,输出一个大于10us的高电平触发测距输入捕获脚接到超声波测距模块的ECHO脚,捕获其脉冲宽度,计算距离值
1.选定好GPIO1脚,该脚与超声波测距模块的TRIG脚相连
2.选定好GPIO2通道,该脚与超声波测距模块的ECHO脚相连
3.初始化GPIO脚即TRIG脚,重点配置为推挽输出模式
4.初始化TIM通道对应的GPIO脚即ECHO脚,重点配置为浮空输入模式
5.初始化GPIO2,配置为输入捕获模式
6.TRIG脚输出一个大于10us的高电平,触发CS100A芯片发射超声波
7.输入捕获测量ECHO脚高电平脉宽算出距离值
8.计算ECHO脚高电平持续时间,带入公式距离(m)=高电平持续时间(s)*声速(340m/s)/2,
四:软件代码:
/*
* ESP32 + HC-SR04 超声波测距示例
* 测量距离并通过串口打印(单位:厘米)
* 引脚定义可根据实际接线修改
*/
// 定义引脚
const int TRIG_PIN = 1; // 触发引脚
const int ECHO_PIN = 2; // 回波引脚
// 超时时间(微秒),对应最大测量距离约 400cm
const unsigned long TIMEOUT_US = 25000UL; // 25ms
void setup() {
Serial.begin(115200); // 初始化串口
pinMode(TRIG_PIN, OUTPUT); // 设置 TRIG 为输出
pinMode(ECHO_PIN, INPUT); // 设置 ECHO 为输入
digitalWrite(TRIG_PIN, LOW); // 初始低电平
Serial.println("HC-SR04 测距准备就绪");
}
void loop() {
float distance = measureDistance(); // 测量距离(厘米)
if (distance > 0) {
Serial.print("距离: ");
Serial.print(distance);
Serial.println(" cm");
} else {
Serial.println("测量超时,请检查传感器或调整距离");
}
delay(500); // 每秒测两次
}
/*
* 测量距离函数
* 返回距离(厘米),若超时则返回 -1.0
*/
float measureDistance() {
// 1. 发送一个 10us 的高电平脉冲触发测距
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// 2. 读取 ECHO 引脚的高电平持续时间(微秒)
unsigned long duration = pulseIn(ECHO_PIN, HIGH, TIMEOUT_US);
// 3. 判断是否超时
if (duration == 0) {
return -1.0; // 超时返回 -1
}
// 4. 计算距离:声速 340m/s = 0.034 cm/us
// 距离 = 高电平时间 * 声速 / 2(来回)
float distance = duration * 0.034 / 2.0;
return distance;
}五:实物验证
串口数据接收如下所示:
我要赚赏金
