ArduinoでVL53L0Xレーザー距離計を使用する
このチュートリアルでは、Arduino でVL53L0Xレーザー距離計を使用する方法について説明します。このデバイスを使用すると、レーザーを使用して距離を正確に測定できるため、ロボット工学やオートメーションなどのさまざまな用途に最適です。このチュートリアルを終えるまでに、距離を測定してシリアルモニターに表示できる機能セットアップが完成します。

このプロジェクトでは、センサーとのインターフェースプロセスを簡素化するAdafruit VL53L0Xライブラリを使用します。このライブラリは、センサーの初期化、測定値の読み取り、発生する可能性のあるエラーの処理に必要な機能を提供します。セットアップのビジュアルガイドについては、ビデオを参照してください(ビデオの02:15)。
ハードウェアの説明
このプロジェクトの主なコンポーネントには、VL53L0Xレーザー距離計とArduinoボードが含まれます。VL53L0Xは、レーザーを使用して最大2メートルの距離を高精度で測定する飛行時間型センサーです。I2Cプロトコルを介して動作するため、Arduinoとの通信が容易です。
Arduinoボードは、VL53L0Xからのデータを処理するマイクロコントローラーとして機能します。センサーにコマンドを送信し、距離測定値を受信し、他のアプリケーションで表示または利用できます。センサーからの正確な読み取りを保証するには、適切な配線が非常に重要です。
データシートの詳細
| 生産者 | STMicroelectronics |
|---|---|
| 部品番号 | VL53L0X |
| 動作電圧 | 2.6V〜3.5V |
| 範囲 | 30 mmから2000 mm |
| 精度 | ±3%(標準) |
| インターフェイス | I2C型 |
| 温度範囲 | -40°C〜+85°C |
| 消費電流 | <1mA(スタンバイ)、20mA(アクティブ) |
| パッケージ | VFLGA-8 |
- センサーに正しく電力が供給されていることを確認します(2.6 V〜3.5 V)。
- 競合を避けるために、正しい I2C アドレス設定を維持してください。
- 正確な距離測定のために、センサーを清潔に保ちます。
- 必要に応じて、I2Cラインに適切なプルアップ抵抗を使用します。
- 信頼性の高い測定値を得るために、センサーへの直射日光を避けてください。
配線手順

VL53L0XセンサーをArduinoに配線するには、センサーのVCCピンをArduinoの5Vピンに接続します。GNDピンはArduinoのグランド(GND)に接続する必要があります。I2C通信の場合は、VL53L0XのSDA端子をArduinoのA4端子に接続し、SCL端子をA5端子に接続します。別のArduinoモデルを使用している場合は、そのボードの特定のSDAおよびSCLピンの割り当てを参照してください。
たとえば、Arduino Megaでは、SDAをピン20に接続し、SCLをピン21に接続します。通信の問題を回避するために、すべての接続が安全であることを確認してください。センサーが応答しない場合は、配線を再確認し、Arduinoに適切に電源が供給されていることを確認してください。
コード例とチュートリアル
以下は、VL53L0Xセンサーを初期化するセットアップ関数のスニペットです。
void setup() {
Serial.begin(9600);
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
}このコードはシリアル通信を初期化し、VL53L0Xセンサーの起動を試みます。センサーが起動に失敗すると、エラーメッセージが出力され、プログラムが停止します。
次に、距離測定値を読み取るループ関数のスニペットを次に示します。
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}このブロックは、センサーからの距離測定値を継続的に読み取り、シリアルモニターに出力します。測定値が範囲外の場合は、それに応じてこれを示します。
デモンストレーション / みどころ
プログラムを実行すると、シリアルモニターに距離測定値が表示されます。測定値は 100 ミリ秒ごとに更新されます。センサーが物体を指している場合、距離はミリメートル単位で表示されます。オブジェクトが範囲外にある場合は、それも示します。最適な結果を得るには、指定された範囲内でセンサーをテストしてください(10:00のビデオで)。
ビデオのタイムスタンプ
- 00:00-紹介
- 02:15- 配線設定
- 05:30- コードの説明
- 10:00-デモ
/*
* この例は、VL53L0Xを使用して範囲測定を行うための連続モードの使用方法を示しています。
* // 元のソースはAdafruitから https://github.com/adafruit/Adafruit_VL53L0X
* // RoboJax.comのためにAhmad Shamshiriによって修正されました
* // 修正日: 2017年9月26日
* // Nejrabi
*
* このコードと他のArduinoコードはRobojax.comから入手できます
* すべての資料、配線図、およびライブラリを含む構造化されたコースで、段階的にArduinoを学びます
* すべて一か所に。
*
* このチュートリアルが役に立った場合は、このようなコンテンツを作成し続けられるようにサポートしてください。
*
* またはPayPalを使用して寄付を行ってください http://robojax.com/L/?id=64
*
* このコードは保証や責任なしで「現状のまま」提供されます。このメモを保持する限り自由に使用できます。*
* このコードはRobojax.comからダウンロードされました
* このプログラムはフリーソフトウェアです:GNU一般公衆ライセンスの条件に従って再配布および/または修正することができます
* フリーソフトウェア財団によって発表されたライセンスのバージョン3、または
* (あなたの選択により)それ以降のバージョン。
*
* このプログラムは役に立つことを願って配布されていますが、
* 一切の保証なし;特定の目的への適合性または商品性の暗示的な保証を含めて、ご注意ください。詳細については
* GNU一般公衆ライセンスを参照してください。
*
* このプログラムと一緒にGNU一般公衆ライセンスのコピーを受け取っているはずです。
* そうでない場合は、<https://www.gnu.org/licenses/>を参照してください。
*
* 著作権 (c) 2015, Majenko Technologies
* 全著作権所有。
*
* ソースおよびバイナリ形式での再配布および使用は、修正の有無にかかわらず、次の条件を満たす限り許可されます:
*
* ソースコードの再配布は、上記の著作権表示、条件のリスト、および次の免責条項を保持する必要があります。
*
* バイナリ形式の再配布は、上記の著作権表示、条件のリスト、および次の免責条項を文書および/または配布に提供される他の資料に再現する必要があります。
*
* Majenko Technologiesの名前やその貢献者の名前は、このソフトウェアから派生した製品の宣伝または推奨に使用することはできません、事前の書面による特定の許可なしには。
*
* このソフトウェアは著作権者および貢献者によって「現状のまま」提供され、
* 明示的または暗示的な保証、商業性および特定目的への適合性の暗示を含むがこれに限らない保証は放棄されます。著作権者または貢献者は、いかなる直接的、間接的、偶発的、特別、例示的、または結果的損害(代替商品またはサービスの調達による損害;使用、データ、または利益の喪失;または業務の中断を含む)が発生した場合でも、いかなる責任を負いません。契約、不法行為、または厳密な責任における理論に基づく場合のいずれにおいても、このソフトウェアの使用から生じた場合、たとえそのような損害の可能性について通知されていた場合でも。
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// ネイティブUSBデバイス用のシリアルポートが開くまで待機してください。
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// パワー
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // 'dtrue'を渡すとデバッグデータの出力が得られます!
if (measure.RangeStatus != 4) { // フェーズ障害に不正なデータがあります。
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
リソースと参考文献
-
外部VL53L0X データシート (PDF)st.com
ファイル📁
ファイルは利用できません。