距離を正確に測る その1 赤外線VL6180X

 電子工作で使う距離センサは、古くはシャープ製測距モジュールGP2Y0A21YKなどを利用していました。赤外線をパルスで照射して、反射光の強度を読み取ります。新しいI2C出力のGP2Y0E03なども同じく赤外線を使いますが、斜めに照射して三角法で距離を求めます。

 ST Microelectronicsの距離を測るセンサは公称データはありませんが、分解能が高いようにみえます。VL6180Xは赤外線を照射し、反射までの時間差から距離を計算します。VL53L0X とVL53L1Xはレーザーを使うので、真正面に反射物体があると正確に測れます。

  VL6180X VL53L0X VL53L1X
手段 赤外線 レーザー  レーザー
分解能 20cmでは1mm、60cmでは3mm   -   -
最大測定距離 100mm  2m(反射面白色)  4m
インターフェース I2C  I2C(最大400kHz)  I2C(最大1MHz)
動作電圧[V] 2.7~3.0  2.6~3.5  2.8V
モジュール動作電圧[V] 2.7~5.5(Pololu) 3.3~5V(秋月電子通商)
2.6~5.5V(Pololu)
 3.3V
モジュール PololuAdafruit  秋月電子通商スイッチサイエンスPololuAdafruit  ST Microelectronics
ライブラリ Arduino用Pololu、Adafruitあり  Arduino用Pololu、Adafruitあり  NUCLEO用

POLOLUのVL6180XモジュールはArduinoライブラリがある

 Arduino IDEのライブラリで検索するとVL6180Xのライブラリは複数見つかります。今回スイッチサイエンスで入手した「VL6180X 赤外線近接距離センサモジュール」はPOLOLU製でした。POLOLUのドライバはGitHubにソースがあります。このST Microelectronicsのセンサはマイコンが内蔵されていて、たくさんのレジスタを設定しなければなりません。VL6180Xはラズパイで利用しましたが、レジスタ類の働きを理解するのに1週間、データシートとサンプル・プログラムとをにらめっこしました。

VL6180Xモジュールのおもなスペック

 動作電圧は、モジュールにレギュレータが搭載されているので、2.7~5.5Vの範囲で使えます。反射条件が良ければ、測定範囲は255mmまでですが、おおよそ100mmが限界のようです。

 I2Cインターフェースの電圧レベル変換回路が入っているので、Arduino UNOの5V系もそのままつなげられます。I2C信号には10kΩのプルアップ抵抗が入っています。複数のVL6180Xを利用するときのGPIOピンもモジュールに出ています。

接続

ライブラリの導入

 https://github.com/pololu/vl6180x-arduinoからZIPファイルでライブラリをダウンロードします。

 Web EditorのLibrariesのCustomタブにあるZipファイルのアップロードをクリックします。

 ダウンロード・フォルダに入っているvl6180x-arduino-master.zipを指定して、アップロードを完了させます。

スケッチ

 サンプル・スケッチの中からRangeSingleShotを選び、実行しました。

 Monitorを開くと、問題なく計測しているようです。

実測

 赤外線を反射するのはアルミニウムの放熱器です。黒色ではなく塗装のないアルマイトの金属面です。グレーがかっています。センサに垂直になるようにしながら距離をずらしましたが、角度が付くと表示値も変わります。読み取っている値もばらつきがあります。反射面がわずかに凸凹がある金属面なのが影響しているかもしれません。

距離[mm] 表示値
 10  9~12
20  20~23 
30  30~33 
40  40~43 
50  49~52 
60  59~61 
70  66~69 
80  74~77 
90  84~87 
100 94~99
110 107~110
120 117~120
130 126~130
140 135~140
150 145~152
160 157~160
170 168~170
180 176~182
190 187~190
200 196~200

前へ

離れた場所の〇〇が測りたい その2 UART

次へ

距離を正確に測る その2 レーザーVL53L0X