STMicroelectronics の近接TOF距離センサVL6180Xを試す。2016062001
資料とPCとにらめっこして悪戦苦闘で1週間かかってようやく動いたので簡単に覚え書き。

この距離センサはI2Cで制御するのであるが、自分が今すぐやれるプログラム開発はExcel VBAなのでこれでがんばる。Visual studioもCもC++もわからん。マイコンのプログラムも今更やりたくない。

そこで、PCから直接I2C制御するためにUSB-I2C変換モジュールを用意する。
最初に選択したのはFTDI社FT232H搭載モジュール。結論から言うと断念。
いろいろ試したが、DLLのAPI関数を呼び出すためのヘッダーファイルがC言語用の.hファイルしか用意されておらず、自分なりにVB用に書き換えを試みたが、型とポインタと構文が把握しきれず、やっとれるかということで頓挫。

次に選択して制御できたのはSilicon Laboratories社製チップ搭載のサンハヤトのMM-CP2112。
商品説明Webには各言語用ヘッダファイルありますとあったが、現行SDKパッケージ(Ver 6.7.2)ではまたC言語用.hファイルしかない(ΦωΦ OMG)
Webをあちこち探しているとCP2112質問コミュニティの片隅に古いSDKパッケージ(Ver 1.0)を見つけ、その中にExcel VBAで使える”SLABCP2112.bas”が入っていた(ΦωΦラッキー)
CP2112を手動で制御する”HidSmbus Example”というプログラムがとても便利。1文づつ送信、受信し、きちんと動いているか確認できる。

あとはAPI関数を使ってCP2112を動かすのだが、I2Cデータの並び、ポインタ、BYTE配列など、トライ&エラーを繰り返してなんとか完成。VL6180Xは多くのアプリケーションノートがあるが、データシートとAN4545は必読。プライベートレジストリにお決まりのデータを入力してやっと動くようになる。
お決まりなのだからデフォルトでやってくれればいいのにと思う。この初期化をやらないと正しい距離測定動作をしてくれない(200mm当たりでなんとなく数値が増減するレスポンス)

VL6180Xはいろんな動作モードがあり、スタンドアローンで連続で距離を測定し、しきい値を超えたらGPIOからHレベル出力するということもできる。距離に応じたアナログ出力はできない。I2Cでホストから制御するのであれば、ソフト側で測定と読み出しを繰り返せば良い。

全て問題なくプログラムできると、0mmから100mmまで正確に測定できる。2016062002
連続で測定しながらセンサの前で手を近づけたり遠ざけたりしてデータを記録し、リアルタイムでグラフ表示させてみた。
信頼性は落ちるとのことだが、200mmくらいまでは測れている。

なかなかすぐれもののセンサである。
スマートホンへの搭載を想定していて、WebサイトやYoutubeでの紹介動画もかっこよく作られている。

このセンサの距離測定原理はTOF time of flightで光パルスの走行時間から距離を割り出している。光は1cmの距離を往復するのに66psである。それはわかるが、こんな超短時間にカウンタを走らせたり時間を測定したりするのも簡単ではないと思うのだがどうやっているのだろうか(こんな小さなパッケージの中で!)
→予想するに、レーザーON~受光までの間にコンデンサをチャージしてその量で距離を測っているものと思われる。