検索コード

Arduino用レーザーVL53L0X 6ピンモジュールとTM1637ディスプレイを使った距離測定

Arduino用レーザーVL53L0X 6ピンモジュールとTM1637ディスプレイを使った距離測定


このチュートリアルでは、VL53L0Xレーザー距離センサーを使って距離を測定し、TM1637 7セグメントディスプレイに測定値を表示する方法を学びます。このプロジェクトは両方のコンポーネントを組み合わせて、シンプルながら効果的な距離測定ツールを作成します。VL53L0Xはレーザー技術を用いて正確な距離測定を提供し、TM1637ディスプレイはそれらの測定値をユーザーフレンドリーな形式で表示します。

VL53L0X 200cm range sensor
TM1637 4 digit display module

必要なハードウェア、配線手順、およびすべてを稼働させるために必要なコードについて順を追って説明します。このチュートリアルの終了時には、さまざまな用途で使用できる動作する距離測定装置が完成しています。視覚的なガイドとして、ビデオ(00:00)をぜひご確認ください。

ハードウェア解説

このプロジェクトの主な構成部品は、VL53L0Xレーザー距離センサーとTM1637ディスプレイモジュールです。VL53L0Xは、レーザービームを発射し、その反射が戻るまでの時間を計算することで物体までの距離を測定する飛行時間(ToF)センサーです。動作電圧は2.6V〜3.5Vですが、内蔵の電圧レギュレータにより5Vでも動作できます。

TM1637は7セグメントLEDディスプレイを制御するディスプレイドライバです。シンプルな2線インターフェース(CLKとDIO)で通信し、Arduinoに簡単に接続できます。ディスプレイは数値を表示でき、VL53L0Xセンサーの距離測定を視覚化するのに最適です。

データシートの詳細

製造者STマイクロエレクトロニクス
部品番号VL53L0X
ロジック/入出力電圧2.6V~3.5V
供給電圧2.6V〜5V
動作温度-20 °C~70 °C
測定範囲30 mmから2000 mmまで
I2Cの周波数400 kHz
タイムアウト設定500ミリ秒
パッケージ6ピンモジュール

  • 適切な電源を確保してください(5Vで問題ありません)。
  • XSHUTピンは漏れ電流を防ぐため、プルアップ抵抗で接続してください。
  • 通信にはI2Cを使用し、SDAとSCLを適切に接続してください。
  • 予期しない動作を避けるために、コード内でタイムアウトを処理してください。
  • 精度を保つには、動作温度範囲に注意してください。

配線手順

Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly

VL53L0X と TM1637 ディスプレイを配線するには、まず VL53L0X の VCC ピンを Arduino の 5V ピンに、GND ピンを Arduino のグラウンド(GND)ピンに接続します。次に、VL53L0X の SDA ピンを通常 I2C データ通信に使用される Arduino の A4 ピンに接続します。SCL ピンはクロック信号に使用される Arduino の A5 ピンに接続してください。

TM1637ディスプレイでは、CLKピンをArduinoのデジタルピン2に、DIOピンをデジタルピン3に接続してください。最後に、VL53L0XのXSHUTピンをArduinoのデジタルピン12に接続してください。未使用のピン(例:VL53L0XのGPIO1)は未接続のままにしておいてください。この配線により、Arduinoはセンサーとディスプレイの両方と効果的に通信できます。

コード例とウォークスルー

コードはセンサーとディスプレイを初期化し、I2C通信を設定して距離測定を継続的に読み取ります。以下は、ピンを設定しセンサーを初期化するsetup関数を示すスニペットです:

void setup() {
  pinMode(12, INPUT_PULLUP); // set pin 12 for input
  digitalWrite(12, HIGH); // set pin 12 high (5V)
  Serial.begin(9600);
  Wire.begin(); // I2C communication initialized
  sensor.init(); // distance sensor is initialized
  sensor.setTimeout(500); // time out is set
  sensor.startContinuous(); // type of measurement is set
}

この setup 関数では、XSHUT ピンがプルアップ付きの入力として設定され、センサーは連続的な距離測定用に初期化されています。シリアルモニタも距離の測定値を表示するよう設定されています。

次に、メインループが距離を読み取り、表示を更新します。以下はloop関数の注目すべき抜粋です:

void loop() {
  int distance = sensor.readRangeContinuousMillimeters(); // read the distance in mm
  display.setSegments(clearLED); // remove previous value from LED display
  display.showNumberDec(distance, false, 4, 0); // display the distance
  Serial.print("Distance: ");
  Serial.print(distance); // print distance on serial monitor
}

このループはセンサーから距離を継続的に読み取り、最新の測定値でTM1637ディスプレイを更新します。また、デバッグ目的で距離をシリアルモニタに出力します。全コードを見たい場合は、記事の下に表示されます。

デモンストレーション/期待される内容

セットアップとコードのアップロードが完了すると、VL53L0Xが測定した距離がTM1637に表示されます。物体をセンサーに近づけたり遠ざけたりすると、表示値がそれに応じて変化します。予期しない測定値が出る場合は、センサーに遮りがないことと、物体の表面がレーザーを反射しやすい状態であることを確認してください(動画の09:30参照)。

よくある落とし穴には配線の逆接やセンサーの初期化が不十分なことがあり、これがタイムアウトエラーにつながることがあります。正しいピンが接続され、距離測定が正確に行えるようセンサーに十分な電源が供給されていることを確認してください。

画像

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
TM1637 4 digit display module
TM1637 4 digit display module
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
104-Measure distance with a Laser VL53L0X 6-pin module and a TM1637 LED display for Arduino
言語: C++
/* This example shows how to use continuous mode to take readings.

This is Arduino code to measure distance with VL53L0X and display it on a TM1637 LED 7-segment display.

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
You have to watch 1 video before using this code:
1- Watch VL53L0X video and get code https://youtu.be/1n9eJ9HaYpE
2- Watch TM1637 video and get code https://robojax.com?vid=robojax-TM1637
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)
*/


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

/////// start of TM1637 Display
#include <Arduino.h>
#include <TM1637Display.h> 
#define CLK 2
#define DIO 3
#define TEST_DELAY   500
TM1637Display display(CLK, DIO);
uint8_t clearLED[] = { 0x0, 0x0, 0x0, 0x0 }; // value for clearing the LEDs
////// End of TM1637 Display 


void setup()
{
  pinMode(12,INPUT_PULLUP);// set pin 12 for input
  digitalWrite(12,HIGH);// set pin 12 high (5V)
  Serial.begin(9600);
  Wire.begin();// I2C communication initialized

  sensor.init();// distance sensor is initialized
  sensor.setTimeout(500); // time out is set

  // 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();// type of measurement is set
    Serial.println("VL53L0X with MAX6675 test");
    delay(500);
    display.setBrightness(0x0f);// set brightness for display
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();// read the distance in mm
  display.setSegments(clearLED);// remove previous value from LED display
  display.showNumberDec(distance, false, 4, 0);// display the distance

  
 //distance = distance;
  Serial.print("Distance: ");
  Serial.print(distance);// print distance on serial monitor
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  delay(100);
}

リソースと参考文献

まだリソースはありません。

ファイル📁

データシート(pdf)

フリッツィングファイル

ユーザーマニュアル

他のファイル