プログラマブル3軸ロボットアームキット:Arduino+Bluetoothでローカル/リモート制御
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Mega 2560 | 1 | I/Oポート豊富、メイン制御 |
| SainSmart 3軸パレタイズロボットアーム(Arduino UNO/MEGA対応) | 1 | 3自由度モデル |
| MeArm DIYロボットアームキット | 1 | 4自由度モデル(爪付き) |
| HC-06 Bluetoothモジュール | 1 | Androidアプリと通信 |
| Adafruit RGBバックライトLCD 16x2 | 1 | ステータス表示 |
| Androidデバイス | 1 | リモート操作用 |
| ロータリーポテンショメータ 10kΩ | 4 | ローカル操作用(各関節対応) |
| タクトスイッチ 12mm | 3 | モード切替、記録、実行等 |
| LED(赤・青・緑・黄) | 各1 | 状態表示用 |
使用アプリ・オンラインサービス
- Arduino IDE
- MIT App Inventor 2(Androidアプリ開発)
プロジェクト概要
産業用ロボットの基本機能を模倣した、プログラマブルな3/4自由度ロボットアームの制御システムです。ローカル(ポテンショメータ)とリモート(Androidアプリ/Bluetooth)の両制御モードを備え、プログラム(ティーチング)と自動再生(ラン)の2モードで動作します。

仕様・主要機能
| 項目 | 内容 |
|---|---|
| 対応自由度 | 3 DOF(ベース/ショルダー/エルボー)または 4 DOF(+グリッパー) |
| 制御モード | LOCAL(ポテンショメータ) / REMOTE(Androidアプリ・Bluetooth) |
| 動作モード | PROGRAM(位置記録)/ RUN(記録再生・ABORTで停止) |
| モード切替 | プログラム中でもLOCAL⇔REMOTE切替可能 |
| ユーザー通知 | カラーLED×4、16x2 LCD、ブザー音 |
| リモートアラーム | Androidアプリからブザー鳴動可能 |
Androidアプリ
MIT App Inventor 2で開発。Google Playストアで「MJRoBot Arduino Robot Arm Control」として無料公開。スライダーで各関節角度を直感操作、PROGRAM/RUNボタン、モード切替、アラームボタンを搭載。
ハードウェア構成
ブロック図

Arduino MEGAを採用した理由はI/Oポート数の余裕確保。UNOでも74HC138デコーダ等でポート拡張すれば可能。
ロボットアームの関節構成
- ベース(腰):水平回転(180°サーボ使用)
- ショルダー(肩):垂直上下
- エルボー(肘):前後伸縮
- グリッパー(爪):開閉把持(4 DOFモデルのみ)

回路図・配線

サーボ電源はArduinoとは別系統(外部5-6V、サーボ仕様確認)で供給し、470μFコンデンサでノイズ対策。全GNDを共通接地。サーボ信号線をMEGAのPWMピンへ直結。
サーボ選定の注意:安価なMG995等は品質ばらつき大。本プロジェクトでは付属サーボで動作確認済みだが、デジタルサーボ(300Hz)使用時はServo.hライブラリ修正が必要な場合あり。
ソフトウェア設計
定義ファイル(ArmDefine.h)
各アームタイプごとにサーボ角度の最小/最大/初期値を定義。実機でポテンショメータを動かし、シリアルモニタ/LCDで動作範囲を確認して決定します。
// MeArm 4-DOF
#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60
#define maxGrip 45 #define maxBase 170 #define maxShou 180 #define maxElbw 150
#define midGrip 30 #define midBase 87 #define midShou 138 #define midElbw 100
/* SS 3-DOF
#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0
#define maxGrip 125 #define maxBase 150 #define maxShou 155 #define maxElbw 0
#define midGrip 100 #define midBase 90 #define midShou 90 #define midElbw 0 */
位置記録用配列
int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0; // 記録ステップ数(最大100ステップ)
※EEPROM保存機能を追加すれば、電源オフ後もプログラム保持可能。
メインループのロジック
void loop() {
checkBTcmd(); // Bluetoothコマンド受信・解析
defineLocalRemote(); // LOCAL/REMOTEモード判定、アラームコマンド処理
execTaskCmd = digitalRead(execTaskPin);
if (execTaskCmd == HIGH || command == "runon") {
RunProgram(); // 記録済みシーケンス再生
} else {
recArmPosition(); // 位置ティーチング(記録)
}
command = "";
}
主要関数の役割
checkBTcmd():シリアルバッファから文字を読み取りコマンド文字列組立defineLocalRemote():コマンドでモード切替、アラーム時は強制REMOTERunProgram():実行準備(LED等)→ExecuteTask()呼出ExecuteTask():positionIndexをインクリメントしながら配列から座標読出し、armPosition()でサーボ駆動recArmPosition():ポテンショメータ/スライダー値読取→サーボ即時反映→SAVE/PROGRAMコマンドで配列へ記録armPosition(grip, base, shoulder, elbow):4軸サーボへ角度書込み(マッピング・制限込み)readPotenciometers()/readSliders():ローカル/リモート入力読取debounce():ボタンチャタリング防止(16MHzクロックで高速ポーリングされるため必須)
コード構成(4ファイル)
- MJRoBot_Arm_Robot_Task_Prgm.ino:setup/loop、上記主要関数
- General_Functions.ino:
checkBTcmd()、beep()、debounce() - Arm_Ctrl_and_Display.ino:ポテンショ/スライダー読取、
armPosition()、LCD/シリアル表示、アラーム - ArmDefine.h:サーボ角度定義定数
完全ソースコード:GitHubリポジトリ
回路図
まとめ
このチュートリアルは、ホビーレベルのロボットアームを「産業用ロボット風のティーチング・プレイバックシステム」へ昇華させる、体系的かつ実践的なガイドです。Arduino MEGAの豊富なI/Oを活かし、ポテンショメータによる直感的なローカルティーチングと、Bluetooth経由のリモート操作を両立。モード切替・アラーム・音声/視覚フィードバックなど、実用的なヒューマンインターフェースも網羅しています。
コードは機能ごとにファイル分割され、定数定義(ArmDefine.h)で異機種アームへの移植容易性を確保。デバウンス処理、サーボマッピング、状態管理など、組み込み開発の基本プラクティスが随所に見られます。MIT App Inventor 2でノーコードに近い形でAndroidアプリを作れる点も、ハードウェアエンジニアにとって心強いアプローチです。
発展アイデア:EEPROM/SDカードへのプログラム永続化、複数プログラム選択実行、逆運動学ソルバ導入(直交座標指示)、力覚センサ追加、ROS連携など。
製造プロセス
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- Arduino UNOで作るLCDアニメーション&ゲーム入門
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
- スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
- 産業用ロボットアームが製造業を変える:導入メリットと主要メーカー完全ガイド
- ロボットマニピュレータ vs ロボットアーム:違い・種類・用途を徹底比較