ToF 距離モニター

このプロジェクトは、VL53L0X 時間飛行(ToF)マイクロLIDAR距離センサーを使用して、対象物までの距離を測定し、OLEDスクリーンに表示します。測定された距離(ミリメートル単位)はシリアルモニターにも出力されます。VL53L0Xはおおよそ50mmから1200mmの範囲を測定できます。

1. 回路を組む

../_images/09-fun_ToF_distance_monitor_circuit.png

2. コード

  1. ultimate-sensor-kit\fun_project\09-ToF_distance_monitor のパス内の 09-ToF_distance_monitor.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

    注釈

    ライブラリのインストールには、Arduinoライブラリマネージャで 「Adafruit_VL53L0X」 を検索してインストールします。

3. コードの説明

本プロジェクトでは、VL53L0X Time of Flight(ToF)センサーを用いて、光が対象物まで到達して戻ってくるまでの時間を測定し、距離を計算します。測定した距離はミリメートル単位でOLEDディスプレイに表示されます。シリアル通信も利用して、測定値をモニタリングやデバッグのために出力します。OLEDディスプレイとVL53L0Xセンサーは、共にArduinoとI2Cプロトコルで通信します。

  1. 必要なライブラリをインクルードし、コンポーネントを初期化

    注釈

    ライブラリのインストールには、Arduinoライブラリマネージャで 「Adafruit_VL53L0X」 を検索してインストールします。

    #include <Wire.h>
    #include "Adafruit_VL53L0X.h"
    #include <SPI.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    // Initialize the OLED display module with a resolution of 128x64
    Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
    
    // Initialize the VL53L0X distance sensor
    Adafruit_VL53L0X lox = Adafruit_VL53L0X();
    
    • I2C通信、距離センサー、SPIプロトコル、OLEDディスプレイを操作するための必要なライブラリがインクルードされています。

    • OLEDディスプレイとVL53L0X距離センサーが初期化されています。

  2. シリアル通信を初期化し、ディスプレイとVL53L0X距離センサーを準備

    void setup() {
      Serial.begin(9600);
    
      // Start the OLED display with I2C address 0x3C
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      display.display();
      delay(1000);
    
      // Begin I2C communication
      Wire.begin();
    
      // Start the VL53L0X distance sensor, halt if initialization fails
      if (!lox.begin()) {
        Serial.println(F("Failed to boot VL53L0X"));
        while (1)
          ;
      }
    
      // Set OLED display text size and color
      display.setTextSize(3);
      display.setTextColor(WHITE);
    }
    
    • 9600ボーのシリアル通信を開始。

    • OLEDディスプレイをそのI2Cアドレスで初期化。

    • I2C通信を開始。

    • VL53L0X距離センサーが正しく初期化されたか確認。もし初期化に失敗した場合、エラーメッセージを表示してArduinoは無限ループに入ります。

    • OLEDディスプレイのテキストサイズと色を設定。

  3. 主なループ():距離を測定し、結果を表示

    void loop() {
      VL53L0X_RangingMeasurementData_t measure;
    
      lox.rangingTest(&measure, false);  // pass in 'true' to get debug data printout
    
      // If there are no phase failures, display the measured distance
      if (measure.RangeStatus != 4) {
        display.clearDisplay();
        display.setCursor(12, 22);
        display.print(measure.RangeMilliMeter);
        display.print("mm");
        display.display();
        Serial.println();
        delay(50);
      } else {
        display.display();
        display.clearDisplay();
        return;
      }
    }
    
    • 測定データを格納する変数を作成。

    • VL53L0Xセンサーを使用して測定を実行。

    • 測定が有効であるか(すなわち、フェーズ失敗がないか)を確認。

    • 測定が有効な場合、OLEDディスプレイをクリアし、カーソルの位置を設定して、測定された距離を表示。

    • それ以外の場合、ディスプレイをリフレッシュし、次の読み取りのためにクリアします。