【Arduino 动手做】3D打印的机械臂 Remix

在这里插入图片描述

《Arduino 手册(思路与案例)》栏目介绍:
在电子制作与智能控制的应用领域:广泛涉及了Arduino BLDC、Arduino CNC、Arduino ESP32 SPP、Arduino FreeRTOS、Arduino FOC、Arduino GRBL、Arduino HTTP、Arduino HUB75、Arduino IoT Cloud、Arduino JSON、Arduino LCD、Arduino OLED、Arduino LVGL、Arduino PID 及 Arduino TFT 等方面的相关拓展思路和众多参考案例。本专栏目前博客近2300篇。
https://blog.csdn.net/weixin_41659040/category_12422453.html

Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

在这里插入图片描述

我设计了一个更大、更强、更长的“meArm”机械臂版本。机器人手臂看起来很有趣,玩起来也更有趣。这种设计为您提供了构建自己的机器人手臂的额外好处。使用 3D 打印机和五金店的零件,我能够提高原始“meArm”套件的举重能力和力量。我添加了一些新功能来纠正我在原始套件中遇到的问题。

要查看原始的“meArm”,请在 Pocket-Sized-Robot-Arm-meArm-V04 上查看他的项目。我从 adafruit.com/products/2012 购买了他的套件,并享受了将其组装和试用的乐趣。我喜欢这个设计,它看起来像工厂里的机械臂。最初的“meArm”是一个很好的套件,但对于任何实际用途来说都有点弱。所以我启动 SketchUp 并预热 3d 打印机。是时候让它变得更大、更强、更长了!我将秤翻了一番,在关节上添加了轴承以抑制运动,并添加了更大的伺服系统来帮助移动较重的物体。我有一些问题需要克服,并且还有更多的改进想要做出,但我正在通往成功项目的道路上。

在这里插入图片描述

第 1 步:零件清单

1、硬件材料:
18 ~ 5/8“ 长 M4 螺丝
1 ~ 3/4“ 长 M4 螺丝
3 ~ 1-3/4“ 长 M4 螺丝
22 ~ M4 螺母(我用的是里面有尼龙的螺母)
3 ~ 小垫圈
12 ~ 轴承 624ZZ 13mm 外径 x 4mm 内径 amazon.com
12 ~ 伺服喇叭用小螺丝

2、3D 打印部件:
基础件
巴塞中心支柱
中心梁
中梁顶部
抓取臂
抓握
长臂
伺服臂
短臂(两个)
站立
支架盖
支持臂
三支持件

3、工具:
Pilips 螺丝刀
3D 打印机
研磨机(缩短一些螺丝)

4、电子学
3 ~ 伺服电机(如果你需要一个活动夹子,需要4个)
3 ~ 伺服延长线
1 ~ 微控制器 我使用了Arduino

在这里插入图片描述
在这里插入图片描述

第 2 步:组装支架

打印出所需的部件后,就可以开始组装了。让我们从下往上开始。将螺母插入支架底部,然后拧上盖子,使最靠近支架中伺服切口的伺服孔。展台是我进行第一次改进的地方。在套件中,伺服器在支架中有一些晃动,我的很好而且很紧,带有安装孔,使它们更加安全。第二个改进是盖子上的小块。它们有助于防止在捡起重物时手臂倾斜。

在这里插入图片描述
在这里插入图片描述

第 3 步:组装底座

底座需要一个拧入底部的伺服喇叭。还有一个中心支柱,需要 4 个螺母压入其中。中心支柱使用四个螺钉安装到底座中。您可能需要在构建中拆下中心支柱,以将锁定螺钉插入侧面伺服喇叭。这就是为什么我把它变成可拆卸的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 4 步:组装手臂(肘部)

现在开始研究手臂。首先,让我们连接弯头的零件。长臂需要一个压入螺母。那么短臂将需要两个轴承。轴承压入并停止。挡块是连接到长臂的一侧。将螺钉插入轴承并连接到长臂上的螺母上。将伺服喇叭连接到伺服臂。然后伺服臂将需要另一个螺母,并将连接到短臂的另一端。

在这里插入图片描述
在这里插入图片描述

第 5 步:组装臂(中心梁)

中心梁分为两部分(中心梁和中心梁顶部)。顶部需要四个螺母压入。还需要将伺服喇叭和一个压入螺母拧到中心梁上。这就是我在 3D 设计零件时犯的错误。这个伺服喇叭需要与其他两个倒置拧紧。这不会对手臂力量产生任何影响。现在使用 1-3/4 英寸的螺丝连接这两个部分。在打印零件后,我注意到了我的错误,并调整了所有其他零件以适应这个错误。如果我要重新设计,我会修复这个错误。你打印你学习。

在这里插入图片描述
在这里插入图片描述

第 6 步:组装手臂(连接肘部)

将轴承插入长臂的中间。然后拧到中心梁上与伺服喇叭相反的一侧的中心梁上。完成后,伺服喇叭齿轮孔都应指向远离中心梁的齿轮。

在这里插入图片描述
在这里插入图片描述

第 7 步:组装手臂(构建肩部)

这可能有点棘手,因为手臂看起来一样,但每个手臂都略有不同。您将需要三重支撑、一个短臂、支撑臂和抓手臂。夹持臂的一端稍薄。支撑臂在同一侧有两个轴承孔。将两个螺母压入三重支架中。然后使用轴承和螺钉将支撑臂连接到三重支架的长端。接下来,将短臂连接到三重支架上的另一个螺母中。抓手臂和三重支撑需要轴承。小心将夹持臂放在三重支架上的方式。如果将其倒置,则无法正确连接到夹头。另一端的轴承侧应朝下。使用 3/4 英寸长的螺钉,将垫圈放在三重支架和夹持臂上的两个轴承之间。这将在下一步中拧到中心梁上。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 8 步:组装手臂(连接肩部)

现在将肩部拧到中心梁上。这将连接到与伺服喇叭同一侧的中心光束上。如果您在照片中注意到我的夹持臂倒置(见注释)。因此,如果您的照片与照片中的照片相似,则需要将其翻转过来。否则,请继续进行下一步。

在这里插入图片描述

第 9 步:组装手臂(安装夹持器头)

夹头需要三个螺母压配合。还需要将三个轴承放入臂中,并使用螺钉全部连接。

在这里插入图片描述
在这里插入图片描述

第 10 步:组装手臂(将手臂连接到底座)

机械臂的组装(将机械臂连接到底座)
机械臂的组装(将机械臂连接到底座)
机械臂已准备好连接到底座。首先将支撑臂连接到底座上。这个螺母是从底座背面伸出的那个。然后使用轴承和螺钉将臂连接到底座上的中心支柱上。

在这里插入图片描述
在这里插入图片描述

第 11 步:组装手臂(插入伺服)

伺服器滑入底座侧面的孔中,然后小心地将伺服臂拨动到相应的伺服喇叭中。这部分需要一些耐心。然后将舵机插入支架并安装底座。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 12 步:最终的想法和改进

组装后,手臂非常坚固和坚硬。所有的关节都很容易移动,不会在哪里移动。原来的 7 英寸伸展我的是 14 英寸。我添加了一些钢腿作为镇流器,看起来很卑鄙。有些人把它比作一只邪恶的蜘蛛。我没有像原来的那样的主动抓手,因为我使用的是电磁铁。如果我要使用夹爪,我想我会改变设计以拥有更多的手指或使用 DIY 通用机器人夹爪。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

伺服故障:
我拍的舵机来自 adafruit.com,并且有一根额外的线用于位置反馈。我打算将它们用于学习臂(用手移动它,它会记录运动并回放)。但是舵机的强度不足以在完全伸展时移动手臂。所以我从我放在零件清单上的 polou.com 切换到了一些高扭矩的。他们还没有进来,所以我很高兴看到他们会怎么做。权衡是他们没有反馈,所以对我来说没有学习手臂。我想如果我从中心梁上去除一些塑料,原来的伺服系统可能会工作。

如果我构建另一个,我会做出更改:
底座限制了总行程,因此我会去掉正面和背面。
更新所有零件的半径,使其匹配(外观)
可互换的夹头,用于固定不同的夹持器
模型中内置的 Wire 管理
看台上更强壮的支腿
LED 只是因为
通过添加孔(三角形)减轻所有部件的重量
某种电线保持器,以防止电线在旋转时扭曲
我认为使用带齿轮的步进电机可以增加承重能力并在底座上提供 360 度旋转。(我不知道这可能是个坏主意)
还有更多小的变化我还没有发现。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目开源代码

/* MeArm Wii Classic game pad - York Hackspace May 2014
 * Using inverse kinematics with Wii Classic game controller
 * First stick moves claw forwards, backwards, left and right
 * Second stick moves claw up and down (and left and right again).
 * Shoulder buttons or A & B buttons open and close the claw.
 * The home button returns to starting point.
 * 
 * Uses MeArm library by York Hack Space from https://github.com/yorkhackspace/meArm
 * Uses ClassicController library from https://github.com/wayneandlayne/Video-Game-Shield
 *
 * Connect the Wii Classic gamepad via a breakout such as
 * http://www.phenoptix.com/collections/breakout-board/products/wiichuck-a-wii-nunchuck-break-out-board-by-seeed-studio
 *
 * Pins:
 * Arduino    WiiChuck   Base   Shoulder  Elbow    Claw
 *    GND         -     Brown     Brown   Brown     Brown
 *     5V         +       Red       Red     Red       Red
 *     A4         d
 *     A5         c
 *     11              Yellow
 *     10                        Yellow
 *      9                                Yellow
 *      6                                          Yellow
 */
#include "MeArm.h"
#include <Servo.h>
#include <ClassicController.h>

int basePin = 11;
int shoulderPin = 10;
int elbowPin = 9;
int clawPin = 6;

MeArm arm;
ClassicController cc;

void setup() {
  arm.begin(basePin, shoulderPin, elbowPin, clawPin);
  cc.begin(WII_PLAYER_1);
  cc.joy_left_set_scaled_min_max(0, 99, 0, 99);
  cc.joy_right_set_scaled_min_max(0, 99, 0, 99);
}

void loop() {
  cc.update();

  float dx = 0;
  float dy = 0;
  float dz = 0;
  float dg = 0;
  if (cc.joy_left_left() || cc.joy_right_left())
    dx = -5.0;
  else if (cc.joy_left_right() || cc.joy_right_right())
    dx = 5.0;
  if (cc.joy_left_up())
    dy = 5.0;
  else if (cc.joy_left_down())
    dy = -5.0;
  if (cc.joy_right_up())
    dz = 5.0;
  else if (cc.joy_right_down())
    dz = -5.0;
  if (cc.button_b() || cc.shoulder_left() > 16)
    arm.openClaw();
  else if (cc.button_a() || cc.shoulder_right() > 16)
    arm.closeClaw();
  if (cc.button_home()) {
    arm.moveToXYZ(0, 100, 50);
  } 
  if (!(dx == 0 && dy == 0 && dz == 0))
    arm.snapToXYZ(arm.getX() + dx, arm.getY() + dy, arm.getZ() + dz);
  
  delay(50);
}

相关驱动库及开源代码

在这里插入图片描述

MeArm Arduino
MeArm Robotics 的逆向运动学控制库 MeArm with Arduino。

MeArm 有四个迷你舵机 - 一个用于爪子,一个用于旋转底座、肩关节和肘关节。但是,当你对将爪子放置在正常笛卡尔 (x, y, z) 坐标中的位置更感兴趣时,用伺服角度指定事物并不是很方便。

该库解决了发送到伺服系统所需的角度,以满足给定位置,从而使编码变得更加简单。

坐标以毫米为单位从底座旋转中心开始测量。初始“起始”位置位于 (0, 100, 50),即底座前方 100 毫米,离地 50 毫米。

此库存在各种其他版本:

带有 Adafruit PWM 驱动板的 Arduino
带有 Adafruit PWM 驱动板的 Raspberry Pi
Beaglebone 黑色
MeArm 使用逆运动学移动

用法

#include "MeArm.h"
#include <Servo.h>

MeArm arm;

void setup() {
  arm.begin(11, 10, 9, 6);
  arm.openClaw();
}

void loop() {
  //Go up and left to grab something
  arm.moveToXYZ(-80,100,140); 
  arm.closeClaw();
  //Go down, forward and right to drop it
  arm.moveToXYZ(70,200,10);
  arm.openClaw();
  //Back to start position
  arm.moveToXYZ(0,100,50);
}

包括三个使用示例:

IKTest 遵循以笛卡尔坐标定义的预编程路径
JoystickIK 使用两个模拟拇指摇杆在笛卡尔空间中引导爪子
MeArm_Wii_Classic 使用通过 I2C 连接的 Wii Classic 游戏手柄来引导爪子
安装
将此存储库克隆到本地计算机,并将其作为“MeArm”放在 Arduino 库文件夹中。

MeArm 对象的类方法
void begin(int pinBase, int pinShoulder, int pinElbow, int pinClaw) - 用于驱动舵机的四个支持 PWM 的引脚。在对 MeArm 实例进行任何其他调用之前,必须在 setup() 中调用 Begin。
void openClaw() - 打开爪子,放开它手里的任何东西
void closeClaw() - 关闭爪子,可能会在这样做时抓住并持有某物
void moveToXYZ(float x, float y, float z) - 从当前点沿直线移动到请求的位置
void snapToXYZ(float x, float y, float z) - 将伺服角度设置为立即到达请求的点,而不关心手臂摆动通过什么路径到达那里 - 比 moveTo 更快但更难预测
void moveTo(float theta, float r, float z) - 从当前点沿直线移动到圆柱形极坐标中请求的位置
void snapTo(float theta, float r, float z) - 将伺服角度设置为立即到达请求点,而不关心机械臂摆动通过什么路径到达那里 - 比圆柱形极坐标中的 moveTo 更快但更难预测
bool isReachable() - 如果机械臂理论上可以到达该点,则返回 true
float getX() - 当前 x 坐标
float getY() - 当前 y 坐标
float getZ() - 当前 z 坐标
void end() - 禁用所有伺服电机。如果以后想再次继续使用 MeArm,请再次调用 begin()。

附录:

项目链接:https://www.instructables.com/My-meArm-Bigger-Stronger-Longer/
项目作者:Jazzmyn (爵士明)
3D打印文件:https://www.thingiverse.com/thing:499654
开源代码:https://github.com/phenoptix/meArm-1/tree/master

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值