可编程三轴机械臂套件:Arduino + 蓝牙 本地/远程双模控制
核心硬件清单
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino Mega 2560 | 1 | IO口充足,无需扩展芯片 |
| SainSmart 3轴托盘码垛机械臂模型 | 1 | 适配Arduino UNO/MEGA,3自由度 |
| MeArm DIY机械臂套件 | 1 | 4自由度(含夹爪),备选机型 |
| HC-06蓝牙模块 | 1 | 串口透传,Android远程控制 |
| Adafruit RGB背光LCD 16×2 | 1 | I2C接口,状态显示 |
| Android设备 | 1 | 运行MIT App Inventor 2开发的控制App |
| 10kΩ旋转电位器 | 4 | 本地模式下对应4轴位置控制 |
| 12mm轻触开关 | 3 | 模式切换、程序保存/运行、急停 |
| LED(红/蓝/绿/黄) | 各1 | 多色状态指示 |
软件工具
- Arduino IDE:固件开发
- MIT App Inventor 2:可视化开发Android控制App(Google Play免费下载:MJRoBot Arduino Robot Arm Control)
功能规格
机械臂具备两大核心功能:
- Program(编程/教导):记录三维空间位置,每条记录为一「步骤」
- Run(运行):按序执行已记录步骤,循环直到ABORT指令
主要特性:
- 支持3/4 DOF机械臂(腰/肩/肘/夹爪)
- 双控制模式:LOCAL(本地电位器) ↔ REMOTE(Android App滑块),编程中可随时切换
- 多通道反馈:彩色LED + 16×2 LCD + 蜂鸣器声光报警
- 远程触发声光报警功能
机械结构与自由度定义
- Base(腰/底座):水平旋转,标准舵机约180°
- Shoulder(肩):垂直平面抬升/降低
- Elbow(肘):前伸/后缩
- Gripper(夹爪):开合抓取
电路设计要点
关键注意事项:
- 舵机选型至关重要:廉价MG995等国产模拟舵机易抖动、扭矩不足;数字舵机(300Hz)配合标准
Servo.h(50Hz)可能需修改库定时器频率 - 若舵机抖动严重,增加代码中
delay给舵机足够到位时间 - 所有地线(GND)必须可靠连通:外接电源负极、Arduino GND、舵机信号线地
代码架构与核心逻辑
项目采用多文件模块化结构:
| 文件 | 职责 |
|---|---|
ArmDefine.h | 常量定义:各舵机最小/最大/中位角度,针对两种机械臂预设两组参数 |
MJRoBot_Arm_Robot_Task_Prgm.ino | 主逻辑:Setup、Loop、蓝牙指令解析、模式切换、程序录制/回放 |
General_Functions.ino | 通用函数:蓝牙指令组帧、蜂鸣器发声、按键消抖 |
Arm_Ctrl_and_Display.ino | 舵机驱动、电位器/滑块读取、LCD/串口显示、报警处理 |
关键常量定义
// ArmDefine.h - 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
// SainSmart 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 */
标定方法: 电位器置中,PWM映射默认0-255→0-179°,逐轴转动电位器观察串口/LCD实时角度,记录机械极限无干涉的最小/最大值,回填上述宏定义。
步骤记录数组
int gripPos[100], basePos[100], shouPos[100], elbwPos[100];
int posIndex = 0; // 当前步骤索引,掉电不保持(可扩展EEPROM断电保存)
主循环伪代码
void loop() {
checkBTcmd(); // 解析蓝牙指令 → command字符串
defineLocalRemote(); // 根据command切换LOCAL/REMOTE模式
bool execCmd = digitalRead(execTaskPin) == HIGH || command == "runon";
if (execCmd) RunProgram(); else recArmPosition();
command = "";
}
核心函数职责
checkBTcmd():从串口缓冲区逐字符组装完整指令字符串defineLocalRemote():处理local/remote/alarm指令,报警强制切入远程模式RunProgram():预处理LED/蜂鸣器,调用ExecuteTask()逐步回放ExecuteTask():递增posIndex,调用armPosition(grip, base, shoulder, elbow)驱动舵机recArmPosition():根据模式读取电位器或App滑块值,实时驱动舵机跟随;按下SAVE键将当前四轴角度写入数组并posIndex++armPosition():将逻辑角度映射为PWM脉宽写入Servo.write()readPotenciometers()/readSliders():分模式读取本地/远程输入,含去抖动/平滑滤波
远程控制App
- MIT App Inventor 2开发,界面含:模式切换、四轴滑块、SAVE/RUN/ABORT按钮、报警触发、连接状态
- Google Play搜索MJRoBot Arduino Robot Arm Control免费安装
- 源码可导入App Inventor二次开发
完整源码与资源
GitHub仓库:https://github.com/Mjrovai/MJRoBot-Programmed-Arm
结语
希望本项目助你入门电子、机器人与物联网!更多教程访问博客:MJRoBot.org
来自南半球的问候,下期再见! — Marcelo
制造工艺
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
- 打造功能完整的 Arduino 驱动 3D 打印机械臂:分步指南
- Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
- Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
- DIY 智能 Arduino 机械臂:主从控制与动作记忆教程
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- Arduino PowerPoint 指针:无缝无线演示控制器
- 工业机械臂重塑制造业:核心优势、类型与头部厂商深度解析
- 机器人操作器与机械臂:核心差异、类型分类与应用场景深度对比