GroveモジュールTF Mini LiDARを使用してみる

こちらはSeeed UG Advent Calendar 2020の8日目のエントリーとなります。

qiita.com

今年はどんなネタにしようかなと悩んでいたのですが、たまたま購入していたGroveモジュールが日本ではあまり使われている様子だったので 使用してエントリー化したいと思います。本家のWikiページも英語ではありますが、わかりやすく書かれているのでそれほど難しくないです。

TF Mini LiDARは赤外線レーザーの照射を行って、その反射した光を計測し、時間差および位相差を算出して距離を測定するものになります。超音波距離センサモジュール(Ultrasonic Ranger)という超音波式の距離センサーがありますが、それの赤外線版がこちらのモジュールになります。

両方とも距離を計測するものにはなるのですが、TF Mini LiDARはSerialデバイスUltrasonic RangerはPWMデバイスとなっています。 あと、動作電圧は5Vになっているので注意したほうが良さそうです。Ultrasonic Rangerは3.3Vでも5Vでも動作するようです。

購入ページ

www.seeedstudio.com

www.switch-science.com

TF Mini LiDARのスペックシート

項目
Product Name TFmini
Operating range 0.3m-12m
Maximum operating range at 10% reflectivity 5m
Average power consumption 0.6W
Applicable voltage range 4.5V-6V
Acceptance angle 2.3°
Minimum resolution ratio 1cm
Frequency 100Hz
Accuracy 1% (less than 6m), 2% (6m-12m)
Distance detection unit cm
Wavelength 850nm
Size 42mm×15mm×16mm
Operating temperature -20℃-60℃
Light sensitivity 70,000lux
Weight 4.7g
Communication interface UART 115200
LED peak current 800ma
Serial port TTL voltage level 3.3V
Electromagnetic Compatibility(EMC) EN 55032 Class B

【ページ参考】

TF Mini LiDAR wiki.seeedstudio.com

Ultrasonic Ranger wiki.seeedstudio.com

Wikiの情報そのままはちょっと嫌かも

商品ページのWikiの情報そのままだと以下のものが必要になります。

  • Seeeduino V4.2
  • Base Shield
  • Grove-TF Mini LiDAR

このGroveモジュールはシリアルデバイスですが、それをソフトウエアシリアルデバイスとして使用するだけなので、Base Shieldを使うのは勿体ないかなと思います。ということで使用しないで動作させてみようと思います。(縛りプレイ)

ということで、今回は以下の2つだけを使用した手順をまとめると以下のようになります。

ステップ1

以下のハードウエアを準備する

  • Seeeduino V4.2
  • Grove-TF Mini LiDAR

ステップ2

Grove-TF-Mini-LiDARSeeeduino V4.2のI2Cポートに接続する

ステップ3

GitHubからデモコードをダウンロードして、Arduino IDE libraryに取り込む

上記のリンクからでも、下記のリンクからダウンロードしても大丈夫です

github.com

こちらからダウンロードする際は以下の様に操作してダウンロードを行います。

f:id:ueponx:20201207230415p:plain

Zipファイルのダウンロードができたら

f:id:ueponx:20201207231158p:plain

Adruino IDEを使用してZipファイルをライブラリとして取り込みます。操作はツールバーから【スケッチ】→【ライブラリをインクルード】→【Zip形式のライブラリをインストール…】と選択します。

f:id:ueponx:20201207230954p:plain

先程ダウンロードしたライブラリファイルを選択して、IDEにライブラリが追加されたというメッセージが表示されれば成功です。

f:id:ueponx:20201207231535p:plain

ではライブラリをインクルードしてみます。ツールバーから【スケッチ】→【ライブラリをインクルード】→【Seeed_Arduino_TFlidar】を選択します。

f:id:ueponx:20201207232031p:plain

すると、ライブラリがインクルードされます。

#include <TFBase.h>
#include <TFLidar.h>

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

f:id:ueponx:20201207231916p:plain

あとはデータを酒取得するコードを書いていくことになります。最低限のコードは以下のようになるでしょうか。 今回は距離(Distance)のみを表示するようにしてみました。 信号強度も計測できるようなのですが、赤外線レーザーで距離を測っていることもあり、計測信号が光ということもあり直線性が高いであろうと予測するのであれば計測しなくてもいいのかな?なんて思っています。

以下のコードで距離の計測をします。

f:id:ueponx:20201208003850p:plain

#include "TFLidar.h"

#define USETFMINI
#define SERIAL Serial

SoftwareSerial uart(SCL, SDA);//I2Cポートでソフトウエアシリアルを使用

#ifdef USETFMINI
TFMini SeeedTFMini;
TFLidar SeeedTFLidar(&SeeedTFMini);
#endif

void setup() {
  SERIAL.begin(9600);
  while (!Serial);
  SeeedTFLidar.begin(&uart, 115200);
}

void loop() {
  while (!SeeedTFLidar.get_frame_data()) {
    delay(1);
  }
  SERIAL.print(SeeedTFLidar.get_distance());
  SERIAL.println();
  // 以下は受信したrawデータの表示する場合
  /*
  for (int i = 0 ; i < 9 ; i++) {
    SERIAL.print(String(uart.read(),HEX));
    SERIAL.print(" ");
  }
  SERIAL.println();
  */
  delay(100);//適宜ウエイトを入れないとデータがバグる事があるようです。
}

Base Shieldを使用しないための工夫として以下のようにソフトウエアシリアルの設定を以下のようにして、 物理的な接続もSeeeduino V4.2のI2Cポートに接続をしています。

SoftwareSerial uart(SCL, SDA);//I2Cポートでソフトウエアシリアルを使用

Groveのシリアルポート使用しているTXRXをGroveのI2CポートのSCLSDAにしているのがポイントになります。 以前MP3のモジュールでも同じように接続をしていましたが問題なく動作しています。

参考

uepon.hatenadiary.com

ちなみにSeeedTFLidarクラスのメソッドを使わずにrawデータとしてデータを取り出すこともできます。 その場合には、ソフトウエアシリアルから直接データを抜き取るのがよいと思います。

実行結果を確認するとデータ計測をwaitなく行うとデータが化けてしまうこともあるようでした。可能であればWaitを入れたほうがいいかなと思います。 このソースでは100msecいれていますが、スペックシートのFrequencyが100Hzとなっていたので、10msec程度くらいまでは行けそうな気がします。

実行してみる

コードが完成したらSeeeduino V4.2にダウンロードして実行します。計測結果はシリアルポート(USB側)へ出力しているので ツールバーの【ツール】→【シリアルモニタ】として実行することもできますし、

f:id:ueponx:20201208004848p:plain

出力結果

f:id:ueponx:20201208003905p:plain

ツールバーの【ツール】→【シリアルプロッタ】として実行することでグラフ化をすることも可能です。

f:id:ueponx:20201208004903p:plain

出力結果

f:id:ueponx:20201208004220p:plain

f:id:ueponx:20201208010426j:plain

誤記?

ちなみに参考にしているWikiでのResource情報の部分ですが、

wiki.seeedstudio.com

ファイルのリンク先のURLが入れ替わっているので注意してください。

f:id:ueponx:20201208005313p:plain

おわりに

日本で使用している例をあまりみないGroveモジュールTF Mini LiDARですが、動作電圧と価格面でUltrasonic Rangerよりも劣るような気がします(この表現でいいのかな?)。計測の正確性や反応はわりと優秀ではないかと個人的には思います。加えて12mまで使用できるのも魅力でしょうか(Ultrasonic Rangerは3.5mまで)。ただ、実験してはいないのですが、太陽光下での動作に関してはどうなるかなという不安はあります。

Seeedさんの販売サイトには以下のような動画があるので


#Newproduct: Seeedstudio Grove - TF Mini LiDAR

屋外でも意外とつかえるのかなと期待しています。どこかで試してみたいです。