DIY Arduino Gimbal |自稳定平台

在本教程中,我们将学习如何使用伺服电机构建Arduino Gimbal或自稳定平台。本教程实际上是前一个教程的扩展MPU6050教程

概述

我使用3D建模软件设计了Gimbal。它由3 Mg996R伺服电机组成,用于3轴控制,并放置MPU6050传感器,Arduino和电池的基座。

Arduino Gimbal 3D模型

你可以在这里找到并下载这个3D模型以及用于3D打印的STL文件:

DIY万吉网3D模型:

STL文件:

用我的Creality CR-10 3D打印机,我3d打印了所有的零件,它们来自完美。

DIY万向节3D打印部件

组装

组装万向节很容易。我开始安装偏航伺服。使用M3螺栓和螺母,我将其固定到基座上。

Arduino Gimbal伺服电机安装

接下来,使用相同的方法我固定卷伺服。这些部件专门设计成容易地符合MG996R伺服伺服电池。

用于将部件彼此连接,我使用了与伺服伺服有附件的圆角。

首先,我们需要用两个螺栓将圆角固定在底座上,然后用另一个螺栓将圆角固定在之前的伺服上。

组装Arduino万向节

我重复了组装其余组件,音高伺服和顶部平台的过程。

Arduino自稳定平台

接下来,我通过伺服电线通过持有人的开口,以保持他们有组织。然后我插入了MPU6050传感器,用螺栓和螺母将其固定在底座上。

Arduino自稳定平台与MPU6050传感器

为了为项目供电,我使用了我放置在该电池夹中的2个锂离子电池。我使用两个螺栓和螺母将电池支架固定到底座上。

锂离子电池支架

2个锂电池将产生7.4V左右的电压,但我们需要5V来为Arduino和伺服系统供电。

这就是为什么我使用的降压转换器将转换为7.4V至5V。

Arduino框架电路图

现在留下了什么,是将一切连接在一起。这是该项目的电路图以及一切都需要连接。

DIY Arduino Gimbal  - 自我稳定平台

您可以从下面的链接获取此Arduino教程所需的组件:

必威外围提钱披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。

最后,我把电子元件和电线挤进底座,用底部的盖子盖住它必威lol们。

通过这种自平衡平台或Arduino Gimbal,它可以按预期工作。剩下的是看看这个程序。

DIY Arduino Gimbal自稳定平台与MPU6050传感器

Arduino Code.

此示例的Arduino代码是MPU6050_DMP6示例的修改i2cdevlib库,Jeff Rowberg

以下是您可以下载代码:

代码说明:因此,我们正在使用输出可读的偏航,俯仰和卷。

//获取偏航,俯仰和滚动值#ifdef OUTPUT_READABLE_YAWPITCHROLL mpu。dmpGetQuaternion (q, fifoBuffer);微控制器。dmpGetGravity(重力、q);微控制器。dmpGetYawPitchRoll (ypr问,重力);//偏航,俯仰,滚动值-弧度到角度ypr[0] = ypr[0] * 180 / M_PI;ypr[1] = ypr[1] * 180 / M_PI;ypr[2] = ypr[2] * 180 / M_PI;//跳过300个读数(自校准过程)if (j <= 300) {correct = ypr[0];//偏航从随机值开始,因此在300个读数后获取最后一个值j++; } // After 300 readings else { ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Value = map(ypr[1], -90, 90, 0, 180); int servo2Value = map(ypr[2], -90, 90, 180, 0); // Control the servos according to the MPU6050 orientation servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); } #endif

一旦我们获得价值,首先我们将它们从弧度转换为度数。

//偏航,俯仰,滚动值-弧度到角度ypr[0] = ypr[0] * 180 / M_PI;ypr[1] = ypr[1] * 180 / M_PI;ypr[2] = ypr[2] * 180 / M_PI;

然后我们等待或制作300个读数,因为传感器在此期间仍处于自校准过程中。此外,我们捕获了横摆值,在开始时不是0就像音高和滚动值一样,而是总是一些随机值。

//跳过300个读数(自校准过程)if (j <= 300) {correct = ypr[0];//偏航从随机值开始,因此在300个读数后获取最后一个值j++;}

在300读之后,首先通过减去上面的捕获随机值将偏航设置为0。然后,我们将偏航,音高和滚动的值从 - 90到+90度映射到0到180的值,该值用于驱动伺服电脑。

//在300个读数后else {ypr[0] = ypr[0] - correct;/ /设置偏航0度- currrent值减去最后一个随机偏航值使偏航0度/ /地图MPU6050传感器的值从-90年到90年为伺服控制价值观suatable从0到180 int servo0Value =地图(ypr[0], -90年,90年,0,180);int servo1Value = map(ypr[1], -90, 90, 0, 180);int servo2Value = map(ypr[2], - 90,90,180,0); / ///根据MPU6050定位控制伺服伺服伺服0.write(servo0Value);servo1.write (servo1Value);servo2.write (servo2Value);}

最后使用写入功能,我们将这些值发送到伺服器作为控制信号。当然,如果您只想稳定x和y轴,您可以禁用偏航伺服,并将此平台作为相机万向节。

请注意,这远远距离良好的相机万宝路。动作不顺畅,因为这些伺服物质并不意味着这种目的。真正的相机万向手使用一种特殊类型的刷电机为了获得平稳的运动。因此,仅考虑此项目仅供教育目的。

这将是本教程的全部,我希望你喜欢它并学会了新的东西。请随意在下面的评论部分提出任何问题,不要忘记检查我的Arduino项目的集合bet188me

12的反应

  1. 大卫

    这是奇妙的 - 这是我能够获得稳定的偏航读取的唯一代码,一旦它落下,它真的稳定,Quarthion调整真的很棒!

    我唯一要补充的是电池线上的保险丝,以防短路。

    回复
  2. 奥马尔

    伟大的项目...... ..创建步骤解释

    你能做一个以MPU6050为特色的四轴飞行器项目吗?

    回复
  3. PUVI.

    良好的工作,IMU必须部分安装在手柄上,因为目标是稳定它!

    回复
  4. 阿伯提图

    哇!!我尝试使用MPU数据读取的基础写作自己的代码,但即使在我所应用的所有条件之后,问题也是不稳定的,这是基于Jeff·罗伯格的库和Dejan的代码创新的唯一代码,这是如此平滑的。你获得了一个粉丝,因为浪费了这么多时间来稳定这一点。(甚至尝试抵消!!)

    回复
  5. Andrew Payne.

    快速问题。您是否还需要将GND从降压转换器连接到Arduino?此外,您的原理图表似乎展示您如何为您的Arduino板提供PWR。这也来自你的电池吗?或者您有单独的电源吗?

    回复
    • 德国

      Buck转换器的GND应该和Arduino的GND相连。在电路图中,Arduino是通过连接到Buck变换器5V输出的5V引脚供电的。

      回复
  6. cho

    你好,我试图在这个项目中做出完全相同的吉比,但我遇到了你使用的组件的一些问题..你能告诉我你没有提到的东西的规格吗?我在下面写下了列表。

    - 能力为18650次电池(EX,2600mA)
    —M3螺栓长度
    - 您使用的动作相机
    - 圆角的直径

    感谢阅读我的评论。

    回复
    • 德国

      嘿,电池的容量并不重要,只是定义它可以持久的时间。
      我使用的M3螺栓的长度是12或14mm。
      动作相机也没关系。此项目也不会有不希望此设置才能获得良好和平滑的镜头,仅显示简化的工作概念。
      圆角作为伺服电机的配件。

      回复
  7. 克里斯

    你好德州,

    逐步地致谢这一步骤。

    我用电动机运行了一个问题,其中电动机在连续地在一个方向上开始旋转。一切都按照预期的偏航,俯仰和滚动电机与陀螺一起移动。但在一点之后,电机开始旋转,似乎失控。

    对如何解决问题的任何想法?

    克里斯

    回复
  8. 詹姆士

    阅读您的项目学习使用MPU6050并发现问题。
    MPU6050库在编写指南后更新,以便您的代码将被粘贴在设置并无法正常工作。
    几个小时后,我发现它是因为他们添加了一个新的校准功能,您需要先调用它们。

    所以,添加这三行
    //校准时间:生成偏移并校准我们的MPU6050
    mpu.calibrateaccel(6);
    mpu.calibraygyro(6);
    mpu.printactiveoffsets();
    就在之前
    mpu.setdmpleabled(true);

    一切都会像魅力一样工作。

    同时看着我的序列,我发现我的YPR值稳定需要很长时间。大约5〜10秒。这是正常的吗?

    回复

留下一个回复

您的电子邮件地址不会被公开。

推荐的

2019年初学者和爱好者的最佳进入级示波器

最好的示波器为初学者和爱好者

推荐的

8个最好的Arduino入门工具包,适合2019年初学者

8个最好的ARDUINO初学者工具包

推荐的

用于初学者和爱好者的最佳3D打印机 -  3D打印

初学者和爱好者的最佳3D打印机