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

【全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 Codeby Dejan, www.HowToMechatronics.comLibraries:IBusBM: https://github.com/bmellink/IBusBM
*/#include <IBusBM.h>#define motorLeft_IN1 4
#define motorLeft_IN2 5
#define motorRight_IN1 6
#define motorRight_IN2 7IBusBM 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 iBUSIBusSensor.begin(Serial2, IBUSBM_NOTIMER); // Sensor iBUSIBusSensor.addSensor(IBUSS_INTV); // add voltage sensor// DC motors control - set them stationary// Left trackdigitalWrite(motorLeft_IN1, LOW);   // PWM valuedigitalWrite(motorLeft_IN2, LOW); // Forward// Right trackdigitalWrite(motorRight_IN1, LOW);   // PWM valuedigitalWrite(motorRight_IN2, LOW); // ForwarddigitalWrite(46, LOW);digitalWrite(47, LOW);digitalWrite(48, LOW);}void loop() {// Reading the data comming from the RC TransmitterIBus.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 - Headlightsch8 = IBus.readChannel(8); // ch8 - High beam// convert the incoming date into suitable PWM valuesteeringValue = 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 somotorSpeed = 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 valuerightMotorSpeed = 70 + motorSpeed - steeringValue;leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);// if PWM is lower than 72, set PWM value to 0if (leftMotorSpeed < 72) {leftMotorSpeed = 0;}if (rightMotorSpeed < 72) {rightMotorSpeed = 0;}// if right joystick goes up > move forwardif (ch1 > 1510 && ch1 < 2000) {analogWrite(motorLeft_IN1, leftMotorSpeed);  // PWM inputdigitalWrite(motorLeft_IN2, LOW); // Direction - ForwardanalogWrite(motorRight_IN1, rightMotorSpeed);  // PWM inputdigitalWrite(motorRight_IN2, LOW); // Direction - Forward}// if right joystick goes down > move backwardif (ch1 > 1000 && ch1 < 1420) {digitalWrite(motorLeft_IN1, LOW);  // Direction - BackwardanalogWrite(motorLeft_IN2, leftMotorSpeed); // PWM inputdigitalWrite(motorRight_IN1, LOW);  // Direction - BackwardanalogWrite(motorRight_IN2, rightMotorSpeed); // PWM input}// if right joystick is in the middle, don't moveif (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 inputdigitalWrite(motorLeft_IN2, LOW); // Direction - ForwardanalogWrite(motorRight_IN1, rightMotorSpeed);  // PWM inputdigitalWrite(motorRight_IN2, LOW); // Direction - Forward}}// LEDs control// Headlights and Taillights LEDs controlif (ch6 > 1500) {digitalWrite(47, HIGH);digitalWrite(48, HIGH);}else {digitalWrite(47, LOW);digitalWrite(48, LOW);}// High beam LEDs controlif (ch8 == 1500) {digitalWrite(46, HIGH);}// If rocker switch in position 3 (2ooo value) - flasing with the high beam LEDselse 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 voltageint 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 transmitterIBusSensor.loop();IBusSensor.setSensorMeasurement(1, voltage * 100);
}

Code language: Arduino (arduino)
代码概述
因此,使用 IBusBM 库,我们从 RC 发射器读取传入数据。

// Reading the data comming from the RC TransmitterIBus.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 - Headlightsch8 = 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 valuesteeringValue = 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 somotorSpeed = 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 valuerightMotorSpeed = 70 + motorSpeed - steeringValue;leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);

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

// if right joystick goes up > move forwardif (ch1 > 1510 && ch1 < 2000) {analogWrite(motorLeft_IN1, leftMotorSpeed);  // PWM inputdigitalWrite(motorLeft_IN2, LOW); // Direction - ForwardanalogWrite(motorRight_IN1, rightMotorSpeed);  // PWM inputdigitalWrite(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.rhkb.cn/news/149283.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小谈设计模式(20)—组合模式

小谈设计模式&#xff08;20&#xff09;—组合模式 专栏介绍专栏地址专栏介绍 组合模式对象类型叶节点组合节点 核心思想应用场景123 结构图结构图分析 Java语言实现首先&#xff0c;我们需要定义一个抽象的组件类 Component&#xff0c;它包含了组合节点和叶节点的公共操作&a…

在2023年使用Unity2021从Built-in升级到Urp可行么

因为最近在做WEbgl平台&#xff0c;所以某些不可抗力原因&#xff0c;需要使用Unity2021开发&#xff0c;又由于不可明说原因&#xff0c;想用Urp&#xff0c;怎么办&#xff1f; 目录 创建RenderAsset 关联Asset 暴力转换&#xff08;Menu->Edit&#xff09; 单个文件…

editplus如何批量删除包含某个字符串的行

在EditPlus中批量删除包含某个字符串的行的步骤如下&#xff1a; 打开EditPlus并打开您想要编辑的文件。 按下 Ctrl H 打开查找/替换对话框。 在 “Find what” 框中&#xff0c;输入您想要删除的字符串的正则表达式。例如&#xff0c;如果您想要删除包含 “testtest” 的行…

企业征信牌照9月末盘点:149家机构荣获上榜,西藏等地机构待批

孟凡富 笔者根据7年帮助20多家企业征信机构备案的经验&#xff0c;以及对于征信政策和知识的深入了解&#xff0c;整理了这篇文章。 2013年1月21日&#xff0c;国务院颁布了《征信业管理条例》&#xff08;国务院令第631号&#xff09;&#xff0c;自2013年3月15日起开始实施。…

【C语言】字符函数和字符串函数(1)

#国庆发生的那些事儿# 大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解字符函数和字符串函数&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1.本章重点2. strlen2.1函数介绍2.2 模拟实现 3. strcpy3…

节日灯饰灯串灯出口欧洲CE认证办理

灯串&#xff08;灯带&#xff09;&#xff0c;这个产品的形状就象一根带子一样&#xff0c;再加上产品的主要原件就是LED&#xff0c;因此叫做灯串或者灯带。2022年&#xff0c;我国灯具及相关配件产品出口总额超过460亿美元。其中北美是最大的出口市场。其次是欧洲市场&#…

Firefly-LLaMA2-Chinese - 开源中文LLaMA2大模型

文章目录 关于模型列表 & 数据列表训练细节增量预训练 & 指令微调数据格式 & 数据处理逻辑增量预训练指令微调模型推理权重合并模型推理部署关于 github : https://github.com/yangjianxin1/Firefly-LLaMA2-Chinese本项目与Firefly一脉相承,专注于低资源增量预训练…

RDP协议流程详解(二)Basic Settings Exchange 阶段

RDP连接建立过程&#xff0c;在Connection Initiation后&#xff0c;RDP客户端和服务端将进行双方基础配置信息交换&#xff0c;也就是basic settings exchange阶段。在此阶段&#xff0c;将包含两条消息Client MCS Connect Initial PDU和Server MCS Connect Response PDU&…

mysql-sql执行流程

sql执行流程 MYSQL 中的执行流程 MYSQL 中的执行流程 sql 执行流程如下图

网络爬虫中的代理技术:socks5代理和HTTP代理

网络爬虫是一种非常重要的数据采集工具&#xff0c;但是在进行网络爬虫时&#xff0c;我们经常会遇到一些限制&#xff0c;比如IP封锁、反爬虫机制等&#xff0c;这些限制会影响我们的数据采集效果。为了解决这些问题&#xff0c;我们可以使用代理服务器&#xff0c;其中socks5…

travel总结:

目录 1、前期准备&#xff1a; 2、项目期间&#xff1a; &#xff08;1&#xff09;注册功能的实现&#xff1a; 1、前端&#xff1a; 1、表单数据的校验&#xff1a;(js) 2、使用ajax完成表单提交 3、注册成功跳转页面 2、web&#xff1a; 1、获取表单数据、封装数据 2、调…

字符串函数的模拟实现

引言&#xff1a;对于字符串来说&#xff0c;我们通常想要对其完成各种各样的目的&#xff0c;不管是排序还是查找都是最普遍的功能&#xff0c;而我们的C语言中也包含着一系列函数是为了实现对字符串的一些功能&#xff0c;今天我们就来介绍他们。 strlen函数&#xff1a; 求字…

正则表达式 Regular Expression学习

该文章内容为以下视频的学习笔记&#xff1a; 10分钟快速掌握正则表达式_哔哩哔哩_bilibili正则表达式在线测试工具&#xff1a;https://regex101.com/, 视频播放量 441829、弹幕量 1076、点赞数 19330、投硬币枚数 13662、收藏人数 26242、转发人数 2768, 视频作者 奇乐编程学…

【visual studio 小技巧】项目属性->生成->事件

需求 我们有时会用到一些dll&#xff0c;需要把这些dll和我们生成的exe放到一起&#xff0c;一般我们是手动自己copy&#xff0c; 这样发布的时候&#xff0c;有时会忘记拷贝这个dll&#xff0c;导致程序运行出错。学会这个小技巧&#xff0c;就能实现自动copy&#xff0c;非…

AWS Lambda Golang HelloWorld 快速入门

操作步骤 以下测试基于 WSL2 Ubuntu 22.04 环境 # 下载最新 golang wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz# 解压 tar -C ~/.local/ -xzf go1.21.1.linux-amd64.tar.gz# 配置环境变量 PATH echo export PATH$PATH:~/.local/go/bin >> ~/.bashrc …

Ubuntu20配置Mysql常用操作

文章目录 版权声明ubuntu更换软件源Ubuntu设置静态ipUbuntu防火墙ubuntu安装ssh服务Ubuntu安装vmtoolsUbuntu安装mysql5.7Ubuntu安装mysql8.0Ubuntu卸载mysql 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程…

STM32复习笔记(四):看门狗

目录 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;IWDG IWDG的CUBEMX工程配置 IWDG相关函数&#xff08;非常少&#xff0c;所以直接贴上来&#xff09;&#xff1a; &#xff08;三&#xff09;WWDG &#xff08;一&#xff09;简介 看门狗分为独立看门…

【图像处理GIU】图像分割(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

PLL锁相环倍频原理

晶振8MHz&#xff0c;但是处理器输入可以达到72MHz&#xff0c;是因为PLL锁相环提供了72MHz。 锁相环由PD&#xff08;鉴相器&#xff09;、LP&#xff08;滤波器&#xff09;、VCO&#xff08;压控振荡器&#xff09;组成。 处理器获得的72MHz并非晶振提供&#xff0c;而是锁…

mysql八股

1、请你说说mysql索引&#xff0c;以及它们的好处和坏处 检索效率、存储资源、索引 索引就像指向表行的指针&#xff0c;是一个允许查询操作快速确定哪些行符合WHERE子句中的条件&#xff0c;并检索到这些行的其他列值的数据结构索引主要有普通索引、唯一索引、主键索引、外键…