前回はプロトタイプが概ね完成したものの、距離が65cmの結果となっていたね。
管の長さは100cmだから35cmも誤差があるよ。
超音波センサはこんな感じで管の中を覗き込むように配置してるんだけど、これが原因かもしれない。

なんかね、管の内部はツルツルのように見えて些細な凹凸があるらしい。
その凹凸に超音波が反射して帰ってくるのが65cmくらいの所にあるかもしれないんだって。
1 : 19c 606mm sended.
1 : 19c 991mm sended.
1 : 19c 991mm sended.
1 : 20c 993mm sended.
1 : 19c 995mm sended.
こうしたら結果は99cmくらいの結果を返してくれるようになったよ。
やっぱり原因は管の内部にありそうだなあ。
ソースコードで電圧を調整する部分も修正加えたけど、やはり距離の誤差はほとんど影響なかった。
管の外で測ったら妥当な数値が出るなら物理的な問題じゃないかなあ。
とりあえず超音波センサは管の外へ向ければ解決できそうだし、これでいきましょ。

という訳で超音波センサーを筒の外から見下ろす形で造形。

覗き穴は円形から四角形へ変更したよ。

できた!

こんな感じで装着。これなら超音波センサーが落下しにくい筈。

ところが、想定とは違う距離を計測しているんだよね。
想定は、こう。
超音波センサーから80cmの地点を0cmの基準にしたいんだ。

つまり、泥に刺さっていない今は-20cmが正しい測定値になる筈なんだ。
計算式でも間違えてるのかなー?
long duration = pulseIn(ECHO, HIGH);
int 距離 = (int)(duration * soundSpeed / 2.0);
int 水位 = 800 - 距離;
超音波センサから800mmの距離が水位0mmの基準だよ。
つまり超音波センサが1000mmを算出すれば液晶には-200mmと表示されて欲しいし、超音波センサが700mmを算出すれば液晶には100mmと表示されて欲しい。
室内では管が埋まってないから超音波センサは1000mmを算出する筈なんだ。
だから液晶には-200mmが表示される想定なのに、実際には11mmと表示されている。
何かがおかしいんだよなあ。
