IoT何をいまさら(24) ST VL53L0X, TOF センサ

JosephHalfmoon

1カ月くらい前にシャープ製の三角測量原理の測距センサをいじってみましたが、モダンな測距センサの主流といえばTOF(Time Of Flight)センサでしょう。スマホにまで入りつつあるTOFセンサ、ちょっと遊んでみたくなって入手いたしました。ST Microelectronics社のVL53L0Xという型番のTOFセンサです。940nm Class 1 レーザを使用し、最小3cmから最大200cm(屋内)まで測距できるもの。このセンサに加え電源やレベル変換ICなどを搭載したモジュールを、例によって秋月通商から購入。コネクタから配線が取り出せるようになっているので、センサを「ボード」に取り付けるだけで動作します。

まずは、センサモジュールの写真です。

中央の長方形の黒い表面実装部品が、VL53L0Xです。モジュールの左側の穴の上に褐色の長方形のフィルムが張り付いていますが、これは、V53L0Xの表面に張り付いていたものです。使用時には剥がすようにとの指示あり、剥がしたところです。ぱっと見、普通の樹脂モールドの部品に見えます。部品の説明を読んでなければ、この内部からレーザーが出力されるとは思わないかもしれません。

今回このセンサを動かしてみるにあたっては、一切、ソフトウエアを書いていないです。というのも、

V53L0Xセンサそのものの内部レジスタ等は非公開

だからです。秋月通商の資料では、GitHubで公開のPololu Arduino library for VL53L0Xを参考に作れみたいな書き方になっています。ま、V53L0Xそのものは、I2Cで制御なので、I2Cバスを見張っていればどんな通信しているか分かるでしょうが、そういうリバース的なことはしていません。

それで、STmicroelectronics社としては、どうやって評価してもらおうとしているかと言うと、

  1. 自社のマイコンSTM32F401で動作するセンサ制御ソフトのバイナリを配布
  2. 上記のマイコンに対して動作するAPI資料を公開
  3. 上記のマイコンをUSB-Serial経由でPCに接続したとき用のサンプルソフトを配布

という形です。つまり、直接センサを制御する部分は非公開にしておくけれども、センサを制御するマイコンに対するAPIを公開するので、それを使ってもらいたい、ということのようです。ちょうどうまい具合にというか、かなり意図的にNucleo F401REボードは入手済です。写真左側が、Nucleo  F401REです。現在、ドップラーセンサの制御に使っているNucleoF092RBとは見た目は見分けが付かなくくらい似ていますが、F401REの方は、Arm Cortex M4搭載。浮動小数点演算器も搭載の強力なマイコンです。

 

ST社の資料を読んでいると、Nucleoにセンサを接続するときは、

X-NUCLEO-53L0A1拡張ボードを使え

と書いてあるのですが、そこまでは入手していないです。そこで工作。右のボードは、お手製のArduino Shield型、I2Cインタフェースボードもどきです。センサモジュールと接続するワイヤを簡単にネジ止めできるようにしてみました。

 

コネクタを接続したセンサ裏面は上の写真のとおりです。とりあえず、電源、GNDとSDA, SCLを接続すれば動作するようです。

Nucleoボードに手製のArduinoシールド型インタフェースを差し込み、センサと接続したところが下のような感じです。センサとの接続ケーブルが結構長いので収拾がつかなくなっていますが。

 

Nucleoボードへのバイナリの書き込みは、NucleoボードをPCに接続すれば、ドライブとして見えるので、そこにバイナリを投げ込むだけです。

VL53L0_UBSerComm_460800_F401.bin

また、PCからは仮想COMポート経由でもNucleoボードに接続しているので、コマンドプロンプトを開いて、いくつかあるExampleのうち、もっとも簡単な以下のものを走らせてみます。

vl53l0x_SingleRanging_Example.exe

うまくCOMポートを認識しない場合は、コマンドライン引数として与えることもできるようですが、私の環境の場合は、自動的にNucleoにアサインの仮想COMポートが検出され、以下のように動作を始めました。

 

しかし、Measured distance: 8190ってなんでしょう。センサーは天井向いていますが、天井の高さは8mもありません。単位が違う??でも、センサーそのものが測距のレンジは屋内2m(屋外と屋内で違う理由も後で調べねばならないでしょう)。

走らせたサンプルアプリは、起動し、何度か測距を済ませると、結果を表示して終わってしまいます。8190はあんまりなので、とりあえずのターゲットとして

自分の手をセンサの上に掲げて動作させて

みます。その高さ20cmくらい。

こんどは、227と測定値が返ってきました。227mm。そんな感じじゃないだろうか。でもも少し、正確に、ということで30cmの物差しを取り出して机の上に立て、物差しの上に手のひらを乗せるような感じでセンサに向けてみました。約30cmちょっとくらいか。

でました。314mm。では、物差しの半分くらい15cmあたりに手を置いたらどうでしょうかね。

158mm。かなりいい加減な「テスト」ではありますが、TOFセンサで測距できてる、感じはします。

 

まあ、実際に使うとなったらAPIとサンプルアプリのソースなどを熟読しないとまずいですが、とりあえず動かすだけなら、配線繋ぐだけ。

IoT何をいまさら(23) Python と Bottle で通信相手を へ戻る

IoT何をいまさら(25) ATコマンドパーサ、とりあえず自作 へ進む