IOT再びーESP32編(14)ーーープログラムの修正(A0221AT)防水超音波センサー

テストを繰り返していますが,なかなか安定した測定結果がえられませんでした。データの変動の幅がおおき
かったり値が変化しなかったりとしたため,あれこれとやりました。夜茶の間いろいろやっていると,比較的
安定した結果になるようでしたが,その原因が分かりました。測定結果が安定してないので,センサー部分を
見ると,水滴がかぶっていました。元々防水なので,水滴は大丈夫なはずですが,水滴が付いているため,測
定に影響があるような気がします。もともと超音波センサーは,超音波を発して,その反射が帰ってくるまで
の時間を計測して,距離を算出してますので,水滴がついていると,超音波の発信,受信に影響があるのかも
しれません。
センサー部分の水滴を拭き取ってみると,ほぼ正確な反応が返るようになりました。あれこれスケッチをいじ
ましたが,平均をとらなくても大丈夫なようですので,平均はとらずに運用してみようと思います。
ただ,英語のマニュアルをみてみると,レスポンスが帰るまで,100~300msとあるので,書き込みをし
てから,300msの休止(delay(300);)をいれました。

 float measureDistance_2() {
  char m[50];
  int Sw;
  Serial2.write("S");
  delay(300); 
  if (Serial2.available())
  {
    hdr = (byte)Serial2.read();
    if (hdr == 255){
      data_h = (byte)Serial2.read();
      data_l = (byte)Serial2.read();
      chksum = (byte)Serial2.read();

      if (chksum == ((hdr + data_h + data_l)&0x00FF)){
          distance = data_h * 256 + data_l;//距離計算
          new_distance=distance/10;
          dtostrf(new_distance, 6, 1, m);//
          Serial.print(m);
          Serial.println(" cm");
          if(digitalRead(OLED)==HIGH){//OLED表示ONの時
            display.clearDisplay();
            display.setCursor(0, 0);
            display.println("rest= ");
            display.print(m);
            display.println(" cm");
            display.display();
          }       
      }
    }
  }
  delay(100); 
  return distance/10;//cmを返す
 
}

超音波センサーなので,明るさは関係ないと思うのですが,検証をするのは,蛍光灯の下が大いのですが,そ
の影響もあるのでしょかね。
茶の間で検証の様子です。水が噴霧機に入ってるので,おっちょこちょいの私は,こぼさないかヒヤヒヤして
ます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA