M5StackGrayでM5Stack_ToF_UNIT(レーザー距離センサ)の動作テスト

2021.7.8 Coskx Lab  

1 はじめに

M5Stack GrayにM5Stack_ToF_UNIT(レーザー距離センサ)を接続して周囲の対象物までの距離を測定します。

M5Stack_ToF_UNITはレーザー距離センサVL53L0X(STMicroelectronics)をM5StackのGrovePortA(I2C)接続専用として販売されています。
VL53L0Xは,赤外線レーザにより2m程度までの距離を測定することができ,M5StackにはI2Cでデータを転送します。
VL53L0Xを基板上に取り付けた製品は多数ありますがそのうちの一つです。

2 使用環境

3 接続

付属のケーブルで,M5StackのPortA(赤いポート)にM5Stack_ToF_UNITをつなげます。
M5StackのPortAの電源ラインには5Vが供給されていますが,SCL,SDAの信号線は3.3Vで通信しています。(M5Stackの信号は3.3Vです。M5Stack_ToF_UNITは内部で5V電源から3.3Vを作って,信号を3.3Vにしています。)
注意 PortAのソケットの形が同じだからといって,M5Stack_ToF_UNITを5V系のマイコンに接続して使うことはできません。
Groveシステムは接続は簡単なのですが,信号の電圧という落とし穴があります。






PortAにはM5Stackの5V,GND,SDA,SCLが引き出されているだけなので,PortA経由ではなく直接5V,GND,SDA,SCLにつないでも,OKです。(3.5Vにつながないように気を付けてください。)



4 準備

VL53L0XはI2CでCPUとデータをやり取りしますが,そのためのライブラリが必要です。
Arduino IDEにて,「ツール」メニューから,「ライブラリを管理」を選び,「ライブラリマネージャ」を開きます。
上部にある「タイプ すべて」,「トピック すべて」の右側の長いボックスが検索欄なので,
そこに「VL53L0X」と書き込むと検索されます。複数の「VL53L0X」が見つかりますが,
「by PoLolu」と書いてあるものを選んでインストールします。

ライブラリを使わずに,プログラムした(長いプログラムになります)例も
https://github.com/m5stack/M5Stack/blob/master/examples/Unit/ToF_VL53L0X/ToF_VL53L0X.ino
にあります。


5 テストプログラム

https://github.com/pololu/vl53l0x-arduino
を参考にさせていただきました。

実行時に,測定距離2m以上(実際には1.2mを超えた付近から)の場合,8190mmが表示されますが,これは測定が失敗しているときです。

  動作テスト用プログラム本体(センサは常時稼働)

//DistanceSenSor_VL53l0xTest01.ino//

//https://github.com/pololu/vl53l0x-arduino

#include <M5Stack.h>
#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

const int SDApin = 21; //SDAピン番号
const int SCLpin = 22; //SCLピン番号

void setup()
{
  M5.begin();
  M5.Power.begin();
  Wire.begin(SDApin,SCLpin); //ここをGray用に設定しないと通信に失敗する
  Wire.setClock(400000); // use 400 kHz I2C
  M5.Lcd.setTextSize(2); //高さ16 26文字/行

    while (1);
  if (!sensor.init())
  {
    M5.Lcd.println("Failed to detect and initialize sensor!");
  }
  sensor.setTimeout(500); //[msec]
  sensor.setMeasurementTimingBudget(50000); //測定タイミングバジェット(1回の距離測定)に許容される時間[micros]
  sensor.startContinuous();
  M5.Lcd.println("VL53L0X Started");
}

void loop()
{
  int distance = sensor.readRangeContinuousMillimeters();
  if (sensor.timeoutOccurred()) {
    M5.Lcd.setCursor(0, 80);
    M5.Lcd.print("TIMEOUT");
  } else {
    M5.Lcd.setCursor(0, 80);
    M5.Lcd.print("        ");
  }
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.print("                          ");
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.printf("distance[mm]:    %5d  \n",distance);
  delay(100);//[msec]
}

6 まとめ

センサを手にもって,周囲に向けたところ,1.2m程度までの距離測定ができました。