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


    在这里插入图片描述

    在教程中,我将向您展示我如何构建超酷的无线电控制履带式车辆,机器人平台或坦克,应有尽有。我从头开始设计这个东西,完全可以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 
    
    #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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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

  • 相关阅读:
    安装Linux系统对硬件的要求
    Polygon ID架构
    C#如何批量创建类
    CS SD NAND在STM32精英V2开发板的测试-是时候将TF卡换为SD NAND了
    一篇永久摆脱Mysql时区错误问题,idea数据库可视化插件配置
    2023国庆自驾游:山东
    自托管书签管理器LinkAce
    uboot移植之mx6ull_alientek_nand.h文件详解
    通过 vue-cli 创建一个 vue3 的项目
    景区AR虚拟三维场景沉浸式体验成为新兴的营销手段
  • 原文地址:https://blog.csdn.net/vor234/article/details/133604141