亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

DIY 基于 Arduino 的 RC 气垫船

在本教程中,我们将学习如何构建基于 Arduino 的 RC 气垫船。我将向您展示构建它的整个过程,从设计和 3D 打印气垫船部件(包括螺旋桨)到连接电子元件和编程 Arduino。

您可以观看以下视频或阅读下面的书面教程。

概览

为了控制气垫船,我使用了我在之前的一个视频中制作的基于 Arduino 的 DIY RC 发射器。我设置了右操纵杆来控制伺服电机,用于定位推力电机背面的方向舵,设置一个电位器来控制实际上连接在无刷直流电机上的升降螺旋桨,并设置左操纵杆来控制推进力。那么,让我们来看看建造这个 RC 气垫船需要什么。

气垫船 3D 模型

首先,我使用 3D 建模软件设计了气垫船。

您可以找到并下载此 3D 模型,也可以在 Thangs 上的浏览​​器中进行探索。

在 Thangs 下载装配 3D 模型。

用于 3D 打印的 STL 文件:

气垫船工作原理

气垫船的基本工作原理是气垫船由气垫升起。中央螺旋桨将空气吹入飞船下方,从而使由柔软材料制成的裙子膨胀。

当裙子中的气压足够高时,飞船就会升起。不断供应的空气从飞行器中部、裙部和地面之间逸出,从而产生额外的升力,同时也减少了气垫船与地面之间的摩擦。

升起后,使用第二个螺旋桨产生推力,使气垫船向前移动。

在推力螺旋桨的背面有一组简单的方向舵,用于操纵气垫船。

3D 打印

不过,一旦完成设计,我就开始使用 3D 打印零件。

气垫船的船体是要打印的最大部分,我专门设计了适合我的 Creality CR-10 3D 打印机,它有一个 30x30 厘米的打印床。

这是这台 3D 打印机的链接,以备不时之需。

打印完成后,是时候做一些清理工作了。气垫船或驾驶舱的主体是最长的打印件,大约需要 18 个小时才能打印出来。因为是弧形设计,又因为我想做单幅版画,所以这张版画用了很多支撑材料。

然而,移除它真的很容易,最后一块结果非常完美。气垫船的船体是上下颠倒印刷的,只需要去除少量的支撑材料。实际上,我必须对这张印刷品进行一些调整,并从中央鼓风机外壳上剪下一些材料,这样裙架才能正确安装。

我已经更新了3D模型,所以不会有这个问题。

零件的一些圆形区域有点粗糙,所以我用一张简单的发送纸将它们弄平。

螺旋桨不需要任何清理,直接从 3D 打印机出来时效果很好。

绘制气垫船

好的,下一步是绘制 3D 打印部件。我之前没有使用任何底漆,而是直接以喷漆的形式涂上了丙烯酸漆。

我在第一件外套上使用了巧克力色的眉毛。对于一些较小的部分,实际上只是装饰部分,我使用了浅棕色。

为了使气垫船看起来更酷,一旦第一层涂层变干,我继续在零件上添加两种颜色。为此,我在一张简单的纸上制作了一些随机图案,并用它们制作不同颜色的条纹和斑点。为此,我使用了较浅的棕色和黑色。

组装 Arduino RC 气垫船

我真的很喜欢零件的结果,所以一旦它们变干了,我就继续组装它们。

我首先将控制方向舵的伺服电机安装到推力鼓风机外壳上。我用两个 M2 螺栓和螺母固定了舵机。

接下来是无刷电机。我拥有的特殊型号是 D2830,它的直径为 28mm,长度为 30mm,当然,外壳是专门为适合这个电机而设计的。

在这里插入电机时,首先我必须将电线穿过开口。这有点紧,但仍然可以通过它们。然后在背面,我使用 M3 螺栓将电机固定到外壳上。

接下来,我可以将推力外壳与气垫船的主体合并。这部分有一个开口,因此伺服和BLDC电机线可以穿过。

我用四个 M3 螺栓将它们牢牢固定在一起。

完成后,我继续将第二个无刷电机安装到气垫船的船体上。在这里,我再次使用了相同的方法。首先,我将电线穿过开口,然后在背面使用四个 M3 螺栓固定电机。

电路图

接下来是电子产品。电子元件将放置在气垫船的船体和主体之间。但在我们这样做之前,让我们先看一下电路图,看看需要如何连接所有东西。

所以,这艘气垫船的大脑是一块 Arduino 板。使用 Arduino,我们可以使用两个电子速度控制器或 ESC 轻松控制伺服以及两个无刷电机。为 BLDC 电机供电,我将使用 3S Li-Po 电池,提供大约 11V 的电压,而为 Arduino 供电,我们可以使用 ESC 通过其电池消除电路功能提供的稳压 5V。

对于无线通信,我将使用 NRF24L01 收发器模块,如果与放大天线一起使用,它可以在开放空间中具有高达 700 米的稳定范围。我将用于控制气垫船的 RC 发射器是我在之前的教程之一中自定义构建的,因此如果您需要有关它的更多详细信息,可以查看它。还有关于 NRF24l01 模块的详细教程,以及如何使用 Arduino 使用无刷电机。但其基本工作原理是发送器将摇杆或电位器的数据发送给接收器,接收器控制无刷电机的速度和舵机的位置。

这个电路图还有一个小细节,那就是电池监视器。我添加了一个由两个电阻组成的简单分压器,它直接连接到电池,其输出进入 Arduino 的模拟输入。分压器将 11 伏降至 4 伏左右,然后 5V Arduino 引脚可以接受。有了这个,我们可以监控电池电压,并设置一个 LED 在电池电压低于 11 伏时点亮。

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

  • NRF24L01 收发模块….
  • NRF24L01 + PA + LNA ………….…….
  • 无刷电机……………….……
  • 电调30A……………………………………...
  • 锂电池………………………………..
  • XT60 2 母到 1 公…………。
  • XT60 连接器…………………………
  • 伺服电机………………………………..
  • Arduino 开发板…………………………

因此,我开始按照说明连接组件。为了将两个 ESC 连接到一个电池,我使用了并联电池连接器分离器,型号 XT60。

为了在项目中添加电源开关,我使用了另一个 XT60 连接器,我在其上剪断了一根电线并在那里焊接了一个拨动开关。因此,一侧连接 Y 分线器电缆,另一侧连接电池。

接下来,我将 ESC 放入主体中,并将​​它们困在主体和气垫船的船体之间。然后使用四个 M3 螺栓将两个部分固定在一起。然后我从机身顶部开口将电池插入驾驶舱区域。

接下来,我们需要将组件连接到 Arduino,为此我在 Arduino 上添加了两个引脚接头,用作 GND 和 5V 引脚。

所以,一旦我将所有东西都连接到 Arduino,我将 NRF24L01 天线、指示灯 LED 和电源开关穿过驾驶舱的顶盖。

然后我只需要把所有东西都挤进驾驶舱。这里有点紧,因为我用的是 Arduino UNO,可能我应该用 Arduino Nano 来代替。

不过,我设法把所有东西都装进去了,还在盖子上贴了一个小装饰部件,然后把它夹在驾驶舱主体上。

我继续安装转向系统。首先,我使用 M2 螺栓和螺母将一个小连杆连接到伺服喇叭。然后我将第一个方向舵插入到位,并使用穿过其主体的 2 毫米金属线将其固定到推力外壳上,因此方向舵可以围绕它旋转。以同样的方式连接第二个方向舵。

这个方向舵有一个额外的插槽,因此我们可以将它连接到之前插入到伺服的链接。同样,我使用 M2 螺栓和螺母来固定它们。最后,我使用另一个链接将两个方向舵相互连接起来,转向系统就完成了。

接下来,我将这个小装饰部分附在气垫船的侧面。我用钻头打了一个洞,然后用一个螺钉将零件固定在船体上。我把这些部件放在了两边,我觉得它们和气垫船的整体外观非常契合。

好的,接下来我继续为这艘气垫船制作裙子。您可以在这里注意到裙架周围有孔,用于将其连接到船体上。

还有用于放置螺母的插槽,这样,我们将能够使用 M3 螺栓轻松地将裙座固定到船体上。将所有螺母固定到位后,我继续使用简单的垃圾桶塑料袋制作裙子。

所以首先我在支架的中间区域涂了一层交流胶,然后把它粘在塑料袋上。然后我将支架的周长偏移大约 6 厘米。我在几个点上做了标记,然后将它们连接在一起。

用一把美工刀,我把塑料袋剪成合适的尺寸。然后我翻转裙子,在袋子上添加了一些额外的支架,我们之前用 AC 胶水把它粘住了。

接下来,袋子的外部需要粘在支架的顶部。同样,我为此使用了 AC 胶水,并小心地将塑料袋固定在上面。

完成后,裙子应该是这样的。

接下来,我在塑料袋上打了孔,螺栓应该穿过的地方。裙座比气垫船的船体小 1 毫米,因此与塑料袋相结合,它可以完美地融入船体。为了将裙子固定在船体上,我只是将 M3 螺栓固定在整个周边。

裙子还有一件事要做,那就是剪掉塑料袋的中心区域。

所以,这一半的空气会直接给裙子充气,然后它会从这个开口流出,在中间形成一个额外的气泡。

最后,剩下要做的就是将螺旋桨连接到无刷电机上。为此,我使用了无刷电机附带的夹头。将螺旋桨固定在电机轴上是非常简单有效的方法。

但是,我丢失了另一台电机的夹头,因此我不得不打印不同版本的螺旋桨以直接安装到 3.15 毫米的电机轴上。打印出来的效果非常好,它甚至不用胶水就可以完美地安装并固定在电机上。

就是这样,我们的无线电控制气垫船终于完成了。

不过,本视频剩下的就是看一下 Arduino 代码以及程序是如何工作的。

Arduino RC 气垫船代码

这是这个基于 Arduino 的 RC Hovercraft 项目的 DIY 代码:

/*
         Arduino based RC Hovercraft
   == Receiver Code - ESC and Servo Control =
  by Dejan, www.HowToMechatronics.com
  Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

#define led 10

RF24 radio(8, 9);   // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;

Servo esc1;  // create servo object to control the ESC
Servo esc2;
Servo servo1;

int esc1Value, esc2Value, servo1Value;
// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;
  byte button2;
  byte button3;
  byte button4;
};
Data_Package data; //Create a variable with the above structure
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening(); //  Set the module as receiver
  resetData();
  esc1.attach(7);
  esc2.attach(6);
  servo1.attach(5);
  pinMode(led, OUTPUT);
}
void loop() {
  // Check whether we keep receving data, or we have a connection between the two modules
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
    resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function
  }
  // Check whether there is data to be received
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
    lastReceiveTime = millis(); // At this moment we have received the data
  }
  // Controlling servos
  servo1Value = map(data.j2PotX, 0, 255, 0, 50);
  servo1.write(servo1Value);

  // Controlling brushless motor with ESC
  // Lift propeller
  esc1Value = map(data.pot1, 0, 255, 1000, 2000); // Map the receiving value form 0 to 255 to 0 1000 to 2000, values used for controlling ESCs
  esc1.writeMicroseconds(esc1Value); // Send the PWM control singal to the ESC
  
  // Thrust propeller
  esc2Value = constrain(data.j1PotY, 130, 255); // Joysticks stays in middle. So we only need values the upper values from 130 to 255
  esc2Value = map(esc2Value, 130, 255, 1000, 2000);
  esc2.writeMicroseconds(esc2Value);

  // Monitor the battery voltage
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.00 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V i
  Serial.println(voltage);
  // If voltage is below 11V turn on the LED
  if (voltage < 11) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}
void resetData() {
  // Reset the values when there is no radio connection - Set initial default values
  data.j1PotX = 127;
  data.j1PotY = 127;
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}Code language: Arduino (arduino)

说明: 因此,首先我们需要包含用于无线电通信的 RF24 库以及用于控制伺服和无刷电机的伺服库。然后我们需要定义无线电和伺服对象,下面程序需要的一些变量以及用于存储来自我的 DIY RC 发射器的传入数据的变量结构。有关此通信如何工作的更多详细信息,我建议您查看我的特定教程。

在设置部分,我们需要初始化无线电通信以及定义伺服和电调连接的引脚。

在循环部分,我们读取来自发射器的输入数据,并使用该值来控制伺服和无刷电机。因此,摇杆输入的数据从 0 到 255 变化为 0 到 50 的值,我们使用这些值来控制舵机的位置。

使用相同的方法,我们使用 ESC 控制无刷电机。传入的 0 到 255 的数据被转换为 1000 到 2000 的值,并使用 wirteMicroseconds() 函数将这些数据作为控制信号发送到 ESC。

为了监控电池电压,我们读取来自分压器的模拟输入,并通过一些简单的数学运算将输入值转换为电池电压的实际值。如果电池电压低于 11V,我们只需点亮 LED 指示灯即可。

就是这样。如果您需要更多详细信息,可以查看其他建议的教程,这样您将能够完全了解一切是如何工作的。

我希望你喜欢这个教程并学到了一些新东西。随时在下面的评论部分提出任何问题,并查看我的 Arduino 项目收藏。


制造工艺

  1. DIY LUMAZOID Arduino 音乐可视化器
  2. 使用 Arduino 和智能手机的 DIY 电压表
  3. Pixie:基于 Arduino 的 NeoPixel 手表
  4. DIY 虚拟现实滑板
  5. 基于 Arduino 和 OLED 的元胞自动机
  6. DIY Arduino RADIONICS 治疗MMachine
  7. 基于Arduino和谷歌电子表格的考勤系统
  8. DIY 2D 运动赛车模拟器
  9. 基于Arduino的智能能量监测器
  10. 基于 Arduino 的安全系统
  11. 使用 RFID 的 DIY 创意
  12. DIY 3 轴 CNC VMC