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

Arduinoベースのヌンチャク操作6自由度ロボットアームキット

部品と材料

6自由度ロボットアームキット ×1
Wiiヌンチャクコントローラー ×1
Arduino Mega 2560 ×1
コントロールシールド ×1

アプリとオンラインサービス

プロジェクトについて

Arduinoベースのヌンチャク操作6自由度ロボットアームキット
Arduinoベースのヌンチャク操作6自由度ロボットアームキット
Arduinoベースのヌンチャク操作6自由度ロボットアームキット
Arduinoベースのヌンチャク操作6自由度ロボットアームキット

ロボットアームは工場での塗装・溶接・搬送、宇宙探査、水中ROV、医療用途など幅広く活躍しています。今回は、安価なキットとArduino Mega、そしてWiiヌンチャクコントローラーを使って、ご家庭やオフィスで使える6自由度ロボットアームを構築します。繰り返し作業の自動化や、電子工作・機械工作の学習にも最適です。

ロボットアームキットがなくても、ArduinoプログラミングやWiiヌンチャクのインターフェース方法、電子・機械スキルの練習として活用できます。別のキットや自作アームをお持ちの方は、組み立てステップをスキップして電子・プログラミング部分から始めてください。

ステップ1:工具と材料

Arduinoベースのヌンチャク操作6自由度ロボットアームキット

※ヌンチャク用アダプター(ブレッドボード接続用)を使えばハンダ付け不要で元のコネクターを破損せずに済みます。

ステップ2〜8:ロボットアームの組み立て

ベース(ステップ2)→ サーボ#1(ステップ3)→ サーボ#2(ステップ4)→ サーボ#3(ステップ5)→ サーボ#4(ステップ6)→ サーボ#5(ステップ7)→ サーボ#6・グリッパー(ステップ8)の順で組み立てます。各ステップでM3ボルト・ナットを使用し、ベアリングで関節の安定性を確保します。アニメーションGIF(デスクトップ版で再生)で手順を確認できます。

ステップ9:ヌンチャクコントローラーの準備

Arduinoベースのヌンチャク操作6自由度ロボットアームキット

ヌンチャクを選んだ理由:安価、入手容易、2ボタン・2軸ジョイスティック・3軸加速度センサー搭載、Arduinoライブラリ(Robert Eisele作)が利用可能。
コネクターが特殊なため、ケーブルを切断して4線(VCC、GND、SCL、SDA)を露出させ、テスターで配線色と機能を特定してオスジャンパーピンにハンダ付けしました(これでWii本体では使えなくなります)。配線色には標準がないため、実測で確認必須です。

ステップ10:回路配線

Arduinoベースのヌンチャク操作6自由度ロボットアームキット

ヌンチャク接続(Arduino Mega / シールド上):

Arduino Unoの場合: SCL→A5、SDA→A4、VCC→3.3V、GND→GND

サーボ接続(コントロールシールド使用時):

シールド不使用時(Arduino直結):

外部12V電源(2A以上)をシールドに接続。電源スイッチはOFFのまま、USBでPC接続してコードをアップロードしてから電源投入してください。

ステップ11:Arduino IDEのセットアップ

  1. 最新版Arduino IDEをインストール(公式サイト)
  2. Robert EiseleのNunchukライブラリをインストール(解説ページ、GitHub)。
    スケッチ→ライブラリをインクルード→ライブラリを管理 から追加可能。

ライブラリ関数:nunchuk_buttonZ()、nunchuk_buttonC()、nunchuk_joystickX()、nunchuk_joystickY()、nunchuk_pitch()、nunchuk_roll()(角度はラジアンで返るため、コード内で度に変換)。

ステップ12:Arduinoコード

Arduinoベースのヌンチャク操作6自由度ロボットアームキット

コードはこちらからダウンロード。アップロード完後、USBを抜いて外部電源をON。起動時にアームが初期位置へ高速移動するため、周囲の安全を確保してください。サーボの取り付け角度に合わせて初期角度(angle1〜angle6)を調整してください。

コード構成:

// ライブラリ
#include <nunchuk.h>
#include <Wire.h>
#include <Servo.h>

// ピン定義
#define SERV1 8
#define SERV2 9
#define SERV3 10
#define SERV4 11
#define SERV5 12
#define SERV6 13

Servo s1, s2, s3, s4, s5, s6;

// 初期角度(組み立て時の角度に合わせて調整)
int angle1 = 90, angle2 = 30, angle3 = 0, angle4 = 90, angle5 = 90, angle6 = 45;
int servo1_speed = 3, servo2_speed = 3, servo3_speed = 3, servo4_speed = 1, servo5_speed = 1;
// 可動範囲制限
int angle1min = 0, angle1max = 180;
int angle2min = 0, angle2max = 180;
int angle3min = 0, angle3max = 180;
int angle4min = 0, angle4max = 180;
int angle5min = 0, angle5max = 180;
int angle6min = 0, angle6max = 180;
boolean display_angles = true;

void 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);
  Wire.begin();
  nunchuk_init();
}

void loop() {
  if (nunchuk_read()) {
    int x = nunchuk_joystickX();
    int y = nunchuk_joystickY();
    boolean z = nunchuk_buttonZ();
    boolean c = nunchuk_buttonC();
    float pitch = nunchuk_pitch();
    float roll = nunchuk_roll();

    // ジョイスティックX:サーボ#1 左右
    if (x > 90) { angle1 -= servo1_speed; display_angles = true; if (angle1 < angle1min) angle1 = angle1min; }
    if (x < -90) { angle1 += servo1_speed; display_angles = true; if (angle1 > angle1max) angle1 = angle1max; }
    s1.write(angle1);

    // ジョイスティックY:サーボ#3 上下(サーボ#2は固定)
    // ... 類似のロジック ...

    // 加速度センサー:Cボタンのみでグリッパー回転(roll→サーボ#5)、Zボタンのみでピッチ(pitch→サーボ#4)
    // 速度は目標角度との誤差に比例
    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 < angle5) { angle5 -= servo5_speed; display_angles = true; }
      s5.write(angle5);
    }
    // グリッパー開閉:C+Z同時押しで閉じる、離すと開く
    if (z && c) { s6.write(90); display_angles = true; }
    else { s6.write(45); }
  }
  // シリアル出力ブロック省略
}

ステップ13:使い方

Arduinoベースのヌンチャク操作6自由度ロボットアームキット

電源投入後、ヌンチャクで5種類の動作(左右回転、上下移動、グリッパー回転、グリッパー上下、開閉)を直感的に制御可能。ボタンとジョイスティックの組み合わせで動作をカスタマイズできます。

コード

GitHubリポジトリ(ライブラリとサンプルコード)

製造プロセス

  1. Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
  2. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  3. IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
  4. 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
  5. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  6. Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
  7. Arduino Nanoで音声制御ロボットを自作
  8. Ethernet制御ロボットアーム - WIZ750SRとAndroidアプリでリモート操作
  9. 音声で家電を操作:GoogleアシスタントとBluetoothでArduino家電制御
  10. スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
  11. DIY ハンドジェスチャー制御 Arduino ロボットアーム - ステップバイステップ構築ガイド