【ITニュース解説】Example using ST TOF VL53L4CD
2025年09月21日に「Dev.to」が公開したITニュース「Example using ST TOF VL53L4CD」について初心者にもわかりやすく解説しています。
ITニュース概要
ST TOF VL53L4CDセンサーをSTM32で動かすシンプル手順を紹介。複雑な既存サンプルを避け、筆者作成のカスタムAPIでデバイス初期化、設定、距離取得を実現。I2C有効化やXShutピン設定で、1mmから1200mmの距離を簡単に測定する。
ITニュース解説
STマイクロエレクトロニクス製のToF(Time of Flight:光飛行時間)センサーであるVL53L4CDは、物体までの距離を正確に測定できるデバイスだ。1mmから1200mm(約1.2メートル)までの範囲で、対象物までの距離をミリメートル単位で検出できる。このセンサーは、自動化システム、ロボット、スマートデバイスなど、さまざまな組み込みシステムでの活用が期待される。今回の記事は、このVL53L4CDセンサーをSTM32マイクロコントローラでシンプルに利用するための具体的な方法と、そのサンプルコードについて解説するものだ。
通常、このようなセンサーを組み込みシステムで使う際には、メーカーが提供するデータシートやAPI(Application Programming Interface)のドキュメントを参考に開発を進める。しかし、VL53L4CDセンサーの場合、データシートには低レベルな「レジスタ情報」が十分に記載されておらず、提供されているAPIについても、その関数の詳細な使い方が不足しているという課題があった。加えて、STマイクロエレクトロニクス社が提供する公式の開発パッケージ「STM32Cube」に含まれる「X-CUBE-TOF1」というソフトウェアパッケージは、VL53L4CDを含む複数のToFデバイスを抽象的に扱うように設計されており、多機能である一方で、全体として複雑な構造を持っていた。このため、特定のVL53L4CDセンサーだけをシンプルに利用したい開発者にとっては、その複雑さが初期導入の障壁となっていたのだ。本記事の筆者は、このような状況に対し、特定のVL53L4CDセンサーボードを対象として、公式パッケージの複雑な抽象化を避け、より直接的で分かりやすい「非常にシンプルな」サンプルコードとプロジェクト設定を提供することを目指した。これは、機能に絞って利用したい、あるいは手軽に試したい開発者のニーズに応えるものだ。
シンプルなサンプルコードを実行するための開発環境の準備について説明する。STM32CubeIDEのような統合開発環境を使用することを前提とする。まず、センサーとマイクロコントローラ間の通信手段として、I2C(Inter-Integrated Circuit)というシリアル通信プロトコルを有効にする必要がある。具体的には、STM32マイコンに搭載されているI2C1インターフェースを有効化する。次に、STM32Cubeの開発環境の「ミドルウェア&ソフトウェア」セクションで、「X-CUBE-TOF1」パッケージを有効にする。このパッケージには、センサーを制御するための基本的なドライバやAPIが含まれている。パッケージを有効にした後、使用する距離計測ボード(Board Part Ranging)として「VL53L4CD」を選択する。そして、このセンサーがI2C1を通信に利用することと、XShut(シャットダウンピン)という制御ピンを使用することを設定する。XShutピンは、センサーの電源をオン/オフしたり、リセットしたりするために使われる。これらの設定を行うと、開発環境が自動的にプロジェクトファイルを生成する。この生成されるファイルの一つが「custom_tof_conf.h」というカスタム設定ファイルだ。このファイルには、プロジェクト固有の設定が定義されている。例えば、「CUSTOM_VL53L4CD_XSHUT_PORT」と「CUSTOM_VL53L4CD_XSHUT_PIN」では、XShutピンが接続されているマイコンのポートとピンの番号(例:GPIOAのGPIO_PIN_1)が定義される。さらに、「CUSTOM_VL53L4CD_I2C_INIT」といった形で、センサーとのI2C通信を行うための初期化、終了、書き込み、読み出しといった関数がマッピングされている。これにより、センサーAPIがこれらの定義された関数を呼び出して、I2C通信を実行できるようになる。
筆者は、より直接的にセンサーを制御するために、「tof.c」と「tof.h」という二つのファイルを新たに作成した。「tof.h」は、センサーの初期化 (TOF_Init)、設定 (TOF_Configure)、そして距離の取得 (TOF_GetDistance) という三つの主要なAPI関数の宣言をまとめたヘッダファイルだ。「tof.c」はこのヘッダファイルで宣言された関数の具体的な実装を含んでいる。
「tof.c」の内部では、センサーのオブジェクトやその能力、計測プロファイルといった、センサーを扱う上で必要なデータを保持するための変数が宣言されている。特に注意すべき点として、XShutピンの扱いがある。このピンは通常、センサーを有効化したり無効化したりするために使われるが、今回のサンプルでは、常にセンサーが有効になるように、このXShutピンを直接3.3Vの電源(VCC)に接続している。これは、複数のI2Cデバイスを制御するような複雑なシナリオではなく、単一のVL53L4CDセンサーをシンプルに使う場合に有効な方法だ。もし複数のI2Cデバイスを使う場合は、API呼び出しの前にXShutピンを適切に制御(有効化/無効化)する必要がある。
TOF_Init関数は、センサーの初期化を担当する。この関数では、まずI2C通信に必要な設定(IOCtx)を行い、カスタム設定ファイルで定義されたI2Cの初期化、終了、書き込み、読み出し関数を登録する。その後、センサーのIDを読み出して、正しく接続されているかを確認する。IDが正しければ、センサー本体の初期化を行い、その能力(Capabilities)を取得する。これにより、センサーが正しく動作するための準備が整う。
TOF_Configure関数では、センサーの計測設定を行う。ここでは、計測プロファイルとして「連続計測モード(VL53L4CD_PROFILE_CONTINUOUS)」を選択し、計測時間予算を30ミリ秒に設定している。また、周囲光(Ambient)と信号強度(Signal)の情報を取得する設定も有効にしている。これらの設定は、VL53L4CD_ConfigProfile関数を通じてセンサーに適用され、その後VL53L4CD_Start関数によって計測が開始される。
TOF_GetDistance関数は、実際に距離計測結果を取得する部分だ。VL53L4CD_GetDistance関数を呼び出して、計測された距離データを含む結果構造体(result)を受け取る。この関数が正常に実行されると、print_resultというヘルパー関数が呼び出され、計測された距離や、設定に応じて周囲光、信号強度などの情報がシリアルコンソールに出力される。
最終的に、これらのカスタムAPI関数は、マイクロコントローラのメインルーチン(main関数)から非常にシンプルに呼び出せる。まず、main関数の初期化処理の中でTOF_Init()を呼び出し、センサーの初期化を行う。初期化が成功すれば、続けてTOF_Configure()を呼び出して、計測設定を適用する。その後、メインループ(while(1))の中で、TOF_GetDistance(&result)を定期的に呼び出すことで、センサーから継続的に距離計測データを取得できる。この例では、1秒ごとに距離を取得し、その結果をシリアルコンソールに表示するようになっている。出力例として示されているように、「Distance = 110 mm」といった形で、ミリメートル単位での距離が、周囲光や信号強度といった付加情報とともに表示される。このシンプルで直接的な実装は、VL53L4CDセンサーの機能を素早く組み込みたい初心者や、特定の機能に絞って利用したい開発者にとって、非常に有効なアプローチだと言える。