Arduino用レーザーVL53L0X 6ピンモジュールとLCD1602-I2Cによる距離測定
このチュートリアルでは、VL53L0Xレーザーセンサーを使って距離を測定し、I2Cインターフェース付きのLCD1602に結果を表示する方法を学びます。このプロジェクトではミリメートルまたはセンチメートル単位で精密な距離測定が可能で、Arduinoベースのあらゆるプロジェクトに柔軟に組み込めます。チュートリアルの最後には、設定や使用が簡単な完全に動作する距離測定システムが手に入ります。

これを実現するために、I2CでArduinoと通信するVL53L0Xレーザー距離センサーを使用します。LCD1602ディスプレイは測定した距離をわかりやすく視覚表示します。コーディングの流れを明確にするために、ビデオ(00:00)をご参照ください。
ハードウェア解説
この構成の主要な部品はVL53L0Xレーザー距離センサーとLCD1602ディスプレイです。VL53L0Xはレーザーを利用して距離を正確に測定するため、ロボット工学や自動化などさまざまな用途に適しています。I2C通信で動作するため、Arduinoへの統合が容易です。
LCD1602ディスプレイはI2C対応のキャラクターディスプレイで、2行にわたり最大16文字を表示できます。従来のLCDよりピン数が少なく済むため、データ表示の工程を簡素化します。これらのコンポーネントを組み合わせることで、強力でユーザーフレンドリーな距離測定システムが実現します。
データシートの詳細
| 製造元 | STマイクロエレクトロニクス |
|---|---|
| 部品番号 | VL53L0X |
| ロジック/入出力電圧 | 1.8 Vから2.8 V |
| 電源電圧 | 2.6 V から 3.5 V |
| 出力電流(チャンネルあたり) | … |
| ピーク電流(チャンネル当たり) | … |
| PWM周波数に関するガイダンス | … |
| 入力論理閾値 | … |
| 電圧降下 / Rオン時のドレイン・ソース間抵抗/ 彩度 | … |
| 熱的限界 | … |
| パッケージ | … |
| 備考 / バリエーション | … |
- 電源電圧が適切(2.6 V〜3.5 V)であることを確認してください。
- 必要に応じてSDAおよびSCLラインにプルアップ抵抗を使用してください。
- 誤った読み取りを避けるため、センサーを反射面から離して設置してください。
- I2Cアドレスを確認してください(VL53L0Xのデフォルトは0x29です)。
- 高温環境で使用する場合は、放熱を考慮してください。
配線手順

VL53L0XセンサーとLCD1602ディスプレイを配線するには、まず電源とグラウンドを接続します。接続するVCCVL53L0Xのピンを…5VArduinoのピンとそのGNDピンをArduinoのグラウンドに接続します。LCD1602の場合は、そのVCC同じに5VそしてGND接地もする
次に、I2C通信ラインを接続します。そのSDAVL53L0Xのピンは…に接続する必要がありますA4Arduinoのピン、およびSCLピンは〜に行くべきだA5。そのXSHUTピンは接続できますD12Arduino上では接続できますが、未接続のままにしておくこともできます。LCD1602については、確認してくださいSDAそしてSCLVL53L0Xセンサーと同じピンにも接続されています。
コード例とウォークスルー
VL53L0X sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
lcd.begin();
lcd.backlight();
}
setup関数で、シリアル通信とI2Cバスを初期化します。そのsensor.init()VL53L0Xセンサーを初期化し、lcd.begin()LCDディスプレイを初期化します。ディスプレイのバックライトが点灯し、見やすくなります。
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
Serial.print("Distance: ");
lcd.clear();
lcd.print("Robojax VL53L0X");
lcd.setCursor(0,1);
lcd.print("Dist.: ");
lcd.setCursor(7,1);
lcd.print(distance);
Serial.println();
delay(100);
}
ループ内で、距離を継続的に読み取ります。sensor.readRangeContinuousMillimeters()そしてそれをシリアルモニタに出力します。LCDは距離測定の結果で更新され、リアルタイムのフィードバックを提供します。100ミリ秒の遅延により、測定値が頻繁に更新されすぎず、読みやすくなります。
デモンストレーション/当日のご案内
電源を入れると、システムは距離を連続的に測定し、結果をLCDに表示します。物体をセンサーに近づけたり遠ざけたりすると、距離値が変化するのが確認できます。センサーにタイムアウトなどの問題がある場合は、適切なメッセージがシリアルモニタに出力されます(ビデオの03:15で)。
/*
This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).
Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada
Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
You can get this code from RoboJax.com.
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)
LCD1602 Pin
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{
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();
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();
//int distance =sensor.startContinuous(100);
//distance = distance;
Serial.print("Distance: ");
//start of loop Robojax code for LCD with I2C
lcd.clear();
lcd.print("Robojax VL53L0X");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("Dist.: ");
lcd.setCursor (7,1); // go to start of 2nd line
if(type ==2){
float distanceCM = (float) (distance/10.0);
unit ="cm";
lcd.print(distanceCM);
Serial.print(distanceCM);
Serial.print(unit);
}else{
unit ="mm";
lcd.print(distance);
Serial.print(distance);
Serial.print(unit);
}
lcd.print(unit);
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
必要かもしれないもの
-
アマゾンAmazonでVL53L0Xを購入するamzn.to
-
イーベイeBayからVL53l0xを購入するebay.us
-
アリエクスプレスAliExpressからVL53L0Xを1〜10個購入するs.click.aliexpress.com
-
バングッドBanggoodからVL53L0Xを1個から10個購入するbanggood.com
リソースと参考文献
-
外部Adafruitダウンロードページlearn.adafruit.com
-
外部AliExpressからVL53L0Xを1〜10個購入するs.click.aliexpress.com
-
外部BanggoodからVL53L0Xを1個から10個購入するbanggood.com
-
外部eBayからVL53l0xを購入するebay.us
-
外部VL53L0X データシート (PDF)st.com
ファイル📁
フリッツィングファイル
-
VL53L0X距離センサー正方形
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
他のファイル
-
Adafruit VL53L0X ライブラリ(Robojax提供)
robojax-VL52L0X_Adafruit_VL53L0X-master.zip -
VL53L0X距離センサー(紫)
VL53L0X_Distance_sensor_purple.fzpz0.01 MB