通过专用 Android App 蓝牙控制 Arduino 机械臂
组件与物料
| LittleArm 机械臂 | ×1 |
| Arduino UNO | ×1 |
| HC-05 蓝牙模块 | ×1 |
| Android 设备 | ×1 |
| LittleArm 完整套件 | ×1 |
应用与在线服务
| Android |
| Arduino IDE |
项目简介
本教程基于该页面资源。LittleArm 传统上使用在 Windows 和 Linux 上运行的免费桌面应用程序控制,这要求机械臂必须连接电脑。我们终于完成了 LittleArm 的 Android App,让你能通过蓝牙无线控制 Arduino。
App 可控制 LittleArm 的所有自由度,还能录制指令集并回放。Arduino 端代码与桌面版软件包中的传统代码一致。
LittleArm App 下载地址:[此处]

代码
Arduino 代码
#include// Arduino 库 #include // 标准 C 库 #define PI 3.141 Servo baseServo; Servo shoulderServo; Servo elbowServo; Servo gripperServo; int command; struct jointAngle { int base; int shoulder; int elbow; }; int desiredGrip; int gripperPos; int desiredDelay; int servoSpeed = 15; int ready = 0; struct jointAngle desiredAngle; // 舵机目标角度 //+++++++++++++++ 函数声明 +++++++++++++++++++++++++++ int servoParallelControl(int thePos, Servo theServo, int theSpeed); //++++++++++++++++++++++++++++++++++++++++++++++++++++ void setup() { Serial.begin(9600); baseServo.attach(9); // 舵机连接引脚 9 shoulderServo.attach(10); elbowServo.attach(11); gripperServo.attach(6); Serial.setTimeout(50); // 避免串口读取过长 Serial.println("started"); baseServo.write(90); // 舵机初始位置 shoulderServo.write(150); elbowServo.write(110); ready = 0; } // 主循环 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') { // 最后一个字节为 'd' 则停止读取并执行命令,'d' 代表 'done' Serial.flush(); // 清空缓冲区堆积的其它命令 Serial.print('d'); // 发送命令完成标志 } } int status1 = 0, status2 = 0, status3 = 0, status4 = 0; int done = 0; while (done == 0 && ready == 1) { // 并行移动舵机至目标位置 status1 = servoParallelControl(desiredAngle.base, baseServo, desiredDelay); status2 = servoParallelControl(desiredAngle.shoulder, shoulderServo, desiredDelay); status3 = servoParallelControl(desiredAngle.elbow, elbowServo, desiredDelay); status4 = servoParallelControl(desiredGrip, gripperServo, desiredDelay); if (status1 == 1 && status2 == 1 && status3 == 1 && status4 == 1) { done = 1; } } } //++++++++++++++++++++++++++++++ 函数定义 ++++++++++++++++++++++++++++++++++++++++ int servoParallelControl(int thePos, Servo theServo, int theSpeed) { int startPos = theServo.read(); // 读取当前位置 int newPos = startPos; // 当前位置小于目标位置(含 5 度容差)则递增 if (startPos < (thePos - 5)) { newPos = newPos + 1; theServo.write(newPos); delay(theSpeed); return 0; } // 当前位置大于目标位置(含 5 度容差)则递减 else if (newPos > (thePos + 5)) { newPos = newPos - 1; theServo.write(newPos); delay(theSpeed); return 0; } else { return 1; // 已到达目标位置 } }
原理图

制造工艺
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
- 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
- Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
- Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
- LittleArm 2C:3D 打印 Arduino 机械臂 - STEM 教学专用,坚固易装
- ThimbleKrox:基于 Arduino Micro 与 MPU-6050 的指戴式鼠标控制器
- DIY Arduino 蟑螂控制系统 —— 30 美元以内自制指南
- Arduino 打造会说话的智能人形机器人「Mofiza」