3D打印Arduino 四轴飞行器

doitoo1
转载
发布时间: 2025-06-10 21:34:33 | 阅读数 0收藏数 0评论数 0
封面
在网上搜索了构建四轴飞行器的廉价方法并且没有找到可行的解决方案之后,我决定自己制造一个四轴飞行器。我的模型试图创造一种可以依靠自己的电源运行、悬停和稳定飞行的四轴飞行器。使用 Arduino Uno、陀螺仪/加速度传感器和一组有刷 RC 电机等组件。

准备工作:

材料:

材料名称
数量
备注
3.7 伏锂离子电池组
1+
ULN2003A 达林顿晶体管
1
建议购买可以处理更大负载的晶体管
0820 空心杯电机
4
Arduino Uno
1
三轴加速度计和陀螺仪突破 - MPU-6050
1

工具:

工具名称
数量
备注
剥线钳
1
无具体要求
钢丝钳
烙铁
焊锡丝
3D 打印机
1

背景

刷到贴子中的大多数朋友可能已经知道什么是四轴飞行器,但对于那些不知道的人来说,以下是它们是什么的简要说明:

四轴飞行器是具有四个臂的多旋翼直升机,每个臂的末端都有一个电机和一个螺旋桨。四轴飞行器在某些方面类似于直升机,尽管它们的升力和推力来自四个螺旋桨,而不仅仅是一个。此外,直升机有一个“俯仰”或尾桨,有助于稳定飞机,而四轴飞行器则没有。在四轴飞行器中,两个螺旋桨沿一个方向(顺时针)旋转,另外两个螺旋桨沿相反方向(逆时针)旋转,这使机器能够以稳定的编队悬停。由于这种稳定性,四轴飞行器被用于摄影和视频拍摄。此外,四轴飞行器和多旋翼飞机已用于灾害管理和恢复工作、警察行动、军事参与和农业应用。随着技术的进步和成本的降低,许多行业发现四轴飞行器可以为他们的问题提供创新的解决方案,并帮助他们降低成本。

现在,您已经对四轴飞行器有了更多的了解,让我们来看看我们如何制作四轴飞行器:

我设计过程的第一步是查看市场上的当前系统,以便了解我们需要哪些组件。经过一些研究,我发现大多数四轴飞行器模型都使用了集成电路、微型微控制器和无刷电机。为我的直升机构建电路似乎是一项可行的任务,我知道我想与 Arduino 合作,所以这个项目似乎绝对可以实现。主要问题在于电机。因为我在预算范围内工作,所以无刷电机是不可能的。这些电机的价格从每件 20 美元到 60 美元不等,为了运行,这些电机需要速度控制器。所以我只能选择有刷电机。因为我知道我想制造一个小型四轴飞行器,所以我决定研究具有低扭矩能力的电机。然后我找到了一个现有的四轴飞行器模式l,它使用了一组可行的电机。这些电机可以轻松提升高达 55 克的重量,这对于我的设计来说已经足够了。然后,我继续研究稳定这些电机的方法。稳定这些电机的一种方法是使用陀螺仪和加速度计。陀螺仪是一种利用地球引力来帮助确定方向的装置。它的设计包括一个称为转子的自由旋转的圆盘,安装在更大、更稳定的轮子中心的旋转轴上。当轴转动时,转子保持静止以指示中心引力,从而指示哪个方向是“向下的”。另一方面,加速度计是一种紧凑型设备,旨在测量非重力加速度。当它所集成的物体从静止状态变为任何速度时,加速度计旨在响应与此类运动相关的振动。它使用微小的晶体,当振动发生时,这些晶体会受到压力,并从该压力中产生电压以在任何加速度上产生读数。这两个组件对我们的设计至关重要,因为它们有助于决定哪些电机需要改变速度以进行调整和稳定。

2

3D 打印

我们设计过程的下一部分是创建四轴飞行器的实际框架。对于框架的选择材料,我们有很多选择,但经过快速考虑,我们选择了 3D 打印。我们以前有很好的机会使用 3D 打印,因此打印我们的框架似乎是很自然的。我们还选择这种培养基,因为它可以消除不必要的重量。为了设计框架,我们使用了计算机辅助设计程序 Solidworks。如果您还没有机会使用该软件,我强烈建议您去试用该软件的试用版。我们为您节省了时间和精力,并附上了以下 3D 打印的文件。这些文件保存为立体光固化成型技术文件(.stl 文件),并且可以使用 CAD 软件(如 Solidworks)在一定程度上进行编辑。如果您最终购买了更大的电机,您可以编辑下面的 motormount 文件并更改参数。如果这不起作用,我建议在此处阅读一些 Solidworks 的教程并开始新的设计。这个过程很简单,完成教程后应该很容易。

STL
FS15JUOHUYLSJQY.stl
12.39KB
STL
FYSJTL8HUYLSJQW.stl
18.44KB
STL
FG8GGJQHUYLSJQP.stl
482.21KB
3

I2C 加速度计-陀螺仪设置

注意:

1. 不要连接 5V。

2. 不要惊慌。

3. 使用此库: https://github.com/jrowberg/i2cdevlib

4. 在运行校准之前,不要焊接电路板。


我使用了 https://www.sparkfun.com/products/11028 SparkFun 的 MPU6050。此步骤将作为设置和使用 I2C 加速度计的通用背景和教程,因为大部分信息都分散在十几个论坛帖子中。

什么是 I2C?

您可能见过简单的板,例如 https://www.sparkfun.com/products/9269 具有 X、Y 和 Z 的单独模拟输出。这些是有道理的;每个 output 都与 Accelerometer 的一个轴相关。然后你看到一个 I2C 板,里面有点吓坏了。I2C 是一种通信标准,其中电路板使用数字逻辑脉冲而不是模拟输出来传输大量信息。MPU6050 有 6 个轴(3 个陀螺仪、3 个加速度计),所以如果它们是模拟的,它们会用完 Arduino 上的所有端口。最重要的是 Arduino 向电路板发送数字控制信号,并从输入引脚以数字方式读取信息。

布线:

我们特定MPU6050的接线如下。请注意,库代码假定这些是使用的输入。其他板也将类似。

VDD -> 3.3v

GND -> 接地

INT-> 数字 2

标准及校正实验所 -> A5

SDA -> A4

VIO -> 接地

通过电路板运行 5v 可以而且会破坏它,所以不要这样做。一些 MPU6050 板有稳压器可以保护它,但不值得冒险。如果您的板子有一个 AD0 引脚,则应接地。在我们的电路板上, VIO 端口连接到内部 AD0, 因此它用作 AD0 引脚。AD0/VIO 是接地还是 VDD 实际上决定了电路板与 Arduino 连接的内存地址(0x68 或 0x69)。如果这令人困惑,请不要担心,只需将其接地即可。如果您遇到问题,请尝试将 VIO/AD0 从地切换到 VDD。

法典:

现在事情变得有点棘手。希望你有一点编码/弄乱软件经验。如果你不知道,就慢慢来,去网页搜索任何你不知道的东西。那里有很多信息。我会尽量清楚,但我无法涵盖所有问题

将 MPU 连接到 Arduino 后,将其打开并上传此 I2C 扫描仪代码: http://playground.arduino.cc/Main/I2cScanner#。呃...

滚动到底部,将代码复制粘贴到一个空的 sketch 中并运行它。打开串行监视器 (Tools->Serial Monitor) 并确保您在端口 9600(左下角)上。这在代码中,但您无论如何都没有阅读它。

如果一切正常,它应该找到一个 I2C 设备并为您提供 0x68 或 0x69 的内存地址。把它写下来。如果出现错误,请检查接线。

现在,您将需要安装实际与加速计/陀螺仪通信的代码。市面上有很多东西,但我发现最有效的是 https://github.com/jrowberg/i2cdevlib。 单击“下载 Zip”,记住它的位置(可能是桌面),然后解压缩它。打开 Arduino IDE 程序。现在转到 sketch->import library -> add library。您应该将 I2Cdev 文件夹和 MPU6050 文件夹添加为库(它们位于文件夹中的 Arduino 下)。

安装后,您应该在 Arduino 中打开 MPU6050_DMP6 文件(位于 MPU6050 -> Examples) 文件。我建议你仔细阅读它(即使你不太了解代码),它有很好的注释,并且有一些选项可以选择如何从板子输出读数。如果你从扫描器中得到0x69,你需要取消注释代码顶部的一行(#includes 之后;只是傻地阅读注释),因为默认值是 0x68。程序现在应该编译了。

上传代码,打开串口(这次是 115200)并按照说明进行操作。恭喜,您应该从董事会获得工作读数。如果它一开始似乎漂移,请不要担心它需要大约 10 秒的静止才能停止。此外,偏航输出会漂移(一点),因为它没有参考系。该板使用加速度计来获取重力并找到“向下”,作为俯仰和滚动的参考。一些更高级的板包含一个指南针以供参考。

现在,在继续之前,您需要校准您的开发板。找到一个水平的表面,确保你的板子是平的,标签朝上。

然后,您应该运行顶部提供的这个方便的花花公子校准代码,这要归功于 Luis Ródenas。同样,默认值0x68,但您可以更改它。确保记下它给你的偏移值。您可以而且应该将这些用作 MPU6050_DMP6 代码(以及后来的 quadcopter 代码)中的偏移量。

您现在有一个工作且有用的加速度计/陀螺仪。现在,我建议您花一些时间弄乱 MPU6050_DMP6 代码并尝试不同的输出类型。


INO
FNO63CUHUYLSEOG.ino
7.64KB
4

构建和布线

上面讨论了接线。下一步是让 Arduino 控制电机。Arduino 本身只能输出少量的电流和电压,因此我们不是将电机直接连接到数字输出引脚,而是使用达林顿晶体管对来“放大”电压。如果您对晶体管了解不多,我们基本上将晶体管用作开/关开关,以直接来自电池的更大电流。

您应该从对电路进行面包板开始。对于此步骤,您将需要 Arduino、电机和达林顿晶体管对(以及面包板和电线)。接线可以在上面看到,但我会解释一下发生了什么。如图所示,将四个数字 PWM 输出(在 Arduino 上标有 ~)连接到达灵顿。然后输出进入电机,电机连接到您的电源。我会用 5v 电源开始测试,但 3-5v 电池应该可以得到最终结果。

确保您的 达林顿晶体管已接地,并且将 Arduino 上的接地连接到电源的接地。确保您的转子以正确的方向旋转(以获得升力),并使总扭矩为零。如果您将电机引线从 5v 切换到达林顿,电机将切换方向。一旦你把电机设置好了,转子就不需要改变方向,只需改变速度。

测试完所有内容并启动并运行加速度计后,您需要将所有内容焊接到 ProtoBoard 上。不要将 达林顿晶体管 直接焊接到电路板上,您需要使用插座以防需要更换达林顿晶体管。我们将加速度计直接焊接到电路板上并重新校准,但事后看来,我建议将加速度计平放在框架上,然后将其连接到电路板上。这应该有助于提高加速度计的准确性。

5

编码

我们已经编写了一些代码,这些代码应该可以稳定四轴飞行器并保持稳定。如果您想要更漂亮的移动和/或控制,请随意使用它作为基础。您应该首先安装此处提供的 Arduino PID 库: http://playground.arduino.cc/Code/PIDLibrary

我建议阅读编码技术的链接,但我会给出一个快速的概述。PID 类采用三个输入:设定点、测量和输出。输出应以某种方式改变测量值,而 PID 将改变输出以使测量值与设定点匹配。该库背后有很多花哨的数学运算,但它试图以一种值保持稳定的方式来实现。

在我们的稳定算法中,我们有两个 PID 控制器:一个用于俯仰,一个用于滚动。保证螺旋桨 1 和 2 之间的速度偏移量与螺旋桨 3 和 4 之间的偏移量相同。1,3 和 2,4 也是如此。然后,PID 会更改偏移量,以保持俯仰和滚动为零。

您还需要确保您知道 Arduino 上的哪个数字输出引脚连接到哪个电机,然后相应地更改代码。电机的标签如上所述。

INO
FWWXKQRHUYLSG3S.ino
14.97KB
6

建议

小型四轴飞行器的最大问题是金钱和重量。您可以考虑寻找更大/更强的电机,但除非您想改用无刷电机,否则真的没有更好的电机。无刷电机要好得多,但您需要速度控制器,而且加起来会额外花费 90 美元。

为了减轻重量,我们建议购买 SainSmart UNO R3(或较旧的 Arduino 型号),因为主芯片是可拆卸的。这意味着您可以将芯片直接焊接到 ProtoBoard 上,这将减轻约 30 克的重量。您需要连接一个时钟和一些电容器,但网上有很多帮助。或者也可以使用 Arduino Pro Mini https://www.sparkfun.com/products/11113 这可能更容易。

我们编写的代码也可以很容易地扩展以添加更多功能。关键是直升机能够自我稳定。您需要熟悉 C/Arduino,但添加新功能和改进的空间很大。如果你想让它远程控制,我会考虑使用蓝牙:https://www.sparkfun.com/products/12576。这里使用的任何东西都不是太贵,因此您可以尝试不同的部分。感谢阅读。

WEBP
FVNI1M3HUY493MJ.webp
35.21KB
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载