Arduinoを使って『距離計』を自作してみるページ。
超音波測距モジュールHY-SRF05を使って超音波による距離計を作ってみるページ。
ArduinoとHY-SRF05で超音波距離計を作ることはできました。
が、温度計を組み合わせたら、謎の失敗に終わったということを記録しておきます。
超音波は、温度や湿度、気圧などの影響を受けやすいと言われており、モニタに表示した際、値が多少ブレ、常時変動するのは、当然と考えて良いでしょうが、それとは別に微妙な状況に遭遇しました。
と言うのも...
HY-SRF05、温度センサ、0.96インチOLED(有機EL(パネル))も単独では購入した当初の動作確認はできました。
今回検証時には、(ちなみに全てAmazon/HiLetgoで買った)Pro Mini、Nano、Uno共に正常に機能することを確認済みです。
例えば、室温20度でNano互換機+HY-SRF05+LCD 1602(I2Cモジュール接続)だとかなりの精度が出ました。
超音波の遮蔽物となり得るものが一切ない環境で試したわけではないため、特に最長距離は正確とは言えませんが、実測してみたところ、HY-SRF05の安定した検出可能距離範囲は、2cm〜3.2m(20mm〜3200mm)程度と言ったところかと。
そのスケッチはこれです。
Arduino製回転計を見直し、LCD 1602を併用して気づいた点を修正します。
自身が他のライブラリと勘違いして書き間違えたのか、はたまた当初使っていたjm_LiquidCrystal_I2Cの仕様が変わったようでjm_LiquidCrystal_I2C.hをインクルードしたり、更に追加で2つほどヘッダファイルをダウンロードしてこなくてはならず、いざやってみたら、ちょっとハマりました。
結果、気づけば、Arduino IDEの[ライブラリ管理]に複数あったLiquidCrystalのI2C系ライブラリの内、LiquidCrystal_PCF8574が使いやすそうなので変更しておきます。
このライブラリを使う場合、Arduino IDEの[スケッチ] => [ライブラリをインクルード]から[LiquidCrystal_PCF8574](LiquidCrystal_PCF8574.h)をインクルード、スケッチ内に太字で追記しておきますが、インスタンス生成時、LiquidCrystal_PCF8574 lcd(0x27);/LiquidCrystal_PCF8574 lcd(0x3F);のように識別子のみ(表示文字数や行数指定は不要)でOK、また、デフォルトでは、バックライトは消灯のようで明示的にlcd.setBacklight(HIGH);行を追加(既存行lcd.backlight();と差し替え)すれば、あとは、同様に使えます。
が、HY-SRF05に温度センサ・OLED 0.96インチを組み合わせ、温度による超音波精度を計算、かつ、ArduinoボードにPro MiniとNanoを使うと気温17度ほどの時、アナログ入力値の変動がわずかなのに温度誤差がプラスマイナスに激しく変動、そのブレとは別に算出距離が正常値とほぼ一定の値を繰り返し表示したりし、Unoだと算出温度が10度ほど高くはなりますが、多少のブレはあり、絶えず変動はしているものの、距離はある程度安定する
という状況に...。
とりあえず、検証に使った、切り貼りのラフスケッチを晒しておきます。
コメントアウトしている部分もありますが、代替しても、外しても結果は同じでした。
ちなみに温度算出に関しては、これら数値がどこから出てくるのか不明も、こんな式もあるようで試してみましたが、ほぼ正確な値に落ち着くまで一定の時間がかかるため、今回は見送りました。
Pro MiniとNanoについては、一向に上達する兆しが見えず、いつまで経っても下手くそな自身が半田付けしたのでハンダ不良の可能性が高いんだろうなとも思う反面、Pro MiniもNanoも複数個試してどれも同じような状況になることからして本当にそれ(だけ)が原因と断定してよいのか微妙にも思えます。
ただ、そういえば、電圧計を作った時、UnoやPro Miniでは誤差はないのに、なぜか、Arduino Nanoでは複数個試してみても、他方、AC100V家電制御時にUno+温度センサを使ってみた際にも約10度程度高くなったのですが、何れのケースもほかが定数値であることから、アナログ入力値が高いか演算誤差が生じていることになりますが、かと言って何れかの個体やArduinoボードだけの現象ではなさ気となると、何らかの複合的な要因によるものなのか...。
単体ではOKなため、測距モジュールも、また、OLEDやシリアルモニタ上も誤差は誤差として表示されるため、問題ないと思われます。
スケッチのサイズも変数宣言も40〜50%程度で問題はないと思われます。
Uno、Pro Mini、Nano共にATmega328Pなので演算や演算時間に関しては仕様上は条件は同じと思われます。
演算時間が微妙に足りないのか、それとも、これらの内、何か見過ごしているのか、他に何かあるのか、自身の単純ミスや確認ミスか、どのPro MiniやNanoボードも同じ要因を引き起こすような眼には見えないハンダ飛びやハンダ不良があるのか、...互換機メーカーの差、個体差、ロット差などもなくもないのか?んー...。
ちなみに、この検証時、ケーシングを想定していない状態ながら、一通りできたところで写真を撮ろうと、つい、うっかり、グリップの強いステンレス製洗濯バサミでOLEDのフレキ配線部を挟んでしまったら、当然のようにショートして熱くなり、壊れ...意気消沈、以後、確認作業する気も失せ、中止...。
あ...、気温を加味した際の加減乗除で優先すべき部分式にカッコがないからか...?