本コードは,ToFセンサ VL53L5CX を2台用いて,対象の左右位置(X方向)を推定し,シリアル経由で送信するコントローラ実装である.
VL53L5CXはデフォルトでI2Cアドレスが同一(0x29)のため,同一バスへ2台を同時接続すると衝突する.本実装ではESP32の2系統I2C(Wire,I2C2)へ分離接続して回避する.
本READMEは提示された説明/コード断片をベースに整理している.提示コードにはマージ衝突マーカ(<<<<<<< 等)と setup() の重複が含まれるため,ビルド前に必ず解消すること.
- VL53L5CX×2の同時レンジング(8×8)
- 距離マップを左右反転して座標系を整合
- 2行分(row 5〜6)を用いた重み付き平均によりX位置を推定
- シリアルへ位置を送信(テキストCSV,またはバイナリ)
- ESP32系マイコン(TwoWireを2本使える構成)
- SparkFun VL53L5CX(または互換ボード)×2
- 3.3V電源(モジュール仕様に従う)
- SDA1:GPIO21
- SCL1:GPIO22
- センサ1のSDA/SCLを接続
- SDA2:GPIO25
- SCL2:GPIO26
- センサ2のSDA/SCLを接続
XSHUTを配線していない場合は -1 のままでよい.配線する場合はGPIO番号へ変更する.
XSHUT1_PINXSHUT2_PIN
- Arduino core(ESP32)
- Wire(Arduino標準)
- SparkFun VL53L5CX Arduino Library
#include <SparkFun_VL53L5CX_Library.h>
提示コードはそのままではコンパイルできない可能性が高い.最低限,以下を実施すること.
- マージ衝突マーカ(
<<<<<<<,=======,>>>>>>>)を削除する. setup()とloop()をそれぞれ1つに統合する(重複定義を解消).#defineの重複を整理する(SCL2等の欠落がないか確認).
Wire.begin(SDA1,SCL1)とI2C2.begin(SDA2,SCL2)で2系統I2Cを開始する.bringUpSensorWithRetry()で以下を行う.- I2Cクロック設定(初回100kHz)
- XSHUT制御(配線がある場合のみ)
- I2Cスキャンで応答確認(0x29)
begin()を最大3回リトライ- 失敗時は50kHzへ落として再試行
- 両センサの初期化後,共通設定を行う.
- 解像度:8×8
- レンジング周波数:15Hz
startRanging()を両方で実行
getRangingData()で取得した 8×8 距離配列を左右反転コピーしてflipped1/flipped2を作る.computeCenterX()が以下でX推定値を返す.- 対象領域:row 5〜6,col 0〜7
- 閾値:
distanceThreshold(例:2000mm)より遠い点は無視 - 重み:
1 / (rawDist * correctionTable[d]) d:中心(centerX,centerY)からのマンハッタン距離を4で打ち切り
- 推定に失敗した場合(戻り値-1等)はフォールバック値として
3を送る実装になっている.
実装は2方式を想定している.運用に合わせて送信部を整理すること.
SEND_TEXT_MONITORを1にする.- 出力フォーマット
S,<ms>,<pos1>,<pos2>\r\n<ms>はmillis()<pos1><pos2>は0〜7想定(無効時は3)
例
S,12345,3,5
- 出力フォーマット
- 先頭1バイト:
'S' - 続く2バイト:
pos1,pos2(各1バイト)
- 先頭1バイト:
distanceThreshold:対象距離に合わせて調整する.minRow/maxRow:反応させたい高さ帯(視野のどの行を使うか)を調整する.correctionTable[]:距離補正係数.設置角度や反射特性に応じて調整する.centerX/centerY:重み付け中心.評価したい中心方向に合わせる.setRangingFrequency(15):通信量と計算負荷に応じて調整する.
- I2Cスキャンで0x29が見えない
- SDA/SCL,GND,共通GND,電源電圧を確認する.
- プルアップ不足や配線長が原因の場合がある.
- 50kHzへ落として改善するか確認する.
- 2台を同一I2Cバスへ接続している
- アドレス衝突する.本構成どおり2系統へ分離するか,XSHUTで片方を止めてアドレス変更する手順を別途実装する.
- コンパイルエラー
- マージ衝突マーカ除去,
setup()重複解消,#define整理を再確認する.
- マージ衝突マーカ除去,
SparkFun VL53L5CX Arduino Library に依存する.再配布形態に応じて当該ライブラリのライセンスを確認すること.