前回の記事「Madgwickライブラリの収束を速くする 【Arduino/MPU6050】」の続きです。
角速度(ジャイロ)・加速度センサーMPU6050の角度をPC上で表示するプログラムを作ってみました。
ジャイロセンサーMPU6050とRaspberry Pi Pico(Arduino) を使って、PCで3Dのキューブを回転表示するプログラムが動いているところの動画 pic.twitter.com/79FFiHCYjx
— PONTA@電子工作⚡️ロボット制作⚡️プログラミング (@Elec_Robot) May 8, 2023
Raspberry Pi Pico(Arduino開発環境)でMPU6050から読み取った角速度・加速度からMadgwickで角度を推定しPCへ送り、PC上で受け取った角度で3Dのキューブを回転させ表示します。
今回はRaspberry Pi Picoを使用しましたが、Arduino UNOなどでも接続ピンが変わるのとタイマーのところを変更すれば行けると思います。
プログラム
プログラムはGitHubで公開しています。
■Raspberry Pi Pico側
PicoとMPU6050は上の写真のように接続しました。
Pico MPU6050 Pin6 GP4 -> SDA Pin7 GP5 -> SCL Pin36 3V3(OUT) -> VCC Pin3 GND -> GND
Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。
Raspberry Pi PicoのArduino開発環境構築については↓を参照ください。
Raspberry Pi PicoをArduino開発環境で使うためのメモ
Raspberry Pi Pico側のプログラム(Arduino)
MPU6050/MPU6050.ino
以下のライブラリを使用しています。
GitHubからZIP形式でダウンロードして、Arduino IDEの「スケッチ」->「ライブラリをインクルード」->「zip形式のライブラリをインクルード」でインストールします。
〇角速度・加速度から角度を推定 -> MadgwickAHRSフィルタ
https://github.com/arduino-libraries/MadgwickAHRS
〇タイマー割込み
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt
■PC側
MPU6050.py
Pythonで作成しています。
COM_PORT変数は適切なポートに書き換えてください。
以下のライブラリを使用しています。
〇pyserial
PCとPicoのシリアル通信のためにpyserialを使用しています。
以下のコマンドでインストールしてください。
pip install pyserial
〇Panda3D
3D表示のためにPanda3Dを使用しています。
以下のコマンドでインストールしてください。
pip install Panda3D
反応を速くしたい場合
上に載せているTwitterに投稿した動画を見てもらえばわかりますが、追従が少し遅いと思います。
用途によっては精度が若干悪くなってももう少し速く追従させたい場合もあると思います。
その場合は以下の記事を参考にしてください。
Madgwickライブラリの収束を速くする 【Arduino/MPU6050】
Raspberry Pi PicoとMPU6050は↓で購入できます。
■Raspberry Pi Picoの関連記事
Raspberry Pi Pico+Arduinoでサーボをたくさん動かしたい
会話ができる「ぴよロボ」作りました! (Raspberry Pi + Pico + ChatGPT)
Raspberry Pi Pico W でPCとBluetooth(シリアル)接続する
Raspberry Pi Pico/Pico WをArduino開発環境で使うためのメモ
超音波距離センサー + Raspberry Pi Picoで潜水艦ソナー風
コップの水がこぼれない台 MPU6050 + Raspberry Pi Pico(Arduino)
MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示