テストを繰り返していますが,なかなか安定した測定結果がえられませんでした。データの変動の幅がおおき
かったり値が変化しなかったりとしたため,あれこれとやりました。夜茶の間いろいろやっていると,比較的
安定した結果になるようでしたが,その原因が分かりました。測定結果が安定してないので,センサー部分を
見ると,水滴がかぶっていました。元々防水なので,水滴は大丈夫なはずですが,水滴が付いているため,測
定に影響があるような気がします。もともと超音波センサーは,超音波を発して,その反射が帰ってくるまで
の時間を計測して,距離を算出してますので,水滴がついていると,超音波の発信,受信に影響があるのかも
しれません。
センサー部分の水滴を拭き取ってみると,ほぼ正確な反応が返るようになりました。あれこれスケッチをいじ
ましたが,平均をとらなくても大丈夫なようですので,平均はとらずに運用してみようと思います。
ただ,英語のマニュアルをみてみると,レスポンスが帰るまで,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を返す
}
超音波センサーなので,明るさは関係ないと思うのですが,検証をするのは,蛍光灯の下が大いのですが,そ
の影響もあるのでしょかね。
茶の間で検証の様子です。水が噴霧機に入ってるので,おっちょこちょいの私は,こぼさないかヒヤヒヤして
ます。