M5Stackの超音波測距ユニットを買ってみました。
IOで制御するボードは持っていましたが、I2Cで接続できるのは便利そうです。
ドキュメントを読んだ感じではライブラリも用意されているので深く考えずに使えそう・・と思ってましたが、ちっとも動かない。
故障か?と思えるほどにずっと同じ値が返ってきてます。
あれれ、UNIT ULTRASONIC-I2C上手く動かないぞ。どれで動かしても4500mmになっちゃう?? pic.twitter.com/JTPqzp4qIr
— イナバ (@hollyhockberry) 2022年6月17日
UIFlowでやってみたらそれっぽい値を読み取れてます。よかった故障じゃないみたい。
UIFlowだと動くな‥壊れてなくて安心したゼ!じゃあ何が悪いのかな🤔 pic.twitter.com/CnNFcCqa9L
— イナバ (@hollyhockberry) 2022年6月17日
ライブラリのソースを見ても、I2Cでレジスタアドレス(0x01)を書き込んで3バイト読み込んでるだけのシンプルな実装です。
採用されているRCWL-9620のデータシートを検索してみましたがヒットしません。
超音波測距センサは仕組み上ある程度の測定時間が必要なはずなので、ライブラリで入っているウエイト(10ms)を長くしてみます。というかこれぐらいしか試すことがないです。
UNIT ULTRASONIC I2C、データシート見つからなかったのでレジスタ読み出しのウエイトをちょっとずつ増やす実験してたら50msぐらいでなんとなく読みだせた。でもたまにI2Cバスがこける。issueも上がってないからみんなは上手くいってるのかな‥🤔 #m5stack pic.twitter.com/2RxkoABFEh
— イナバ (@hollyhockberry) 2022年6月20日
ダメ元でやってみたところ50msでデバイスから応答が返ってくるようになりました。
仕様が不明なのでこれでいいのかわかりませんが、とりあえずウエイトを増やすことでなんとか動くようになるようです。
ソースコードはこんな感じになってます。
情報入手
M5Stackからリプライもらいました。 雰囲気で読み取ると50msのウエイトで良さそうですね。
After check, it is default 50ms. pic.twitter.com/GONdMdMJm9
— M5Stack (@M5Stack) 2022年6月21日