Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| LittleArm ロボットアームキット | 1 | 4自由度(ベース・ショルダー・エルボー・グリッパー) |
| Arduino UNO | 1 | 制御用マイコン |
| HC-05 Bluetoothモジュール | 1 | シリアル通信でアプリと接続 |
| Androidデバイス | 1 | 専用アプリインストール用 |
使用アプリ・ソフトウェア
- LittleArm Androidアプリ(専用)
- Arduino IDE
プロジェクト概要
従来PCアプリ(Windows/Linux)でUSB接続制御していたLittleArmを、Bluetooth経由でAndroidスマホからワイヤレス制御できるようにしたプロジェクトです。専用アプリでは全自由度のリアルタイム操作に加え、動作シーケンスの記録・再生(ティーチング再生)機能を搭載。Arduino側のファームウェアはUSB/Bluetooth両対応の共通コードで、シリアルプロトコルは変更ありません。
シリアル通信プロトコル
アプリ→Arduinoへ、以下の6整数をカンマ区切りで送信し、改行(`\n`)でコマンド確定:
base_angle, shoulder_angle, elbow_angle, gripper_angle, delay_ms, checksum?
Arduinoはパース完了後に `'d'` (done) を返信し、バッファをフラッシュして次のコマンドを待ちます。
配線
- HC-05 VCC→5V, GND→GND, TX→Arduino RX(0), RX→Arduino TX(1) ※クロス接続
- サーボ: ベース→D9, ショルダー→D10, エルボー→D11, グリッパー→D6
- サーボ電源は別途5V/2A以上推奨(USB給電では電流不足の恐れ)
Arduinoスケッチ
#include <Servo.h>
#include <math.h>
#define PI 3.141
Servo baseServo, shoulderServo, elbowServo, gripperServo;
struct JointAngle { int base, shoulder, elbow; };
JointAngle desiredAngle;
int desiredGrip, desiredDelay;
int servoSpeed = 15; // 速度パラメータ(ms/step)
int ready = 0;
void setup() {
Serial.begin(9600);
baseServo.attach(9);
shoulderServo.attach(10);
elbowServo.attach(11);
gripperServo.attach(6);
Serial.setTimeout(50);
// 初期ポーズ
baseServo.write(90);
shoulderServo.write(150);
elbowServo.write(110);
Serial.println("started");
}
void loop() {
if (Serial.available()) {
ready = 1;
desiredAngle.base = Serial.parseInt();
desiredAngle.shoulder = Serial.parseInt();
desiredAngle.elbow = Serial.parseInt();
desiredGrip = Serial.parseInt();
desiredDelay = Serial.parseInt();
if (Serial.read() == '\n') {
Serial.flush();
Serial.print('d'); // 完了応答
}
}
if (ready) {
int done = 0;
while (!done) {
int s1 = moveServo(desiredAngle.base, baseServo, desiredDelay);
int s2 = moveServo(desiredAngle.shoulder, shoulderServo, desiredDelay);
int s3 = moveServo(desiredAngle.elbow, elbowServo, desiredDelay);
int s4 = moveServo(desiredGrip, gripperServo, desiredDelay);
if (s1 && s2 && s3 && s4) done = 1;
}
ready = 0;
}
}
int moveServo(int target, Servo& sv, int speed) {
int cur = sv.read();
if (abs(cur - target) <= 5) return 1; // 到達済み
int step = (target > cur) ? 1 : -1;
sv.write(cur + step);
delay(speed);
return 0;
}
Androidアプリの機能
- 各関節のスライダー/ジョイスティック操作
- 現在ポーズの保存(スロット複数)
- 保存シーケンスの連続再生(速度調整可)
- Bluetoothデバイス自動検出・ペアリング支援
注意点
- HC-05のデフォルト通信速度は9600bps。変更時はスケッチ側も合わせる
- サーボ4台同時駆動時の電流ピーク対策に、電源ラインへ大容量電解コンデンサ(470μF以上)推奨
- アプリはGoogle Playまたはプロジェクトページから入手
製造プロセス
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
- ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
- LittleArm 2C: 3Dプリント製Arduinoロボットアーム – STEM教育向け耐久設計
- ThimbleKrox: Arduino MicroとMPU-6050を用いた指装着型マウス制御
- Arduinoでゴキブリ制御システムを自作 - 30ドル以下で構築