亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

所需组件与物料

组件数量
Arduino Nano R31
Tower Pro MG996R 舵机4

所需应用与在线服务

项目简介

我一直钦佩现代制造技术中机械臂在搬运、装配、焊接、仓储等领域的关键作用。本项目基于 fortzeroas 2016 年设计的简易机械臂,改用 C# 开发自动化控制应用,替代手动控制,实现类工业自动化的运动监控、任务录制与回放。

步骤 1:材料准备

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

主体材料为 MDF 木板:结构件 2mm,底座 4mm。蓝图文件见最后步骤下载,打印后粘贴在木板上按轮廓切割钻孔。我使用旋转工具切割钻孔,底座无蓝图可自行发挥。

步骤 2:喷漆与造型

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

利用蓝图在 Photoshop 设计贴纸与几何图案,白胶粘贴上色,提升外观质感。

步骤 3:框架组装

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

舵机用螺丝固定,左右侧板用木棒加强力胶连接(减轻重量)。组装过程按计划顺利,仅微调细节。

步骤 4:夹爪(捏合机构)

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

用钳子弯折两根金属杆,在 3mm 木块上钻孔并强力胶固定,形成夹爪机构。

步骤 5:底座制作

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

底座用 4mm MDF 切割约 17×10cm,钻孔安装 9g 底座舵机。为减少摩擦,使用强力纸筒(高 2.5cm、直径 10cm)做垫圈,同轴安装舵机输出轴。

步骤 6:电子电路

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂
基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

多舵机驱动必须外接电源。本项目使用三个 9g 微型舵机 + 一个大舵机。先在 Tinkercad 仿真验证电路,后用 4 节 AA 电池(6V)供电,制作简单的 Arduino Nano 扩展底板。

步骤 7:Arduino 代码

  1. 安装最新 Arduino IDE(官网下载)
  2. 连接 Arduino Nano 至 USB
  3. 工具 → 板卡 → 选择 Arduino Nano
  4. 复制代码到编辑器,点击验证(✔)再上传(➤)

步骤 8:自动化控制应用(C# Windows Forms)

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

这是我最喜欢的部分:用 PC 自动化控制 Arduino。初期用 Processing 3 模拟舵机键盘微调至目标位置,记录四轴角度(底座、大臂、小臂、夹爪)建立角度限位数组,后移植到 C# 应用作为界面滑块范围与回放依据。

功能模块:

1. 运动控制(手动/键盘)

2. 运动录制

点击“Rec. Position”或按 R 键记录当前四轴角度至列表。点击“Start Auto mood”按序列发送指令自动执行。

3. 运动监控

图形化绘制每步角度变化曲线,右侧数据表显示精确角度与时间戳,便于发现异常。可像工业自动化一样编排任务序列下发执行。

步骤 9:后续更新(2018 年 8 月)

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

改用 3mm MDF 激光切割,新增自制摇杆控制器,体验更佳。

代码

Task.ino(任务函数:定点抓取/放置/回放)

int delayT = 350;
void Home() { // 归位
  MyServo0.write(valGripper); delay(15);
  MyServo.write(valBase); delay(30);
  MyServo2.write(valShoulder); delay(30);
  MyServo3.write(valElbow); delay(delayT);
}
void Pick() { // 固定抓取点
  MyServo.write(4); delay(delayT);
  MyServo3.write(125); MyServo2.write(95); delay(delayT);
  MyServo0.write(50); delay(delayT); MyServo0.write(2); delay(delayT);
  MyServo2.write(60); MyServo3.write(80); delay(delayT);
  Serial.println("Object Picked");
}
void Drop() { // 固定放置点
  MyServo.write(145); delay(delayT);
  MyServo2.write(80); delay(15); MyServo3.write(115); delay(delayT);
  MyServo0.write(40); delay(delayT); MyServo3.write(90); delay(delayT);
  Serial.println("Object Dropped");
}
void Playback() { // 解析串口指令串 "1:90&2:80&3:180"
  char* command = strtok(ByteReceived, "&");
  while (command != 0) {
    char* separator = strchr(command, ':');
    if (separator != 0) {
      *separator = 0;
      int servoId = atoi(command);
      int angle = atoi(++separator);
      if (servoId == 1) { MyServo.write(angle); delay(delayT); }
      else if (servoId == 2) { MyServo2.write(angle); delay(delayT); }
      else if (servoId == 3) { MyServo3.write(angle); delay(delayT); }
    }
    command = strtok(0, "&");
  }
}

RobotArm.ino(主循环:串口指令解析与舵机驱动)

#include 
Servo MyServo, MyServo2, MyServo3, MyServo0;
char ByteReceived;
int valGripper = 30, valBase = 70, valShoulder = 25, valElbow = 150;

void setup() {
  Serial.begin(9600);
  pinMode(A5, OUTPUT);
  MyServo0.attach(12); MyServo.attach(11); MyServo2.attach(13); MyServo3.attach(10);
  Home(); delay(300);
}

void loop() {
  // 串口打印当前角度
  while (Serial.available() > 0) {
    ByteReceived = Serial.read();
    switch (ByteReceived) {
      case 'n': digitalWrite(A5, HIGH); break; // LED 开
      case 'f': digitalWrite(A5, LOW); break;  // LED 关
      case 'l': MyServo.write(MyServo.read()+2); break; // 底座左
      case 'r': MyServo.write(MyServo.read()-2); break; // 底座右
      case 'u': MyServo2.write(MyServo2.read()+2); break; // 小臂上
      case 'd': MyServo2.write(MyServo2.read()-2); break; // 小臂下
      case 'w': MyServo3.write(MyServo3.read()+2); break; // 大臂下
      case 's': MyServo3.write(MyServo3.read()-2); break; // 大臂上
      case 'o': MyServo0.write(30); break; // 夹爪开
      case 'c': MyServo0.write(1); break;  // 夹爪合
      case 'q': Pick(); Drop(); Home(); break; // 快速演示
      case 'h': Home(); break;             // 强制归位
      default: Pick(); Playback(); Home(); break; // 自动回放
    }
  }
}

3D 模型文件

f98t2axin238k2n_khGWAEIqdl.skp (SketchUp 格式)

原理图

基于 Arduino Nano 与 Tower Pro MG996R 舵机的精准 PC 控制机械臂

制造工艺

  1. 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
  2. 打造功能完整的 Arduino 驱动 3D 打印机械臂:分步指南
  3. Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
  4. 以太网远程控制机械臂 — 基于 Arduino 101 与 WIZ750SR
  5. DIY 智能 Arduino 机械臂:主从控制与动作记忆教程
  6. 工业机械臂:驱动制造业革命的核心力量
  7. SCARA 机器人市场 2026 年将达 147.8 亿美元,自动化增长引擎强劲
  8. 机械臂如何制造:设计原理与核心部件全解析
  9. 工业机械臂重塑制造业:核心优势、类型与头部厂商深度解析
  10. 工业机械臂:驱动产能跃升与劳动力价值重构的核心引擎
  11. 液压机械臂在制造业的应用:原理、优势与选型专家指南
  12. Makerarm:面向创客的一体化桌面机械臂