具有学习能力的自动化机械臂





历史与演变




左侧图片是这款机械臂两年前的版本控制面板的图片。它从未正常工作过,但我确实制造了它,所以我觉得值得把这个项目的一些过去的细节放进去。
1.1 我在使用 V1.0 时遇到的问题:
- 我遇到的第一个问题是,我之前在手臂上使用的SG90 塑料齿轮经常抖动。手臂经常开始振动,有时还会剧烈摇晃,因为电机无法承受手臂的重量(我后来才意识到这一点)。
- 另一个问题是控制面板,即16 x 2 字母数字显示屏对我的应用来说不够好。它的可视空间非常小,无法显示所有需要的信息。
- 按钮面板也很糟糕,因为我使用了从旧笔记本电脑中回收的按钮面板,但效果不太好。
- 我知道当时这不是一个经过精心计划的项目,但我已经做了很多改变,现在已经获得了相当令人满意的结果!
1.2 发生了什么变化:
- 我首先将伺服电机从塑料齿轮换成金属齿轮(或)从SG90换成MG90S。这无疑提高了稳定性和性能。金属齿轮电机不会抖动,而且齿轮在恶劣条件下也不会断裂,而塑料齿轮电机则会断裂!
- 然后,我所做的一项重大改变是去掉按钮面板,用更大的触摸屏显示器代替显示器,该显示器可以作为控制手臂的输入和输出!
- 另外,之前我使用了一个原型 PCB 板,并在其上以 Arduino Mega 屏蔽的形式自行创建了一个电路,这导致使用了很多电线,看起来非常混乱,如上图所示!我现在用JLCPCB定制设计的 PCB替换了它!
- 如左图所示,控制面板盒由纸板制成。这次,为了提高项目质量,我改用3D 打印控制面板盒!我在Tinkercad中设计了它,并从IAmRapid打印了它!
这些几乎就是我从第一个版本过渡到第二个版本时必须完成的所有重大更改!找出错误是一项相当繁琐的工作,我确保以最佳方式解决它们!
工作算法

机械臂有两种模式:手动模式;自动模式
在手动模式下,可以使用控制面板上的两个操纵杆直接控制手臂。
在自动模式下,您有两个子选项 - 您可以录制希望机械臂执行的任务的一系列动作,也可以播放已录制的序列。按下录制按钮后,您可以使用操纵杆操纵机械臂并保存检查点或保存点,机械臂稍后将在播放模式下重复这些检查点或保存点。
导航将通过TFT 触摸显示屏进行,我制作了一个整洁的响应式 GUI ,以确保机械臂的平稳运行!
收集所需材料






这些是该项目所需的组件、工具和软件:
3.1 所需组件:
- Arduino Mega
- 2 个操纵杆模块
- 2.4 英寸 TFT 触摸屏
- 4 x MG90S 金属齿轮伺服电机
- 跳线
- 公头和母头排针(用于 PCB)
- 2 x LED - 任意颜色(用于 PCB)
3.2 工具(可选):
3.3 软件:
- Arduino IDE
- Autodesk Tinkercad(或)任何其他 3D CAD 软件
- Autodesk Eagle(或)任何其他原理图和 PCB CAD 软件
我购买任何电子元件时总是首选Quartz Components !
收集所有必需的东西并继续下一步!
建造机械臂





我们来到了构建手臂本身的部分。
4.1 为什么选择 EEZYbotARM?
在这个项目中,我们只关心手臂的功能和功能背后的逻辑!我们的目标是让机械臂学习任务,然后以类似人类的方式重复这些任务!手臂的形状和设计实际上并不重要,因此为了节省这部分时间,我决定使用已经可用的开源机械臂 EEZYbotARM。它设计得相当不错,非常适合我们的项目。
4.2 建造手臂:
这EEZYbotARM 的 .stl 文件可在 Thingiverse 上找到,还有详细的手臂制作教程!这些都是打印和组装手臂的非常好的资源!
构建完手臂后,继续下一步!
定制PCB




我们的项目不需要大的原理图,因为我们只需要将伺服器、操纵杆和显示器连接到 Arduino Mega 开发板。
5.1 为什么选择定制PCB:
显示器可以直接插入,但其他两个不能。此外,Arduino 最初只有 2 到 3 个 GND 和 VCC 端口,而我们的项目中使用了多个 I/O 设备,因此设计自定义 PCB 可以节省大量电线,使项目更容易构建,外观也更好!
5.2 如何定制PCB:
因此,我在Eagle中设计了一个 PCB,然后将Gerber 文件上传到JLCPCB。他们提供 2 层 PCB 2 美元/5 件和 4 层 PCB 5 美元/5 件:https://jlcpcb.com。PCB大约 5 天就送到了我这里,这真是太神奇了,而且 PCB 的质量也非常好。
5.3 哪种定制PCB:
我订购了白色 PCB,因为这不需要额外付费,而且我觉得这是一个非常巧妙的改变,与我们一直使用的普通绿色 PCB 不同。PCB 有一个地方可以直接插入所有伺服电机,还有一个地方可以直接插入来自操纵杆的跳线带。
PCB 被设计为 Arduino Mega Shield,可以使用一些底部公头引脚直接插入 Arduino Mega 电路板,并使用顶部公头引脚连接到 I/O 设备。我还添加了两个 LED,其中一个是电源 LED,另一个是简单的输出 LED,可以根据需要进行控制(PCB 将位于主控制面板盒内,因此这并不重要)。
5.4 定制PCB结论:
在这个项目中,设计 PCB 并不是强制性的要求,电线可以直接连接,这对大多数人来说可能没问题。我只是想更上一层楼,于是想出了这一切。您也可以将电机、操纵杆和显示器直接连接到 Arduino Mega!虽然这可能需要更多的电线、更多的时间和相对更多的努力,但这是可能的!
控制面板盒

这是我们需要设计和打印机械臂控制面板盒的部分。
6.1 设计:
我在Tinkercad中设计了控制面板盒,这是一款出色的 3D CAD 软件,一直是我的首选!
如果你看过我教程中“历史与革命”部分的图片,你可能已经看到了控制面板应该是什么样子。控制面板有一个用于显示屏的切口和两个用于操纵杆的圆形切口。它还在最前面有一个放置机械臂的地方。出于某种原因,那天我设计这个的时候感觉很有艺术感,所以你可以清楚地看到结果!😜
6.2 打印控制面板:
设计完控制面板后,我下载了.stl 文件,然后将其上传到IAmRapid,并获得了一个相当实惠的即时报价!然后我订购了零件,它们在 2 天内就送到了我家门口(在印度)。正如您在上图中看到的,打印质量非常令人满意。
设计和打印控制面板盒后,让我们继续前进!
放置组件(在外壳内)




现在我们需要将项目的组件放入控制面板框中。
7.1 放置操纵杆模块:
我没有使用两个单独的操纵杆,而是使用了一个带有两个操纵杆的模块。我在外壳上制作了一个带有四个螺丝孔的高架底座。我们只需使用四个螺丝将操纵杆模块拧到带有孔的底座上即可!
7.2 放置 Arduino Mega + Custom Shield PCB 连接:
我为 Arduino Mega 的两个端口做了两个切口。机械臂将使用直流适配器供电,因此一个端口用于供电,另一个端口是用于上传和更改 Arduino Mega 上的代码的 USB 端口!此外,如果您已经制作了定制 PCB 屏蔽罩,请将其安装到 Arduino 板上!
7.3 将显示屏安装到顶盖上:
现在,我们需要将显示屏连接到顶盖的底部。您可以使用任何东西来做到这一点。我用了一些热胶来做同样的事情 :)
7.4 将机械臂置于前方:
我在控制面板前面的机械臂底座形状上做了一个小印模,控制面板盒中有一个延伸的底板,与盒子相连。我们需要将机械臂放在那个印模上。
完成所有这些后,继续下一步!
控制面板接线




现在,我们需要连接之前放置在控制面板中的组件。这可以通过几个非常简单的步骤完成。由于我已经设计了自定义 PCB,因此这一步对我来说相当容易,因为我只需将操纵杆模块和电机等组件插入 PCB 上的相应端口即可。
我们需要将三个组件连接到 PCB:
- 伺服电机(机械臂)
- 操纵杆模块
- 触摸显示屏
如果您选择不使用 PCB,请按照以下说明将各种组件(上面列出)连接到 PCB(Arduino Mega Shield)。
操纵杆:
X1:Arduino Mega 的 A8
Y1:Arduino Mega 的 A9
X2:Arduino Mega 的 A10
Y2:Arduino Mega 的 A11
GND:Arduino Mega 的 GND
VCC:Arduino Mega的+5V
触摸显示:
将其插入 Arduino 开发板(或)连接所有引脚,就像将它们分别插入开发板一样。
伺服电机:
S1 OUT:Arduino Mega 的 22
S2 OUT:Arduino Mega 的 24
S3 OUT:Arduino Mega 的 26
S4 OUT:Arduino Mega 的 28
GND:Arduino Mega 的 GND
VCC:Arduino Mega的+5V
注意:控制面板盒前面有一个小的矩形开口,以便机械臂伺服电机的电线可以进入里面。
完成接线后,用一些螺丝盖上控制面板盒的顶盖。然后继续下一步!
编码决战




现在到了项目最重要的部分——编写机械臂实际工作的代码!我已将代码附在下面,供您随时使用/参考。
代码长达几千行,如果只是浏览一下,就会觉得太复杂了,难以理解。因此,我在必要的地方添加了注释,以提供足够的背景信息,帮助您更好地理解代码。
完成这一步后,继续前进!
机械臂代码:
https://github.com/aaravgarg/Automated-Robotic-Arm-That-Learns
PS 如果你喜欢这个项目,请在 github 上留个start:)
故障排除

如果您在这里,那么我假设您已经构建了该项目,并且它要么成功了,这很好,要么失败了,这也很好,因为您不仅知道如何构建某些东西,而且还知道如何不构建它,这种学习非常有用。
12.1 它不起作用😲:
- 10.1.1 显示屏空白: 您的显示屏可能已烧坏,或者代码中可能存在错误(例如,您可能忘记初始化显示屏)。如果一切正常,甚至有可能以错误的方式将显示屏连接到 Arduino 板/PCB(如果您没有将其直接连接到 Arduino 板),因为有大量引脚需要相应连接。
- 10.1.2 手动模式错误:机械臂伺服电机的接线可能存在问题,或者伺服电机本身存在内部错误/问题,需要完全更换相关的伺服电机。
- 10.1.3 操纵杆方向相反:这种情况是由于相应操纵杆模块的极性反转而发生的,只需反转和纠正极性即可解决。
- 10.1.4 自动模式错误:如果伺服电机工作正常,自动模式工作中的任何差异都只是机械臂代码错误造成的。
12.2 成功了🎉🎊:
干得好,伙计。你克服了所有障碍,终于来到这里,亲自触摸胜利,这真是太棒了。这里还有一个名为“我做到了”的部分。在那里见我。
谢谢 :)











