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

news2024/12/23 9:51:02

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

  • 1. 概述
  • 2. 设计机器人平台
  • 3. 3D 模型和 STL 下载文件
    • 3.1 3D打印
    • 3.2 组装 3D 打印坦克 – 履带式机器人平台
    • 3.3 零件清单
  • 4. 机器人平台电路图
    • 4.1 定制电路板设计
    • 4.2 完成 3D 打印储罐组件
  • 5. 机器人平台编程
  • 6. 测试3D打印机器人 - 跟踪机器人平台

在这里插入图片描述

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

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

1. 概述

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

全3D可操纵履带式机器人平台 - DIY遥控坦克.jpg

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

3D打印RC坦克与酷炫的LED照明

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

3D打印遥控坦克上的科视Christie悬挂系统

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

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

Flysky RC发射器,用于控制3D打印机器人平台(坦克)

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

3D可打印RC坦克 - 履带式机器人平台

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

2. 设计机器人平台

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

DIY坦克 - 履带式机器人平台3D模型

— 赞助部分 —

“值得注意的是,这些行业领先的专业级设计工具现在可供所有制造商使用,价格非常低,每年只需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减震器及其尺寸。

3D打印储罐 - 悬挂系统

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

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

油箱悬挂机构

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

SOLIDWORKS 中不同悬挂机构的力反作用力模拟

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

RC油箱动态履带张紧系统

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

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

3D可打印轨道的链轮设计

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

链轮节距 - 11mm

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

轨道连杆间距 - 11mm

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

3D 可打印轨道,无需支持

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

跟踪链接连接

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

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

使用 SOLIDWORKS 链组件图案功能制作坦克履带
然后,我将此草图与 SOLIDWORKS 链构件阵列特征结合使用,以生成沿该轮廓的所有轨迹链接。

履带式机器人平台3D模型

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

3D 模型和 STL 下载文件

为了组装整个机器人平台,我们需要各种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打印零件,我们应该使用切片软件中的水平扩展和孔水平扩展设置。如果我们默认保留这些设置,则打印的外部尺寸以及孔通常小于原始模型。

用于尺寸精确的 3D 打印的水平扩展设置

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

在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 螺栓将两个底座连接在一起

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

将 M3 螺纹嵌件安装到 3D 打印底座中

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

减震器支架

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

在这里插入图片描述

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

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

为机器人平台轨道悬挂系统安装减震器

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

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

组装坦克车轮

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

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

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

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

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

组装3D打印科视Christie悬架系统

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

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

惰轮总成

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

RC油箱动态履带张紧机构

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

安装3D打印油箱惰轮

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

用于 12D 打印坦克的 3V 直流电机 - 履带式机器人平台

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

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

将 M3 螺纹嵌件安装到轴耦合器中

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

使用 M3 沉头螺钉将轴耦合器固定到电机轴上

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

组装3D打印储罐链轮

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

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

用于连续轨道系统的3D打印轨道链接

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

2mm黄铜焊条作为装配轨道链节的销钉

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

用2mm黄铜焊条将轨道连接在一起

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

在这里插入图片描述

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

为遥控坦克和机器人平台组装3D打印轨道

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

更换 RC 减震器上的弹簧

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

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

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

3D打印的坦克和履带,科视Christie悬挂系统运行

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

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

组装RC坦克的侧板 - 履带式机器人平台

我们在一些支架和 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的质量很棒, 一切都与设计中的完全相同.

用于与Arduino MEGA Atmega 3兼容的2560D打印RC坦克的定制PCB
组装 PCB 非常简单,因为所有东西都贴有标签.我首先在PCB底部焊接引脚接头,用于ATmega2560连接,然后继续焊接顶部。为方便起见,我们应该首先焊接较小的组件,如电阻器和晶体管,然后焊接较大的组件,如 LED 和电源连接器。

完成 3D 打印储罐组件

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

4.2 完成 3D 打印储罐组件

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

Arduino兼容3D打印坦克 - 基于ATmega 2560微控制器的电路板

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

串联焊接三个 5mm LED

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

安装遥控坦克指示灯

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

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

用于储罐的远光灯 LED

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

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

使用杜邦连接器连接 LED

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

DRV8871直流驱动电机,用于驱动油箱的12V直流电机 - 机器人平台

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

用于控制6D打印坦克的Flysky FS-i3发射器 - 履带式机器人平台

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

Flysky fs-ia6b接收器,用于通过ibus通信进行3D打印坦克

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

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

使用 3S 锂聚合物电池为水箱供电 - 使用拨动开关打开和关闭

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

使用微调器将 LM350 稳压器电压输出调节至 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。

全地形3D打印履带式机器人平台 - TANK

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

参考文献:Fully 3D Printed TANK – Tracked Robot Platform
视频地址:https://www.youtube.com/watch?v=q3XNYwNZ97w

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

侯捷 C++ STL标准库和泛型编程【C++学习笔记】 超详细 万字笔记总结 笔记合集

关于STL这部分&#xff0c;原课程将其分为了四部分&#xff0c;我做笔记时&#xff0c;会将其整合&#xff0c;使其更具有整体性 文章目录 1 STL概述1.1 头文件名称1.2 STL基础介绍1.3 typename 2 OOP vs. GP3 容器3.1 容器结构分类3.2 序列式容器3.2.1 array测试深度探索 3.2.…

Python3操作MongoDb7最新版创建文档及CRUD基本操作

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 MongoDB 操作手册----文档…

Zookeeper经典应用场景实战(一)

文章目录 1、Zookeeper Java客户端实战1.1、 Zookeeper 原生Java客户端使用1.2、 Curator开源客户端使用 2、 Zookeeper在分布式命名服务中的实战2.1、 分布式API目录2.2、 分布式节点的命名2.3、 分布式的ID生成器 3、Zookeeper实现分布式队列3.1、 设计思路3.2、 使用Apache …

电脑桌面黑屏,但程序还可以正常运行

问题&#xff1a;桌面黑屏&#xff0c;程序可以正常运行操作 解决方法: 1.Ctrl Alt Del 2.点击 【任务管理器】-->【文件F】-->【运行新任务N】 3.输入 explorer.exe 回车

Docker 镜像的缓存特性

Author&#xff1a;rab 目录 前言一、构建缓存二、Pull 缓存总结 前言 首先我们要清楚&#xff0c;Docker 的镜像结构是分层的&#xff0c;镜像本身是只读的&#xff08;不管任何一层&#xff09;&#xff0c;当我们基于某镜像运行一个容器时&#xff0c;会有一个新的可写层被…

Spring的AOP开发-注解方式开发AOP

基于注解配置的AOP 注解方式AOP的基本使用 Spring的AOP也提供了注解方式配置&#xff0c;使用相应的注解替代之前的xml配置&#xff0c;xml配置AOP时&#xff0c;我们主要配置了三部分&#xff1a;目标类被Spring容器管理&#xff08;注解使用Service&#xff09;、通知类被S…

图像和视频上传平台Share Me

本文完成于 6 月&#xff0c;所以反代中&#xff0c;域名演示还是使用的 laosu.ml&#xff0c;不过版本并没有什么变化&#xff1b; 什么是 Share Me &#xff1f; Share Me 是使用 Next.js 和 PocketBase 的自托管图像和视频上传平台&#xff0c;具有丰富的嵌入支持和 API&…

基于Java的高校宿舍管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【C++】unordered_map和unordered_set

哈希表 1. unordered_map1.1 概念1.2 常见接口 2. unordered_set2.1 概念2.1 常见接口 3. 底层实现3.1 哈希3.2 哈希函数3.3 闭散列和开散列3.3.1 闭散列3.3.2 开散列 3.4 模拟实现3.4.1 改造哈希桶3.4.2 模拟实现unordered_set3.4.3 模拟实现unordered_map 在C11中&#xff0c…

Promise, async, await 学习

异步编程简介&#xff1a; 介绍&#xff1a;异步编程是一种编程范式&#xff0c;旨在提高程序的性能和响应能力。该模型允许程序在执行某些任务时&#xff0c;不必等待这些任务完成就可以进行下一步操作&#xff0c;从而提高了程序的效率。 作用&#xff1a;异步编程通常用于…

IPT2602协议-USB 快速充电端口控制器

产品描述&#xff1a; IPT2602是一款USB端口快速充电协议控制芯片。IPT2602智能识别多种快速充电协议&#xff0c;对手机等受电设备进行快速充电。IPT2602根据受电设备发送的电压请求能够精确的调整VBUS输出电压&#xff0c;从而实现快速充电。 IPT2602在调整5V输出电压前会自动…

10.5 认识XEDParse汇编引擎

XEDParse 是一款开源的x86指令编码库&#xff0c;该库用于将MASM语法的汇编指令级转换为对等的机器码&#xff0c;并以XED格式输出&#xff0c;目前该库支持x86、x64平台下的汇编编码&#xff0c;XEDParse的特点是高效、准确、易于使用&#xff0c;它可以良好地处理各种类型的指…

[硬件基础]-快速了解RS232串行通信

快速了解RS232串行通信 文章目录 快速了解RS232串行通信1、概述2、什么是串行数据通信&#xff1f;3、什么是RS232&#xff1f;4、RS232应用5、RS232如何工作&#xff1f;6、RS232协议基础6.1 电压与逻辑表示6.2 数据编码6.3 起始位和停止位6.4 奇偶校验位6.5 波特率6.5 RS232电…

掌握 SwiftUI 中的 ScrollView

文章目录 前言scrollTransition 修饰符ScrollTransitionPhase弹性动画总结 前言 SwiftUI 框架的第五个版本引入了许多与 ScrollView 相关的新 API&#xff0c;使其比以前更强大。本周将开始介绍 ScrollView 在 SwiftUI 中的新功能系列文章&#xff0c;首先我们将讨论滚动过渡。…

【LeetCode: 918. 环形子数组的最大和 | 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

关联规则挖掘(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

【全方位带你配置yolo开发环境】快速上手yolov5

本文用于记录yolo开发环境的配置&#xff0c;以及我在配置中出现的各种问题&#xff0c;以供大伙参考。&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识…

阿里云服务器ECS详细介绍_云主机_服务器托管_弹性计算

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网分享阿…

使用css制作3D盒子,目的是把盒子并列制作成3D货架

1. 首先看效果&#xff08;第一个五颜六色的是透明多个面&#xff0c;第2-3都是只有3个面是我实际需要的&#xff0c;右边的有3个并列的正方体与3个并列的长方体&#xff09;&#xff1a; 长方体与正方体&#xff0c;所有代码&#xff1a; <!DOCTYPE html> <html lan…

汽车网络安全--安全芯片应用场景解析

​在聊汽车网络安全时,最先想到的就是使用芯片内置HSM,比如说英飞凌TC2xx系列的HSM、瑞萨RH850的ICU、NXP的HSE等等;实际上除了内置HSM,还有外置HSM(通过UART、SPI等通信)、安全存储芯片等等。而这些芯片统称为安全芯片。 安全芯片的主要作用是为整个系统建立起一个可信的…