VL53L1X距離センサをArduinoで使ってみた【使い方解説】

Pololu VL53L1X SWITCH SCIENCE

VL53L1Xとは…?

VL53L1Xとは、小型距測センサです。最大で400cmまで距測することができます。測定したデータはI2C通信を用いてArduinoに送ることが可能です。(1)

今回使用しているものは、Pololu社が販売していますが、同じVL53L1Xを使用した類似製品はPololu社以外の会社も販売しています。

レーザーの危険性

この製品はレーザー光をVL53L1Xから射出し、跳ね返ってきたレーザーの角度から、測定対象物との距離を算出しています。

ご存じの通り、レーザーは目などに入ると危険性があるため、その危険性に関してJIS基準(JIS C 6802)で定められており、今回使用するVL53L1Xは、同基準のクラス1であることから、危険性の低いレーザー光であることが分かります。

当然、意図的に長時間VL53L1Xを裸眼で直視すれば健康被害が出る可能性も否めない為、レーザー光を用いている製品である点ご留意の上、使用してください。

使用物品・動作環境

使用物品

名称個数サイトURL
Pololu VL53L1X TOF 距測センサ1スイッチサイエンス
ジャンパー線(メス-オス)若干スイッチサイエンス
Arduino Uno 等1スイッチサイエンス
アマゾン
ブレットボード(あれば)1スイッチサイエンス

これ以外にも、ジャンパー線(オス-オス)が若干数あるといいかもしれません。

動作環境

これ以下で行われている各種プログラミング及びその実行は、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と圧電スピーカを使って、警報装置を作ってみたいと思います。もしよかったら、見てみてください。

VL53L1Xを使って警報装置を作ってみた【Arduino】
Pololu VL53L1X SWITCH SCIENCEVL53L1Xとは...?VL53L1Xがなんぞやという方は、先にVL53L1Xの使い方解説をご覧ください。これ以降は、使い方解説で解説した内容を前提に書い...





(※)文中の社名、商品名などは各社の商標または登録商標である場合があります
(1)https://www.st.com/ja/imaging-and-photonics-solutions/vl53l1x.html

コメント

  1. edy より:

    初めまして、edyと申します。
    記事を参考にさせて頂きました、無事VL53L1Xを動かすことが出来ました。
    ありがとうございます。

    ブログを書いていますので、ご覧いただければ幸いです。
    https://edycube.blog.fc2.com/blog-entry-1130.html

    • asyano より:

      初めまして、高専生ブロガーのあしゃのと申します。
      この度は、私のブログを参考にしていただいてありがとうございます。

      edy様のブログを拝見させていただきました。
      センサー前の小さなフィルムを外し忘れて、VL53L1Xなのに2m以上計測不能となり、1週間くらい悩んだ苦い経験を思い出しましたw

      これからもどうぞよろしくお願いします。

タイトルとURLをコピーしました