DIY ハンドジェスチャー制御 Arduino ロボットアーム - ステップバイステップ構築ガイド
必要な部品と材料
| 部品名 | 数量 |
|---|---|
| Arduino UNO | 1 |
| JLCPCB カスタムPCB | 1 |
| サーボモーター MG996R | 6 |
| 5Vバッテリーパック | 1 |
| PCA9685 8チャネル I2C サーボドライバー | 1 |
| HC-05 Bluetoothモジュール | 2 |
| A4988 ステッピングモータードライバー | 1 |
| NEMA-17 ステッピングモーター | 1 |
| ブレッドボード(汎用) | 1 |
| IMU (6自由度) | 1 |
| Arduino Nano R3 | 1 |
| フレックスセンサー | 5 |
必要な工具
- 3Dプリンター
プロジェクト概要
人間のジェスチャーで制御するDIYロボットアームを紹介します。
『パシフィック・リム』や『アバター』などのSF映画では、人間の動きがロボットで拡張される様子が描かれています。これを小規模で実現してみようという試みです。
このロボットアームは、プログラミング制御に加え、ハンドジェスチャーで直感的に操作できます。
アイアンマンのスーツのように、各イテレーションを「Mark」と呼称します。このプロトタイプはMARK 1です。
概要
このチュートリアルでは、ロボットグローブを用いたハンドジェスチャー制御の6軸ロボットを構築します。ピンチ(つまむ動作)や手首の回転など、自然な人間のジェスチャーを模倣することで、ロボットアームの開閉や左右回転を直感的に操作できます。

MARK 1 の特徴:
- 6軸回転
- ポータブル
- 人間のジェスチャーでロボットを制御
- 基本機能をプリプログラム可能
- 無線制御(Bluetooth通信範囲内)
- 最大積載重量 600g(最大1kg)
パーツリスト
ロボットアームは完全カスタマイズ可能。購入も3Dプリントも可能です。3Dプリントの場合、Thingiverseの「Wonder Tiger」氏設計の6軸アームがおすすめ(グリッパー、ベース/ターンテーブル、コアアームの3パート)。プリント時間は最大40時間ですが、購入コストを大幅削減できます。
ロボットグローブ: Thingiverseの「Roman 13」氏設計STLファイルを使用。
※ 大きな手の場合は105%スケールでプリント推奨。作業用手袋でも代用可能です。
動作原理
全体として、ロボットグローブからBluetoothで信号を送信し、サーボドライバーが受信して特定のサーボモーターを駆動します。複数のサーボとセンサーを追加することで、各モーターを個別制御可能です。
ロボットアームを「複数のサーボモーターが協調して機能を実行するシステム」と捉え、ロボットグローブで制御します。グローブ側のArduinoがセンサーでジェスチャーを検知し、対応するサーボ角度値をBluetoothでアーム側Arduinoへ送信します。
使用センサー:
- フレックスセンサー - 指の曲がり度合いで抵抗値が変化し、電流変化として手の動きを検出
- 加速度計 (MPU6050) - 手首/腕の回転をX,Y,Z平面で検出し、より自然なジェスチャーを実現
これらのセンサーでジェスチャー変化を検知し、特定の値をマッピングしてBluetooth経由でロボットアームのサーボモーターを制御します。十分なジェスチャーを割り当てれば、ロボットアームが「生きる」のです。

ロボットアーム マッピングテーブル
グローブからアームへ送信される値のマッピング表(元記事参照)。各キーで機能を特徴付け(P=小指、L=右等)。大文字「F」はサーボモーターの逆回転方向を表します。
パーツ組み立て
ロボットアーム組み立て
市販ロボットアームは高価なため、予算内で3Dプリントを選択。Thingiverseの「Wonder Tiger」設計をベースに、カスタマイズ(LED追加、カメラスタンドクランプ等)も容易です。プリントには最低40時間かかりますが、代替設計も多数存在します。
サーボモーターとドライバー
理論上、複数のモーターをArduinoで協調制御可能。本プロジェクトではPCA9685サーボドライバーでMG996Rサーボを駆動します。
注意: 各モーターには外部電源を使用してください。Arduinoだけでは全モーター駆動不可。本プロジェクトでは5V 2200mAh RCバッテリーを使用。
Arduino配線図:

ベース回転用 NEMA-17
アーム重量増加でMG996Rではベース回転トルク不足のため、高トルク・高精度のNEMA-17ステッピングモーターを採用。A4988ドライバーで制御。
完全な配線図は元記事参照。
回路実装
Bluetoothモジュールを含む全電子パーツの最終配線図:
ペアリング手順は後述。
ヒューマンフレックスセンサー(グローブ側)
3Dプリントのエクソスケルトンガントレットをグローブとして使用可能ですが、プロトタイピングには作業用手袋で十分です。
ロボットグローブ構成:
- フレックスセンサー - 指の曲がりで電流変化、モーター制御信号を生成
- 加速度計 (MPU6050) - X,Y,Z平面のジェスチャーをマッピングしてモーター制御
- LED - ジェスチャー送信時に点灯
- Bluetooth (HC-05) モジュール - ロボットアーム側HC-05へデータ送信
- Arduino Nano - グローブ側のマイクロコントローラー
フレックスセンサーと加速度計のテスト用図:
重要: ロボットアームの精度はグローブ制御精度に依存します。ここをしっかり調整してください。
Bluetooth設定(マスター/スレーブ)
HC-05モジュールで通信。ボーレートは4800に設定。
ロボットグローブ側: HC-05 マスターモード
ロボットアーム側: HC-05 スレーブモード
Arduinoプログラミング
全コードはGitHubで公開: Arduino Robot Arm Repo
ロボットアーム側プログラミング
HCPCA9685ライブラリ(サーボドライバー用)を使用し、複数サーボを1つのArduinoで制御。主要変数:
#include "HCPCA9685.h"
#define I2CAdd 0x40
HCPCA9685 HCPCA9685(I2CAdd);
const int servo_joint_L_parking_pos = 60;
int servo_joint_L_pos_increment = 20;
int servo_joint_L_parking_pos_i = servo_joint_L_parking_pos;
int servo_joint_L_min_pos = 10;
int servo_joint_L_max_pos = 180;
Bluetooth通信開始(ボーレート4800):
Serial.begin(4800);
loop()で常時シリアル受信チェック。データがあれば'state'変数に格納し、文字に応じてモーター駆動:
if (Serial.available() > 0) {
state = Serial.read();
Serial.print(state);
// モーター機能コードブロック
}
例: 'S'受信でベース回転左、'f'でクロー下降等。ハードストップで最大角度超過を防止(ギア破損防止)。
フレックスセンサー側プログラミング
5センサー定義(小指A1、人差し指A2、親指A3、MPU6050×2はI2Cアドレス0x68/0x69)。送信間隔response_time=1000ms。センサー値読み取り、キャリブレーション(起動時1秒で上下限自動設定)、閾値超過で対応文字送信。
成果
物体把持・移動が可能な精度。複雑な物体操作や人間の器用さには及ばないが、MARK 1として意図通り動作。コード改良で精度向上可能。
GitHubリポジトリへの貢献歓迎: Arduino Robotic Arm Repo でオープンに発展させましょう!
次のステップ
MARK 1はここまで。興味があればPatreonで支援を。今後さらに改良版を公開予定。
3Dプリントファイル (Thingiverse)
回路図・リポジトリ
製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- 自宅で作るDIY宿題自動筆記マシン:AxiDraw風ペンプロッターの自作ガイド
- Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
- ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
- Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- Arduino Nanoで音声制御ロボットを自作
- Ethernet制御ロボットアーム - WIZ750SRとAndroidアプリでリモート操作
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- PiBot:Arduino駆動の精密ピアノ演奏ロボット
- Arduino向けスマート屋内ナビゲーションロボットキット