Arduino用レーザーVL53L0X 6ピンモジュールによる距離測定
このチュートリアルでは、6ピンモジュール搭載のVL53L0Xレーザー距離センサーを使って距離を測定する方法を学びます。この小型ながら高性能なセンサーは、飛行時間(ToF)技術を利用して最大200 cmまでの正確な距離測定を提供します。このガイドに従えば、センサーをArduinoに接続して、シリアルモニタから直接距離の値を読み取れるようになります。

このプロジェクトでは、コンパクトでさまざまな用途に簡単に組み込めるVL53L0Xセンサーを使用します。センサーはI2Cで通信するため、Arduinoボードへの接続が簡単です。動画ではセットアップ手順の追加説明や実演が見られます(動画の04:00)。
ハードウェアの解説
VL53L0Xはレーザービームを発射し、物体に当たって戻ってくる光の往復時間を測定するTime-of-Flight(ToF)方式の距離センサーです。これにより物体までの距離を高精度に算出できます。センサーの動作電圧は2.6 V〜3.5 Vですが、内部の電圧レギュレータにより5 Vで給電することも可能です。
モジュールには6つのピンがあります:VCC、GND、SDA(データライン)、SCL(クロックライン)、GPIO1(汎用入出力)、およびXSHUT(シャットダウンピン)。この構成ではGPIO1ピンは使用されていませんが、未接続のままにしておくことができます。XSHUTピンを使用すると、使用していないときにセンサーをシャットダウンして電力を節約できます。
データシートの詳細
| 製造元 | STマイクロエレクトロニクス |
|---|---|
| 部品番号 | VL53L0X |
| ロジック/IO電圧 | 2.6 V〜3.5 V(レギュレータ使用時は5 V) |
| 動作温度 | -20°Cから70°C |
| 測定範囲 | 30 mmから2000 mmまで |
| I2C通信周波数 | 400 kHz |
| サイズ | 4.4 mm × 2.4 mm × 1 mm |
- 適切な電源を確保してください(5 V 推奨)。
- Arduinoの適切なI2CピンにSDAとSCLを接続してください。
- 必要に応じてI2Cラインにプルアップ抵抗を使用してください。
- GPIO1を未接続のままにしないでください。ただし、フローティングのままにしておくことはできます。
- 動作中はXSHUTピンをハイに保ってください。
- より正確に測定するには、十分に明るい場所で距離を測定してください。
- 正確な測定のためにセンサーを校正してください。
- 物体をさまざまな距離に置いて、センサーの検出範囲をテストしてください。
- シリアル出力を監視して、距離の測定値とタイムアウトのメッセージを確認してください。
配線手順

VL53L0XセンサーをArduinoに配線するには、まずセンサーのVCCピンをArduinoの5Vピンに接続します。次に、GNDピンをArduinoのGNDに接続します。センサーのSDAピンはArduinoのA4ピン(またはボードに専用のI2Cピンがある場合はSDAピン)に接続してください。同様に、センサーのSCLピンはA5ピン(またはSCLピン)に接続します。GPIO1ピンはこのプロジェクトでは必要ないため未接続のままにしておいてください。
最後に、XSHUTピンをArduinoのデジタルピン12に接続してください。このピンはセンサーのシャットダウン状態を制御するために使用されます。通信の問題を避けるため、すべての接続が確実に行われていることを確認してください。
コード例とウォークスルー
コードでは、必要なライブラリをインクルードし、VL53L0Xセンサーを初期化することから始めます。setup関数はセンサーを設定し、連続距離測定を開始します。以下はsetup関数のスニペットです:
void setup() {
pinMode(12, INPUT_PULLUP);
digitalWrite(12, HIGH);
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
}このスニペットでは、ピン12をプルアップ抵抗付きの入力として設定し、シリアル通信を9600ボーで初期化します。また、センサーを初期化し、読み取りのタイムアウトを設定して、継続的に動作するようにします。
次に、loop関数内で距離を読み取り、その測定値をシリアルモニタに表示します:
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}このコードは距離をミリメートル単位で読み取り、シリアルモニターに出力します。タイムアウトが発生した場合は、センサーが有効な測定値を受信できなかったことを示します。
デモンストレーション/期待される内容
プログラムを実行すると、シリアルモニタに距離の測定値が表示され始めます。物体をセンサーに近づけたり遠ざけたりすると、出力は変動します。センサーが読み取りに失敗した場合、時折タイムアウトのメッセージが表示されることがあります (ビデオの10:30)。精度を向上させるには、複数の測定値を平均することを検討してください。
/* This example shows how to use continuous mode to take
range measurements with the 6-pin VL53L0X module. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Original source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com/RJT83
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
Watch the instruction video for this code https://youtu.be/S2jaAQEv3Yo
Pin connection
VL53L0X Pin Arduino Pin
VCC 5V
GND GND
SDA A4 or SDA if available
SCL A5 or SCL if available
GPIO1 leave it unconnected
XSHUT D12 (digital 12 or pin 12)
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup()
{
pinMode(12,INPUT_PULLUP);
digitalWrite(12,HIGH);
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// 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()
{
int distance =sensor.readRangeContinuousMillimeters();
//int distance =sensor.startContinuous(100);
//distance = distance;
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
必要かもしれないもの
-
イーベイeBayからVL53l0xを購入するebay.us
-
アリエクスプレスAliExpressからVL53L0Xを1〜10個購入するs.click.aliexpress.com
-
バングッドBanggoodからVL53L0Xを1個から10個購入するbanggood.com
リソースと参考文献
-
外部AliExpressからVL53L0Xを1〜10個購入するs.click.aliexpress.com
-
外部AmazonからVL53L0Xを購入するamzn.to
-
外部BanggoodからVL53L0Xを1個から10個購入するbanggood.com
-
外部eBayからVL53l0xを購入するebay.us
ファイル📁
フリッツィングファイル
-
VL53L0X距離センサー正方形
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
他のファイル
-
VL53L0X距離センサー(紫)
VL53L0X_Distance_sensor_purple.fzpz0.01 MB