ラベル MPU6050 の投稿を表示しています。 すべての投稿を表示
ラベル MPU6050 の投稿を表示しています。 すべての投稿を表示

2017年3月8日水曜日

ESP-WROOM-02 で MPU6050 を動かしてみた

概要

前回 Arduino で MPU6050 を動作させました
今回はESP-WROOM-02 を使って MPU6050 を動作させてみました
事前情報で MPU6050 と WROOM は互換性がないとわかっているのはのですが、やはり結構ハマりました

環境

  • MPU6050
  • Mac OS X 10.11.3
  • Arduino IDE 1.6.7

配線

WROOM + MPU6050 の全体の配線は以下の通りです
wroom_with_mpu6050_circuit.jpg

簡単に説明すると

  • WROOM VO -> MPU6050 VCC
  • WROOM GND -> MPU6050 GND
  • WROOM 4 -> MPU6050 SDA
  • WROOM 5 -> MPU6050 SCL
  • WROOM 2 -> MPU6050 INT

になります

  • WROOM 2 -> MPU6050 INT

今回の場合、この接続はなくても大丈夫だと思います

ライブラリのインストール

  • cd /path/to/Arduino/libraries
  • wget http://skomo.o.oo7.jp/f49/25-1.zip
  • unzip 25-1.zip
  • rm 25-1.zip

もし既存の「I2Cdev」と「MPU6050」がインストールされている場合は /path/to/Arduino/libraries から一旦対比させてから上記作業を行ってください

※あとから確認したのですが、この作業は不要っぽいです、Arduino 公式の「I2Cdev」と「MPU6050」でも動作しました
なので、普通に Arduino IDE の「ライブラリを管理」から「I2Cdev」と「MPU6050」をインストールしてください

スケッチ

スケッチの全体は以下の通りです
インストールしたライブラリ内にあるサンプルスケッチをほぼそのまま使っていますが、一部書き換えないと動作しませんでした

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"

MPU6050 accelgyro;

int16_t ax, ay, az;
int16_t gx, gy, gz;

void setup() {
  Wire.begin();
  Serial.begin(115200);

  Serial.println("Initializing I2C devices...");
  accelgyro.initialize();

  Serial.println("Testing device connections...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  Serial.print("a/g:\t");
  Serial.print(ax); Serial.print("\t");
  Serial.print(ay); Serial.print("\t");
  Serial.print(az); Serial.print("\t");
  Serial.print(gx); Serial.print("\t");
  Serial.print(gy); Serial.print("\t");
  Serial.println(gz);
  delay(200);
}

変更したのは以下の通りです

  • 不要なコメントの削除
  • LED を点灯させるための GPIO 制御を削除
  • delay(200) を追加

自分がハマったのは 3 つ目でこれを追加しないとシリアルモニタに転送する速度が早すぎてうまくデバッグできませんでした

スケッチの書き込み

これも結構ハマりました

配線後にスケッチを書き込もうとすると「error: espcomm_upload_mem failed」というエラーが発生しうまく書き込みができませんでした
WROOM の Vout と GND を外して、MPU6050 側に電源を送らないようにするとうまく書き込めます
原因はさっぱりわからないのですが、解消しないので自分は以下のように対応しました

一旦 MPU6050 を外して書き込みを実施、書き込みが始まったら MPU6050 を接続

という完全に裏ワザぽいことをしました
一応これで書き込めて WROOM も MPU6050 を認識し動作したので自分はとりあえずこの方法で対応しています

シリアルモニタを開くと以下のようにジャイロと加速度センサの値が流れると思います
wroom_with_mpu6050_serial.png

最後に

紹介は以上です
全体的に結構ハマりました
最終的には動作したのですが、たぶん正しいやり方ではないと思うのであまり参考にしないほうがいいかもしれないです、すいません、、、
センサの値を見ても何か正しい値が取れているような取れていないような、、、
とりあえず動いたからその辺は気にしない

参考サイト

Arduino + MPU6050 でジャイロセンサを試してみた

概要

MPU6050 というインベンセンス社が開発した加速度+角速度モジュールを Arduino の動かしてみました
配線して、サンプルのスケッチを書き込むところまでやってみました

環境

  • MPU-6050
  • Mac OS X 10.11.3
  • Arduino IDE 1.6.7
  • Arduino 用 i2cdevlib ライブラリ

MPU6050 操作用のライブラリのインストール

Github で公開されているライブラリを使います

https://github.com/jrowberg/i2cdevlib/archive/master.zip
から最新版の ZIP ファイルをダウロードします
ダウンロードしてできた i2cdevlib-master.zip を解凍して

  • Arduino/MPU6050
  • Arduino/I2Cdev

を libraries 配下にコピーしてください
コピーできたらインストールは完了なので Arduino IDE を起動しましょう

配線

Arduino と MPU6050 を配線します
全体図は以下の通りです
arduino_with_mpu6050_circuit.jpg

簡単に説明すると

  • Arduino A5 -> MPU6050 SCL
  • Arduino A4 -> MPU6050 SDA
  • Arduino 5V -> MPU6050 VCC
  • Arduino GND -> MPU6050 GND
  • Arduino 2 -> MPU6050 INT

とするだけで OK です
配線できたらサンプルのスケッチを書き込んでいきましょう

スケッチ書き込み

ファイル -> スケッチの例 -> MPU6050 -> Examples -> MPU6050_DMP6

を開きましょう
開いたらコンパイルして成功することを確認してください
スケッチを書き込む前にシリアルモニタを起動してください
baudrate は 115200 に設定してください

準備出来たらスケッチを書き込みます
書き込みが完了すると入力を求められるのでシリアルモニタで適当な文字列を入力してスタートします

すると「ypr (YAW, PITCH, ROLL)」のジャイロの値がズラーっと表示され続けると思います
arduino_with_mpu6050_serial.png

値は左からヨー ( Z軸 ), ピッチ ( Y軸 ), ロール ( Z軸 ) の順番で表示される
それぞれの軸の向きは MPU6050 の基盤上にプリントされているので確認してください

今回の配線の写真だと

  • ヨー ・・・ ブレッドボードをおいたままで回転させる、垂直に突き刺す軸
  • ピッチ ・・・ ブレッドボードを手前に倒しり奥に倒したりする動き、横に突き刺す軸
  • ロール ・・・ ブレッドボードの左や右を持ち上げたりする動き、縦に突き刺す軸

になります
実際に動かしてみるとセンサの動きがわかると重います

最後に

Arduino + MPU6050 で角速度の動きを試してみました
MPU6050 には加速度センサもついているのでスケッチを変更すれば加速度も取れると思います

あとはこれを ESP-WROOM-02 でも動かしたいなと思っています
ちょっと調べてみた感じだとどうやら MPU6050 は Arduino 完全互換では動かすことができないらしく、ちょっと工夫しないとダメとか、、、
具体的に試していないので何とも言えないですが

P.S 20160404

加速度センサについても試してみました
サンプルのスケッチの 107 行目あたりにある #define をコメントアウトすれば加速度も取得できるようになります

  • // #define OUTPUT_READABLE_REALACCEL

  • #define OUTPUT_READABLE_REALACCEL

これで再度スケッチを書き込み直すと以下のように加速度も表示されるようになります
arduino_with_mpu6050_serial_accel.png

※上記はわかりやすいようにジャイロセンサの値は表示しないようにしています

上記はブレッドボードをそのままおいた状態です
X 軸に対して垂直に置き換えると一番左の値が 2300 くらいの数字に変化します
Y 軸に対して垂直に置き換えると真ん中の値が 2300 くらいに変化します
Z 軸の値だけ -700 くらいで安定しました

値が安定するまでに少し時間がかかった印象があります

参考サイト