工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

このチュートリアルでは、サーボモーターを使ったArduinoジンバル(セルフスタビライジングプラットフォーム)の作り方を学びます。これは前回のMPU6050チュートリアルの拡張版です。

以下の動画を見るか、書面チュートリアルをお読みください。

概要

ジンバルを3Dモデリングソフトで設計。3軸制御用にMG996Rサーボモーター3個、ベースにはMPU6050センサー、Arduino、バッテリーを搭載します。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

Thangsで3Dモデルを探索・ダウンロードできます。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

STLファイル:

Creality CR-10 3Dプリンターで全パーツをプリント。完璧な仕上がりでした。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

組み立て

ジンバルの組み立ては簡単です。まずヨー(Yaw)軸サーボを取り付け。M3ボルト・ナットでベースに固定。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

同様にロール(Roll)軸サーボを固定。パーツはMG996Rサーボにぴったり合うよう設計されています。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

パーツ同士の接続には、サーボ付属のラウンドホーンを使用。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

まずラウンドホーンをベースに2本のボルトで固定し、前のサーボの出力軸に別のボルトで取り付けます。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

同じ要領でピッチ(Pitch)軸サーボとトッププラットフォームも組み立てます。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

サーボ配線をホルダーの開口部に通して整理。MPU6050センサーをベースに挿入し、ボルト・ナットで固定。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

電源にはリチウムイオン電池2個をバッテリーホルダーに入れ、ボルト・ナット2本でベースに固定。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

2個のリチウムイオン電池で約7.4Vになりますが、Arduinoとサーボには5Vが必要です。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

そこでバックコンバーターで7.4Vを5Vに降圧します。

Arduinoジンバルの回路図

すべてを接続します。プロジェクトの回路図と接続方法はこちら。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

このArduinoチュートリアルに必要なコンポーネント:

  • MPU6050 IMU
  • MG996Rサーボ
  • バックコンバーター
  • Arduinoボード
  • ブレッドボードとジャンパーワイヤー

最後に電子部品と配線をベースに押し込み、底面カバーで覆って完成です。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

これでセルフバランシングプラットフォーム、つまりArduinoジンバルが完成し、期待通りに動作します。あとはプログラムを見てみましょう。

Arduino 3軸サーボ制御で自作するセルフスタビライジングジンバル

Arduinoコード

この例のArduinoコードは、Jeff Rowberg氏のi2cdevlibライブラリに含まれるMPU6050_DMP6例を改変したものです。

コードのダウンロードはこちら:

コード解説: 読み取り可能なヨー、ピッチ、ロールの出力を使用します。

// Get Yaw, Pitch and Roll values
#ifdef OUTPUT_READABLE_YAWPITCHROLL
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
// Yaw, Pitch, Roll values - Radians to degrees
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;
// Skip 300 readings (self-calibration process)
if (j <= 300) {
  correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
  j++;
}
// After 300 readings
else {
  ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees
  // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180
  int servo0Value = map(ypr[0], -90, 90, 0, 180);
  int servo1Value = map(ypr[1], -90, 90, 0, 180);
  int servo2Value = map(ypr[2], -90, 90, 180, 0);
  // Control the servos according to the MPU6050 orientation
  servo0.write(servo0Value);
  servo1.write(servo1Value);
  servo2.write(servo2Value);
}
#endif

値を取得したら、まずラジアンから度に変換します。

// Yaw, Pitch, Roll values - Radians to degrees
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;

センサーがまだ自己キャリブレーション中のため、300回分の読み取りをスキップ/待機します。また、最初はピッチとロールが0なのに対し、ヨーは常にランダムな値から始まるため、その値を取得しておきます。

// Skip 300 readings (self-calibration process)
if (j <= 300) {
  correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
  j++;
}

300回読み取り後、まず上記で取得したランダム値を減算してヨーを0度に設定。その後、ヨー、ピッチ、ロールの値(-90〜+90度)を、サーボ制御用の0〜180度にmap()で変換します。

// After 300 readings
else {
  ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees
  // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180
  int servo0Value = map(ypr[0], -90, 90, 0, 180);
  int servo1Value = map(ypr[1], -90, 90, 0, 180);
  int servo2Value = map(ypr[2], -90, 90, 180, 0);
  // Control the servos according to the MPU6050 orientation
  servo0.write(servo0Value);
  servo1.write(servo1Value);
  servo2.write(servo2Value);
}

最後にwrite()関数でこれらの値をサーボに制御信号として送信します。ヨーサーボを無効にすれば、X/Y軸のみのスタビライゼーション、つまりカメラジンバルとしても使えます。

ただし、これは決して良いカメラジンバルではありません。動きがスムーズでないのは、これらのサーボがそういう用途向けではないからです。本物のカメラジンバルは特殊なBLDCモーターを使って滑らかな動きを実現しています。このプロジェクトは教育目的としてお考えください。

以上でこのチュートリアルは終了です。お楽しみいただけたら幸いです。質問はコメント欄でどうぞ。Arduinoプロジェクトコレクションもご覧ください。


製造プロセス

  1. 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
  2. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  3. ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
  4. Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
  5. Arduino Mega 2560搭載 総合トレーニングキット – センサー、モーター、カスタムPCB完備
  6. DIY ArduinoラジオニクスEMR治療デバイスの構築
  7. Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ
  8. Arduinoで作るスマートゴミ箱 – 自動開閉蓋付き
  9. ArduinoでSoloドローンのサーボ制御をマスター:簡単セットアップ&スイープチュートリアル
  10. Arduinoで作るポータブルRFIDドアロック - ステップバイステップガイド
  11. DIY 3軸CNCフライス盤:精密加工機を自作する