百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

用Arduino做一个5自由度的机械手

liuian 2024-12-08 16:25 69 浏览

在人工短缺的大背景下,机械手正在大显身手,得到越来越多的应用。今天我们就通过一个便宜的机械手套件来了解其控制的基本原理及电路。我们将试验用Arduino Nano加PCA9685伺服控制器同时控制5个伺服电机

本文作者:加拿大DroneBotWorkShop 翻译整理:DIY百事

目录

1 简介
2 DFRobot 5 DOF 机械臂套件
3 5 自由度
4 机械臂部分
5 机械臂组装
6 组装夹具
6.1所需零件
6.2组装说明
7 组装底座电机安装座
7.1所需零件
7.2组装说明
8 组装双U型支架
8.1所需零件
8.2组装说明
9 组装带支架的弯头电机安装座
9.1所需零件
9.2组装说明
10 组装腕式电机支架和夹持器支架
10.1所需零件
10.2组装说明
11 安装底座电机
11.1所需零件
11.2组装说明
12 连接底座到双 U 型支架
12.1所需零件
12.2组装说明
13 安装弯头电机
13.1所需零件
13.2组装说明
14 将双 U 型支架连接到带支架的弯头安装座
14.1所需零件
14.2组装说明
15 安装手腕电机
15.1所需零件
15.2组装说明
16 将带支架的弯头安装座连接到手腕马达安装座
16.1所需零件
16.2组装说明
17 安装夹爪
17.1所需零件
17.2组装说明
18 Arduino 控制器
18.1 Arduino Nano
18.2控制器接线
18.3 Arduino 代码
19 测试机械臂
20 展开机械臂

让我们先看看我们将要构建什么。

DFRobot 5 DOF 机械臂套件

DFRobot 5自由度机械手臂套件包括所有的伺服电机,支架,紧固件和其他硬件,你可以用它建立一个小而强大的机械臂及夹持机构。

手臂的支架和支撑件由黑色阳极氧化铝制成,它提供强大的支撑。

手臂由 5 个伺服电机提供动力,都是标准尺寸:

  • 两个 15Kg/cm 舵机用于底座和肘部
  • 一个 5.5 Kg/cm 手腕舵机
  • 两个 4 Kg/cm 伺服器用于夹持机构

舵机、支架和硬件包装在带有识别标签的单独塑料袋中。除伺服电机外,夹具机构均已组装。


DFRobot 5 DOF 机械臂套件的完整零件清单如下所示:

组装臂所需的唯一工具是十字螺丝刀和一套钳子。

5 个自由度

与大多数机械臂一样,DFRobot 套件被宣传为“5 DOF”或 5 自由度机械臂。术语“自由度”究竟是什么意思?

事实证明,这可能意味着不同的事情,具体取决于您所在的领域。

如果您是一名航空工程师,那么对您来说,自由度可能由经典的三个维度和物体可以移动的方向表示:

  • 前进与后退 Forwards & Backwards
  • 上下 Up & Down
  • 左右 Left & Right
  • 上述三个方向为轴的转动

然而,在机器人技术中,“自由度”或 DOF 通常被认为表示机构具有的可移动关节的数量。对于机器人手臂,这通常意味着手臂拥有的电机数量。

我们的机械臂有 5 个电机,因此被宣传为“5 DOF”机械臂。

机械臂部分

伺服电机各自为机械臂的不同部分提供动力,下面的描述中将用为它们提供动力的部分的名称来表示。

我将手臂部分命名为与人类手臂上的等效部分大致对应,这是我们大多数人应该熟悉的参考点。在某些情况下(在抓手周围),人类手臂上没有相应的部分,所以我尽可能描述性地命名这些部分。

各部分如下:

  • 底座–机器人手臂的底座,对应于人的肩膀。底座固定到位,至少现在是这样。
  • 肘部–手臂上的第一部分。就像人的肘部一样,它允许手臂弯曲。
  • 手腕–手臂上的第二部分。它允许更好地定位夹具组件。
  • 关节–允许夹具向任一方向旋转 90 度。人的手和手臂没有这样的关节,旋转一只手是用手臂上的几块不同的肌肉来完成的。
  • 夹爪 – 夹具机构本身,操作起来很像台钳或钳子。

在操作中,手臂的底座需要牢固地固定在坚固的表面上。手臂能够承受很大的扭矩和动量,因此需要可靠固定。

机械臂组装

DFRobot 5 DOF 机械臂套件是许多 5 DOF 机械臂的典型代表,因此您可能拥有与之类似的套件。您还可以使用DFRobot 网站上的部件将这个手臂或它的自定义版本拼凑起来

机器人手臂的组装将按以下顺序进行:

  1. 组装夹爪
  2. 组装底座电机安装座
  3. 组装双 U 型支架
  4. 用支架组装肘部电机安装座
  5. 使用夹持器安装座组装腕式电机安装座
  6. 安装底座电机
  7. 将底座连接到双 U 型支架
  8. 安装肘部电机
  9. 将双 U 型支架连接到带支架的弯头安装座
  10. 安装手腕电机
  11. 将带支架的肘部安装座连接到手腕马达安装座
  12. 安装夹爪
  13. 接线和测试!

以下是每个步骤的详细信息:

组装夹爪所需零件

组装说明

  • 将两个舵机都设置为 0 度位置(完全逆时针)
  • 拿起夹具并将其与其中一台电机成 90 度角
  • 将伺服轴插入夹具组件背面,与齿轮啮合。
  • 测试对齐是否正确
  • 插入并拧紧臂安装螺钉以将夹具固定回电机轴
  • 手动操作夹爪直到它们处于完全打开位置。注意不要超过这个范围。
  • 将伺服电机插入钳口下方的位置,与齿轮啮合。
  • 测试对齐是否正确
  • 插入并拧紧臂安装螺钉以将夹爪机构固定到电机轴上。
  • 测试两个伺服电机以验证夹具是否正常运行。

组装底座电机安装座所需零件

组装说明

  • 放置舵机安装支架,使舵机安装在前面,带有两个孔的平板在后面。
  • 将人员轴承套件中的螺钉插入伺服支架背面左侧的孔中,螺钉头朝向伺服电机的一侧。
  • 将人员轴承套件中的轴承插入伺服支架外侧的螺钉上。确保轴承的斜面部分与伺服支架齐平。
  • 在轴承顶部插入锁紧垫圈。
  • 将螺母拧到螺钉上。
  • 拧紧螺钉和锁紧螺母。
  • 确认在拧紧螺钉后轴承仍能自由旋转。

组装双 U 型支架所需零件

组装说明

  • 将两个 U 型支架对齐,使短节相互压紧,并对齐安装孔。如果您有像我这样预先钻好的安装孔,您需要确保它们以相同的方式排列,否则方向无关紧要。
  • 使用袋子中的 4 个螺钉和螺母将支架固定在一起。确保将它们牢牢固定。

用支架组装弯头电机安装座所需零件

组装说明

  • 放置舵机安装支架,使舵机安装在前面,带有两个孔的平板在后面。
  • 将人员轴承套件中的螺钉插入伺服支架背面左侧的孔中,螺钉头朝向伺服电机的一侧。
  • 将人员轴承套件中的轴承插入伺服支架外侧的螺钉上。确保轴承的斜面部分与伺服支架齐平。
  • 在轴承顶部插入锁紧垫圈。
  • 将螺母拧到螺钉上。
  • 拧紧螺钉和锁紧螺母。
  • 确认在拧紧螺钉后轴承仍能自由旋转。
  • 将 L 型支架短边上的安装孔与 U 型支架短平底上的安装孔对齐。L 型支架应与 U 型支架成直角,详情请参见插图。
  • 使用 L 型支架随附的螺钉将 L 型支架固定到 U 型支架上。螺钉头应位于 L 型支架一侧。
  • 将 L 型支架长边的安装孔与舵机安装支架右下方的安装孔对齐。
  • 使用袋子中的 4 个螺钉和螺母将 L 型支架固定到伺服安装支架上。螺钉头应位于 L 型支架一侧。

使用夹持器安装座组装腕式电机安装座所需零件

组装说明

  • 放一个舵机安装支架,舵机安装在前,两个孔的平板在后。
  • 将人员轴承套件中的螺钉插入伺服支架右后侧的孔中,螺钉头面向伺服电机的一侧(请注意,这是之前电机安装装配说明中使用的相反侧)。
  • 将人员轴承套件中的轴承插入伺服支架外侧的螺钉上。确保轴承的斜面部分与伺服支架齐平。
  • 在轴承顶部插入锁紧垫圈。
  • 将螺母拧到螺钉上。
  • 拧紧螺钉和锁紧螺母。
  • 确认在拧紧螺钉后轴承仍能自由旋转。
  • 将第二个伺服安装支架下方的第二个伺服安装支架成直角对齐,以便第二个伺服的轴位于组件的右侧。对齐安装孔,有关详细信息,请参见插图。
  • 用袋子中的 4 个螺钉和螺母固定两个伺服安装支架。螺丝头应面向底部伺服支架。牢固地拧紧。

安装底座电机所需零件

组装说明

  • 将电机旋转到 0 度位置(完全逆时针)。
  • 安装电机时轴与背面轴承对齐,使用随伺服支架提供的 4 个螺钉和螺母将电机紧固。
  • 将臂放在电机轴上,暂时留在原处。

    其它小部件装配不再详述

您现在已经完成了手臂的机械组装。

重置和运行所有伺服电机以确保一切正常工作并正确对齐是一个好主意。如有必要,通过卸下将伺服臂固定到框架的 4 个螺钉来调整连接点的位置,并根据需要重新定位。

现在让我们组装一个简单的控制器并让手臂完成它的步伐!

Arduino控制器

我将 PCA9685 16 通道 PWM 控制器直接安装到我的机械臂上,以便我可以使用 I2C 总线控制所有电机。

虽然我现在对机器人手臂有很好的计划,但我只需要一个简单的控制器来调整所有五个伺服电机的位置。我是围绕 Arduino Nano 来设计的。

Arduino Nano

我的 Arduino 项目通常基于 Arduino Uno,它是一种流行且廉价的微控制器板,具有大量输入和输出。但有时它不符合要求。这次就是。

我想构建一个具有 5 个电位器的控制器,分别控制每个电机。然后它会通过 I2C 总线将信息发送到 PCA9685 以控制伺服系统。我还希望它能够轻松升级为使用 6 个电位计用于 6 DOF 臂(基本上是我的 5 DOF 臂,底部带有转盘)。

Arduino Uno 有 6 个模拟输入,因此乍一看似乎非常适合这项工作。但是有一个问题!在此设计中有两个模拟输入不能用。

Arduino Uno 上的模拟输入 A4 和 A5 作为 I2C 总线上的 SDA(数据)和 SCL(时钟)线执行双重任务。即使您的 Uno 具有单独的 SDA 和 SCL 引脚,它们也只是在内部连接到 A4 和 A5。

因此,如果您使用 I2C,那么您就不能使用模拟引脚 A4 和 A5,它们是共用的。

而Arduino Nano 有八个模拟输入,比 Uno 多两个。因此,即使 Nano 用引脚 A4 和 A5 作I2C通讯,它仍然有足够的剩余模拟输入来完成这项工作。

即使我最终添加了第六个电位器!

Nano 在大多数方面与 Uno 一样易于使用,尤其是当您将其安装到无焊面包板上或使用适配器插座时。请记住将 Arduino IDE 中的开发板类型更改为“Arduino Nano”,否则在编译代码时会出现错误。

为控制器接线

我们简易型机械臂控制器的接线非常简单,尤其是当我们使用 PCA9685 进行伺服连接时。

为了减少任何混乱,我在两个图表上显示了接线。这与我将 PCA9685 直接安装在手臂上的安排相匹配。如果您希望将 PCA9685 安装在用于 Arduino Nano 的同一块板或面包板上,这取决于您。

我喜欢直接安装在手臂上的 PCA9685,因为我认为它可以减少接线并避免延长任何伺服电机电缆。而且我还打算在我的手臂上安装其他 I2C 设备,因此为所有这些设备设置一个 I2C 连接是有意义的。

我们接线图的“Arduino 部分”有 Nano 和 5 个电位器。控制器一侧接地,另一侧从 Arduino Nano 获得 5 伏电压。

每个电位计的输出连接到 Arduino Nano 上的模拟输入,如下所示:

  • 底座Base - A0
  • 肘部Elbow - A1
  • 手腕Wrist – A2
  • 关节Grip Pivot – A3
  • 夹爪Grip Jaws – A6

请注意,A4 和 A5 用于 I2C 连接。

现在让我们转到连接的 PCA9685 一侧。

I2C 连接到 PCA9685 末端的一个连接器,任一连接器都可以工作。

然后,您需要将 5 个(或 6 个)伺服电机连接到该模块。确保以正确的方式连接。

最后,您将需要一个具有足够电流来驱动五个伺服电机的电源。6 伏 2 安电源将是理想的选择。电源直接连接到 PCA9685 模块上的连接器。

一旦你把它全部连接起来,就该编写一些代码了!

Arduino代码

此处提供了简单机械臂控制器的代码。

该草图使用了 Adafruit PWM 库,您需要将其安装到 Arduino IDE 中。只需在库管理器中搜索“Adafruit PWM”,它应该是第一个结果。

如果您需要安装库的帮助或想了解有关此库和 PCA9685 的更多信息,请查看我关于使用伺服电机的文章。

/*
  Basic Robot Arm Controller
  robot-arm-control-basic.ino
  Controls 5 DOF Robot Arm, uses Arduino Nano and PCA9685 PWM Controller
  Uses Adafruit PWM library
  Uses 5 potentiometers for input (can be modified for 6)
 
  DroneBot Workshop 2018
  https://dronebotworkshop.com
*/
 
// Include Wire Library for I2C Communications
#include <Wire.h>
 
// Include Adafruit PWM Library
#include <Adafruit_PWMServoDriver.h>
 
#define MIN_PULSE_WIDTH       650
#define MAX_PULSE_WIDTH       2350
#define FREQUENCY             50
 
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
 
// Define Potentiometer Inputs
 
int controlBase = A0;
int controlElbow = A1;
int controlWrist = A2;
int controlPivot = A3;
int controlJaws = A6;
 
// Define Motor Outputs on PCA9685 board
 
int motorBase = 0;
int motorElbow = 1;
int motorWrist = 2;
int motorPivot = 3;
int motorJaws = 4;
 
// Define Motor position variables
int mtrDegreeBase;
int mtrDegreeElbow;
int mtrDegreeWrist;
int mtrDegreePivot;
int mtrDegreeJaws;
 
void setup()
{
  // Setup PWM Controller object
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY);
}
 
// Function to move motor to specific position
void moveMotorDeg(int moveDegree, int motorOut)
{
  int pulse_wide, pulse_width;
 
  // Convert to pulse width
  pulse_wide = map(moveDegree, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
  pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
  
  //Control Motor
  pwm.setPWM(motorOut, 0, pulse_width);
}
 
// Function to convert potentiometer position into servo angle
int getDegree(int controlIn)
{
  int potVal,srvDegree;
  
  // Read values from potentiometer
  potVal = analogRead(controlIn);
  
  // Calculate angle in degrees
  srvDegree = map(potVal, 0, 1023, 0, 180);
  
  // Return angle in degrees
  return srvDegree;
  
}
 
void loop() {
 
  //Control Base Motor
  
  // Get desired position
  mtrDegreeBase = getDegree(controlBase);
  // Move motor
  moveMotorDeg(mtrDegreeBase,motorBase);
  
  
  //Control Elbow Motor
  
  // Get desired position
  mtrDegreeElbow = getDegree(controlElbow);
  // Move motor
  moveMotorDeg(mtrDegreeElbow,motorElbow);
  
  
  //Control Wrist Motor
  
  // Get desired position
  mtrDegreeWrist = getDegree(controlWrist);
  // Move motor
  moveMotorDeg(mtrDegreeWrist,motorWrist);
  
  
  //Control Pivot Motor
  
  // Get desired position
  mtrDegreePivot = getDegree(controlPivot);
  // Move motor
  moveMotorDeg(mtrDegreePivot,motorPivot);
  
  
  //Control Jaws Motor
  
  // Get desired position
  mtrDegreeJaws = getDegree(controlJaws);
  // Move motor
  moveMotorDeg(mtrDegreeJaws,motorJaws);
 
 
  // Add short delay
  delay(20);
 
}

该代码包括 Adafruit PWM 库和 Wire 库,这对于通过 I2C 总线进行通信至关重要。

为 PWM 控制器定义了一些常数,PWM 信号的最小和最大脉冲宽度以及信号的频率。代码中的值将适用于 DF Robot 5 DOF 机器人手臂套件随附的电机。

接下来定义了许多变量:

  • “control”变量,代表电位计所连接的模拟端口。
  • “motor" 变量代表 PCA9685 板上 PWM 输出。
  • mtrDegree ”变量表示您希望电机轴定位到的角度(从 0 到 180)。

在设置中,我们只初始化 PWM 对象并将 PWM 振荡器的频率设置为 50 Hz,这是模拟伺服电机的标准。

然后我们定义两个函数:

  • moveMotorDeg – 此函数将电机名称和位置(以度为单位)作为输入。然后它将请求的电机移动到该位置。
  • getDegree – 此函数将电位计名称作为输入并以度数输出位置。

由于我们定义了两个函数,循环非常简单。这确实是相同的程序重复五次,每个电机一次。

电位计位置是使用getDegree函数确定的。然后将此信息传递给moveMotorDeg函数以将相应的电机移动到所需位置。

在为每个电机执行此例程后,会产生短暂的延迟,然后循环重新开始。结果是伺服电机响应电位计位置而移动。

测试机械臂

将所有东西连接起来并提供合适的电源,然后准备测试您的手臂。

确保将手臂牢固地固定在有足够质量支撑它的底座上。当你第一次给手臂加电时,不要让你的手和手指挡住你的手,舵机会立即移动到位,它们不会因为你的手指而停下来!

手臂很结实,能够举起合理的重量。如果您使用过像 MeArm 这样的小型实验臂,那么您会发现这是一个显著的改进。

抓手特别有用,它实际上能够以可重复的方式拾取小物件。

花几个小时把玩一下你的新机械手臂,这让人上瘾!

展开机械臂

这样我们完成了手臂的构建,但还可以做些后续的事情。这实际上只是 DFRobot 5 DOF 机械臂项目的开始,至少对我来说是这样。

我已经在我的下一批实验中安装了一个传感器。这是一个 MPU5060 陀螺仪和高度计设备,我安装在手臂手腕上以测量位置。它们用 I2C通讯,因此接口很简单。

摄像头、距离传感器、限位传感器、力敏电阻器——对于像这样的坚固机器人手臂可以连接的东西,天空是无限的。

所以我可以保证你会在车间看到更多的手臂。将此文章和视频视为系列的一部分。

我希望这篇文章能激励你建造一个像这样的机械臂。DFRobot 套件价格低廉,并且包含一些可以使用很长时间的高质量部件。

我很想听听你的机械臂设计。请在下面的评论中告诉我您的创作以及您在制作手臂时可能遇到的任何问题。

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...