2020年2月16日日曜日

MTOF171000C0使ってみた




 卒論も提出し終わったにもかかわらず,研究室にこもって何かしている中の人です.研究室ので使っているマシンでデータセット作成とかをやっているのですが,メモリを大量に使い果たすのでVPNでつなげず,結局来ないといけなくなっています.OTL

 さて,今回は秋月で売っているToFセンサの話です.ToFセンサといえばSTMicroelectronicsのこちらが有名?ですが,少しお高めかつ情報が出回っているのでパスです.(レジスタマップは果たして公開されたのだろうか)

1.仕様的なもの

センサ裏面


 今回使用するモジュールはFOXCONNが製造しており,SHARP製GP2AP01VT10F ToFセンサと謎マイコンが載っています.Arduino UNO向けサンプルコードモジュールのアプリケーションノートが公開されています.
 アプリケーションノートによれば,距離レンジ10cm-120cm(白壁),10cm-70cm(灰色壁)で,120cm±4%,70cm±7%となっています.
 通信方式は,UART/I2Cですが,I2Cで通信する際には電源,SCL,SDAのほかにCS代わりにTXDピン(センサ側の)を使用します(アプリケーションノートだと,RXDにつなげって書いてあるが,マイコン側って意味なのか?).今回はI2Cの方のみテストしました.
モジュール付属のケーブル.一回装着すると取りにくいらしい

 モジュールのピンアサインは,

  1. VDD(赤)
  2. GND(黒)
  3. TXD(白)
  4. RXD(茶)
  5. SCL(緑)
  6. SDA(黄色)

となっています.注意点として,付属のケーブルをモジュールにつけると抜けにくいらしく,無理やり抜こうとしてモジュールごと破損する可能性があるらしいです.

2.I2Cでおしゃべり

距離測定の図.M5StickVはただの壁

 ESP32でMTOF171000C0を使ってみましょう.何も考えずにピンを割り当てました.
  • VDD(赤) <-> 3V3
  • GND(黒) <-> GND
  • TXD(白) <-> IO25
  • RXD(茶) <-> 未接続
  • SCL(緑) <-> IO21
  • SDA(黄) <-> IO22
最初,TXDをIO12につないでいたのですが,うまく書き込めなくなりました(ESP32の仕様で,ブート時のモード決めとかで使うらしいです).IO25であれば問題なく動きました.
 アプリケーションノートに従うと,通信の流れは以下のようになります.

  1. TXD(CS)をLowにする
  2. センサのアドレスを送る(0x52)
  3. 距離データのはいっているレジスタを指定する(0xD3)
  4. センサのアドレスからデータが送られてくるのを待つ(2Bytes,上位8bitから送信)
  5. CSをHighにする

 距離が測定できない場合には,出力結果が"8888"になります.そうでない場合は,レジスタの値がそのまま距離(mm)になります.コードはこちらに上げておきました.

3.まとめ


 モジュール内でmmに直してくれるのはありがたい...のだろうか.マイナス点はSTMicroelectronicsのToFシリーズより性能が低いこととセンサ自体のデータシートが出回っていないことでしょうか.(未公開コマンドで精度や速度に関する設定ができるのかも)
 VL53L0Xに対しては,秋月価格で\2-300安いので少しお手軽です.(\1080->\780)
何も考えずにcmオーダで正確に測れることを考えると,こっちでもいいかもしれないです.

4.その他

  • データシートが英語・中国語(繁体字)併記.繁体字なので,雰囲気はつかめる.
  • SHARPからではなくFOXCONNから出ているのはなんでだろ(親会社一緒だけど)
  • UARTではオフセットの設定もできるらしい.I2Cは知らないけど,同じレジスタにアクセスすれば設定できる気がする.
  • 精度はまあまあ.20cmぐらいなら±3mm切ってくるレベル.
  • 距離が8888になる現象は,距離が遠すぎる場合にもなる.
  • センサ自体のレジスタマップはこちらも未公開.公開してほしい.

©2020 shts All Right Reserved.