Nunchuk制御ロボットアーム(Arduino付き)
コンポーネントと消耗品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
<図> <図> <図> <図>
ロボットアームは素晴らしいです!世界中の工場にそれらがあり、そこでは正確に物を塗装、はんだ付け、運搬します。また、宇宙探査、海中遠隔操作無人探査機、さらには医療用途にも使用されています!
そして今、あなたはあなた自身の家、オフィスまたは研究室でそれらのより安いバージョンを持つことができます!繰り返しの仕事をするのにうんざりしていませんか?あなたを助けるためにあなた自身のロボットをプログラムしてください...または物事を台無しにしてください! :D
このチュートリアルでは、ロボットアームを取り付ける方法と、ArduinoMegaを使用してロボットアームをプログラムする方法を示します。このプロジェクトでは、ロボットアームを制御する別の方法、つまりニンテンドーヌンチュクを使用する方法も体験したいと思いました。安価で見つけやすく、センサーがたくさんあります。
このチュートリアルを使用する方法はいくつかあります。ロボットアームキットをお持ちでない場合(および購入または構築したくない場合)でも、Arduinoプログラミングについて、およびWiiNunchukを独自のプロジェクトに接続する方法を学ぶために使用できます。また、これを使用して、電子機器や機械工のスキルを練習することもできます。
ステップ1:ツールと材料 <図> <図> <図> <図> <図>
このプロジェクトでは、次のツールと資料が使用されました。
ツールと資料:
- はんだごてとワイヤー。 Arduinoに接続するために、いくつかの端子をNunchukのワイヤにはんだ付けする必要がありました。
- 収縮チューブ。 導体をより適切に分離するために、収縮チューブの一部が使用されました。
- ドライバー。 構造は、いくつかのボルトとナットを使用して取り付けられています。
- 6軸メカニカルデスクトップロボットアーム (リンク)。この素晴らしいキットには、以下で説明するように、すでにいくつかのコンポーネントが付属しています。信頼性が高く、組み立ても簡単です。
- 12V電源(2A以上);
- ヌンチュクコントローラー (リンク)。 Arduinoボードに接続し、ロボットアームを制御するために使用されます。
- オスジャンパー線(4線);
- Arduino Mega (リンク/リンク/リンク)。私が使用したロボットアームキットには、このArduinoボードにすでに付属しているボードとコントローラーのバンドルも含まれていることに注意してください。これらのキットを使用していない場合は、他のArduinoボードも使用できます。
後で、 Nunchukアダプターがあると知らされました。 ブレッドボードへの接続が簡単になります(リンク/リンク)。手順9で説明したように、はんだ付けについて同じ時間を行い、元のコネクタを破壊したくない場合に適したオプションです。
Sain Smart 6軸メカニカルデスクトップアームには、すでに次のコンポーネントが付属しています。
- Arduino Mega 2560 R3(リンク)
- コントロールボードシールド(リンク)
- NRF24L01 +ワイヤレストランシーバーモジュール(リンク)
- MPU6050 3軸ジャイロスコープと3軸加速度計(リンク)
- 71 xM3X8ネジ
- 47 xM3ナット
- 2 xUブラケット
- 5xサーボブラケット
- 4 x 9kgサーボ(リンク)
- 2 x 20kgサーボ(リンク)
- 6x金属サーボトレイ
- 3 xUブラケット
- 21x直角ブラケット
- 3xフランジベアリング
- 1xグリッパー
他のロボットアームキットをオンラインで見つけたり、独自に設計したりすることもできます。たとえば、3Dプリントできる素晴らしいプロジェクトがいくつかあります。
次の7つのステップでは、回路を配線する前にアームキットを組み立てる方法を説明します。同様のキットがない場合は、気軽にいくつかの手順を実行してください。別のロボットアームキットを使用して組み立て、電子機器とプログラミングの手順に直接ジャンプできます。
各ステップには、ロボットアームがどのように組み立てられたかを示すアニメーションGIFがあります。 Webサイトのデスクトップバージョンでのみ実行されます。
ステップ2:ロボットアームの組み立てPt1-ベース <図> <図> <図>
最初に組み立てられる部品はロボットのベースです。
写真に示すように、2つのU字型ブラケットでできており、4つのM3ボルトとナットを使用して背中合わせに結合されています。これはおそらく取り付けが最も簡単な部品です。
ステップ3:ロボットアームPt2の組み立て-サーボ#1- <図> <図> <図> <図> <図>
最初のサーボモーターは、サーボブラケットを使用してベースに対して垂直に取り付けられています。このプロファイルは、写真に示すように、4つのM3ボルトとナットを使用してベースに取り付けられています。サーボ#1はその上部に配置され、4つのM3ボルトとナットを使用して取り付けられます。
サーボ軸には円形の金属ホーンが取り付けられています。キットにはいくつかのプラスチック製のホーンが付属しています。ロボットの組み立てには使用されません。
ステップ4:ロボットアームPt3の組み立て-サーボ#2- <図> <図> <図> <図> <図> <図> <図>
別のサーボブラケットが前のサーボブラケットに対して垂直に取り付けられています。 4本のM3ボルトを使用してサーボ#1ホーンに接続されています。サーボ#2には4つのM3ボルトとナットが取り付けられており、円形の金属ホーンも使用されています。
次に、4本のボルトを使用してUブラケットをホーンに取り付けます。 M3ボルトがサーボ軸の反対側で使用されていることに注意してください。それは構造に安定性を与えます。ベアリングがこのボルトに適合し、別のM3ナットを使用して所定の位置にロックされます。このようにして、Uブラケットはサーボ#2の中心軸にしっかりと取り付けられます。
ステップ5:ロボットアームPt4の組み立て-サーボ#3- <図> <図> <図> <図> <図> <図>
別のUブラケットは、4つのM3ボルトとナットを使用して取り付けられています。
もう一方の端には、円形の金属ホーンと4本のボルトを使用してサーボ#3が取り付けられています。サーボブラケットはサーボモーターに接続されており、L字型のプロファイルはいくつかのボルトとナットを使用してサーボブラケットにリンクされています。
前に説明したように、サーボ軸の反対側に別のベアリングが使用されていることに注意してください。
ステップ6:ロボットアームPt4の組み立て-サーボ#4- <図> <図> <図>
別のUブラケットは、4つのM3ボルトとナットのセットを使用してL字型プロファイルに接続されます。前の手順と同様に、サーボ#4は4本のボルトを使用してUブラケットに取り付けます。別のサーボブラケットがサーボに接続されています。
ステップ7:ロボットアームPt4の組み立て-サーボ#5 <図> <図> <図>
5番目のサーボは別のサーボブラケットを使用してサーボ#4に垂直に接続され、4つのM3ボルトとナットを使用して取り付けられています。
ステップ8:ロボットアームPt4の組み立て-サーボ#6 <図> <図> <図>
次に、グリッパーをサーボ#5軸に接続します。上部のサーボ#6は、いくつかのボルト、ナット、および金属ホーンを使用して接続されています。グリッパーにはいくつかのギアがあり、サーボの回転をグリッパーの直線運動に変えます。
ステップ9:Nunchukコントローラーの準備 <図> <図> <図> <図> <図>
このプロジェクトでは、いくつかの理由からNintendoNunchukコントローラーを使用することにしました。
- 安いです! レプリカの品質は劣る可能性がありますが、このプロジェクトには堅牢なコントローラーは必要ありませんでした。
- 簡単に見つけることができます! オンラインには、オリジナルで安価なレプリカがいくつかあります。
- センサーがたくさんあります! 各コントローラーには、2つのボタン(ZボタンとCボタン)、2軸ジョイスティック(XとY)、および3軸加速度計があります。
- Arduinoライブラリがあります。 Robert Eiseleは、Nunchukセンサーを読み取るための驚くほど使いやすいライブラリを設計しました。チェックしてください:https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/
残念ながら、Nunchukジョイスティックには複雑なコネクタがあり、他の電子機器とのインターフェースが困難です。 Arduinoに接続するには、ケーブルを切断してワイヤーを露出させる必要がありました。このようにすると、ニンテンドーWiiでは動作しなくなります...:/
まず、ジョイスティックのコネクタを切断し、ワイヤの絶縁体を取り除く必要がありました。マルチメータを使用し、各ワイヤの色に基づいて、写真に示されているコネクタの回路図に基づいて、各ワイヤ(Vcc、GND、SCL、およびSDA)の機能を決定しました。ワイヤーの色には基準がありません。次の可能性についてはすでに聞いたことがあります:
オリジナル:
- SDA =緑
- SCL =黄色
- 3V3 =赤
- GND =白
レプリカ#1:
- SDA =黄色
- SCL =白
- 3V3 =緑
- GND =赤
レプリカ#2:
- SDA =青
- SCL =白
- 3V3 =ピンク
- GND =緑
Arduinoボードに簡単に接続できるように、ワイヤーをオスのジャンパーにはんだ付けしました。そのために、写真に示されているように、はんだごてと収縮チューブを使用しました。
ブレッドボードへの接続を簡単にするNunchukアダプターがあることを後で知らされました(リンク/リンク)。はんだ付けについて同じ時間を過ごしたいが、元のコネクタを破壊したくない場合に適したオプションです。
ステップ10:回路の配線 <図> <図> <図>
構造が組み立てられ、Nunchukコネクタが完成したら、回路を配線する準備が整います。ロボットアームキットに付属のコントロールボードシールドを使用しました。サーボモーターや電源などに対応したコネクタが付属しているので、部品の接続が簡単になります。
次のようにコンポーネントを接続します。
ヌンチュク:
- Nunchukピン6(SCL)=> Arduinoメガピン21(SCL)(シールド上)
- Nunchukピン1(SDA)=> Arduinoメガピン20(SDA)(シールド上)
- Nunchukピン3(Vcc)=> Ardinoメガピン3V3(シールド上)
- Nunchukピン4(Gnd)=> Arduino Mega Pin Gnd(シールド上)
Arduino Unoを使用している場合、NunchukのSCLピンとSDAピンは次のように異なるArduinoピンに接続する必要があります。
- Nunchukピン6(SCL)=> ArduinoUnoピンA5
- Nunchukピン1(SDA)=> ArduinoUnoピンA4
- Nunchukピン3(Vcc)=> ArdinoUnoピン3V3
- Nunchukピン4(Gnd)=> Arduino Uno Pin Gnd
サーボ:
- コントロールシールド端子11 =>サーボ#1
- コントロールシールド端子12 =>サーボ#2
- コントロールシールド端子13 =>サーボ#3
- コントロールシールド端子8 =>サーボ#4
- コントロールシールド端子9 =>サーボ#5
- コントロールシールド端子10 =>サーボ#6
コントロールシールドを使用していない場合は、次のピン構成を使用する必要があります。
- Arduinoピン11 =>サーボ#1(Sgn)
- Arduinoピン12 =>サーボ#2(Sgn)
- Arduinoピン13 =>サーボ#3(Sgn)
- Arduinoピン8 =>サーボ#4(Sgn)
- Arduinoピン9 =>サーボ#5(Sgn)
- Arduinoピン10 =>サーボ#6(Sgn)
- Arduino Gnd => Servos Gnd
- 6V電源=> Servos Vcc
また、外部12V電源を接続する必要があります。 2A以上の出力のものをお勧めします。サーボは大量の電力を消費します。電源が十分に強力でない場合、サーボは振動して非常に熱くなります。彼らはまた彼らの力を失うでしょう。
Arduinoコード(後の手順で表示)をアップロードするまで、電源を接続しないでください。シールドには電源ボタンがあります。オフの位置に保ちます。
ArduinoにUSBケーブルを接続し、次の手順に進みます。
ステップ11:ArduinoIDEをセットアップする <図> <図>
ハードウェアの準備ができたので、Arduinoコードで作業する時が来ました。
1。 ArduinoIDEの最新バージョンをダウンロードしてインストールします Windows、Linux、またはMAC OSXの最新バージョンは、ArduinoのWebサイト(https://www.arduino.cc/en/main/software
)で見つけることができます。無料でダウンロードし、コンピューターにインストールして起動します。
2。ライブラリの追加
このプロジェクトでは、RobertEiseleの素晴らしいNunchukArduinoライブラリを使用しました。あなたは彼のウェブサイトでそれについてもっと見つけることができます:
https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukでライブラリをダウンロードします
スケッチ->ライブラリを含める->ライブラリの管理に移動します ...ライブラリを追加するためのArduinoIDEで。
ライブラリはどのように機能しますか?
Nunchukライブラリには、コントローラーのセンサーを読み取るための一連の関数が付属しています:
nunchuk_buttonZ() :Zボタンが押されている場合は1を返し、押されていない場合は0を返します。 nunchuk_buttonC() :Cボタンが押されている場合は1を返し、押されていない場合は0を返します。 nunchuk_joystickX() :ジョイスティックのx値(-127から127の間)を返します。 nunchuk_joystickY() :ジョイスティックのy値(-127から127の間)を返します。 nunchuk_pitch() :コントローラーの角度をラジアン(-180ºから180ºの間)で返します。 nunchuk_roll() :コントローラーのロール角をラジアン(-180°〜180°)で返します。
角度はラジアンで返されます。 Arduinoコードでこれらの値を度に変換しました。
ステップ12:Arduinoコード <図> <図> <図> <図> <図> <図>
Arduinoのスケッチファイルをダウンロードします。
コンピュータのUSBポートにUSBケーブルを接続し、コードをアップロードします。コードのアップロードには時間がかかります。その時間を使って、待っている間にこのチュートリアルに「いいね」と「共有」を与えることができます。 :D
アップロードが完了したら、USBケーブルを抜き、電源を接続して電源ボタンをオンにします。コードはすぐに実行を開始します。
警告:コードの実行が開始されると、ロボットアームは初期位置に非常に速く移動します。起動時に近くの機器を傷つけたり損傷させたりしないように注意してください!
サーボの取り付け方法によっては、各サーボモーターの開始角度を交換する必要がある場合があります。
コードの説明:
セットアップの前に、コードはスケッチで使用されるライブラリ( nunchuk.h、wire.h )をインポートします および servo.h 。
使用するピンを定義し、グローバル変数を宣言します。 角度# 整数変数は、各サーボの初期位置を格納します。ロボットを別の位置から開始する場合は、それらの変数の値を変更します。
サーボ#_スピード 変数は、各サーボの移動速度を定義します。特定のサーボをより速く動かしたい場合は、その値を増やしてください。 angle#min および angle#max 変数は、各サーボの最大角度と最小角度を制限するために使用されます。ロボットの連続する関節間の衝突を回避するために、これらの変数を設定できます。
// Include libraries#include #include #include // define variable#define SERV1 8 //デジタルポート8のサーボ1#define SERV2 9 //デジタルポート9のサーボ2#define SERV3 10 //デジタルポート10のサーボ3#define SERV4 11 //デジタルポート11のサーボ4#define SERV5 12 //デジタルポート12のサーボ5#define SERV6 13 / /デジタルポート13Servos1のservo6; //サーボ1サーボs2; //サーボ2サーボs3; //サーボ3サーボs4; //サーボ4サーボs5; //サーボ5サーボs6; //サーボ6 //各サーボの開始角度を定義//開始する安全な位置を選択//電源を入れると即座にその位置に移動しようとします!//これらの角度は、 assembleint angle1 =90; //サーボ1現在のangleintangle2 =30; //サーボ2現在のangleintangle3 =0; //サーボ3現在のangleintangle4 =90; //サーボ4現在のangleintangle5 =90; //サーボ5現在のangleintangle6 =45; //サーボ6現在の角度intservo1_speed =3; //サーボ1speedintservo2_speed =3; //サーボ2speedintservo3_speed =3; //サーボ3speedintservo4_speed =1; //サーボ4speedintservo5_speed =1; //サーボ5の速度//各サーボの制限を定義//これらの角度は、アセンブル中の各サーボの角度に依存しますint angle1min =0; //サーボ1最小angleintangle1max =180; //サーボ1の最大角度intangle2min =0; //サーボ2最小angleintangle2max =180; //サーボ2の最大角度intangle3min =0; //サーボ3最小angleintangle3max =180; //サーボ3の最大角度intangle4min =0; //サーボ4最小angleintangle4max =180; //サーボ4の最大角度intangle5min =0; //サーボ5最小angleintangle5max =180; //サーボ5の最大角度intangle6min =0; //サーボ6最小angleintangle6max =180; //サーボ6の最大角度booleandisplay_angles =true; //シリアルモニターの各サーボの角度を更新するために使用されるブール値
セットアップ中、各サーボは特定のピンに接続され、その位置が開始されます。
シリアル通信(シリアルモニターへ)およびNunchukとのI2C通信もここで開始されます。
// SETUPvoid setup(){//各サーボをピンに接続し、その位置を開始しますs1.attach(SERV1); s1.write(angle1); s2.attach(SERV2); s2.write(angle2); s3.attach(SERV3); s3.write(angle3); s4.attach(SERV4); s4.write(angle4); s5.attach(SERV5); s5.write(angle5); s6.attach(SERV6); s6.write(angle6); //シリアル通信を開始しますSerial.begin(9600); // Nunchuk Wire.begin();を開始しますnunchuk_init();}
メインループは何度も繰り返されます。 Nunchukステータスは各サイクルで読み取られます。読み取り値に応じて、さまざまなコマンドが実行されます。
void loop(){// Nunchukセンサーを読み取るif(nunchuk_read()){int x =nunchuk_joystickX(); //ジョイスティックのX位置inty =nunchuk_joystickY(); //ジョイスティックのY位置ブール値z =nunchuk_buttonZ(); // zボタンのステータスブール値c =nunchuk_buttonC(); // cボタンのステータスfloatpitch =nunchuk_pitch(); //ピッチ角floatroll =nunchuk_roll(); //ロール角
ジョイスティックXを使用してサーボ#1を移動します。
次のコードブロックが使用されました。まず、ジョイスティックの値が十分に大きいかどうかを確認します。このようにして、ノイズと小さな変動は無視されます。値が要件を満たしている場合、サーボの角度は所定の速度で増減します。
//左/右に回す(固定速度で)//左に回すif(x> 90){angle1- =servo1_speed; display_angles =true; if(angle1 angle1max){angle1 =angle1max; }} s1.write(angle1); //サーボ位置を更新
同様のブロックがジョイスティックyに使用されます。サーボ#3の角度を変えるために使用します。サーボ#2はこのコードで修正されたままです。
グリッパーの回転は、コントローラーのロール角とピッチ角によって与えられ、コントローラーの加速度計によって測定されます。アームの制御を容易にするために、グリッパーの角度は、CまたはZボタンが押されたときにのみ更新されます。
Cボタンのみを押すと、コードはロール角を読み取り、それを設定値として使用します。サーボ#5は設定値に達するまで回転します。その速度は、実際の位置と目的の位置の間の誤差に比例します。ヌンチュクのピッチ角を追跡するサーボ#4にも同様のコードが使用されています。
//ボタンが押されたときにのみ加速度計を有効にする//グリッパーを回転させる(Zボタンのみが押された)if(c &&!z){roll =roll * 57.0 + 90.0; //度を変換servo5_speed =abs(angle5-roll)/ 10 + 1; //速度比例は、実際の角度と目的の角度の間のエラーを実行しますif(roll> angle5){angle5 + =servo5_speed; display_angles =true; } if(roll
CボタンとZボタンの両方を押すと、グリッパーが閉じます。これらのボタンのいずれかを離すと、ロボットはグリッパーを開きます。
//グリッパーを開く/閉じる(両方のボタンが押されている)if(z &&c){s6.write(90); //グリッパーを閉じるdisplay_angles =true; } else {s6.write(45); //グリッパーを開く}
スケッチの終わりまでにコードのブロックがあります。各サーボモーターの実際の角度がシリアルモニターに表示されます。各モーターの始動角度を選択するのに役立つ場合があります。
nunchuk.ino
ステップ13:使用法 <図> <図> <図> <図> <図>
すべての準備が整ったので、ロボットの電源を入れて楽しんでください!
Nunchukは、写真に示されている5つの動き(右/左回転、上下運動、グリッパー回転、グリッパー上下運動、グリッパー開閉運動)を制御するために使用されます。これらの動きを組み合わせて、さまざまなタスクを実行できます。
ジョイスティックのボタンと角度の組み合わせに基づいて、さまざまな動きをするようにコードを変更できます。
コード
- nunchuk.ino
nunchuk.ino Arduino
プレビューなし(ダウンロードのみ)。
Github
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukhttps://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk製造プロセス