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

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

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

除伺服电机外,夹具机构均已组装。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 套件价格低廉,并且包含一些可以使用很长时间的高质量部件。

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

    推荐阅读
  • 宝宝坐学步车的危害 宝宝坐学步车的危害有哪些

    学步车是训练宝宝行走的一个工具,但让孩子长时间地坐在学步车中并不利于孩子体格发育,具体宝宝用学步车有什么危害和弊端呢?

  • 10的9次方怎么打出来 10的9次方怎么打出来计算器

    以word为例,10的9次方打出来的方法如下:1、首先点击word页面中的插入、公式;2、在页面上选择上下标;3、最后输入10和9即可。它最初是由RichardBrodie为了运行DOS的IBM计算机而在1983年编写的。随后的版本可运行于AppleMacintosh、SCOUNIX和MicrosoftWindows,并成为了MicrosoftOffice的一部分。Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。

  • 三星应用隐藏后怎么打开(三星手机如何打开隐藏应用)

    演示机型:SAMSUNGGalaxyS21系统版本:OneUI3.1三星应用隐藏后怎么打开共有4步。4打开程序使用这个应用程序时,向上滑动主屏幕,在搜索框中输入程序名。

  • 梦见自己得了绝症(梦见自己得了绝症意思是什么)

    接下来我们就一起去研究一下吧!梦见自己得了绝症准备考试的人梦见自己得了绝症,意味着一次的失败不要灰心,再努力有成功。怀有身孕的人梦见自己得了绝症,预示生男。创业的人梦见自己得了绝症,代表不能顺利营业,不能与林姓之人交易。谈婚论嫁的人梦见自己得了绝症,说明为感情发生误会失和,不利婚姻难成。打算出门的人梦见自己得了绝症,建议如期进行出发。

  • 白酒制作方法及步骤(白酒制作方法)

    白酒制作方法及步骤固态法白酒,即全粮固态发酵,采用高粱、大麦、小麦等粮食原料,通过在窖池中或地缸中发酵,然后上甑蒸馏,蒸出70—85度之间的原酒(基酒)。再通过长期储存、陈化老熟、勾调降度后成装为成品酒。目前市场上绝大多数名优白酒或品牌均为全粮固态发酵。固态法、液态法和固液结合法白酒都是国家允许的白酒生产方法。

  • 风雨兰冬季养殖方法(风雨兰冬季养殖方法介绍)

    在冬天光照较弱的情况下,可以让风雨兰全天都接受阳光照射,最少要保证半天的阳光照射,这样风雨兰才能顺利生长,安全过冬。一般在入冬之前,就可以减少给风雨兰浇水的次数,8到12天左右浇一次水,等到冬天的时候可以不用给风雨兰浇水。如果冬季依旧给风雨兰施肥,它不仅不能吸收养分,还会根部腐烂,枝叶枯萎。在冬季到来时,就不要再修剪风雨兰了,这样它就可以顺利过冬了。

  • 兴味怎么读(兴味咋读呢)

    兴味,读音xìngwèi解释:兴味:兴趣、趣味索然:毫无兴致的样子一点儿兴趣都没有,今天小编就来聊一聊关于兴味怎么读?接下来我们就一起去研究一下吧!兴味怎么读兴味,读音xìngwèi。

  • 广州大型游乐场哪里好玩(广州这个游乐场居然全球第一)

    主题娱乐协会和艾奕康近日发布的主题乐园入园人数报告显示,2017年全球主题乐园表现不俗,尤其是顶级乐园。其中在“全球水上乐园”排名中,长隆水上乐园排第一!广州的夏天这么热,真让人忍不住去浪~那门票是多少呢?地点:广州市南沙区万顷沙镇新垦15涌话说,现在是“广州旅游月”广州40多家景区打折,5折秒杀、1元购...别错过!快戳下图围观↓↓↓编辑|陈梦莹来源|AECOM官网、长隆旅游、MAG环球魔幻世界、正佳极地海洋馆

  • 刮北风的原因是什么 刮西北风的原因是什么

    刮北风的原因是我国所处的位置北方是陆地,南方是海洋,海洋陆地比热不同,陆地升温快,降温也快,陆地夏季温度相对要高,形成低气压,冬季温度相对要低,形成高气压中心。所以风从陆地吹向海洋,加上地转偏向力的作用,形成北季风。

  • 腐竹蘑菇炒饭如何做(腐竹蘑菇炒饭的做法)

    跟着小编一起来看一看吧!腐竹蘑菇炒饭如何做香菇6朵,金针菇一小把,腐竹适量,米饭半碗,豆豉适量,葱适量,姜丝适量,蒜末三四瓣就行,料酒少许,酱油少许,鸡汁少许。将所有材料洗净,香菇切片,金针菇切碎,腐竹切段。热锅凉油,等油烧好后,将腐竹放入锅中炸至金黄捞出。葱姜下锅,炒出香味后放入香菇、金针菇,翻炒。翻炒至出汁变色,香菇炒至嫩滑,放入豆豉、鸡汁,淋少许酱油,加入蒜末继续翻炒。