HC-SR04が未検知状態で異常動作する
未検知状態はエコーが返ってこない状態を指す。
室内では周辺のものがあるためエコーが返るため正常動作するが、
室外(見通し)だと室内同様に検知できなかった。
未検知状態では回路の違いにより、正常・異常動作するものがある事が分かった。注意する事。
Ultrasonic distance sensor HC-SR04 lack of timeout problem - #71 by DaveEvans - Sensors - Arduino Forum
左:正常 右:異常 左右センサ共にどこで購入したか不明。今後管理していきたい...。
異常状態
- 異常なものはタイムアウトが機能しない、たまにフリーズする。
- 結果、センサの前に手を置いた場合に距離(赤色)が正しく測定できない事が頻発する。赤色が一定値になるはずだが、10~200cmとばたついている。
- 異常なセンサでは数十ms間隔でサンプリングできないため、品選びに注意する必要がある。
正常状態
正常なものは距離(赤色)が常に測定できる。
int Trig = 13; int Echo = 12; unsigned long Duration; float Distance; unsigned long startMillis,stopMillis,millisPrevious; unsigned long millisPerRead = 10; //10ms以下は正常に超音波センシングできない void setup() { Serial.begin(115200); delay(10); pinMode(2, OUTPUT); pinMode(Trig,OUTPUT); pinMode(Echo,INPUT); startMillis = millis(); } void loop() { if ( (millis() - millisPrevious) > millisPerRead ) { millisPrevious = millis(); digitalWrite(Trig,LOW); delayMicroseconds(2); digitalWrite(Trig,HIGH); delayMicroseconds(10); digitalWrite(Trig,LOW); Duration = pulseIn(Echo,HIGH,millisPerRead*1000); // ★340m/s x 0.007s x 0.5 ≒ 110cm if(Duration==0){ Distance = 200; } else if (Duration>0) { Distance = (Duration/2.0)*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us } Serial.print(millis() - millisPrevious); Serial.print(","); Serial.println(Distance); } }
備考
- SRF05も購入したため試す。
- SR04は公式Documentには60ms/triggerと記載がある。今10msにしているが大丈夫か?
- 別のセンサを試すならVL53L0Xは20msで動作できている。 HIGH_SPEED with VL53L0X? - #6 by paynterf - Sensors - Pololu Forum