今度は傾斜計を作ろうとしている。
購入したのはMPU-9250
https://strawberry-linux.com/catalog/items?code=12250
スケッチ
cubic9さんのページを参考にArduinoスケッチを用意した。
ソースのバージョン番号違いにより変更箇所の行番号が異なるが、適宜修正した。
配線 v0.1
参考 https://strawberry-linux.com/support/12250/1703808
参考 https://strawberry-linux.com/support/12250/1690628
以下のようにした
- MPU-9250 GND <--> ESP8266 GND
- MPU-9250 VDD <--> ESP8266 VCC
- MPU-9250 VDDIO <--> ESP8266 VCC
- MPU-9250 SCL <--> ESP8266 SCL
- MPU-9250 SDA <--> ESP8266 SDA
- MPU-9250 AD0 <--> ESP8266 GND
- MPU-9250 CS <--> ESP8266 VCC (I2C接続)
実行
スケッチをダウンロードして実行すると以下のエラーとなった。
Testing device connections...
MPU6050 connection failed
Send any character to begin DMP programming and demo:
Initializing DMP...
Enabling DMP...
Enabling interrupt detection (Arduino external interrupt 0)...
DMP ready! Waiting for first interrupt...
Soft WDT reset
ctx: cont
sp: 3ffef250 end: 3ffef440 offset: 01b0
>>>stack>>>
3ffef400: 3ffee294 3ffee298 3ffee3e4 40204365
3ffef410: 3fffdad0 3ffee298 3ffee3e4 3ffee40c
3ffef420: 3fffdad0 00000000 3ffee404 40203ff4
3ffef430: feefeffe feefeffe 3ffee420 40100114
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,0)
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld
Initializing I2C devices...
Testing device connections...
MPU6050 connection failed
Send any character to begin DMP programming and demo:
Initializing DMP...
Enabling DMP...
Enabling interrupt detection (Arduino external interrupt 0)...
DMP ready! Waiting for first interrupt...
割込み待ちをしている時間が長すぎてwatchdog resetがかかっているようだ。
INTピンは使っていないのも問題なのだろうか。
今回はややこしそうな予感がする。
INTERRUPT_PIN
ソースを見ていると以下の定義があった。
# define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards
ESP8266のピンのいずれかを割込みピンとして使ってMPU-9250のINTピンと接続が必要のようだ。
配線 v0.2
配線 (INTの追加)
GPIO14をINTERRUPT_PINとした。
- MPU-9250 GND <--> ESP8266 GND
- MPU-9250 VDD <--> ESP8266 VCC
- MPU-9250 VDDIO <--> ESP8266 VCC
- MPU-9250 SCL <--> ESP8266 SCL
- MPU-9250 SDA <--> ESP8266 SDA
- MPU-9250 AD0 <--> ESP8266 GND
- MPU-9250 CS <--> ESP8266 VCC (I2C接続)
- MPU-9250 INT <--> ESP8266 GPIO14
cubic9さんのページにもINTのことが記載されていた。
コード
以下のように一部を変更した。
# if 1
# define INTERRUPT_PIN 14 // ESP8266
# else
# define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards
# endif
実行した
値が出るようになった。
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.32
quat 0.95 -0.00 -0.00 -0.33
quat 0.95 -0.00 -0.00 -0.33
quat 0.95 -0.00 -0.00 -0.33
quat 0.95 -0.00 -0.00 -0.33
quat 0.95 -0.00 -0.00 -0.33
quat 0.95 -0.00 -0.00 -0.33
...
すごい勢いで値が出てくる。
MPU-9250を傾けると、値がそれぞれ変化する。
傾けてみた
- ほぼ水平の時
quat 0.92 0.01 0.01 -0.40
- X軸を持ち上げた時
quat 0.91 0.04 0.17 -0.37
- Y軸正方向を上げた時
quat 0.85 -0.19 0.12 -0.47
- Y軸負方向を上げた時
quat 0.91 0.25 -0.08 -0.32
画像
気圧計の基板を流用。
MPU-9250はブレッドボード上に実装。
INT用のGPIO14は間に合わせでICクリップで掴んでいる。
ESP32
(追記 2018/01/15)
@choco244 さんとのやりとりにてESP32でのセットアップには苦労するということを学びました。