HC-SR04传感器表现得很疯狂



我对Arduino很陌生,但我正在努力学习,但目前,我遇到了一个问题。传感器静止时的输出显示距离峰值。是传感器故障还是代码有问题?

输出:

Distance: 3540.65
Distance: 25.93
Distance: 3528.96
Distance: 25.42
Distance: 3550.34
Distance: 25.88
Distance: 3536.78
Distance: 36.27
Distance: 3501.94
Distance: 25.42
Distance: 28.37
Distance: 3531.37
Distance: 24.51
Distance: 26.99

法典:

* HC-SR04 example sketch
*
* https://create.arduino.cc/projecthub/Isaac100/getting-started-with-the- hc-sr04-ultrasonic-sensor-036380
*
* by Isaac100
*/
const int trigPin = 9;
const int echoPin = 10;
float duration, distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration*.0343)/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(100);
}

我认为您找到了问题的答案,但将来我建议您过滤这些值。也许可以考虑简单的中值滤波器或低通滤波器。 中值滤波器: 取最后的 X(例如可能是 5(值并将它们放入数组中。 对数组进行排序。获取数组 [(X/2(] 值。现在它更有用了。 您可以动态添加数据,这样就不必累积其中的 10 个然后对其进行过滤。例如,如果您收到新的测量值 A:
A - 新的测量值
X - 要累积的数据量(过滤强度(
0 <= i] - 包含累积数据的数组

数组[i] = A;
i++;
if(i==X( i=0;

就这么简单。

最新更新