ESP32で9軸センサBNO055を動かしてしまった
たくあんです.研究に追われていたので1年ぶりの更新です.
IQ1の2まいめっ Advent Calendar 2018 16日目の記事です.
背景
ロボワン(2足歩行ロボットのコンテスト)用に9軸センサBNO055を購入しました.選定理由は書籍「ROBO-ONEにチャレンジ! 二足歩行ロボット自作ガイド」で良い評価を受けていたことと,クォータニオンをセンサ側が直接出力してくれるのでIQ1に優しいこと,が挙げられます.
Funeshop GY-BNO055 BNO055 3軸加速度センサ + 3軸ジャイロスコープセンサ + 3軸地磁気センサモジュール 9軸センサ
- 出版社/メーカー: Funeshop
- メディア: エレクトロニクス
- この商品を含むブログを見る
で,このセンサを動かしたいけど動かせなかった.I.Q.1.
という予定の記事だったのですが,動いてしまったので普通に書きます.
環境・道具
マイコン周り
秋月等で販売しているESP32-DevKitC ESP-WROOM-32開発ボードを使いました.他のボードの場合,後に示すSCL,SDAのピンの設定が正しいか確認できれば動くと思います.開発環境はArduino IDEです.
ライブラリ
Adafruit_SensorとAdafruit_BNO055を使いました.ググったら出てくると思います.
配線
注意するところはADOをGNDに接続すること(他のブログや書籍に書いてあるので真似ました.理由は他を当たってください)と,電源を3.3Vの方とつなぐこと.後者に関して,自分は「Arduino uno(5V駆動)で動いたのだからESP32で動かす場合も5Vに繋いでおけばいいだろう」と考えていましたが,それは間違いで,3.3Vに繋ぐ必要があります.これはESP32が3.3V駆動(SCLやSDAも3.3Vを電源としたときのしきい値で信号を出し読みしている)のため,GY-BNO055の動作電圧が3-5 Vであっても信号のしきい値が変わってしまい届かずに通信ができません(多分.GY-BNO055の回路図がないので確かなことが言えない).
SDAと21ピン,SCLと22ピンを繋げているのはESP32評価ボードのdefaultのピン配置だからです.ここは評価ボードによって変わりうるので確認が必要です.確認するのが面倒だったりピン配置を変えたければ,example中の
while (!bno.begin())
の直前に
Wire.begin(21, 22) // SDA, SCL
を加え,通信ピンを先に決めればピン配置の変更ができました.(でもbno.begin()内でWire.begin()を実行しているのだから後に実行されるピン配置が優先されると思っているのですが,何か違うんですね...)
プログラム
上述したライブラリのAdafruit_BNO055/example/rawdataがeular角を出力し続けるのでおすすめです.サンプルそのままで改造する必要がなく動きます.動作確認にベストだと思います.
実際に動かす
y軸の回転とサーボを同期させました.
無事動いてしまいました.どっとはらい.