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

DIYArduinoジンバル|自己安定化プラットフォーム

このチュートリアルでは、Arduinoジンバルまたはサーボモーターを備えた自己安定型プラットフォームを構築する方法を学習します。このチュートリアルは、実際には、MPU6050チュートリアルに関する前のチュートリアルを拡張したものです。

次のビデオを見るか、以下のチュートリアルを読むことができます。

概要

3Dモデリングソフトウェアを使用してジンバルを設計しました。これは、3軸制御用の3つのMG996Rサーボモーターと、MPU6050センサー、Arduino、およびバッテリーが配置されるベースで構成されています。

この3Dモデルを見つけてダウンロードしたり、Thangsのブラウザで調べたりすることができます。

STLファイル:

Creality CR-10 3Dプリンターを使用して、すべてのパーツを3D印刷しましたが、完璧に仕上げられました。

組み立て

ジンバルの組み立てはとても簡単でした。ヨーサーボの取り付けから始めました。 M3ボルトとナットを使用してベースに固定しました。

次に、同じ方法でロールサーボを固定しました。パーツは、MG996Rサーボに簡単にフィットするように特別に設計されています。

パーツ同士の接続には、サーボ付属の丸ホーンを使用しました。

まず、丸いホーンを2本のボルトでベースに固定し、次に別のボルトを使用して前のサーボに取り付ける必要があります。

残りのコンポーネント、ピッチサーボ、トッププラットフォームを組み立てるために、このプロセスを繰り返しました。

次に、ホルダーの開口部にサーボワイヤーを通し、整理しました。次に、MPU6050センサーを挿入し、ボルトとナットでベースに固定しました。

プロジェクトに電力を供給するために、私はこのバッテリーホルダーに置いた2つのリチウムイオンバッテリーを使用しました。 2本のボルトとナットを使用してバッテリーホルダーをベースに固定しました。

2個のリチウムイオン電池は約7.4Vを生成しますが、Arduinoとサーボに電力を供給するために5Vが必要です。

そのため、7.4Vを5Vに変換するバックコンバーターを使用しました。

Arduinoジンバル回路図

今残っているのは、すべてをつなぐことです。このプロジェクトの回路図と、すべてを接続する必要がある方法は次のとおりです。

このArduinoチュートリアルに必要なコンポーネントは、以下のリンクから入手できます。

  • MPU6050IMU………………………………。 アマゾン /バンググッド /AliExpress
  • MG996Rサーボ………………………………。 アマゾン /バンググッド /AliExpress
  • バックコンバーター………………………………
  • Arduinoボード…………………………..…..
  • ブレッドボードとジャンパー線…………

最後に、電子部品とワイヤーをベースに押し込み、下部にあるこのカバーを使用してそれらを覆いました。

これにより、セルフバランシングプラットフォームまたはArduinoジンバルが実行され、期待どおりに機能します。残っているのは、プログラムを確認することです。

Arduinoコード

この例のArduinoコードは、JeffRowbergによる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);
    }
#endifCode language: Arduino (arduino)

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

// 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;Code language: Arduino (arduino)

次に、この間、センサーはまだ自己校正プロセス中であるため、待機するか、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++;
    }Code language: Arduino (arduino)

300回の読み取りの後、最初に、上記でキャプチャされたランダム値を差し引くことにより、ヨーを0に設定します。次に、ヨー、ピッチ、ロールの値を–90〜 + 90度で、サーボの駆動に使用される0〜180の値にマッピングします。

// 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);
    }Code language: Arduino (arduino)

最後に書き込み機能を使用して、これらの値を制御信号としてサーボに送信します。もちろん、X軸とY軸の安定化だけが必要な場合は、Yawサーボを無効にして、このプラットフォームをカメラのジンバルとして使用できます。

これは良いカメラジンバルからはほど遠いことに注意してください。これらのサーボはそのような目的のためのものではないため、動きはスムーズではありません。実際のカメラジンバルは、スムーズな動きを得るために特殊なタイプのBLDCモーターを使用しています。したがって、このプロジェクトは教育目的でのみ検討してください。

このチュートリアルは以上です。楽しんで、何か新しいことを学んだことを願っています。以下のコメントセクションでお気軽に質問してください。Arduinoプロジェクトのコレクションを確認することを忘れないでください。


製造プロセス

  1. DIY LUMAZOID Arduino Music Visualiser
  2. Arduinoとスマートフォンを使用したDIY電圧計
  3. サーボモーター付きロボット回避障害物
  4. DIYバーチャルリアリティスケートボード
  5. Arduinoトレーニングプラットフォーム
  6. DIY ArduinoRADIONICSトリートメントマシン
  7. DIY2Dモーションレーシングシミュレーター
  8. Arduinoゴミ箱ボット(ゴミ箱の自動開閉)
  9. ソロサーボスイープ
  10. RFIDを使ったDIYのアイデア
  11. DIY3軸CNCVMC