百摩网
当前位置: 首页 生活百科

arduino舵机控制程序(arduino蓝牙模块控制舵机)

时间:2023-07-11 作者: 小编 阅读量: 6 栏目名: 生活百科

除伺服电机外,夹具机构均已组装。5个自由度与大多数机械臂一样,DFRobot套件被宣传为“5DOF”或5自由度机械臂。对于机器人手臂,这通常意味着手臂拥有的电机数量。手臂能够承受很大的扭矩和动量,因此需要可靠固定。注意不要超过这个范围。螺钉头应位于L型支架一侧。确保轴承的斜面部分与伺服支架齐平。确认在拧紧螺钉后轴承仍能自由旋转。重置和运行所有伺服电机以确保一切正常

在人工短缺的大背景下,机械手正在大显身手,得到越来越多的应用。今天我们就通过一个便宜的机械手套件来了解其控制的基本原理及电路。我们将试验用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 Nano18.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 Controllerrobot-arm-control-basic.inoControls 5 DOF Robot Arm, uses Arduino Nano and PCA9685 PWM ControllerUses Adafruit PWM libraryUses 5 potentiometers for input (can be modified for 6)DroneBot Workshop 2018http://dronebotworkshop.com*/ // Include Wire Library for I2C Communications#include <Wire.h> // Include Adafruit PWM Library#include <Adafruit_PWMServoDriver.h> #define MIN_PULSE_WIDTH650#define MAX_PULSE_WIDTH2350#define FREQUENCY50 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 variablesint mtrDegreeBase;int mtrDegreeElbow;int mtrDegreeWrist;int mtrDegreePivot;int mtrDegreeJaws; void setup(){// Setup PWM Controller objectpwm.begin();pwm.setPWMFreq(FREQUENCY);} // Function to move motor to specific positionvoid moveMotorDeg(int moveDegree, int motorOut){int pulse_wide, pulse_width;// Convert to pulse widthpulse_wide = map(moveDegree, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);//Control Motorpwm.setPWM(motorOut, 0, pulse_width);} // Function to convert potentiometer position into servo angleint getDegree(int controlIn){int potVal,srvDegree;// Read values from potentiometerpotVal = analogRead(controlIn);// Calculate angle in degreessrvDegree = map(potVal, 0, 1023, 0, 180);// Return angle in degreesreturn srvDegree;} void loop() {//Control Base Motor// Get desired positionmtrDegreeBase = getDegree(controlBase);// Move motormoveMotorDeg(mtrDegreeBase,motorBase);//Control Elbow Motor// Get desired positionmtrDegreeElbow = getDegree(controlElbow);// Move motormoveMotorDeg(mtrDegreeElbow,motorElbow);//Control Wrist Motor// Get desired positionmtrDegreeWrist = getDegree(controlWrist);// Move motormoveMotorDeg(mtrDegreeWrist,motorWrist);//Control Pivot Motor// Get desired positionmtrDegreePivot = getDegree(controlPivot);// Move motormoveMotorDeg(mtrDegreePivot,motorPivot);//Control Jaws Motor// Get desired positionmtrDegreeJaws = getDegree(controlJaws);// Move motormoveMotorDeg(mtrDegreeJaws,motorJaws);// Add short delaydelay(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 套件价格低廉,并且包含一些可以使用很长时间的高质量部件。

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

    推荐阅读
  • 走油肉怎么炸不溅油(走油肉不溅油的技巧)

    走油肉怎么炸不溅油炸走油肉的时候,要注意锅里的油温不要太高,大约8成热时就放入走油肉。放进去之前,要保证走油肉没有水分,因为水和油碰到一起就会溅出来,还会出现油爆的声音。再者可以将走油肉切的小一些,炸制过程中不停的翻动。烧油的火候不需要太大,中火就可以,另外,一次性不要放入那么多的走油肉,少量放入即可。走油肉比较油腻,平时要少吃一些,吃太多会很腻。走油肉要选用比较厚的五花肉,一条大概是三四斤。

  • 冬天取暖选择什么样的电锅炉好(电锅炉适合什么样的家庭使用)

    在有电采暖专用电的地方适合安装,这类地方用电进行采暖会便宜而且还有很多相关的补贴政策,用户供暖可以省一大笔钱。家用取暖电锅炉与燃气壁挂炉家用取暖电锅炉与燃气壁挂炉相比较,各有特点。电锅炉的优点是安静、易于控制、没有燃气泄漏的隐患、体积小、设备价格低,燃气壁挂炉使用成本低,缺点是体积大、有一点儿噪音、有燃气泄漏的风险。

  • 适合一个人看的伤感说说(适合一个人看的伤感说说盘点)

    适合一个人看的伤感说说身无彩凤双飞翼,心有灵犀一点通。年把拥有变作失去。我不会去哭,我只会把自己放在一个坚强的地方。货有过期,人有看腻时。虽有风阳光却极充足索性将鞋子脱下若心也可如此放松那该多快乐。假装不爱一个人比分手还痛苦。有一种态度叫扯淡,也就是说,咱们的人生很彪悍,根本不需要解释。当有一首歌符合现状,我就会让它单曲循环。不管过程我们因为什么原因分开我希望直到最后你还是我的。

  • 高考期间一日三餐食谱(关于高考期间一日三餐食谱)

    高考期间一日三餐食谱高考期间学生食谱一日三餐。豆浆和牛奶要喝温热的,不要往里面加糖,否则容易引起胀肚等不适症状。不要吃油炸的和奶油蛋糕一类的食品,也不能吃得过咸。方案鸡蛋挂面、酸奶、苹果。方案豆沙包或鲜肉小包、小米粥或玉米粥、鸡蛋、牛奶、香蕉或菠萝。

  • 汽车贷款是需要注意什么的(汽车贷款是需要注意什么的问题)

    此项业务不收费,若不使用不激活,是不会收费用的。贷款对象必须是贷款行所在地常具有完全民事行为能力的住户口居民。贷款期限:汽车消费贷款期限一般为1-3年,最长不超过5年。

  • ipad用久了声音变小(ipad用久了声音变小了是什么原因)

    ipad用久了声音变小的原因:1、喇叭硬件有损坏。解决办法如下:1、可以通过调节ipad右侧的音量控制键来提高音量。某些第三方应用有放大音量的功能,我们可以通过这些第三方应用来调节音量,把ipad的音量先通过自身的调节键跳到最大,然后用第三方应用继续放大音量控制来达到外放音量提高的目的。

  • cad2010无法建立连接(试试这样做)

    以下内容大家不妨参考一二希望能帮到您!cad2010无法建立连接出现这样的情况应该系统里面残留了之前安装的AutoCAD2010的注册表和安装文件,把这些删除以后就可以正常安装了。打开AutoCAD2007的安装目录,然后把安装生成的目录文件夹整体删除。如果安装在其他盘里面,除去C盘的这两个位置有AutoCAD的文件夹,还有一个就是自己制定的安装位置有AutoCAD的文件夹。点开始-运行-输入rededit,然后找到AutoCAD的注册表删除掉即可再次安装。

  • 寓意好的女孩的单字(寓意好的女孩的单字有哪些)

    寓意好的女孩的单字俪字的本意是指夫妇,但是在用作人名的时候,也引申为形容女孩美丽大方、有自信等,比如著名女演员孙俪,就是单名一个俪字,简练好听,又符合其自身形象。娜字是一个很唯美的字,其意是指美貌、姿态柔美、轻柔的样子,用于人名则是形容这个人美貌、秀气伶俐、姿态柔美、非常迷人。慧字是指智慧、聪明、有才智等,所以直接引用过来为女孩起名也可突出女孩灵秀、聪敏的一面,希望她以后成为一个文采斐然的人。

  • 彩虹怎么形成(彩虹形成原理)

    下面希望有你要的答案,我们一起来看看吧!彩虹怎么形成彩虹的形成是由于阳光射到空中接近球形的小水滴,造成色散及反射而成的。当阳光射入水滴时会同时以不同角度入射,在水滴内亦以不同的角度反射。当中以40至42度的反射最为强烈,造成我们所见到的彩虹。

  • 完美世界法师精灵加点(完美世界法师怎么加点)

    完美世界法师精灵加点属性加点:升级会获得属性点,必须分配在账号上,每个角色的需求是不一样的,有的属性很重要的,有的属性效果一般般。选择不同的属性,效果也是不同的,法师算是一个输出职业,选择的就是灵力、攻击、体力这些的属性。2点的灵力提升输出属性,还有提升防御属性,这样综合起来比较全面,可以主要考虑。