Wi-Fi測距計

客先からの依頼で、離れた場所に測距値を送信するシステムのプロトタイプを作成した。
前半は、Wi-Fi重量計を参照

変位値Wi-Fi送信機 on Vimeo

◯Wi-Fi測距計にしたら、問題噴出
 客先から巻込型変位計をお借りして、つなげてみた。スケール(較正係数)を変えれば、ほぼ、完成と思っていたのだが、そう簡単にはいかなかった。
 HX711は、増幅率がx128,x64,x32の3種類ある。x128は測定長が短すぎる。x64だと500mmに対して350mmを超えると、だんだん誤差が増えてくる。x32で試そうとしたが、これはピンが違うので、配線を変える必要がある。LoadCellの場合、わずかな抵抗変動を拾ってしまうので、ソケットにピン挿すような配線のやり方は使えない。
結局、2回路のスライドスイッチをつけて切り替え式とし、配線をし直したのだが、裏面はジャンパー線だらけになってしまった。
 これで、ようやくx32で試せるようになった。500mはきちんと測れるようになったが、今度は静止状態の測定値がブレて安定しない。今回の目的は、正確な距離の測定ではなく、伸縮変化を捉えることにあるので、このブレは致命的だ。
印加電圧の問題もからんでいるような気がするが、モジュール回路の改造まで行うと大事になってしまうので、x32での使用は断念した。
客先には事情を説明し、中間地点から±20cm程度の伸縮変化を捉えるということで了解を得た。

◯Xamarinは茨の道だが、価値はある
 Javaでもある程度のプログラム(IOIOやArduinoでケーブルチェッカー)を作成したことはあるが、Eclipse+Javaという、アウェイ環境で、ほとほと参った苦い経験がある。
できれば、ホームのVisual Studio+C#で作成したい。C#でAndroidを使うには、Xamarinを使うしかない。マイナーだったXamarinも、いまはメジャーになったきたとはいえ、日本語情報は豊富とは言えない。その点、Javaは豊富な情報がある。

迷ったが、最終的にXamarinで作成することにした。わからないことがあると、Xamarinで検索し、無ければJavaで検索し、英語の投稿サイトを検索しまくらねばならず、さすがにスムースとは言えなかったが、これは覚悟の上だ。あんがいEclipseでAndroid開発をしていた経験も役立った。なにより、Arduinoの(Micro Studio)C、ライブラリのC++、AndroidのXamarin(C#)、WPFのC#の複数プラットフォームの異なる言語が、Visual Studioの1つのソリューションで管理できるところが秀逸だ。普通なら、4つの異なる開発環境を使い分けなければならず、考えただけでうんざりする。

◯マニュアル作成中に暗雲が...
通信機器の場合、まずは通信確立が必要なので、その手順をマニュアルに書き始めたのだが、1ページを超えたあたりで「これは基礎知識のない人には無理ではないか?」と思い始めた。今回の場合、下記のような手順を踏む必要がある。
  1. テザリング情報(SSIDとパスワード)をメモする
  2. Wi-FiをONする
  3. AP(デバイス)を検索して接続する
  4. ブラウザを開き、デバイスをブラウザで開き、テザリング情報を入力する
  5. テザリングをONにする
  6. アプリを起動する
  7. デバイスをリセットする
  8. 接続確立

1~4は、最初に1回行うだけの作業だが、それでもマニュアルにすると、数ページになってしまう。また、それぞれの機能のメニュー階層が深く、機種やOSによって、画面が異なる。XbeeやTWELITE DIPにように、通信相手が最初から決まっている場合はこんな問題は発生しないのだが、Android機のような汎用機を使う場合は、避けては通れない。このような状況は最初から想像はしていたが、具体化してみると、これは障壁といえるレベルだと感じた。

○最終的にはなんとかなった
 結論から言えば、1~8までをアプリで自動的に行うことで、ほぼ、障壁を回避することができた。ただ、実装は、そう簡単なものではなかった。単体の機能のON/OFFは簡単だが、それを連続して行わせた場合、先の設定が有効になったかどうかの判別しにくい。Android機は、すべて非同期で動作しているといっても良いので、単純に命令を並べただけでは、動作しない。完了状態は、メッセージをキャッチして検知するのだが、ほしい情報が得られるかは、タイミングも考慮する必要がある。わかってしまえば、おかしなことではないのだが、取れるはず情報が取れなかったり、送った情報が送られていなかったり、頭を抱えることが頻発した。

○まとめ
Androidと、ESP-WROOM-02の組み合わせは、応用性が高い。実際、1つのデバイスから、2つのAndroid機とPCへの値の表示もそれほど難しくなかった(ブロードキャストを使用)。
また、Xamarinでの開発も、十分実用になると感じた。歪ゲージやロードセルアンプ、Xamarinなど新しい試みも多い開発だったが、なんとか目的が達成できた点は良かったと思う。