【全3D打印坦克——基于Arduino履带式机器人】

简介: 【全3D打印坦克——基于Arduino履带式机器人】

在教程中,我将向您展示我如何构建超酷的无线电控制履带式车辆,机器人平台或坦克,应有尽有。我从头开始设计这个东西,完全可以3D打印,所以你可以轻松地打印所有东西并自己构建一个。

您可以观看以下视频或阅读下面的书面教程。

1. 概述

我这个项目的目标是制作一个多功能平台,可以穿越多种类型的地形,并可用于各种应用。最好的办法是使用连续轨道系统。履带将车辆的重量分布在更大的表面积上,从而提供出色的抓地力并降低卡在松软的地面、泥泞或雪地中的几率。


机器人平台在泥泞中行驶得很好,可惜我没有机会在雪地上测试它。我希望我能在我未来的一些视频中安装机械臂或炮塔。在平台顶部使用机械臂,我们可以执行各种任务,例如抓取和移动某些东西,或者我们可以将相机放在上面并使用它进行目视检查等等。或者例如,我们可以制作一个可以发射 NERF 飞镖的炮塔,结合我已经安装在这个平台上的简单但很酷的 LED 照明,我们可以玩得很开心。

至于悬架,我采用了科视Christie悬架系统,该系统已在坦克中使用多年。通过这种设置,每个车轮都有一个单独的悬架或一个弹簧和一个减震器。


这使得车辆能够在不平坦的地形上平稳运行并爬上障碍物,同时保持轨道和地形之间的良好接触表面。

为了控制3D打印坦克,我使用了一种廉价的商用RC发射器,它可以向平台发送命令。

在平台上,我有一个合适的RC接收器,它可以接收命令并将其发送到微控制器。该平台的大脑是基于Atmega2560微控制器的电路板,为了轻松地将所有内容连接在一起,我制作了一个定制的PCB,可以简单地连接到电路板顶部。


尽管如此,现在系好安全带,我将引导您完成构建此机器人平台的整个过程,从设计,3D打印,组装,连接电子元件和微控制器编程开始。

2. 设计机器人平台

我使用 SOLIDWORKS 设计了这个机器人平台,SOLIDWORKS 也是本视频的赞助商。

— 赞助部分 —

“值得注意的是,这些行业领先的专业级设计工具现在可供所有制造商使用,价格非常低,每年只需99美元或每月9.99美元。没错,3DEXPERIENCE

SOLIDWORKS FOR Makers非常适合任何学习交易,制作DIY项目等的人。

此优惠包括 3DEXPERIENCE SOLIDWORKS PROFESSIONAL,这是该优惠中最受欢迎的 CAD 工具,可在您的 PC

本地运行。您可以使用 3D体验平台将文件存储在本地或云中。

“xDesign”,基于浏览器的CAD,您可以将其与3DEXPERIENCE

SOLIDWORKS一起使用,也可以单独使用。它非常适合随时随地在任何设备上进行建模。

“xShape”,基于浏览器的自由曲面CAD,易于在任何设备上进行曲面建模。

““Visualize Connected”,轻松创建照片质量的图像、动画、交互式 Web 内容等,以打动您的观众。

““NC Shop Floor Programmer”,用于 3 轴铣削和线切割的智能加工策略的 CAM,易于使用的软件包。

单击下面的链接,您将获得特别的 20% 折扣——因此您可以立即开始使用最好的!非常感谢 SOLIDWORKS 赞助和支持这样的教育内容。"

立即购买: http://www.solidworks.com/makers20

了解更多: https://discover.solidworks.com/3dexperience-solidworks-makers

— 回到主题 —

让我解释一下我是如何想到机器人平台设计的。设计的第一个输入参数是我拥有的这些RC减震器及其尺寸。

我有其中的 8 个,这意味着每侧将有 4 个车轮,当以 41 毫米行程延伸时,它们的长度为 11 毫米。根据这些尺寸,我想为车轮获得更大的垂直行程,因此我想出了这个机制,使我的车轮垂直行程为16mm。

我的意思是,如果我将减震器和方向轮连杆的接头移近方向,我可以获得更大的行驶距离,但那样我会失去弹簧的力量,或者我需要更坚固的弹簧来正确固定平台。

我用 SOLIDWORKS 做了一些简单的模拟,以检查不同机构对弹簧的反作用力,因此我选择了这种机制,它也提供了良好的整体紧凑性。

如果我们仔细观察前轮,我们可以看到它是如何与惰轮连接的,惰轮提供了履带的动态张力。当车轮上升时,履带圆周变小,因此张力松动。

通过这里的这种连接,当发生这种情况时,惰轮被向前推以张紧轨道。通过这种连接,我们还可以通过调整螺栓和距离螺母来静态张紧轨道。

在背面,我们有由三部分组成的链轮。它有轴耦合器和链轮的左右部分通过三个 M3 螺栓连接在一起。

链轮上的关键尺寸是节距,因为它必须与轨道的节距相匹配。这里的节距是 11 毫米,我选择链轮有 12 个齿,这使链轮的节距直径约为 42 毫米。

11mm节距实际上是由轨道链节的设计定义的。我对轨道链接的目标是尽可能紧凑,只需一个额外的零件或销钉即可与下一个链接连接,同时足够坚固,可以用3D打印机制作。

最重要的是,在3D打印时,我想避免为零件使用任何支撑材料,我实际上通过这种设计实现了这一目标。

为了将履带链节相互连接,我计划使用直径为2mm的销钉,因此我将一侧的尺寸定为2mm,以紧密配合,另一侧为2.3mm,以松散配合,以便轨道链接可以自由旋转。

链轮齿进入这个开口,其中轨道连杆的销以8.8mm的直径形成,而链轮直径为9.1mm,以便松配合正常工作。

一旦我定义了所有这些零件,我就在装配环境中画了一个草图,一个围绕链轮、惰轮和车轮的封闭轮廓。


然后,我将此草图与 SOLIDWORKS 链构件阵列特征结合使用,以生成沿该轮廓的所有轨迹链接。

我设计了机器人平台的其余部分,所有东西都连接的底座,容纳一些LED和顶盖的侧面,我认为这是一种现代而酷炫的风格。由于该平台的整体尺寸比大多数3D打印机大,大约400mm乘300mm,我将所有部件分为两部分,因此我们几乎可以在任何3D打印机上打印它们。它们通过一些支架和 M3 螺栓连接在一起。

为了组装整个机器人平台,我们需要各种M3和M4螺栓和螺母,以及一些螺纹插件和轴承。您可以在下面的装配部分找到此项目所需的所有组件的完整列表。

3. 3D 模型和 STL 下载文件

当然,在这里你也可以下载这个3D模型以及3D打印所需的STL文件。

SOLIDWORKS 文件:

图标 3D 可打印履带式机器人平台 - SOLIDWORKS
文件

1 文件 9.45 MB 步骤文件:

图标 3D可打印履带式机器人平台 -
STEP文件

1 文件 803.38 KB STL 文件:

图标 3D可打印跟踪机器人平台 -
STL文件

1 文件 2.14 MB

3.1 3D打印

3D打印时,为了获得尺寸精确的3D打印零件,我们应该使用切片软件中的水平扩展和孔水平扩展设置。如果我们默认保留这些设置,则打印的外部尺寸以及孔通常小于原始模型。

我将水平扩展设置为0.02mm,将孔水平扩展设置为0.04mm。当然,您应该进行一些测试打印,以查看哪些值将在3D打印机上获得最佳效果。我们需要零件的精确尺寸,以便轻松地将它们相互组装,并与轴承和螺栓等其他组件组装在一起。

在3D打印轨道链接时,我使用木筏作为构建板粘附,因为它们与床板的接触面有点小,如果打印机上的床附着力不是那么好,则可能无法很好地粘合。特别是在打印大批量时,使用木筏更安全。

3.2 组装 3D 打印坦克 – 履带式机器人平台

好的,这里我有机器人平台的所有3D打印部件。老实说,打印所有内容花费了相当长的时间。

例如,每个基本部分的打印时间约为 22 小时,所有 156 个轨道链接的打印时间约为 96 小时。大约我们需要 200 小时来打印所有内容。幸运的是,我有两台3D打印机,所以我花了大约100个小时。

3.3 零件清单

以下是组装此3D打印坦克-机器人平台项目所需的组件列表。电子元件的列表可以在本文的电路图部分找到。

8x 遥控减震器

8x 弹簧

40x 滚珠轴承 624 – 4x13x5mm

M3螺纹嵌件

M3和M4螺栓和螺母

螺栓: M4x40mm– 8个;M4x35毫米 – 2个;M4x30毫米 – 8个;M4x25毫米 – 2 件;M3x25毫米 – 16 件;M3x20毫米 –8个;M3x16毫米 – 10个;M3x12/14毫米 – 32 件;M3x10毫米 – 8个;M3x8毫米 – 14 个

螺母: M4 –25 个 ;M3 – 30个

垫圈: M4 – 30个

我从组装底座开始。就像我说的,它由两个部分组成,它们将使用一些支架和 M3 螺栓和螺母相互连接。

为了固定侧支架,我使用的是 M3,5 毫米长的螺纹嵌件,插入底座的侧壁。这样,墙的外部将是干净的,没有螺栓和螺母,以便轨道可以在附近运行。

然后,我用一些 M3 螺栓将用于将减震器固定到位的支架。

接下来,我将轴承安装在车轮臂将枢转的位置。轴承的外径为 13 毫米,内径为 4 毫米,每个车轮需要两个轴承。

作为销钉,我使用的是长度为 4 毫米的 M30 螺栓。我们需要在轴承和臂之间放置一个垫圈,并用自锁螺母从内部将它们固定到位。我们应该小心我们把这个关节收紧多少,不要太紧,但也不能太松。

接下来,我们可以安装减震器。我们使用其包装随附的 M1.4 螺栓将其固定到位。

我没有那把小螺丝刀,所以我用钳子固定螺栓。到目前为止,该机制似乎运行良好。

接下来,我们可以将车轮安装在手臂的底端。车轮由两部分组成,以避免使用支撑材料打印。也许它可以作为一个整体打印出来,但我没有尝试它是如何出来的。

通过这种方式,我们必须连接两个部分,我决定为此目的使用 2 毫米钢棒,与我将用于将轨道连杆连接在一起的钢棒相同。这实际上是用于焊接的黄铜棒,它有点软,只需钳子即可轻松切割成尺寸。

我为每个车轮插入了三根长约 23 毫米的杆,然后在车轮的两侧安装了两个我以前使用的相同轴承。同样,和以前一样,我使用 M4 螺栓、垫圈和自锁螺母将车轮固定到位。

车轮应该能够自由旋转,同时在轴上没有任何间隙。

现在我们只需要对其他车轮重复此过程即可。至于前轮,我们有一个略有不同的臂,它有一个杠杆,可以为轨道提供动态张力,但安装是相同的。

接下来,我们可以组装惰轮的机构。它由三个3D打印部件,一些螺栓和一个距离螺母组成。

在将第一个连杆固定到位之前,我们应该在背面添加一个 M4 自锁螺母,稍后我们将在其上安装惰轮。

我使用相同的 2 毫米铜棒作为这些接头的引脚。现在,在惰轮侧的第二个连杆处,我们可以借助 M15 螺栓固定一个 3 毫米长的 M3 距离螺母。

在另一侧,我们放置一个 20 毫米长的 M3 螺栓和一个螺母,它将进入远处的螺母。通过此设置,现在我们可以调整惰轮和车轮臂之间的距离,因此我们可以静态和动态地张紧轨道。然后我们可以简单地用 M4 螺栓将惰轮固定到位,因此我们完成了这个张力系统以及整个悬架系统。

好的,接下来我们可以组装链轮,为此,首先我们需要安装电机。我将基础平台设计为接受直径为37mm的电机,中心轴或偏轴。

我们可以安装任何 RPM 范围为 12 到 20 RPM 的 1000V 直流电机,当然这取决于机器人平台的应用,但我们稍后将在视频中讨论这一点。电机用六个 M3 螺栓固定到位。

为了将链轮连接到电机轴上,首先我们需要准备轴耦合器,或在其中安装一些螺纹插件。

然后我们可以将耦合器插入到位并用 M3 沉头螺钉固定。

然后插入链轮的两个部分并使用三个 M3 螺栓固定。

因此,我们已经完成了平台传动系统,现在是时候享受组装轨道的乐趣了。没错,我发现组装赛道很有趣。

以下是对轨道链接的仔细观察,从中我们可以看到它们是多么简单和干净。

它们可以从3D打印机立即使用,因为我们在3D打印它们时没有使用任何支持。我们只需要 2mm 引脚来连接它们。就像我已经说过的,我们可以轻松地从 2mm 黄铜焊条中获得它们。

链节上的外孔紧密贴合,因此我们需要使用一些力来插入它们,但这样可以确保它们不会脱落。链节上的内孔是松散配合的,可确保履带链节之间的自由旋转。

现在,我们只需要泡一杯茶或咖啡,然后享受组装几个小时的乐趣。一旦你连接了其中的几个,你就会意识到乐趣,看看赛道有多酷。我们总共需要 78 个轨道链接来组装单个轨道。就杆长度而言,每条轨道需要大约 3.5 米,因为每根销应该长约 43 毫米。

准备好轨道后,我们可以简单地将其缠绕在链轮、车轮和惰轮上,并在现场用另一个 2 毫米的销子闭合环。我们可以在这里注意到,在 78 个履带链接中,履带的张力恰到好处,尽管最后一个车轮稍微向上移动。


之所以如此,是因为弹簧不够强壮。我们可以通过调整减震器上的这个螺母来稍微调整弹簧张力,尽管这还不够。因此,我决定将减震器随附的原始弹簧更改为更坚固的弹簧。

更换弹簧非常容易,因为我们只需要拧下减震器的一端,插入更强的弹簧,然后再次拧紧杆。我的弹簧比原来的要宽一点,所以我不得不在底部使用M4垫圈。现在,这个弹簧有足够的力在安装带有 78 个连杆的履带时将车轮固定到位。

我最终更换了所有减震器的弹簧,因为我意识到它们的强度不足以承受整个平台的重量。这完成了平台的整个驱动系统,我认为结果非常好。

如果需要,我们现在可以使用惰轮上的距离螺母来调节履带张力。当然,让轨道有点松动是可以的,以便它正常工作。履带松动的顶部部分支撑在减震器支架上。


我将电机连接到电源以检查其工作方式。这对我来说似乎是完美的。看到你用这么多3D打印部件创造的东西真的是一种很棒的感觉。

显然,我们必须重复相同的程序来组装另一侧。完成此操作后,机器人平台已完成80%。接下来,我将安装侧面板,这些侧面板主要用于视觉外观。

我们在一些支架和 M3 螺栓的帮助下将它们固定到位。在顶部转到将包围平台的盖子。对于这个视频,我这样设计它只是为了视觉外观。


就像我之前提到的,在我未来的一些视频中,我计划在这个平台上添加一个机械臂或一个炮塔,这意味着我将不得不适当地设计顶部。

您可能还喜欢

DIY火星毅力号火星车复制品 - 基于Arduino的项目

4. 机器人平台电路图

现在我们可以继续这个项目的电子设备了。就像我说的,我将使用基于 ATmega2560 微控制器的电路板。

您可以从以下链接获取此项目所需的组件:

2x 12V 直流电机 – 50 至 500 RPM

DRV8871直流电机驱动器

Arduino MEGA

3S锂聚合物电池

XT60连接器 飞天遥控发射器

为了驱动两个电机,我将使用两个DRV8871直流电机驱动器,它们支持PWM控制和高达3.6A的峰值电流。直流电机的工作电压为 12V,我们将使用 3S 锂聚合物电池为所有电池供电,并提供大约 12V。我还包括一个 5V 稳压器 LM350 IC,以便为将来的其他用途提供专用的 5V 电源,例如,用于将伺服电机连接到它。在本视频中,我们将使用此 5V 为 RC 接收器和一些 LED 供电。

我用于这个项目的LED是白色和红色的简单5mm LED。我将它们排列如下:

在后部,我们每侧有两个红色 LED 作为尾灯,在前部每侧有三个白色 LED 作为大灯。此外,顶盖上有六个LED作为远光灯。为了使这些LED正确点亮,我们需要一个合适的电路,其中包括用于限制电流的电阻器。我将它们的并联和串联组合在一起。

例如,对于前大灯,我使用两条 12V 的平行线为 6 个 LED 供电,左右两侧各 3 个,它们串联连接。根据LED的正向电压和电流,我计算了每条线路所需的电阻值,在这种情况下为150欧姆。为了激活LED,我使用了一些额定电流为200mA的通用NPN晶体管。

最后,我制作了一个简单的分压器,我将用于监控电池电压。简单地说,来自电池的12V电压降至5V以下,因此它们可以进入微控制器的模拟输入。在程序中,我们可以将值转换回实际电压值,并将其从RC接收器发送到RC发射器,在那里我们可以在显示屏上看到该值。

4.1 定制电路板设计

我实际上最终有很多连接, 所以为了避免一团糟,我不得不为这个项目设计一个定制的 PCB.

该PCB将与基于ATmega2560微控制器的电路板兼容,直接安装在其顶部。

我包括一个 3.3V 稳压器和一个NRF24L01收发器模块的连接,以防我们想使用该模块控制平台。此外,我还包括一个 12V 电源轨,以及 5V 和 6V 电源轨,并带有数字引脚连接,用于将伺服电机连接到它们。6V 电源轨可由一个外部降压转换器供电。

我从PCBWay订购了PCB。在这里,我们可以简单地上传 Gerber 文件, 选择我们 PCB 的属性, 并以合理的价格订购.

我没有更改任何默认属性,除了我选择为白色的 PCB 颜色.您可以从 PCBWay 项目共享社区找到并下载 Gerber,您也可以通过该社区直接订购 PCB.

另外,您可以在此处下载 Gerber 文件:

图标

3D可打印履带式机器人平台Gerber

1 文件 123.02 KB

然而,几天后,PCB到达了。PCB的质量很棒, 一切都与设计中的完全相同.

组装 PCB 非常简单,因为所有东西都贴有标签.我首先在PCB底部焊接引脚接头,用于ATmega2560连接,然后继续焊接顶部。为方便起见,我们应该首先焊接较小的组件,如电阻器和晶体管,然后焊接较大的组件,如 LED 和电源连接器。

我为所有连接都使用了引脚接头,因为它可以灵活地进行更改,如果某些内容无法正常工作。我没有焊接外部降压转换器及其电源轨的连接器,以及3.3V稳压器,因为我现在无论如何都不打算使用它们。我真的很喜欢这个PCB的漂亮和干净,这种白色.

4.2 完成 3D 打印储罐组件

好的,首先,我们用一些M3螺栓将微控制器板固定到位,然后在它上面是定制的PCB。

现在是时候安装 LED 了。它们将在这些可容纳 5mm LED 的支架的帮助下安装在侧板上。如原理图中所述,我们应该将每行LED串联焊接。

阴极是黑线,阳极是红线。我们将这些电线穿过侧板上通向 PCB 的小开口.

LED 支架部分旨在与侧面板紧密贴合,因此一旦插入到位,我们就会获得漂亮干净的外观。

远光灯 LED 直接放置在顶前盖上。

为了连接 LED,我在 PCB 上焊接了 XH2.54mm 杜邦公连接器,因此我必须在电线上安装合适的杜邦母连接器。我们需要那个钱包的压接钳,但在制作这个项目时,我没有随身携带。

我用普通的小钳子来完成这项工作,连接很好。每条LED线都应进入PCB上标记的相应连接器。

至于电机,我没有合适的连接器,所以我将电线直接焊接到它们上。电机连接进入DRV8871驱动板,然后进入PCB。

对于无线电通信,我使用的是FLYSKY RC发射器和接收器,它们非常实惠且工作出色。

为了将接收器连接到微控制器,我们可以使用跳线。接收器通过I-BUS和串行端口与微控制器通信,因此我们只需要三根电线,VCC,GND和信号引脚。

如果我们想将数据从接收器发送回发射器,在我们的例子中,为了监控电池电压,我们还需要将接收器的传感器I-BUS连接到另一个串行端口。

最后,我们可以连接锂聚合物电池。根据电池的不同,我们需要一个合适的连接器。它进入 12V 连接器,紧挨着它,我们有一个 ON/OFF 连接器,它将连接一个开关,用于打开和关闭平台的电源。

请注意,在为电路板供电之前,我们应首先将 RC 接收器从电源中移除,并使用微调器将 LM350 IC 的可变电压调节至 5V。

现在我们只需要把顶盖放到位,我们就完成了这个项目。

5. 机器人平台编程

现在我们必须对3D打印坦克/机器人平台进行编程。这是这个机器人平台的Arduino代码。

/*
      3D Printed Tracked Robot Platform - Arduino Code
      by Dejan, www.HowToMechatronics.com
     Libraries:
     IBusBM: https://github.com/bmellink/IBusBM
*/
#include <IBusBM.h>
#define motorLeft_IN1 4
#define motorLeft_IN2 5
#define motorRight_IN1 6
#define motorRight_IN2 7
IBusBM IBus;
IBusBM IBusSensor;
int ch0, ch1, ch6, ch8 = 0;
int motorSpeed, steeringValue, leftMotorSpeed, rightMotorSpeed = 0;
int ledBlinkPeriod = 50;
int isOn = LOW;
unsigned long time_now = 0;
void setup() {
  Serial.begin(115200);
  IBus.begin(Serial1, IBUSBM_NOTIMER); // Servo iBUS
  IBusSensor.begin(Serial2, IBUSBM_NOTIMER); // Sensor iBUS
  IBusSensor.addSensor(IBUSS_INTV); // add voltage sensor
  // DC motors control - set them stationary
  // Left track
  digitalWrite(motorLeft_IN1, LOW);   // PWM value
  digitalWrite(motorLeft_IN2, LOW); // Forward
  // Right track
  digitalWrite(motorRight_IN1, LOW);   // PWM value
  digitalWrite(motorRight_IN2, LOW); // Forward
  digitalWrite(46, LOW);
  digitalWrite(47, LOW);
  digitalWrite(48, LOW);
}
void loop() {
  // Reading the data comming from the RC Transmitter
  IBus.loop();
  // ch0 - left and right; ch1 - forward and backward;
  ch0 = IBus.readChannel(0); // ch0 - left and right;
  ch1 = IBus.readChannel(1); // ch1 - forward and backward;
  ch6 = IBus.readChannel(6); // ch6 - Headlights
  ch8 = IBus.readChannel(8); // ch8 - High beam
  // convert the incoming date into suitable PWM value
  steeringValue = map(ch0, 1000, 2000, -185, 185); // 0 to 185 range because then I add +70 in order to avoid low PWM values as to motors won't start if so
  motorSpeed = map(ch1, 1000, 2000, -185, 185);
  motorSpeed = abs(motorSpeed);
  leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70 + (0-185) + (0 - 185 ) =  70 - 255 so this range from 70 to 255 is used as PWM value
  rightMotorSpeed = 70 + motorSpeed - steeringValue;
  leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255
  rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
  // if PWM is lower than 72, set PWM value to 0
  if (leftMotorSpeed < 72) {
    leftMotorSpeed = 0;
  }
  if (rightMotorSpeed < 72) {
    rightMotorSpeed = 0;
  }
  // if right joystick goes up > move forward
  if (ch1 > 1510 && ch1 < 2000) {
    analogWrite(motorLeft_IN1, leftMotorSpeed);  // PWM input
    digitalWrite(motorLeft_IN2, LOW); // Direction - Forward
    analogWrite(motorRight_IN1, rightMotorSpeed);  // PWM input
    digitalWrite(motorRight_IN2, LOW); // Direction - Forward
  }
  // if right joystick goes down > move backward
  if (ch1 > 1000 && ch1 < 1420) {
    digitalWrite(motorLeft_IN1, LOW);  // Direction - Backward
    analogWrite(motorLeft_IN2, leftMotorSpeed); // PWM input
    digitalWrite(motorRight_IN1, LOW);  // Direction - Backward
    analogWrite(motorRight_IN2, rightMotorSpeed); // PWM input
  }
  // if right joystick is in the middle, don't move
  if (ch1 > 1420 && ch1 < 1520) {
    if (leftMotorSpeed < 75 && rightMotorSpeed < 75) {
      digitalWrite(motorLeft_IN1, LOW);
      digitalWrite(motorLeft_IN2, LOW);
      digitalWrite(motorRight_IN1, LOW);
      digitalWrite(motorRight_IN2, LOW);
    }
    // if right joystick move just left or right, without going up or down, move the tank left or right (only 1 motor move)
    else {
      analogWrite(motorLeft_IN1, leftMotorSpeed);  // PWM input
      digitalWrite(motorLeft_IN2, LOW); // Direction - Forward
      analogWrite(motorRight_IN1, rightMotorSpeed);  // PWM input
      digitalWrite(motorRight_IN2, LOW); // Direction - Forward
    }
  }
  // LEDs control
  // Headlights and Taillights LEDs control
  if (ch6 > 1500) {
    digitalWrite(47, HIGH);
    digitalWrite(48, HIGH);
  }
  else {
    digitalWrite(47, LOW);
    digitalWrite(48, LOW);
  }
  // High beam LEDs control
  if (ch8 == 1500) {
    digitalWrite(46, HIGH);
  }
  // If rocker switch in position 3 (2ooo value) - flasing with the high beam LEDs
  else if (ch8 == 2000) {
    if (millis() >= time_now + ledBlinkPeriod) {
      time_now += ledBlinkPeriod;
      if (isOn == HIGH) {
        isOn = LOW;
      }
      else {
        isOn = HIGH;
      }
      digitalWrite(46, isOn);
    }
  }
  else {
    digitalWrite(46, LOW);
  }
  // Monitor the battery voltage
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.00 / 1023.00) * 3.02; // Convert the reading values from 5v to suitable 12V
  // Send battery voltage value to transmitter
  IBusSensor.loop();
  IBusSensor.setSensorMeasurement(1, voltage * 100);
}

Code language: Arduino (arduino)

代码概述

因此,使用 IBusBM 库,我们从 RC 发射器读取传入数据。

// Reading the data comming from the RC Transmitter
  IBus.loop();
  // ch0 - left and right; ch1 - forward and backward;
  ch0 = IBus.readChannel(0); // ch0 - left and right;
  ch1 = IBus.readChannel(1); // ch1 - forward and backward;
  ch6 = IBus.readChannel(6); // ch6 - Headlights
  ch8 = IBus.readChannel(8); // ch8 - High beam

Code language: Arduino (arduino)

右操纵杆、通道 0 和 1 用于控制平台的运动,两个摇臂开关通道 6 和 8 用于控制 LED。

我们将输入的数据转换为适合直流电机PWM控制的值,从0到255。

// convert the incoming date into suitable PWM value
  steeringValue = map(ch0, 1000, 2000, -185, 185); // 0 to 185 range because then I add +70 in order to avoid low PWM values as to motors won't start if so
  motorSpeed = map(ch1, 1000, 2000, -185, 185);
  motorSpeed = abs(motorSpeed);
  leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70 + (0-185) + (0 - 185 ) =  70 - 255 so this range from 70 to 255 is used as PWM value
  rightMotorSpeed = 70 + motorSpeed - steeringValue;
  leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255
  rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);

Code language: Arduino (arduino)

我们使用 analogWrite() 函数适当地将 PWM 值发送给驱动器和电机。

// if right joystick goes up > move forward
  if (ch1 > 1510 && ch1 < 2000) {
    analogWrite(motorLeft_IN1, leftMotorSpeed);  // PWM input
    digitalWrite(motorLeft_IN2, LOW); // Direction - Forward
    analogWrite(motorRight_IN1, rightMotorSpeed);  // PWM input
    digitalWrite(motorRight_IN2, LOW); // Direction - Forward
  }

Code language: Arduino (arduino)

总体而言,代码并不复杂,因为机器人平台本身没有复杂的功能。

6. 测试3D打印机器人 - 跟踪机器人平台

上传代码后,我们可以启动机器人平台和RC发射器进行测试。在发射器显示屏上,我们可以注意到锂聚合物电池电压,以及接收器和发射器电压。

我们有它。使用正确的操纵杆,我们可以控制平台的运动。使用左侧摇臂开关,我们控制大灯和尾灯 LED,使用右侧 3 向摇臂开关控制远光灯 LED。远光灯LED有两种模式,始终亮起和闪烁模式。

我们可以在这里注意到,我安装的电机对于这个平台来说实际上有点功率不足。

我们可以看到,操纵杆几乎位于顶部,轨道才能开始移动。另外,我可以用手非常轻松地停止赛道。悬架系统和履带本身会对电机产生很大的张力和阻力。这些电机为888RPM,在速度方面很好,但它们是较小的电机,额定电流略低于500mA。

所以,我用我拥有的其他更大的电机替换了它们,但实际上我得到了几乎相同的结果。虽然这些是更强大的电机,但它们的减速较小,或者它们的转速更高,为 1280,所以我得到了相同的结果。

实际上,它们并没有那么糟糕。机器人平台与它们一起运行良好。

老实说,驾驶这个东西真的很有趣,尤其是当 LED 闪烁并产生倦怠或甜甜圈时。

然而,这种乐趣并没有持续那么久,因为一旦我把它带到外面,它很快就停止了工作。问题是动力不足的电机,没错,还有轨道连杆的设计。污垢很容易堆积在链轮齿所在的位置。

因此,我重新设计了它们,使其在另一侧有一个开口,以便污垢可以通过它们。我还使链轮变小了一点,将其偏移了0.2毫米,以便在它和轨道之间有一个更松散的配合。

我用这些更新重新组装了所有东西,平台现在能够在外面行驶。尽管动力不足的电机再次成为一个问题。平台不时堆积,无法上坡。因此,我的建议是获得不超过 500 RPM 的电机,并且至少具有 1A 或 2A 额定电流的电机更强大。

我实际上尝试了具有更强电机的平台。它们只有 20 RPM,对于玩乐和做甜甜圈来说显然太慢了,但现在的平台就像一个真正的坦克。它实际上可以去任何地方。


20 RPM 电机的功率足以爬上任何障碍物。它们真的很慢,但也许它们适用于某些特定的应用程序。我的建议是,如果我们需要较慢的速度来使用大约 50 RPM 的电机,而对于更快的速度,大约 500 RPM。

我希望您喜欢这个视频并学到一些新东西。请随时在下面的评论部分提出任何问题,不要忘记订阅未来的更新并检查我的Arduino项目集合

参考文献:Fully 3D Printed TANK – Tracked Robot Platform

视频地址:https://www.youtube.com/watch?v=q3XNYwNZ97w


目录
相关文章
|
分布式计算 Spark JavaScript
带你读《JavaScript机器人: 用Raspberry Pi、Arduino和BeagleBone构建NodeBots Make:JavaScript Robotics》之三:节点船
本书将向你展示用Raspberry Pi、Arduino和BeagleBone构建NodeBots Make以及如何使用它来编写你所制作的东西。让使用JavaScript控制硬件变得简单而有趣。
|
机器人 JavaScript 前端开发
带你读《JavaScript机器人: 用Raspberry Pi、Arduino和BeagleBone构建NodeBots Make:JavaScript Robotics》之二:TypeBot
本书将向你展示用Raspberry Pi、Arduino和BeagleBone构建NodeBots Make以及如何使用它来编写你所制作的东西。让使用JavaScript控制硬件变得简单而有趣。
|
机器人 JavaScript 前端开发
带你读《JavaScript机器人: 用Raspberry Pi、Arduino和BeagleBone构建NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造机器人
本书将向你展示用Raspberry Pi、Arduino和BeagleBone构建NodeBots Make以及如何使用它来编写你所制作的东西。让使用JavaScript控制硬件变得简单而有趣。
|
传感器 机器人 定位技术
《Arduino开发实战指南:机器人卷》一导读
单片机中各种复杂的寄存器曾让众多的学习者望而生畏——要完成某项功能需要耗费大量的时间去熟悉单片机的底层。Arduino的诞生,改变了这一局面。Arduino将各种寄存器封装起来,并提供了易用的接口,极其简洁的界面,C语言编程方式,强大的第三方函数库支持,这些功能赋予其强大的生命力。
2374 0

热门文章

最新文章