VL53L1Xとは...?
VL53L1Xとは、小型距測センサです。最大で400cmまで距測することができます。測定したデータはI2C通信を用いてArduinoに送ることが可能です。(1)
今回使用しているものは、Pololu社が販売していますが、同じVL53L1Xを使用した類似製品はPololu社以外の会社も販売しています。
レーザーの危険性
この製品はレーザー光をVL53L1Xから射出し、跳ね返ってきたレーザーの角度から、測定対象物との距離を算出しています。
ご存じの通り、レーザーは目などに入ると危険性があるため、その危険性に関してJIS基準(JIS C 6802)で定められており、今回使用するVL53L1Xは、同基準のクラス1であることから、危険性の低いレーザー光であることが分かります。
当然、意図的に長時間VL53L1Xを裸眼で直視すれば健康被害が出る可能性も否めない為、レーザー光を用いている製品である点ご留意の上、使用してください。
使用物品・動作環境
使用物品
名称 | 個数 | サイトURL |
Pololu VL53L1X TOF 距測センサ | 1 | スイッチサイエンス |
ジャンパー線(メス-オス) | 若干 | Amazon |
Arduino Uno 等 | 1 | Amazon |
ブレットボード(あれば) | 1 | Amazon |
これ以外にも、ジャンパー線(オス-オス)が若干数あるといいかもしれません。
動作環境
これ以下で行われている各種プログラミング及びその実行は、Windows10下におけるArduinoIDE(1.8.2)で実行されています。また、ArduinoUnoを用いています。
使い方
ArduinoIDEを起動
ArduinoIDEが自分のPCに入っていない場合は、こちらのページから自分のPCのOSのArduinoIDEをインストールしてください。
既にインストール済み若しくはインストールが終了した人は、ArduinoIDEを起動させます。
ArduinoとPCの接続
ArduinoとPCをUSB接続させます。
接続後に[ツール]-[ボード]でボード情報が適切なものが選択されていることと、[ツール]-[シリアルポート]のCOMの横のかっこに[ツール]-[ボード]で選択してあるボードの名前が書かれているかを確認します。
ArduinoとVL53L1Xの接続
ArduinoとVL53L1Xセンサを接続します。
オス-メスジャンパー線を使うとやりやすいです。
ArduinoとVL53L1Xとの接続を以下の図と表のように行います。
VL53L1X側 | Arduino側 |
VINピン | 5Vピン |
GNDピン | GNDピン |
SDAピン | SDAピン |
SCLピン | SCLピン |
VL53L1Xのプログラム
次にプログラムを打っていきます。
まず、VL53L1Xのライブラリをインストールします。
[ツール]-[ライブラリを管理]を選択し、
出てきたライブラリマネージャの検索欄に「VL53L1X」と入力し、表示されたライブラリの中で、「by Pololu」となっている物をインストールします。
(画像はインストール後のものです。最新バージョンを選択し、インストールボタンを押せばインストールがされます。)
インストールが終了したら、[閉じる]を押して元の画面に戻り、プログラム入力部に、以下のプログラムを入力してください。
//From https://github.com/pololu/vl53l1x-arduino/tree/master/examples/ContinuousWithDetails
#include <Wire.h>
#include <VL53L1X.h>
VL53L1X sensor;
void setup()
{
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000); // use 400 kHz I2C
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1);
}
sensor.setDistanceMode(VL53L1X::Long);
sensor.setMeasurementTimingBudget(50000);
sensor.startContinuous(50);
}
void loop()
{
Serial.print(sensor.read());
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
次に、プログラムを実行します。左上の矢印マークのボタンを押し、(保存を求める画面があれば保存をしてください。)その後、右上の虫眼鏡のようなボタンを押して、シリアルモニタを開きます。
シリアルモニタを開いたら、右下の通信速度が115200bpsに設定されているかを確認してください。
回路の接続や、設定が正常に行われていれば、VL53L1Xと測定対象物との距離がmm単位で刻々と表示されているはずです。
もしうまくいかなければ......
もし正常な値が表示されていなければ、以下のチェックリストをチェックしてなお表示されなければ、コメントで質問してください。
□ArduinoとPCのUSB接続を一度切り離し、再度接続したうえで、マイコンボードにプログラムを書き込むところからやり直してください。
□Arduinoとセンサを一度Arduinoから切り離し、再度接続した上で、マイコンボードにプログラムを書き込むところからやり直してください。
□[ツール]→[シリアルポート]が正常に選択されていますか?
□[ツール]→[ボード]が今お使いのボードが選択されていますか?
□回路図通りに回路が構成されていますか?
□シリアルモニタで通信速度は115200bpsが選択されていますか?
□VL53L1Xセンサのレーザー発出部についている、プラスチックのシールははがされていますか?(これを取らないと正確な測定ができません。)
※VL53L1XセンサはPololu社以外のメーカからも販売されています。Pololu社以外のVL53L1Xセンサをご利用の場合は質問にお答えできかねる場合があります。
まとめ
VL53L1XとArduinoを使えば、簡単に、比較的安価に距離を正確に測定することが可能です。
次回は、VL53L1X、Arduinoと圧電スピーカを使って、警報装置を作ってみたいと思います。もしよかったら、見てみてください。
(※)文中の社名、商品名などは各社の商標または登録商標である場合があります
(1)https://www.st.com/ja/imaging-and-photonics-solutions/vl53l1x.html
コメント
初めまして、edyと申します。
記事を参考にさせて頂きました、無事VL53L1Xを動かすことが出来ました。
ありがとうございます。
ブログを書いていますので、ご覧いただければ幸いです。
https://edycube.blog.fc2.com/blog-entry-1130.html
初めまして、高専生ブロガーのあしゃのと申します。
この度は、私のブログを参考にしていただいてありがとうございます。
edy様のブログを拝見させていただきました。
センサー前の小さなフィルムを外し忘れて、VL53L1Xなのに2m以上計測不能となり、1週間くらい悩んだ苦い経験を思い出しましたw
これからもどうぞよろしくお願いします。