レーザー距離センサVL53L0Xを複数使うには
花岡ちゃんのウィークエンド:
以前の投稿で、PIC24FでのVL53L0Xの使い方について説明しました。この時はI2CバスにVL53L0X一つだけを接続する使い方でしたが、今回は一つのI2Cバスに複数のVL53L0Xを接続する方法を解説します。以前の投稿のプログラムをベースにしてますので、こちらから始まる一連の投稿に目を通してから読んでください。
VL53L0XはI2C接続されるのでデフォルトのアドレスは0x29(7bit)となっています。このデバイスにはEEPメモリのようなアドレスを変更するピンはないので、起動時には全て0x29となってしまいます。その代わり、アドレスを変更するコマンドがあり、これで任意のアドレスを割り当てられるようになっています。ただし、割り当てたアドレスは電源を切ると初期値(0x29)に戻ってしまうので、起動時に毎回設定してやる必要があります。
接続はこの回路図のようにします。A,B二つのVL53L0Xを一つのI2Cバスに接続し、各デバイスのXSHUTピンをそれぞれマイコンのGPIOに接続します。
ダウンロード - hanaoka_vl53l0x_multi.pdf
XSHUTはリセットと同様に働く入力ピンで、これをLにするとVL53L0Xはデゼーブルになり、I2Cにも反応しなくなります。これを利用し、一つのVL53L0Xだけを有効にし、アドレスを設定していきます。
2個のVL53L0Xを使用する場合のプロジェクトを公開します。以前公開したものをベースにマルチ化したものですが、コンテニュアスモードだけがマルチに対応しています。シングルモードでは使えません。この点、注意してください。(作業を簡素化したためです。もちろんシングルモードでも複数のセンサを扱うことができます。)
ダウンロード - pic24f_vl53l0x_multi.x.zip
669行からがA,B二つのセンサに0x2A,0x2Bのアドレスを割り付け、コンテニュアスモードで初期化する部分です。測定値の読み出しかたは、690行あたりを見てください。VL53L0XのAPI(readRangeContinuousMillimeters()など)の実行前に、それぞれに割り当てたアドレスの指定が追加されています。
このようにA,Bセンサの値を読み出せます。
アドレスの割り当ては、次のような手順で行なっています。
1・全てのXSHUTをLにしてデゼーブルに
2・最初の一つのXSHUTをH、デフォルトアドレス(0x29)でアドレス変更APIを実行
3・次のXSHUTをH、デフォルトアドレス(0x29)でアドレス変更APIを実行
このように一つずつVL53L0Xをイネーブルにしてアドレスを変更する作業を、全てのVL53L0Xについて行えばよいわけです。