「MPU6050」タグアーカイブ

特殊球体ホイール バランスロボット SHISEIGYO-2 Go 弐

すき 0
0

HomeMadeGarbage Advent Calendar 2021 |7日目

以前製作した球体ホイールによるバランスロボットを改良いたしましたので報告いたします。

SHISEIGYO-2 Go 球体ホイールを検討 ーリアクションホイールへの道41ー

 

SHISEIGYO-2 Go 弐

以前作った SHISEIGYO-2 Goをバッテリ駆動にして電源ラインを排除し、より自由に移動できるようにいたしました。

3セルのリポバッテリ(11.1V)を24Vに昇圧してモータに給電します。

 

また球体ホイールの左右間に細いスリットを設けて右折左折がよりスムーズに実行できる工夫も施しました。

 

360度連続回転サーボで半球をそれぞれ独立で制御して移動します。

  • 360度連続回転 Feetech FS90R マイクロサーボ

 

動作

 

バッテリ内蔵によって縦横無尽に移動が可能になりました。
左右への旋回もスムーズです。

 

 

M5Stack Japan Creativity Contest 2021

SHISEIGYO-2 Go 弐を M5Stack Japan Creativity Contest 2021 に応募しましたところ 3位入賞することができました!

 

M5Stack社のジミー・ライ社長が受賞作品を選定しコメントをくれて、しかも参加賞までいただける素晴らしいコンテストなので是非来年も実施してほしいです (ジミー社長 非常にお忙しいでしょうが。。)。

 

 

追記

2022/1/15 3位入賞 賞品が届きました!

特別色でキンピカでラグジュアリーなM5Stack CORE2をいただきました。
キレイ!嬉しい!

姿勢制御検討2 ードローンへの道3ー

0
0

前回から随分時間がかかってしまいましたが、これまでの進捗報告をさせていただきます。

ドローンへの道 爆誕 ードローンへの道1ー

 

 

姿勢制御検討

前回に引き続きホバリングの実現を目指して、姿勢制御の検討を実施していました。

基本的には前回と同じコードで簡単なPID制御でパラメータ調整します。
前回はすべての軸を同じパラメータにしていましたが、
ここではx, y軸とz軸 (Yaw角) のパラメータをわけて違う値を指定するようにしました。

ガイドを設けて外部から電源供給して実験していたところ
飛行には非常に多くの電流消費があることを知りました。

 

LiPoバッテリ

飛行には電流能力の大きいバッテリが必要であることが判明しましたので、以下の元気なバッテリを購入しました。

容量650mA、電流能力 39A (60C)で瞬間放電能力は78A (120C)とかなり強力です。
出力電圧も通常のLiPoバッテリより高い4.35Vなので、電圧降下でのマイコンリセットの心配も低減されます。

早速バッテリを積んでひもに吊るして実験しましたところ、バランスを崩してモータがひもを巻き込んでしまい過電流が流れてモータと駆動FETを1対 壊してしまいました。。。。

 

部品交換

交換用のFETとモータを購入しました。

 

FETは1月12日に注文して2月2日に着とかなり時間がかかってしまいました。
(しかしこの間にSHISEIGYO-2を完成させたり、SHISEIGYO-3を改良したりできたので非常に良い時間だったと思います。
私は色々なテーマで自身の好奇心をくすぐる生活を送っていますので、こういった部品待ちの時間は想像を深めたり俯瞰で振り返ったり寄り道したりできる貴重な時間となります。
北海道住みですのでどうしても部品の入手には時間がかかってしまいます。
私はそれをディスアドバンテージとは思っておりません。
私の好奇心とアイディアが途絶えることなくあふれ出るのは むしろコノ部品待ちの時間のおかげだと思っております。)

 

破損したFETを実装し直して、モータを交換しました。

 

 

姿勢制御検討再開

再度 姿勢制御パラメータの再開です。

 

Yaw角の調整。前回コレでモータ壊したのでひもを巻き込まないように治具に工夫を凝らしました。

 

機体調整

プロペラが怖いのでプロペラガードを3Dプリンタで制作して装着しました。
プロペラガード分重量が増しましたので、プロペラを若干大きいものに変更しました。

飛行実験

浮遊直前で機体が回ってしまい安定ホバリングには至っていません。

 

おわりに

現状はまだホバリングが実現できておりません。以下今後の予定です。

  • ガードがフニャフニャで大きいプロペラだと接触することがあるので、プロペラガード再設計
  • 姿勢制御パラメータ再調整
  • 再調整でもホバリングできない場合はPID制御の見直し

単純なPID制御ではダメな可能性がありますので、Interface 2020年 03 月号に記載のあった2重ル―プによる制御も視野に入れないといけないかもしれません。

なかなか険しい道ですね。

それでは次の道でお会いしましょう!

姿勢制御検討 ードローンへの道2ー

0
0

前回は Makerfabs 様よりいただいた基板 ESP32 6- Axis IMU を用いてドローン製作を決意いたしました。

ドローンへの道 爆誕 ードローンへの道1ー

ここではプロペラを制御してドローンの姿勢を制御するべく検討いたしましたので報告します。

 

 

モータ回転

ESP32 6- Axis IMU にモータとプロペラを接続し、回転動作を確認します。
モータ番号の配置と回転方向そしてIOピンの割り振りは以下の通りです。

 

使用したモータとプロペラは以下です。

動作

ESP32のモータ駆動ピンにPWM信号を入力して回転させてみました。
スマホアプリ Blynk を用いてBLE通信でPWM信号のデューティを指定しています。

 

このまま飛ばしてみました。

当然ただモータぶん回すだけじゃこうなりますよね。。。

ちなみにダイソーのワイヤーネットで飛行実験場をこしらえました。

 

姿勢制御

何となく飛びそうなことがわかりましたので、姿勢制御で安定飛行を目指します。

MPU6050

ESP32 6- Axis IMU には6軸IMUセンサ MPU6050が搭載されています。

 

軸は以下の通りです。

 

MPU6050のArduinoライブラリは以下を使用しました。
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/I2Cdev

 

ここではMPU6050のDMP (Digital Motion Processor) 機能を使用して姿勢角を検出することにします。
DMPは内部で何をしているかはよくわかりませんが品質の高い姿勢情報を容易に得ることができます、

モータ制御

XYZ軸の傾きに応じてモータを制御してドローンの姿勢を制御します。

各軸のフィードバック値はそれぞれの姿勢角と角速度を用いては以下のようにPID制御で求めることにしました。

$$軸のフィードバック値 = Kp × (θ – θ_{target}) + Ki × \sum{ (θ – θ_{target})} + Kd × ω$$

$θ$は各軸の角度、$θ_{target}$は目標とする姿勢角、$ω$は各軸の角速度、Kは各パラメータの係数です。

各軸のフィードバック値を組み合わせて4つのモータを制御します。
たとえばX軸に傾いた場合にはM2, M4の回転を上げて、M1, M3の回転を下げるなどします。

各軸のフィードバック値をx2, y2, z2、モータ全体の回転指定値をthr (スロットル)としてモータに与えるPWM信号を以下のようにしました。

M1pwm = thr – x2 + y2 + z2
M2pwm = thr  + x2 – y2 + z2
M3pwm = thr – x2 – y2- z2
M4pwm = thr + x2 + y2 – z2

参考

 

Arduinoコード

BlynkアプリでBLE通信でPIDの各パラメータやモータスロットル、ドローンの姿勢角度の指定を行います。

 

動作

ゴムで吊るして動作確認しました。電源5Vは外部から供給しています。
割とよく姿勢制御ができています。

 

スマホのBlynkアプリからX軸の旋回とZ軸の回転を試してみました。

 

 

おわりに

姿勢制御の方針が決まり動作も確認できました。

以降はホバリング飛行を目指して調整進めていきたいと思います。

それでは次の道で!

ドローンへの道 爆誕 ードローンへの道1ー

3
1

以前Makerfabs 様より素晴らしい製品をたくさんいただきました。

いただいた製品の中に ESP32 6- Axis IMU というドローン製作にピッタリの製品がございました。

ずーっとドローンを作ってみたいなと思っておりましたので、ここに道を開通したく存じます。

 

 

ESP32 6- Axis IMU

ESP32 6- Axis IMU はESP32-WROVERと6軸IMUセンサMPU6050を搭載したドローン向け基板です。

 

回路図に目を通しますとモータもESP32のIOで駆動できるようになっているようです。

Arduino IDEでの設定方法などは以下に記載があります。
 https://www.makerfabs.com/wiki/index.php?title=ESP32_IMU

サンプルコード

サンプルコードは以下にアップされていました。
 https://github.com/Makerfabs/ESP32_IMU_Module

 
早速 MPU6050によるロール/ピッチ/ヨーでキューブを動かすサンプルを実施してみました。

MPU6050のオフセット調整していないのでヨ―角がドリフトしますが、非常に面白いサンプルコードです。

 

ドローン構築に向けて

ドローン製作のために以下のモータとプロペラを購入しました。

モータは配線が白黒のものと赤青のものが2個づつありそれぞれ回転方向は以下の通りでした。

  • 白-黒 (GND):反時計回り
  • 赤-青 (GND):時計回り

プロペラも反時計回り/時計回り用2個づつ 大中小 3種がありました。

 

モータ固定のために3Dプリンタで治具を作製しました。

 

早速モータとプロペラを1個搭載して、外部電源で回転させてみました。

0~1Vほど印可で機体の浮遊をちょっと確認することができました。

 

モータ、プロペラを全部載せました。カッコいい!

 

モータの回転方向は以下の通りです。

参考

  • Interface 2020年 03 月号

 

おわりに

ついに始動したドローンへの道。

まだ機体の姿勢のよるモータの制御方法などは未知ですが、SHISEIGYOでつちかった動くまで
手を動かし続ける根性で進みたいと思います。

それでは次の道でお会いしましょう!

モーションセンサ比較 - MPU6050 vs MPU9250 vs BNO055 –

0
0

モーションセンサが3種ほどそろったので基本動作確認で簡単に比較してみました。

MPU6050

6軸モーションセンサ (3軸加速度+3軸ジャイロ)です。安定のHiLetgoで購入。

以下でArduinoライブラリとプログラム例が提供されています。
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050

以下のライブラリも必要です。
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/I2Cdev

ここでは以下のプログラム例を用いてProcessingの3Dモデルを動かしてみます。
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050/examples/MPU6050_DMP6

構成

Arduinoプログラム

以下のプログラム例を修正します。本デバイスのDMP(Digital Motion Processor)という姿勢角を算出する機能を使用します。
 https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/examples/MPU6050_DMP6/MPU6050_DMP6.ino

100行をコメントアウトして117行のコメントアウトを解除してセンサの姿勢角(クォータニオン)を出力するようにして書き込みます。

Processingプログラム

以下のプログラム例を使用します 
 https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/examples/MPU6050_DMP6/Processing/MPUTeapot/MPUTeapot.pde

71行で接続しているマイコンのポートを指定し実行ます。

動作

 

#MPS6050 オフセット未調整 #arduino #processing

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

オフセット調整をしていないため姿勢角、特にYaw角が安定してません。。。

オフセット調整

MPU6050センサを平行に置いた状態でZ軸加速度が1g(16384)、残りが0になるように調整します。

適切なオフセット値は以下のプログラムで調べることが出来ます。便利!
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050/examples/IMU_Zero

こちらを書き込んで実行すると数分でオフセット値が導出されます。

得られたオフセットをもとに以下の
 https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/examples/MPU6050_DMP6/MPU6050_DMP6.ino

203〜206行を得られたオフセット値である以下に修正して書き込み、Processingを実行します。

動作(オフセット調整版)

 

#MPS6050 オフセット調整 #arduino #processing

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

調整により安定してセンサの姿勢が取得出来ているのがわかります。但しYaw角の初期値は絶対的なものではありません。

MPU9250

6軸センサMPU6500(3軸加速度+3軸ジャイロ)と3軸コンパスAK8963を搭載した9軸モーションセンサです。こちらもHiLetgoで購入 🙂 

結論から言うと。。。うまく行きませんでした。。。MPU6050のようにDMPを使用したいい感じのプログラムがなかったので。。。

しかたないのでSparkfunによるMPU9150モジュール用の以下のプログラムを元に9軸センサから姿勢角(クォータニオン)を取得しMPU6050同様Processingのモデルを動かして見ました。(MPU9250はMPU9150を低消費電力化した上位機種とのこと)
 https://github.com/sparkfun/MPU-9150_Breakout/blob/master/firmware/MPU6050/Examples/MPU9150_AHRS.ino

AHRS(エーハース)[ Attitude Heading Reference System]という電子コンパスで絶対Yaw角(方位)も出力する方式のプログラムのようです。またクォータニオン生成アルゴリズムを2種から選択できます。

以下のライブラリを使用します。
 https://github.com/sparkfun/MPU-9150_Breakout/tree/master/firmware

構成

Arduinoプログラム

改造プログラム

Processingプログラム

MPU6050と同様です。

動作

 

#MPU9250 #arduino #processing

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

う〜んやっぱりだめだー、電子コンパスでYaw角補正してるような動きはしてるけど なんかオカシイ。。。

参考

DMP関連と思われるプログラム。。力尽きたけど今度勉強してみます。。

あとオフセットの調整ができなかったのだけど、MPU6050とはレジスタの値が違うようです。以下を参考に修正しオフセット補正実現できましたがいい感じの姿勢角は得れませんでした。。。。

追記(2018/11/15)

Adafruit Itsy Bitsy M0 ExpressというマイコンでMPU9250 のDMP動作確認できました。よろしければご参照ください。

モーションセンサ比較 - MPU6050 vs MPU9250 vs BNO055 –

BNO055

9軸モーションセンサ (3軸加速度+3軸ジャイロ+3軸コンパス)。以前Adafruitで購入したものです。


国内なら以下で手に入ります。

BNO055 9DOF絶対方位IMUモジュール
価格:3526円(税込、送料別) (2018/10/11時点)

楽天で購入

 
詳細は以下の通り

“キング・オブ・ダークネス” EVIL の鎌を自作

動作

 

#adafruit #bno055 https://homemadegarbage.com/bno055-01

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

オフセット調整必要なく安定した姿勢角を出力してくれる。

中身よくわからないけど、Yaw角もうまいこと3軸コンパスとか用いて姿勢角補正してくれてるんだと思う。。。

総括

正確な姿勢角を得たいのであれば高いけどBNO055がよさそう。。。でも簡単なセンサとしてはMPU6050かなぁ安いし。。。MPU9250くやしいなぁ(T_T)

モーションセンサで作ったモノ

測距センサ VL53L0X を用いた身長測定器

RedBear Duo セットアップ方法 for Arduino IDE

スマート靴占い 『 IしたoTんきになぁ〜れ 』

“キング・オブ・ダークネス”EVIL ハンドをハック

モーションセンサ BNO055 モジュールの動作確認

0
0

先日Adafruitで購入したモーションセンサBNO055の基本動作確認を実施しましたので記載します♪

hackster.io のポイントで BNO055 モーションセンサモジュールをゲットした!

構成

部品

 

BNO055 使用準備

モジュールの詳細や接続方法、チュートリアルは以下のとおりです。

ここではBNO055ライブラリのexampleを使用してBNO055processing3DCGを動かしてみます。

  1. 以下のライブラリ2個をダウンロードしArduinoのライブラリフォルダにインストールします
    Adafruit_BNO055ライブラリ:https://github.com/adafruit/Adafruit_BNO055
    Adafruit_Sensorライブラリ: https://github.com/adafruit/Adafruit_Sensor

  2. BNO055ライブラリ [examples]-[bunny] bunny.inoをArduinoに書込む

  3. 以下のライブラリ2個をダウンロードしprocessingのライブラリフォルダにインストール
    Saito’s OBJ Loaderライブラリ:
     https://github.com/adafruit/Adafruit_BNO055/tree/master/OBJLoader
    G4P GUIライブラリ:https://sourceforge.net/projects/g4p/files/?source=navbar
  4. BNO055ライブラリ[examples]-[bunny]-[processing]-[cuberotate] cuberotate.pdeを起動

  5. ウィンドウ内のSerial portArduinoCOM指定

動作

 

#adafruit #bno055

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

うごいたー!すごくサクサク動きます。

以前からよく使ってたモーションセンサMPU6050はオフセット調整とかしないとイニシャライズに時間かかってたけどBNO055は調整なしでつかえました♪
これはいろいろと使えそう!


 

BNO055を使って作ったもの

この加速度センサをつかって、“キング・オブ・ダークネス”EVILの情念の光線を発する手袋を使いました。手のひらを上にすると赤く光り、下にすると指先から緑の光を発します。

“キング・オブ・ダークネス”EVIL ハンドをハック

ニット配線 と BNO055 で“キング・オブ・ダークネス” EVIL の闇の光を放つ手袋を自作

測距センサ VL53L0X を用いた身長測定器

0
0

子供って長時間じっとできないので身長をはかるのってなかなか大変。。。
そこで低価格で高精度のセンサを見つけたので場所と時間を取らない身長測定器をつくりました。

構成

  • 距離センサ VL53L0X

凄い広範囲なのに分解能1mmのセンサです!Arduino用ライブラリは以下にあります。
 https://github.com/pololu/vl53l0x-arduino

  • 6軸モーションセンサ MPU6050

    3軸ジャイロスコープと3軸加速度センサで姿勢情報をセンシングできます。今回は水平方向のx軸、y軸の加速度のみ使用して測定器の水平度を計測してます。しかしメチャクチャ安い!Arduino用ライブラリは以下にあります(MPU6050とI2Cdevを使用)。
     https://github.com/jrowberg/i2cdevlib/tree/master/Arduino

  • LED(Neopixel)
    測定器が非水平の時は赤く、水平の時は緑に光ります。
  • LCDディスプレイ
    梅沢無線で¥400!山積みにされてるのを購入。以下が参考になります。
     https://www.arduino.cc/en/Tutorial/HelloWorld

  • マイコンArduino Nano互換品

    激安の互換品を使用してます 🙂 
  • 測定ボタン(タクトスイッチ)
    押すことで動作モードを変更します。

測定器

センサ VL53L0Xを木箱の底に配置し距離を測定します。距離はLCDディスプレイに表示されます。
木箱内部にマイコンArduino Nanoと6軸モーションセンサMPU6050に配置し、電源には9V電池を使用しました。

MPU6050の水平方向の(重力)加速度を検出して測定器の水平具合を計測し、水平時にLEDが緑色になります。

使い方

ディスプレイ表示

通常モード

電源スイッチを入れると起動し通常モードで動作します。通常モード時は常に距離を測定しディスプレイに表示されます。測定器が水平時にはLEDは緑に光り、非水平時は赤く光ります。

測定モード

測定ボタン(タクトスイッチ)を押している間は測定モードとなります。測定器を頭に乗せて測定モードにしてから水平状態で距離が検出されるとLEDが青くひかり測定値が保持され身長が計測できます。

再度測定ボタンを押すと通常モードに戻ります。

Arduino IDE用コード

距離センサ VL53L0XはLONG_RANGEモードとHIGH_ACCURACYモードで使用。
距離は単位をcmにしてセンサ位置分補正してます(1mm)。

 

比較的高速で測定でき精度も高いので、これで落ち着きのない長男くんの身長でも簡単に測ることができます♪

追記(16/9/23)

hackaday.com様にて紹介いただきました!

170cmくらいまではそれなりの精度で測れてます。180cm超えると誤差大きくなりますね。。。水平度測るセンサMPU6050の値平均化してノイズ除去とか まだまだ詰めれそうです。

追記(16/9/26)

Adafruit様のブログで取り上げていただきました。

追記(16/9/28)

各所で取り上げていただき感謝です 😛 !

なんと本家Arduino様やAtmel様もTweetくださいました!!