MK2Plusロボットアームコントローラー
コンポーネントと消耗品
| × | 1 | ||||
![]() |
| × | 3 | |||
![]() |
| × | 1 | |||
![]() |
| × | 3 | |||
![]() |
| × | 3 |
必要なツールとマシン
> ![]() |
|
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
EEZYBOTMK2アーム
クールなロボットアームをthingiverse.comで検索した場合、これに遭遇した可能性があります。 EEZYBOT MK2アーム(華麗なdaghizmoによって設計された)は、1:7の比率で縮小されたABBIRB460の運動学的リンケージを共有します。ただし、このアームはサーボで動作するように設計されているため、少し不安定で優雅さが低下します。しかし、そこにはもっと良い解決策があります。ここにあるMK2Plusアーム、https://www.thingiverse.com/thing:2520572は、3つのステッピングモーターを使用してリンケージを移動する元のMK2アームのリミックスバージョンです。
<図>
これを印刷するには時間がかかるので、この記事をブックマークして、すべてを印刷して、完了したら戻ってきてください! (数日かかります)
アームの組み立てに問題がある場合は、オンラインでたくさんのチュートリアルがあります。
ホームポジションの選択
サーボとは異なり、ステッピングモーターには位置認識がありません。アームの電源が入っているときに最初にホーミングルーチンを設定することで、これを修正する必要があります。 3つのリミットスイッチを使用してホームポジションを設定します。リンケージはやや複雑な方法で機能しますが、アームを組み立ててすべてがどのように動くかを確認すると、スイッチをどこに配置するかを簡単に理解できます。
<図>
(つまり、デカルトシステムのようなXYはありませんが、とにかく簡単にするためにXYと呼びます)
Zリミットスイッチは、アームのメインベースのどこにでも設定できます。腕が動き回ったときにワイヤーが外れないように、ホットグルーを少し加えます。
配線
すべての端子がCNCシールドにマークされているため、配線は非常に簡単です。 A4988ドライバーを間違った方法で接続しないでください。 Yリミットスイッチのある側のステッピングモーターは、CNCシールドのYステッピングモーターの端子に接続する必要があります。 Xリミットスイッチ側のモーターも同様です。 (この方法でCNCシールドを扱いやすいため、これらをXおよびYと呼びます)アームのベースを回転させる最後のステッパーをZ端子に接続し、名前に従ってエンドストップを配線します。極性は関係ありません。
<図>
モーターがストールすることなく動作するための電流を供給することができる適切な12V電源を見つけてください。
コード
ビジネスに取り掛かりましょう。ステッパーをスムーズに駆動するために、Arduino用のAccelStepperライブラリを使用します。このライブラリを使用すると、複数のステッピングモーターを同時に簡単に加速、減速、および実行できます。このライブラリは、ライブラリマネージャー([スケッチ]> [ライブラリを含める]> [ライブラリマネージャー])を使用して、ArduinoIDEから直接取得できます
<図>
また、airspayceの元のクリエイターページから入手することもできます。 https://www.airspayce.com/mikem/arduino/AccelStepper/
必要なものがすべて揃ったので、コードを段階的に見ていきましょう。
まず、使用するピンの名前をいくつか定義します。クイックグーグル画像検索でCNCシールドのピンダイアグラムを見つけることができます。また、3つのステッピングモーター用のAccelStepperオブジェクトを作成します。
#define XSTEP 2 //ステッピングモーターステップピン
#define YSTEP 3
#define ZSTEP 4
#define XDIR 5 //ステッピングモーター方向制御ピン
#define YDIR 6
#define ZDIR 7
#define ENABLE 8 // CNCシールドイネーブルピン
#define XLIMIT 9 //スイッチピンを制限
#define YLIMIT 10
#define ZLIMIT 11
#define XMOTORACC 250 //加速度と最大速度の値
#define XMOTORMAXSPEED 1000
#define YMOTORACC 250
#define YMOTORMAXSPEED 1000
#インクルード
AccelStepper XMOTOR(1、XSTEP、XDIR);
AccelStepper YMOTOR(1、YSTEP、YDIR);
AccelStepper ZMOTOR(1、ZSTEP、ZDIR); コード>
ピンを設定するための小さなヘルパー関数を作成しましょう。
void pinsetup(){
pinMode(ENABLE、OUTPUT);
digitalWrite(ENABLE、LOW);
pinMode(XLIMIT、INPUT_PULLUP);
pinMode( YLIMIT、INPUT_PULLUP);
pinMode(ZLIMIT、INPUT_PULLUP);
}
これで、ホーミングルーチンのロジックを確認しましょう。
void autohome(){//これを使用してホーミングルーチンを呼び出しています
xyhome();
zhome();
}
void xyhome (){
int initial_xhome =-1;
int initial_yhome =-1;
//ホーミングの起動時に各ステッパーの最大速度と加速度を設定します
XMOTOR.setMaxSpeed(500.0 ); //ステッパーの最大速度を設定します(精度を上げるために遅くします)
XMOTOR.setAcceleration(50.0); //ステッパーの加速を設定します
YMOTOR.setMaxSpeed(500.0); //ステッパーの最大速度を設定します(精度を上げるために遅くします)
YMOTOR.setAcceleration(50.0); //ステッピングの加速を設定します
//起動時にステッピングモーターのホーミング手順を開始します
while(digitalRead(YLIMIT)){//スイッチがアクティブになるまでステッピングをCCWに移動させます
XMOTOR。 moveTo(initial_xhome); //移動する位置を設定します
YMOTOR.moveTo(initial_yhome); //移動する位置を設定します
initial_xhome--; //必要に応じて、次の移動のために1ずつ減らします
initial_yhome-;
XMOTOR.run(); //ステッパーの移動を開始します
YMOTOR.run();
delay(5);
}
XMOTOR.setCurrentPosition(0); //現在の位置を今のところゼロに設定します
YMOTOR.setCurrentPosition(0);
initial_xhome =-1;
initial_yhome =1;
while(digitalRead(XLIMIT)){
XMOTOR.moveTo(initial_xhome); //移動する位置を設定します
YMOTOR.moveTo(initial_yhome); //移動する位置を設定します
initial_xhome--; //必要に応じて、次の移動のために1ずつ減らします
initial_yhome ++;
XMOTOR.run(); //ステッパーの移動を開始します
YMOTOR.run();
delay(5);
}
YMOTOR.setCurrentPosition(0); //今のところ現在の位置をゼロに設定します
YMOTOR.setMaxSpeed(250.0); //ステッパーの最大速度を設定します(精度を上げるために遅くします)
YMOTOR.setAcceleration(10.0); //ステッパーの加速を設定します
initial_yhome =1;
while(!digitalRead(YLIMIT)){//スイッチが非アクティブになるまでステッパーをCWに移動させます
YMOTOR.moveTo(initial_yhome);
YMOTOR.run();
initial_yhome ++;
delay(5);
}
YMOTOR.setCurrentPosition(0);
YMOTOR.setMaxSpeed(YMOTORMAXSPEED ); //ステッパーの最大速度を設定します(通常の動きの場合は高速)
YMOTOR.setAcceleration(YMOTORACC); //ステッパーの加速を設定します
XMOTOR.setCurrentPosition(0); //現在の位置を今のところゼロに設定します
XMOTOR.setMaxSpeed(250.0); //ステッパーの最大速度を設定します(精度を上げるために遅くします)
XMOTOR.setAcceleration(10.0); //ステッパーの加速を設定します
initial_xhome =1;
while(!digitalRead(XLIMIT)){//スイッチが非アクティブになるまでステッパーをCWに移動させます
XMOTOR.moveTo(initial_xhome);
XMOTOR.run();
initial_xhome ++;
delay(5);
}
XMOTOR.setCurrentPosition(0);
XMOTOR.setMaxSpeed(XMOTORMAXSPEED ); //ステッパーの最大速度を設定します(通常の動きの場合は高速)
XMOTOR.setAcceleration(XMOTORACC); //ステッパーの加速を設定します
}
void zhome(){
int initial_zhome =-1;
//ホーミングの起動時に各ステッパーの最大速度と加速を設定します
ZMOTOR.setMaxSpeed(100.0); //ステッパーの最大速度を設定します(精度を上げるために遅くします)
ZMOTOR.setAcceleration(100.0); //ステッピングの加速を設定します
//起動時にステッピングモーターのホーミング手順を開始します
while(digitalRead(ZLIMIT)){//スイッチがアクティブになるまでステッピングをCCWに移動させます
ZMOTOR。 moveTo(initial_zhome); //移動する位置を設定します
initial_zhome--; //必要に応じて、次の移動のために1ずつ減らします
ZMOTOR.run(); //ステッパーの移動を開始します
delay(5);
}
ZMOTOR.setCurrentPosition(0); //今のところ現在の位置をゼロに設定します
ZMOTOR.setMaxSpeed(50.0); //ステッパーの最大速度を設定します(精度を上げるために遅くします)
ZMOTOR.setAcceleration(50.0); //ステッパーの加速を設定します
initial_zhome =1;
while(!digitalRead(ZLIMIT)){//スイッチが非アクティブになるまでステッパーをCWに移動させます
ZMOTOR.moveTo(initial_zhome);
ZMOTOR.run();
initial_zhome ++;
delay(5);
}
ZMOTOR.setCurrentPosition(0);
ZMOTOR.setMaxSpeed(1000.0 ); //ステッパーの最大速度を設定します(通常の動きの場合は高速)
ZMOTOR.setAcceleration(1000.0); //ステッパーの加速を設定します
}
さて、それはたくさんのコードです。ここで実際に何が起こっているのですか?アームは最初にXおよびYモーターでホーミングルーチンを実行します。リンケージが機能する方法のため、これはいくつかのステップで行われます。 (最後にビデオを見て、これが実際に動作していることを確認できます)
- 最初に、XモーターとYモーターを反対方向に動かして、Yリミットスイッチを最初に押します。
- Yリミットスイッチを押すとすぐに、両方のモーターが同じ方向に回転し、Xリミットスイッチが押されます。
- Xスイッチを押した後、モーターを少し動かしてスイッチを押し下げます(悲しいことに押し下げたのではなく、のように押し下げます)。
- 最後にZモーターを回して、Zリミットスイッチを押します。
初めてホーミング手順を実行するときは、本当に注意する必要があります。ステッパーが反対方向に動く場合は、電源を切り、モーターのコネクターを裏返します。
これで、setup()関数からautohome()を呼び出して、1回だけ実行されるようにします。 loop()は空白のままにします。また、電源に手を置いて、問題が発生した場合は電源をオフにしてください。
void setup(){
//セットアップコードをここに配置して1回実行します:
Serial.begin(9600);
pinsetup();
autohome();
Serial.println( "HOMING OK");
}
運が良ければ、モーターが正しい方向に回転し、リミットスイッチが正しくクリックされ、ホーミングルーチンが問題なく機能します。しかし、あなたが私のようであれば、すべてが稼働する前に少し変更を加える必要があります。したがって、ホーミングがうまくいかない場合は、3D印刷された腕を台無しにしないように、必ず電源を切ってください。
最後に、loop()に独自のロジックを記述して、腕が目的の位置に移動するようにすることができます。アームのリンク方法により、XモーターとYモーターは、ほぼデカルトの方法でエンドエフェクターを制御します。
void loop(){
XMOTOR.runToNewPosition(100);
delay(1000);
YMOTOR.runToNewPosition(50);
delay(1000);
YMOTOR.runToNewPosition(-50);
delay(1000);
YMOTOR.runToNewPosition(0);
delay(1000);
XMOTOR.runToNewPosition( 0);
delay(1000);
}
結論
人気のあるGRBLファームウェアを使用してこのアームを制御する方法についてのチュートリアルをたくさん見てきました。ただし、これは、腕を動かすためにシリアルコマンドを腕に送信するコンピューターが必要であることを意味します。 MK2アームでいくつかの動きを行うだけでよい場合は、それらをArduinoに簡単にハードコードして、独自の動作をさせることができます。
これは、シリアルコマンドでこれを制御できないという意味ではありません。シリアル区切り文字コードをこれに組み込むだけで、XYおよびZモーターステップを文字列として送信できます(特殊文字で区切られます-たとえば、5、6、7 *は、Xモーターを5ステップ、Yを6およびZ×7。*は文字列の終わりを示すために使用されます。
これをさらに発展させて、エンドエフェクタの3D空間座標を送信し、逆運動学または基本的な三角法を使用して、arduinoに必要な手順を理解させることもできます。
楽しむ!そして、Thingiverseのすべての素晴らしいデザイナーに心から感謝します!
コード
- robotArm
robotArm Arduino
ファイルを抽出し、Arduino IDEで開きますプレビューなし(ダウンロードのみ)。
MK2ロボットアームコントローラー-Github
githubリポジトリへのリンクhttps://github.com/yasaspeiris/MK2-Robot-Arm-Controller カスタムパーツとエンクロージャー
シンギバースのロボットアームMK2プラス
thingsiverse.com のCADファイルを確認するためのクレジット製造プロセス
- モーターコントローラーはArmCortex-M0コアを統合
- デュアルアームスカラロボット
- MeArmロボットアーム-あなたのロボット-V1.0
- イーサネットを介して制御されるロボットアーム
- Littlearm 2C:3DプリントされたArduinoロボットアームを構築する
- DIY Arduinoロボットアーム–ハンドジェスチャで制御
- AndroidアプリでArduinoロボットアームを制御する
- MeArmロボット用のジョイスティックコントローラー-座標の記録
- RealtimeRoboticsが新しいロボットコントローラーコンピューターを発表
- ロボットアームを装備したターニングセンター
- ロボットは協働ロボットアームとモバイルプラットフォームを組み合わせた