マイコンボードにはRaspberry Pi Pico とArduino UNO(互換機) を使います。
MPU-6050 は加速度と角速度を計測するセンサーです。
母艦にはラズパイ4 Model B にArduin IDE をインストールして使います。
配線
Arduino IDE
ラズパイ4にArduino IDE をインストールしておきます。
ボードはUNO の場合IDEのデフォルト設定で使えます(Arduino UNO)が、Pico の場合はインストールする必要があります、以下参照。
Arduino IDE でPi Pico Wの開発用にEarle Philhower版を使う
コードは以下を参照。
Pico とUNOで、ほぼほぼ共通で使えます。
変更点は MPU6050_WHO_AM_I の設定値だけです。
UNOの場合
#define MPU6050_WHO_AM_I 0x75
Picoの場合
#define MPU6050_WHO_AM_I 0x80
ベースコード(出典は忘れてしまいましたが、ここで改めて感謝)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#include <Wire.h> // MPU-6050のアドレス、レジスタ設定値 #define MPU6050_WHO_AM_I 0x80 //UNO : 0x75 #define MPU6050_PWR_MGMT_1 0x6B // #define MPU_ADDRESS 0x68 // デバイス初期化 void setup() { Wire.begin(); // PCとの通信を開始 Serial.begin(115200); //115200bps // 初回の読み出し Wire.beginTransmission(MPU_ADDRESS); Wire.write(MPU6050_WHO_AM_I); //MPU6050_PWR_MGMT_1 Wire.write(0x00); Wire.endTransmission(); // 動作モードの読み出し Wire.beginTransmission(MPU_ADDRESS); Wire.write(MPU6050_PWR_MGMT_1); //MPU6050_PWR_MGMT_1レジスタの設定 Wire.write(0x00); Wire.endTransmission(); } void loop() { Wire.beginTransmission(0x68); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(0x68, 14, true); while (Wire.available() < 14); int16_t axRaw, ayRaw, azRaw, gxRaw, gyRaw, gzRaw, Temperature; axRaw = Wire.read() << 8 | Wire.read(); ayRaw = Wire.read() << 8 | Wire.read(); azRaw = Wire.read() << 8 | Wire.read(); Temperature = Wire.read() << 8 | Wire.read(); gxRaw = Wire.read() << 8 | Wire.read(); gyRaw = Wire.read() << 8 | Wire.read(); gzRaw = Wire.read() << 8 | Wire.read(); // 加速度値を分解能で割って加速度(G)に変換 float acc_x = axRaw / 16384.0; //FS_SEL_0 16,384 LSB / g float acc_y = ayRaw / 16384.0; float acc_z = azRaw / 16384.0; // 角速度値を分解能で割って角速度(degrees per sec)に変換 float gyro_x = gxRaw / 131.0;//FS_SEL_0 131 LSB / (°/s) float gyro_y = gyRaw / 131.0; float gyro_z = gzRaw / 131.0; Serial.println("Acc x,y,z"); Serial.print(acc_x); Serial.print(","); Serial.print(acc_y); Serial.print(","); Serial.print(acc_z); Serial.println(""); Serial.println("Gyro x,y,z"); Serial.print(gyro_x); Serial.print(","); Serial.print(gyro_y); Serial.print(","); Serial.print(gyro_z); Serial.println(""); } |
シリアルポートはこんな感じ。
Pico -> /dev/ttyACM0
UNO -> /dev/ttyUSB0
シリアルモニタで確認
Appendix
Arduino IDE 無しでも実行できるようにUF2ファイルを作成。
Arduino IDEで保存したものは、ラズパイの場合なら/home/pi/Arduino というフォルダー内にxxx.inoというファイルで存在します。
例:/MPU-6050-PICO/MPU6050-PICO.ino
このままではIDEがなければ実行できません。以下のようにして実行用ファームウェアを作成します。
メニュー>スケッチー>コンパイルしたバイナリを出力
同じフォルダー内にuf2ファイルが出力されます。Pico をBOOTSELボタンを押しながらラズパイに接続すればRPI-RP2フォルダーが開くので、ここにuf2をドラッグ・ドロップすればOKです。
Appendix
Pi Pico + MicroPython 版はこちら
Pi Pico で6軸センサーのMPU-6050を使ってみる
Leave a Reply