-2

为我的猫建造一个带自动门的便便箱。

我正在使用带有 Arduino mega 的 HC-SR04 超声波传感器。

我在封闭的盒子里有一个传感器(感应我的猫是否被卡在里面,或者当猫在里面时保持打开状态)

内部传感器在大多数情况下会波动 67-68 厘米,但是随机它会抛出一个明显小于 50 厘米的值,在我的程序中,它被设计为打开,因为它通过了“没有东西在里面”的阈值,并且因为这是我的门一直开着。我该如何解决这个问题。

我脑海中唯一的解决方案是:

  • 在数组中添加大约 5-10 组值并取平均值(因为它的扫描速度足够快)

还有其他解决方案吗?谢谢 :)

4

1 回答 1

0

这些随机值可能只是噪音,因为您的接收器可能正在感应其他超声波源。

这是一个示例,我在其中获取多个读数(poop_measurements测量值),然后对其取平均值:

long getDuration() {
  digitalWrite(TRIGGER, LOW);
  delayMicroseconds(10);

  digitalWrite(TRIGGER, HIGH);
  delayMicroseconds(10);

  digitalWrite(TRIGGER, LOW);
  return pulseIn(ECHO, HIGH);
}

void loop() {
  float duration = 0, distance = 0;
  int poop_measurements = 10;
  for (int i = 0; i < poop_measurements; i++) {
    duration += getDuration();
  }
  duration = duration/poop_measurements;
  distance = (duration / 2) / 29.1;

  if (distance < 30 ){
    digitalWrite(RELAY, HIGH);
  } else{  
    digitalWrite(RELAY, LOW);
  }

  Serial.print("CM: ");
  Serial.println(distance);

}
于 2021-11-29T00:32:03.757 回答