M5Stack

【M5Stack】レーザー光距離センサユニットの使い方を分かりやすく解説!【ToF】

m5stack-tof.png

<この記事について>

  • 「M5Stackに接続するレーザー光距離センサユニットの使い方がよく分からない…」と悩んでいる人のために書きました。
  • この記事を読むことで、M5Stackでレーザー光距離センサユニット(ToF)を使う方法が分かります。
  • 結論としては、「ライブラリをインストール」→「ユニットを接続」→「プログラムを書いて実行」という手順でレーザー光距離センサユニットを使うことができます。

こんにちは!こんばんは!

ちゃとらです(・ω・)/

何回かこのユニットを使ってみましたが、だいだい20mm~1250mm間の距離が測定可能な感じです。

ちなみにこのユニットはPORT Aに接続して使用するので、M5Stack FIREでない他のM5Stackでも使用可能です。

ちゃとら

M5Stackでレーザー光距離センサユニット(ToF)を使う方法について分かりやすく解説していきます!

今回扱う電子機器

M5Stackの種類M5Stack FIRE(V2.6)
値段49.90ドル(税別)
(販売価格は7700円程 投稿日現在)
生産国中国
サイズ5.4 x 5.4 x 3.05 cm
内容物ToFユニット(1個)、Groveケーブル(1個)
値段8.50ドル(税別)
(販売価格は1300円程 投稿日現在)
生産国中国
サイズ2.42 x 3.22 x 0.81 cm

M5StackはM5Stack FIREを使用します。7700円程度の値段です。

レーザー光距離センサであるToFは1300円ぐらいの価格なので、温湿度気圧センサのENV Ⅲより少し高いです。専用のケーブルもセットになっています。

超音波距離センサの方が300円程安いですが、精度や測定可能距離が異なります。

ToFについて

ToFのセンサや仕組みについて解説していきます。

ToFの写真その1
ToFの写真その2
項目内容
搭載センサVL53L0X
接続場所PORT A
通信方式I2C

見ての通り、ToFは通信方式がI2CなのでPORT Aに接続します。

また、ToFにはVL53L0Xというレーザ測距センサモジュールが搭載されています。このモジュールを使用することで距離計測が可能となっています。

0~最大2mまでの距離が測定可能と書かれていますが、使ってみた感じ2cm~最大125cmぐらいしか測定できないんですよね…なんでだろ?

ToFの仕組み

ToFとはTime of Flight(飛行時間)の略であり、センサから投射した光を対象物に当て、光がセンサから対象物の往復で戻ってきた時間から距離を計測します。

ToFのイメージとしては以下の図のようになります。

ToFのイメージ図

具体的な計算式は異なると思いますが、センサと対象物の距離をd、光の速さをc、光が往復するまでに経過した時間をtとするとイメージ図からの距離計算式は……

2d = ct となります。

ToFが搭載されている代表例な電子機器はスマホのカメラが挙げられます。

使い方

手順ごとにM5StackでToFを制御する方法を解説していきます。

  1. 「VL53L0X」ライブラリをインストールする
  2. M5StackとToFを接続する
  3. プログラムを書いて実行する

全体的に見ても難しい所はなく、慣れている人はスムーズに実行できるかと思います。

ここでは、M5Stackのセットアップ(Arduino IDE)は完了していること前提で解説していきます。

ちゃとら

M5Stackのセットアップ(Arduino IDE)がまだ完了していない人は以下の記事を参考にしてください!

m5stack-setup-arduino.png
【M5Stack】M5Stackのセットアップ(Arduino)を分かりやすく解説!【Arduino IDE】この記事では、M5Stackのセットアップ(Arduino IDE)について解説しています。手順としては、「USBドライバをインストール」→「ボードマネージャをインストール」→「ライブラリをインストール」→「プログラムを書いて実行」となっています。...

ライブラリをインストール

プログラムを作成する際に必要なライブラリをインストールしていきます。

今回は「VL53L0X.h」を使用するので、「VL53L0X」というライブラリをインストールします。

Arduino IDEを開き「ツール」→「ライブラリを管理…」を選択し、ライブラリマネージャで「VL53L0X」と検索しライブラリをインストールしましょう。

枠内の右下に出てくる「インストール」ボタンをクリックすればインストールできます。

ライブラリのインストール
ライブラリの詳細リンク

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

接続

接続かなり簡単でGroveケーブルを使ってToFをM5Stackに接続するだけです。M5Stackの右側の接続口に接続しましょう。

M5Stackの接続口

M5StackとToFの接続

こんな感じで接続します。ToFはI2C通信で使うのでPORT Aに接続します。PORT B,Cは別の通信方式の接続口なので間違えないよう注意です!

プログラムを書いて実行

一例ですがM5StackでToFを使うプログラムを作成してみました。

#include <M5Stack.h>
#include "VL53L0X.h"
VL53L0X vl53l0x; // VL53L0Xオブジェクトを生成

// 使用するそれぞれの距離データを初期化
int dist1 = 0.0;
int dist2 = 0.0;

void setup() 
{
  M5.begin();
  Wire.begin();   // I2C通信の設定
  
  vl53l0x.init(); // vl53l0xを初期化

  M5.Lcd.setTextSize(3);
}

void loop() 
{
  // 距離データを取得
  dist1 = vl53l0x.readRangeSingleMillimeters();
  // 距離データを四捨五入してcmに変換
  dist2 = round((float)dist1 / 10.0);

  // それぞれの距離データをシリアル通信で送信
  Serial.print("D1(mm):");
  Serial.println(dist1);
  Serial.print("D2(cm):");
  Serial.println(dist2);

  // それぞれの距離データをM5Stackに表示
  M5.Lcd.setCursor(0, 50);
  M5.Lcd.printf("D1: %d mm ", dist1);
  M5.Lcd.setCursor(0, 100);
  M5.Lcd.printf("D2: %d cm ", dist2);

  delay(100);
}

24行目で四捨五入するためにround()を使用しています。Arduino IDEではmath.hをインクルードしなくてもいくつかの数学的な関数は使用可能です。

プログラムを作成できたら、シリアルポートとボードの設定を忘れずに行いましょう。

「ツール」→「シリアルポート」でM5Stackが接続されているポート番号を選び、
「ツール」→「ボード」→「ESP32 Arduino」で「M5Stack-Core-ESP32」を選びましょう。

それぞれ設定ができたら、M5Stackにプログラムを書き込みます。

M5StackとToFの距離を測定してみました。delay(100)があるので少しぎこちない感じですが、delay(100)を無くすとスムーズに測定されます。

距離データ

シリアルモニタ表示させるときは通信速度を115200bpsに設定します。

シリアルモニタ表示の方が変化が分かるのでこっちの方が分かりやすいですね…

ToFを用いた距離測定はこんな感じとなります。

まとめ

ToFについて

  1. ToFは通信方式がI2CなのでPORT Aに接続する。レーザー光距離センサとしてはVL53L0Xが搭載されていている。
  2. 「ライブラリをインストール」→「ユニットを接続」→「プログラムを作成して実行」という簡単な手順でToFを制御可能。
ちゃとら

距離測定できるので、意外と用途は多いかも?

今回はここまでです。

ちゃとら(・ω・)/