《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