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

Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御

必要な部品と材料

部品数量備考
LittleArm ロボットアームキット14自由度(ベース・ショルダー・エルボー・グリッパー)
Arduino UNO1制御用マイコン
HC-05 Bluetoothモジュール1シリアル通信でアプリと接続
Androidデバイス1専用アプリインストール用

使用アプリ・ソフトウェア

プロジェクト概要

従来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) を返信し、バッファをフラッシュして次のコマンドを待ちます。

配線

Arduinoロボットアーム「LittleArm」をAndroidアプリでBluetooth制御
回路図:サーボ4台+HC-05

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アプリの機能

注意点

製造プロセス

  1. Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
  2. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  3. IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
  4. ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
  5. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  6. ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
  7. Arduinoベースのヌンチャク操作6自由度ロボットアームキット
  8. Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
  9. LittleArm 2C: 3Dプリント製Arduinoロボットアーム – STEM教育向け耐久設計
  10. ThimbleKrox: Arduino MicroとMPU-6050を用いた指装着型マウス制御
  11. Arduinoでゴキブリ制御システムを自作 - 30ドル以下で構築