電子工作 その22(ToF式距離センサー:VL53L0Xの使い方)
こんにちは、Ideagearの鈴木陽介です。
前回は、アナログ出力の赤外線測距センサー(GP2Y0A02YK0F)を試しました。
ただ、これだと送信部と受信部の目ん玉がやや大きいため、デジペに内蔵するなど、小型化には不利です。
とういうことで、デジタル出力も試したいという観点と、別の赤外線センサーも扱っておきたいという観点から、今回は、共立プロダクツ製のToF式距離センサー(VL53L0X)を試してみました。
はじめに
距離センサーや測距センサーで調べると、ToFという単語がよく出てきます。
ToFは「Time of Flight」の略ですが、何の飛行時間かというと、赤外線レーザーの光が対象物に当たり、それが返ってくるまでの時間で、それを計測することで対象物までの距離を検出します。
ともかく、前回は赤外線式の測距センサーを扱うのは初めてだったため、サイズは意識せずに文献の多さだけでアナログ出力の「GP2Y0A02YK」を選びました。そこで、今回は、デジタル出力で、小型でかつ文献も多いセンサーということで、共立プロダクツ製のToF式距離センサー「VL53L0X」を選び、共立エレショップの下記リンクから発注しました。
参考記事
配線
ブレッドボード図は上記参考記事をご覧ください。
共立プロダクツ製のVL53L0Xは配線が6本ありますが、I2Cの4本だけ(XSHUTとGPIO1は未使用)で使用可能です。
Arduino Uno | VL53L0X |
---|---|
5V | 1番ピン / 赤色 / VDD |
SCL | 2番ピン / 黄色 / SCL |
SDA | 3番ピン / 白色 / SDA |
GND | 4番ピン / 黒色 / GND |
- | 5番ピン / 茶色 / XSHUT |
- | 6番ピン / 橙色 / GPIO1 |
ライブラリー
スケッチ > ライブラリーをインクルード > ライブラリーを管理 > ライブラリマネージャ
から、「VL53L0X by Pololu」というライブラリー(最新Ver:1.3.1)をインクルードしてください。
ライブラリマネージャの検索窓で、「VL53L0X」と入力すると、「Adafruit_VL53L0X by adafruit」をはじめ、他の「VL53L0X」が数多く出てきます。お目当ての「VL53L0X by Pololu」は、かなり下の方にスクロールしないと出てこないのでご注意ください。
実際、私も間違えて別のをインクルードしてしまいました(笑)。
ソースコード
今回は動作テストが目的ですので、スケッチはサンプルスケッチをそのまま使いましょう。
ファイル > スケッチ例 > VL53LOX > Continuous / Single
サンプルスケッチは、「Continuous」と「Single」の2つ用意されています。
どちらも試しましたが、正直、単なる動作テストレベルでは違いがわかりませんでした(笑)。
念のために、「Continuous」のスケッチをそのまま記載します。
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm. */
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1) {}
}
// Start continuous back-to-back mode (take readings as
// fast as possible). To use continuous timed mode
// instead, provide a desired inter-measurement period in
// ms (e.g. sensor.startContinuous(100)).
sensor.startContinuous();
}
void loop()
{
Serial.print(sensor.readRangeContinuousMillimeters());
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
動作テスト
Arduino IDEのシリアルモニタ(前半)とシリアルプロッタ(後半)の両方で値を確認しました。
特に、シリアルプロッタで見ると顕著ですが、対象物を検出していない時の値が細かくブレています。
原因は不明ですし、気持ちの良い出力ではありませんが、ブレている時間が短いことと、検出中のブレは無さそうなので、たとえハード的に解決できなくても、ソフト上で工夫(一瞬ではなく、一定時間連続して検出したら反応させるなど)すれば何とかなると勝手に思っています(笑)。
細かなことは、実際にデジペに組み込む時に考えることにします。
まとめ
いかがでしたでしょうか?
今回のVL53L0Xも前回のGP2Y0A02YK0Fと同じく、所感としては使えそうと感じましたが、同時に、これも最終的にはぬいぐるみの中に実装して、実際に屋外で使用してみないと判断できませんね。
また、今回は「XSHUT」と「GPIO0」の2つのピンは配線しませんでしたが、下記記事を見る限りでは、XSHUTを使うことで、センサーをスタンバイ状態にできたりと、より実用的な使い方もできそうです。
では、次回は赤外線測距センサーを実際にデジペに組みこんでテストしてみたいと思います。
それではまた!
Discussion