Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Example using ST TOF VL53L4CD

2025年09月21日に「Dev.to」が公開したITニュース「Example using ST TOF VL53L4CD」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

公式資料が不十分なST TOF VL53L4CD距離センサー(1mm-1200mm測定可)を、STM32マイコンで簡単に使う方法を紹介。I2C通信の設定やC言語APIでの初期化、設定、距離取得のコード例を解説し、初心者SEでも理解しやすい。

出典: Example using ST TOF VL53L4CD | Dev.to公開日:

ITニュース解説

この記事は、STマイクロエレクトロニクス社が提供する「VL53L4CD」というToF(Time of Flight)センサーを使って、どのように距離を測定するかを、具体例を交えながら解説している。ToFセンサーとは、発射した光が物体に当たって跳ね返ってくるまでの時間(飛行時間)を計測することで、その物体までの距離を正確に測定する技術である。VL53L4CDは、わずか1ミリメートルから最大1200ミリメートル(1.2メートル)までの距離を測定できる高性能なセンサーである。

通常、新しいハードウェアを扱う際には、そのハードウェアの動作を細かく制御するための「データシート」という詳細な技術文書や、「API(Application Programming Interface)」というソフトウェア部品の使い方が書かれたドキュメントが不可欠である。しかし、このVL53L4CDの場合、残念ながらデータシートにはセンサー内部の具体的な設定情報(レジスタ情報)が記載されておらず、提供されるAPIも十分な使い方の説明が不足しているという課題があった。

そこで、この記事の著者は、STM32CubeIDEという開発環境と、STマイクロエレクトロニクスが提供する「X-CUBE-TOF1」というソフトウェアパッケージを参考に、よりシンプルで分かりやすいサンプルコードを作成することを目的とした。X-CUBE-TOF1パッケージには複数のアプリケーションが含まれているが、それらは多くのデバイスを抽象化(複雑な内部構造を隠して簡単に扱えるようにすること)して扱っているため、初心者がVL53L4CDという特定のセンサーを理解するにはかえって複雑すぎると感じたからだ。

具体的にプロジェクトを始めるには、STM32CubeIDEでいくつかの設定が必要である。まず、センサーとの通信手段である「I2C1」インターフェースを有効にする必要がある。I2Cは、複数のデバイスが少ない配線で通信できる一般的なシリアル通信方式の一つである。次に、ミドルウェア&ソフトウェアのセクションで「X-CUBE-TOF1」パッケージを有効にし、ボードとして「Ranging(距離測定)」、センサーとして「VL53L4CD」を選択する。さらに、VL53L4CDとの通信に使用するI2C1インターフェースと、センサーの有効/無効を切り替える「XShutピン」を正しく設定する。

これらの設定を行うと、プロジェクト内にcustom_tof_conf.hという設定ファイルが自動的に生成される。このファイルには、例えばUSE_CUSTOM_RANGING_VL53L4CDが有効になっていることや、XShutピンがどのポートのどのピンに接続されているか(例:GPIOAGPIO_PIN_1)、またI2C通信のための関数(初期化、解除、書き込み、読み出し)がどのように定義されているかなどが記述されている。これは、ハードウェアとソフトウェアを結びつける重要な役割を果たす。

著者は、APIを実際に利用するためのコードをtof.ctof.hという二つのファイルに分けて作成した。tof.hは、他のファイルから呼び出される関数の宣言(こんな関数がありますよ、と教える部分)が書かれたヘッダーファイルで、tof.cはその宣言された関数の具体的な処理内容(どう動くか)が書かれた実装ファイルである。これらのファイルが担う基本的な処理は次の三つである。

  1. デバイスの初期化: センサーが正しく接続され、通信可能であるかを確認し、基本的な設定を行う。
  2. デバイスの設定: センサーの測定モード(例:連続測定)や、測定にどれくらいの時間をかけるかといった詳細な設定を行う。
  3. 距離の取得: 実際にセンサーから距離データを受け取る。

ここで注意が必要なのは、VL53L4CDセンサーのXShutピンの扱いである。XShutピンはセンサーの有効/無効を切り替えるためのピンであり、通常はAPIが自動的にこのピンを制御する。しかし、このサンプルではXShutピンを常に有効にするために、VCC(3.3ボルトの電源)に直接接続している。もし一つのI2Cバスに複数のToFセンサーを接続する場合などは、APIを呼び出す前にcustom_tof_conf.hで定義されたピン操作関数を使って、目的のセンサーのXShutピンを個別に有効/無効にする必要がある。

tof.cのソースコードを見ると、主に三つの重要な関数が定義されている。

  • TOF_Init(): この関数は、センサーとの通信バス(I2C)を設定し、センサーのIDを読み出して期待されるIDと一致するか確認する。そして、センサー自体の初期化と、そのセンサーが持つ機能(Capabilities)の取得を行う。
  • TOF_Configure(): センサーの測定プロファイルを設定する。例えば、連続測定モード(VL53L4CD_PROFILE_CONTINUOUS)を選び、測定に費やす時間(TimingBudget)を設定する。この関数は、周囲光(Ambient)や信号強度(Signal)の取得を有効にするかどうかも設定できる。
  • TOF_GetDistance(): 実際にセンサーから距離データを取得する関数である。取得に成功すると、内部でprint_result()関数を呼び出し、その結果をシリアルポートに出力する。

print_result()関数は、取得した距離測定の結果を整形して表示する役割を持つ。単に距離だけでなく、センサーがターゲットを検出した数、各ターゲットの状態、距離(ミリメートル単位)、そして設定で有効にしていれば周囲光の強さ(Ambient)や反射光の信号強度(Signal)も表示する。これらの値は、測定の信頼性や環境条件を把握する上で役立つ。

最終的に、main関数ではこれらの独自に作成した関数を非常にシンプルに呼び出すだけでセンサーを利用できる。まずTOF_Init()を呼び出してセンサーを初期化し、成功すればTOF_Configure()で測定設定を行う。その後、メインループの中でHAL_Delay(1000)(1秒待機)を挟みながら、繰り返しTOF_GetDistance()を呼び出すことで、リアルタイムに距離を測定し続けるプログラムが完成する。出力例は「Targets = 1」「Status = 0, Distance = 110 mm」といった形で、ターゲット数、測定状態、距離、そしてオプションで周囲光と信号強度が具体的な数値で表示される。このサンプルコードは、組込みシステム開発において、複雑なセンサーをいかにシンプルに扱い、データを取得するかという基本的な流れを初心者にも分かりやすく示していると言える。

関連コンテンツ

関連IT用語