I2C接続 測長センサー
今回は、ARDUINOで2つの I2C 接続の測長センサーを使います。写真左は “AE-VL53L0X”、右は “GP2Y0E03” です。いずれも秋月電子通商で取り扱いしています。
項 目 | AE-VL53L0X | GP2Y0E03 |
電源電圧 | 3.3~5.0V | 2.7~5.5V |
計測範囲 | 約3~200 cm | 約 4~50cm |
光源 | 940nm Class 1レーザー | 赤外LED採用 |
接続 I/F | I2C | I2C、アナログ出力 |
価格(参考) | 1080円 | 760円 |
配線接続
ARDUINOとの接続は次の図の通りです。
GP2Y0E03の電源電圧は、~5.5Vとありますが、信号電圧は ~3.3Vまでなので、I2C電圧変換モジュール(AE-FXMA2102)で信号電圧レベルを変換し、ARDUINOに接続します。
GP2Y0E03 計測プログラム
GP2Y0E03 のI2Cデバイスアドレスは、“0x40” 固定とのことです。確かめてはいませんが、変更も可能の様です。
測長結果は、下記表の通りアドレス 0x5E , 0x5F に格納されています。Shift Bit (0x35)設定により、測長範囲を変更できる様ですが、今回は default のままで変更はしません。
測長距離も同様に下記表に記載されています。
測距値 = (Distance[11:4]*16 + Distance[3:0] ) / 16 / (2*2)
n : Shift Bit =2 (default)
簡単な計測プログラムを示します。
ARDUINO シリアルモニタ出力結果は下記の通りです。
AE-VL53L0X 計測プログラム
「ツール」ー「ライブラリを管理」を選択
ライブラリインストール(下記はインストール済状態)
サンプルスケッチを開く
サンプルスケッチをARDUINOに書き込み実行します。
図はシリアルモニタへの出力状態です。
※プログラムとシリアルモニタ通信速度は一致させる。
サンプルスケッチですが、一応掲載します。
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// wait until serial port opens for native USB devices
while (! Serial) {
delay(1);
}
Serial.println("Adafruit VL53L0X test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// power
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); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
まとめ
次回はエクセルVBAから、スライドテーブルとこのセンサーを制御し、連続計測を実施したいと思います。