DIY Arduino万向节|自稳定平台

在本教程中,我们将学习如何使用伺服电机构建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框架伺服电机安装

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

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

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

组装Arduino万向节

我重复这个过程,以装配其余的组件,俯仰伺服和顶部平台。

Arduino稳定平台

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

Arduino自稳定平台与MPU6050传感器

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

锂离子电池支架

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

这就是为什么我使用buck转换器,它将转换7.4V到5V。

Arduino框架电路图

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

DIY Arduino框架-自我稳定平台

你可以从下面的链接获得这个Arduino教程所需的组件:

必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我的收入来自符合条件的购买。

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

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

带有MPU6050传感器的DIY Arduino框架自稳定平台

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 rowberg的库和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打印机