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

MK2 Plus 机械臂控制器

组件和用品

CNC Shield
× 1
OpenBuilds NEMA 17 步进电机
我使用了通用的 Nema 17 Steppers。
× 3
Arduino UNO
× 1
SparkFun 步进电机驱动板 A4988
× 3
OpenBuilds 微限位开关
× 3

必要的工具和机器

3D 打印机(通用)

应用和在线服务

Arduino IDE

关于这个项目

EEZYBOT MK2 手臂

如果您在 thingiverse.com 上搜索过很酷的机械臂,那么您很可能已经偶然发现了这一点。 EEZYBOT MK2 臂(由出色的 daghizmo 设计)共享 ABB IRB460 的运动学连杆,按比例缩小为 1:7。然而,这个手臂被设计成与伺服系统一起工作,这使它有点摇晃和不那么优雅。然而,有一个更好的解决方案。在这里找到的 MK2 Plus 臂,https://www.thingiverse.com/thing:2520572 是原始 MK2 臂的混合版本,它使用 3 个步进电机来移动其连杆。

打印这个确实需要一段时间,所以把这篇文章加入书签,把所有的东西都打印出来,完成后回来! (需要几天时间)

如果您在组装手臂时遇到问题,网上有很多教程。

选择起始位置

与伺服系统不同,步进电机没有任何位置意识。我们必须首先在手臂通电时设置归位程序来解决这个问题。我们将使用 3 个限位开关来设置我们的起始位置。连杆机构的工作方式有些复杂,但是一旦组装好手臂并查看一切如何移动,您就会很容易理解开关的位置。

(即没有像笛卡尔系统那样的 XY,但无论如何我们都会这样称呼它们以使事情更容易)

您可以在机械臂主底座的任何位置设置 Z 限位开关。添加一点点热胶,这样当手臂移动时你的电线就不会脱落。

接线

接线非常简单,因为所有端子都标在 CNC 防护板上。只是不要以错误的方式插入您的 A4988 驱动程序!带有 Y 限位开关一侧的步进电机必须插入 CNC 防护罩中 Y 步进电机的端子。 X限位开关一侧的电机也是如此。 (我们称这些为 X 和 Y,因为这样更容易处理 CNC 屏蔽)将旋转臂底部的最后一个步进器连接到 Z 端子,并根据它们的名称连接限位器。极性无关紧要。

找一个合适的 12V 电源,可以为电机提供电流而不会停转。

代码

让我们转到工作上。我们将使用 Arduino 的 AccelStepper 库来平稳地驱动步进器。该库允许您轻松地同时加速、减速和运行多个步进电机。您可以使用库管​​理器(Sketch> Include Library> Library Manager)直接通过 Arduino IDE 获取此库

您也可以从 airspayce 上的原始创作者页面获取它。 https://www.airspayce.com/mikem/arduino/AccelStepper/

现在我们拥有了所需的一切,让我们一步一步地查看代码。

首先,我们将为要使用的引脚定义一些名称。您可以通过快速谷歌图片搜索找到 CNC 防护罩的引脚图。我们还将为我们的 3 个步进电机创建 AccelStepper 对象。

#define XSTEP 2 //步进电机步进引脚
#define YSTEP 3
#define ZSTEP 4
#define XDIR 5 // 步进电机方向控制引脚
#define YDIR 6
#define ZDIR 7
#define ENABLE 8 // CNC 屏蔽使能引脚
#define XLIMIT 9 // 限位开关引脚
#define YLIMIT 10
#define ZLIMIT 11
#define XMOTORACC 250 // 加速度和最大速度值
#define XMOTORMAXSPEED 1000
#define YMOTORACC 250
#define YMOTORMAXSPEED 1000
# include
AccelStepper XMOTOR(1,XSTEP,XDIR);
AccelStepper YMOTOR(1,YSTEP,YDIR);
AccelStepper ZMOTOR(1,ZSTEP,ZDIR);

让我们创建一个小辅助函数来设置我们的引脚。

void pinsetup(){
pinMode(ENABLE,OUTPUT);
digitalWrite(ENABLE,LOW);
pinMode(XLIMIT,INPUT_PULLUP);
pinMode( YLIMIT,INPUT_PULLUP);
pinMode(ZLIMIT,INPUT_PULLUP);
}

既然已经完成了,让我们回顾一下我们的归位程序的逻辑。

void autohome(){ //我们用它来调用我们的归位程序
xyhome();
zhome();
}
void xyhome () {
int initial_xhome =-1;
int initial_yhome =-1;
// 设置每个步进器启动时的最大速度和加速度以进行归位
XMOTOR.setMaxSpeed(500.0 ); // 设置步进器的最大速度(越慢以获得更好的精度)
XMOTOR.setAcceleration(50.0); // 设置步进器的加速度
YMOTOR.setMaxSpeed(500.0); // 设置步进器的最大速度(越慢以获得更好的精度)
YMOTOR.setAcceleration(50.0); // 设置步进电机的加速度
// 启动时启动步进电机的归位程序
while (digitalRead(YLIMIT)) { // 使步进电机逆时针移动,直到开关被激活
XMOTOR.移动到(initial_xhome); // 设置移动到的位置
YMOTOR.moveTo(initial_yhome); // 设置要移动的位置
initial_xhome--; // 如果需要,下一步减少 1
initial_yhome--;
XMOTOR.run(); // 开始移动步进器
YMOTOR.run();
delay(5);
}
XMOTOR.setCurrentPosition(0); // 暂时将当前位置设置为零
YMOTOR.setCurrentPosition(0);
initial_xhome =-1;
initial_yhome =1;
while(digitalRead(XLIMIT)){
XMOTOR.moveTo(initial_xhome); // 设置移动到的位置
YMOTOR.moveTo(initial_yhome); // 设置要移动的位置
initial_xhome--; // 如果需要,下一步减少 1
initial_yhome++;
XMOTOR.run(); // 开始移动步进器
YMOTOR.run();
delay(5);
}
YMOTOR.setCurrentPosition(0); // 暂时将当前位置设置为零
YMOTOR.setMaxSpeed(250.0); // 设置步进器的最大速度(越慢以获得更好的精度)
YMOTOR.setAcceleration(10.0); // 设置步进器的加速度
initial_yhome =1;
while (!digitalRead(YLIMIT)) { // 使步进器顺时针移动直到开关被停用
YMOTOR.moveTo(initial_yhome);
YMOTOR.run();
initial_yhome++;
delay(5);
}
YMOTOR.setCurrentPosition(0);
YMOTOR.setMaxSpeed(YMOTORMAXSPEED) ); // 设置步进器的最大速度(常规运动速度更快)
YMOTOR.setAcceleration(YMOTORACC); // 设置步进器的加速度
XMOTOR.setCurrentPosition(0); // 暂时将当前位置设置为零
XMOTOR.setMaxSpeed(250.0); // 设置步进器的最大速度(越慢以获得更好的精度)
XMOTOR.setAcceleration(10.0); // 设置步进器的加速度
initial_xhome =1;
while (!digitalRead(XLIMIT)) { // 使步进器顺时针移动直到开关被停用
XMOTOR.moveTo(initial_xhome);
XMOTOR.run();
initial_xhome++;
delay(5);
}
XMOTOR.setCurrentPosition(0);
XMOTOR.setMaxSpeed(XMOTORMAXSPEED) ); // 设置步进器的最大速度(正常运动时速度更快)
XMOTOR.setAcceleration(XMOTORACC); // 设置步进器的加速度
}
void zhome() {
int initial_zhome =-1;
// 设置每个步进器在启动时的最大速度和加速度以进行归位
ZMOTOR.setMaxSpeed(100.0); // 设置步进器的最大速度(越慢以获得更好的精度)
ZMOTOR.setAcceleration(100.0); // 设置步进器的加速度
// 启动时启动步进电机的归位程序
while (digitalRead(ZLIMIT)) { // 使步进器逆时针移动,直到开关被激活
ZMOTOR.移动到(initial_zhome); // 设置要移动的位置
initial_zhome--; // 如果需要,下一步减 1
ZMOTOR.run(); // 开始移动步进器
delay(5);
}
ZMOTOR.setCurrentPosition(0); // 暂时将当前位置设置为零
ZMOTOR.setMaxSpeed(50.0); // 设置步进器的最大速度(越慢以获得更好的精度)
ZMOTOR.setAcceleration(50.0); // 设置步进器的加速度
initial_zhome =1;
while (!digitalRead(ZLIMIT)) { // 使步进器顺时针移动直到开关被停用
ZMOTOR.moveTo(initial_zhome);
ZMOTOR.run();
initial_zhome++;
delay(5);
}
ZMOTOR.setCurrentPosition(0);
ZMOTOR.setMaxSpeed(1000.0) ); // 设置步进器的最大速度(常规运动速度更快)
ZMOTOR.setAcceleration(1000.0); // 设置步进器的加速度
}

好的,这是很多代码。这里到底发生了什么?机械臂首先在 X 和 Y 电机上执行归位程序。由于链接的工作方式,这是通过几个步骤完成的。 (您可以在最后观看视频以了解实际情况)

  • 首先,X 和 Y 电机向相反方向移动,以便首先按下 Y 限位开关。
  • 一旦按下 Y 限位开关,两个电机就会转向相同的方向,从而按下 X 限位开关。
  • 按下 X 开关后,电机会稍微移动一点,以便按下开关(就像按下一样,而不是悲伤的按下。)
  • 最后转动 Z 电机,按下 Z 限位开关。

第一次执行归位程序时,您必须非常小心。如果您的步进电机向相反方向移动,只需关闭电源,然后翻转电机的连接器即可。

现在完成了,从 setup() 函数调用 autohome() 使其只运行一次。将您的 loop() 留空。如果出现问题,请随时注意电源以将其关闭。

void setup() {
// 把你的设置代码放在这里,运行一次:
Serial.begin(9600);
pinsetup();
autohome();
Serial.println("HOMING OK");
}

如果你很幸运,你的电机会以正确的方式转动,限位开关会恰到好处地点击,归位程序将正常工作。但是,如果您像我一样,在一切正常运行之前,您必须做一些小改动。因此,如果归位出错,请务必断开电源​​,以免弄乱 3D 打印手臂。

最后,您可以在 loop() 中编写自己的逻辑,以便您的手臂移动到您想要的位置。由于手臂的链接方式,X 和 Y 电机几乎以笛卡尔方式控制末端执行器。

void loop() {
XMOTOR.runToNewPosition(100);
delay(1000);
YMOTOR.runToNewPosition(50);
delay(1000);
YMOTOR.runToNewPosition(-50);
delay(1000);
YMOTOR.runToNewPosition(0);
delay(1000);
XMOTOR.runToNewPosition( 0);
延迟(1000);
}

结论

我看过很多关于如何使用流行的 GRBL 固件来控制这个手臂的教程。但是,这意味着您需要一台计算机向手臂发送串行命令才能使其移动。如果您只需要 MK2 手臂做一些动作,您可以轻松地将它们硬编码到 Arduino 中,让它做自己的事情。

这并不意味着您不能使用串行命令来控制它!您可以简单地将串行分隔符代码合并到这个代码中,并将 XY 和 Z 电机步数作为字符串发送(用特殊字符分隔 - 例如 5、6、7*,这将使 X 电机移动 5 步,Y 移动 6 步和Z 加 7。* 用于表示字符串的结尾)。

您还可以进一步开发它以发送末端执行器的 3D 空间坐标,并让 arduino 使用逆运动学甚至基本三角学计算出所需的步骤。

玩得开心!衷心感谢 Thingiverse 上所有出色的设计师!

代码

  • 机器人手臂
robotArmArduino
解压文件并使用 Arduino IDE 打开
无预览(仅限下载)。
MK2 机械臂控制器 - Github
链接到 github 仓库 https://github.com/yasaspeiris/MK2-Robot-Arm-Controller

定制零件和外壳

Thingiverse 上的机械臂 MK2 Plus
归功于 thingiverse.com 上的 ackyltle CAD 文件

制造工艺

  1. 电机控制器集成 Arm Cortex-M0 内核
  2. 双臂 SCARA 机器人
  3. MeArm 机械臂 - 你的机器人 - V1.0
  4. 通过以太网控制的机械臂
  5. Littlearm 2C:构建 3D 打印的 Arduino 机械臂
  6. DIY Arduino 机械臂——由手势控制
  7. 使用 Android 应用程序控制 Arduino 机械臂
  8. MeArm 机器人的操纵杆控制器 - 记录坐标
  9. 可记录纸板机械臂
  10. Realtime Robotics 推出新的机器人控制器计算机
  11. 配备机械臂的车削中心
  12. 机器人将协作机械臂与移动平台相结合