这是什么情况?虽然测得挺准,但总是会带一些0.00,我一直没有动测距仪。
测距仪型号:HC-SR04
测得外部电源电压:5.14V
trigPIN:D4
echoPIN:D3
测距仪型号:HC-SR04
测得外部电源电压:5.14V
trigPIN:D4
echoPIN:D3
引自免费微信小程序:皆我百晓生
在使用NodeMCU(ESP8266)和HC-SR04超声波测距模块时,测得的距离值中带有零点零几的尾数是正常现象。这是因为HC-SR04的工作原理基于声波的传播速度计算距离,而实际测量过程中存在多种因素可能造成微小误差:
为了帮助你更好地理解并解决这个问题,以下是一个使用NodeMCU控制HC-SR04进行测距的基本代码示例:
#include < ESP8266WiFi.h>
#define trigPin D4 // 定义触发引脚为D4
#define echoPin D3 // 定义回响引脚为D3
void setup() {
pinMode(trigPin, OUTPUT); // 设置trigPin为输出模式
pinMode(echoPin, INPUT_PULLUP); // 设置echoPin为输入模式,并启用内部上拉电阻
Serial.begin(9600); // 启动串口通信
}
void loop() {
digitalWrite(trigPin, LOW); // 将trigPin设为低电平
delayMicroseconds(2); // 延迟一段时间
digitalWrite(trigPin, HIGH); // 发送10μs以上的高电平脉冲
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000); // 测量高电平持续时间(即回波时间)
float distance_cm = duration / 58.0; // 距离(厘米)= 回波时间(微秒)/ 58(声波在空气中约每秒传播343米,折算成厘米后的时间系数)
distance_cm /= 2.0; // 考虑声波来回行程,所以要除以2
Serial.print("Distance: ");
Serial.print(distance_cm, 2); // 输出距离值,保留两位小数
Serial.println(" cm");
delay(500); // 延迟一段时间再进行下一次测量,避免频繁触发
}
这段代码首先配置了NodeMCU的IO口与HC-SR04连接,并在loop()
函数中进行了超声波测距操作。通过计算回波时间并转换为距离,然后输出到串口监视器上。由于实际应用中可能存在上述提及的误差来源,因此即使在不动测距仪的情况下,读数中出现0.00也是正常的。如果需要进一步提高测量精度,可以尝试多次测量取平均值或其他滤波算法来优化数据处理。