検索コード

Arduino用レーザーVL53L0X 6ピンモジュールとLCD1602-I2Cによる距離測定

Arduino用レーザーVL53L0X 6ピンモジュールとLCD1602-I2Cによる距離測定

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

VL53L0X 200cm range sensor

これを実現するために、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です)。
  • 高温環境で使用する場合は、放熱を考慮してください。

配線手順

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

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で)。

画像

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
言語: C++
/* 

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);
}

必要かもしれないもの

ファイル📁

フリッツィングファイル

他のファイル