こんにちは。星野です。
今日は、IMUユニットとカメラマウントのサーボモーターを組み合わせていこうと思います。
前回IMUユニットから取得した姿勢データを元に、カメラマウントを動かします。
用意するもの
・機体
・Atom Motion キット
・IMUユニット
・梱包材
・セロハンテープ
・パソコン
IMUユニットの固定位置の変更
前回の投稿で、カメラマウントの上にIMUユニットを固定しましたが、固定場所を変更をします。
Y軸が機体の正面を向くように、機体の底面に固定します。
固定する位置が変わるだけなので、各軸の向きは変わりません。
カメラマウントとIMUユニットを組み合わせる
①3つのサーボモーターとIMUユニットを接続します。
※接続方法は過去の投稿を参照してください。
②Atom Motionキットを梱包材で包みます。
IMUユニットのケーブルとサーボモータのケーブルを梱包材の隙間から出し、サーボモーターのケーブル側にAtom Motionキットの電源スイッチがくるようにし、梱包材をセロハンテープでとめます。
Atom Motionキットを梱包材で包み終わったら、サーボモーターのケーブルが上向きになるように、機体に入れます。
③プログラムを書き込みます。
#include <M5Atom.h>
#include "AtomMotion.h"
AtomMotion Atom;
//---------IMUユニット-------------------------
float roll, pitch, yaw; //ロール、ピッチ、ヨーの値を格納する変数
int roll_servo, pitch_servo, yaw_servo; //サーボモーターの角度指定用変数
//---------サーボモーター------------------------
const int ch1 = 1;
const int ch2 = 2;
const int ch3 = 3;
void setup(){
M5.begin(true, false, true);
Serial.begin(115200);
Atom.Init();
M5.IMU.Init();
M5.IMU.SetGyroFsr(M5.IMU.GFS_2000DPS); //ジャイロのレンジを設定 250,500,1000,2000DPSから選択可能
M5.IMU.SetAccelFsr(M5.IMU.AFS_2G); //加速度のレンジを設定 2,4,8,16Gから選択可能
Atom.SetServoAngle(ch1, 90);
Atom.SetServoAngle(ch2, 90);
Atom.SetServoAngle(ch3, 90);
delay(1000);
}
void loop() {
M5.IMU.getAhrsData(&pitch,&roll,&yaw); //ロール、ピッチ、ヨーの値を取得
//サーボモーターは180度以上動かせないので、角度指定する時に180度以上にならないようにする
if(roll > 90){roll = 90;}
if(roll < -90){roll = -90;}
if(pitch > 90){pitch = 90;}
if(pitch < -90){pitch = -90;}
if(yaw > 90){yaw = 90;}
if(yaw < -90){yaw = -90;}
//傾きに応じて、サーボモーターの角度を決める
roll_servo = 90 - roll;
pitch_servo = 90 - pitch;
yaw_servo = 90 - yaw;
Atom.SetServoAngle(ch1, roll_servo);
Atom.SetServoAngle(ch2, pitch_servo);
Atom.SetServoAngle(ch3, yaw_servo);
delay(25);
}
動作している様子
機体がまっすぐの状態から何度傾いているかを検出し、傾きに対して反対向きにサーボモーターを動かすようにしています。
おわりに
今日はIMUユニットとサーボモーターを組み合わせました。
次回はパラシュート制作をしていこうと思います。
次回の更新予定日10/17です。お楽しみに!