在本教程中,我们将学习如何构建基于Arduino的RC气垫船。我将向你展示建造它的整个过程,从设计和3D打印气垫船部件,包括螺旋桨,到连接电子元件和Arduino编程。必威lol
为了控制气垫船,我使用了我的DIY Arduino基于RC发射器,这是我在以前的一个视频。我设置的操纵杆来控制伺服电机定位的舵背面推力发动机,设置一个电位器来控制电梯的螺旋桨是附加在无刷直流电机,并设置操纵杆控制推进。那么,让我们来看看建造这个遥控气垫船需要什么。
气垫船三维模型
首先,我用3D建模软件设计了气垫船。
你可以在此下载3D模型及用于3D打印的STL文件:
STEP文件(你可以用Fusion 360打开):
3D打印STL文件:
气垫船工作原则
气垫船的基础工作原理是该工艺被空气垫抬起。中央螺旋桨将空气吹入工艺下方,这膨胀了由软材料制成的裙子。
当裙子的气压足够高时,该工艺被抬起。经常供应的空气从工艺中间逃脱,裙子和地面之间,这会产生额外的升力,并降低气垫船与地面之间的摩擦。
一旦上升,利用第二个螺旋桨产生的推力推动气垫船前进。
在推力螺旋桨的背面有一组简单的舵,用于操纵气垫船。
3 d打印技术
尽管如此,一旦我完成了设计,我就开始使用3D打印零件。
气垫船的船体是打印的最大部分,我专门设计了适合我的Creality CR-10 3D打印机,它有一个30x30cm的打印床。
这是A.链接到这个3D打印机如果你想看的话。
打印完成后,是时候做一些清理。打印时间最长的是气垫船的主体或驾驶舱,大约需要18个小时。因为弯曲的设计,因为我想要一个单一的打印,有很多支持材料用于这个打印。
然而,去掉它真的很容易,最后一块做得很完美。气垫船的船体被印颠倒了,只有少量的支撑材料需要被移除。事实上,我不得不对这个图案做一些调整,从中央鼓风机外壳上剪下一些材料,这样裙座就能合适地配合。
我已经更新了3D模型,所以不会有这个问题。
部分的一些圆形区域有点粗糙,所以我使用了一个简单的发送纸平滑他们。
螺旋桨不需要任何清理,它们直接从3D打印机出来工作得很好。
绘画气垫船
好的下一步是绘制3D打印部分。我之前没有使用任何底漆,而是直接用丙烯酸漆喷涂。
我用了一件巧克力眉纹。对于一些较小的部分,实际上只是装饰零件,我使用浅棕色。
为了让气垫船看起来更酷一点,一旦第一涂层干了,我继续添加两个更多的颜色的部分。为了达到这个目的,我在一张简单的纸上做了一些随机的图案,并用它们做成不同颜色的条纹和斑点。为此,我使用了浅棕色和黑色。
组装Arduino RC气垫船
我真的很喜欢零件如何结果,所以一旦他们干涸,我继续组装它们。
我开始安装伺服电机,控制舵上的推力鼓风机壳体。我用2个M2螺栓和螺母固定伺服。
接下来是无刷电机。我有一个特别的型号是D2830,直径为28mm,长度为30mm,当然,外壳是专门为适合这个电机而设计的。
在这里,当插入电机,首先我必须通过电线通过开口。这有点紧,但仍然可以通过他们。然后在背面,使用M3螺栓我固定电机到住房。
接下来,我可以把推力室和气垫船的主体合并起来。这部分有一个开口,使伺服和无刷直流电机电线可以通过。
使用四个M3螺栓,我将它们牢牢固定在一起。
一旦我完成了,我继续将第二无刷电机安装到气垫船的船体上。我再次使用相同的方法。首先,我通过开口,然后在背面使用四个M3螺栓固定电动机。
线路图
接下来是电子产品。必威lol电子元件将放置在船体和气垫船的主体之间。但在我们这样做之前,让我们来看看电路图,看看需要如何连接。
所以,这种气垫船的大脑是arduino板。使用Arduino,我们可以轻松控制伺服以及使用两个电子速度控制器或ESC的无刷电机。为了为BLDC电机供电,我将使用提供大约11V的3S Li-Po电池,并为Arduino供电,我们可以使用受调节的5V,ESC通过其电池消除器电路功能提供。
对于无线通信,我将使用NRF24L01收发模块,如果使用一个放大天线,它可以有一个稳定的范围高达700米在开放空间。的RC发送器我将使用控制气垫船,是一个我自定义构建在我的一个以前的教程,所以你可以检查它,如果你需要更多的细节。还有关于NRF24l01模块的详细教程如何使用arduino使用无刷电机.然而,基本的工作原理是,发射器发送操纵杆或电位器数据到接收器,其中控制无刷电机的速度和伺服的位置。
电路图上还有一个小细节,就是电池监控器。我添加了一个简单的分压器,由两个电阻直接连接到电池,输出到Arduino的模拟输入。分压器将11伏降低到4伏左右,这是可以接受的5V Arduino引脚。有了这个,我们可以监测电池电压,并设置一个LED亮时,例如,电池电压将下降到11伏。
你可以从下面的链接获得这个Arduino教程所需的组件:
- NRF24L01收发器模块 ............亚马逊/伯格多德/阿里巴巴全球速卖通
- Nrf24l01 + pa + lna ..........................亚马逊/伯格多德/阿里巴巴全球速卖通
- 无刷电机 ………………………………亚马逊/伯格多德/阿里巴巴全球速卖通
- Esc 30a .................................... ........ ......亚马逊/伯格多德/阿里巴巴全球速卖通
- Li-Po电池..........................................亚马逊/伯格多德/阿里巴巴全球速卖通
- XT60 2女对1男......................亚马逊/伯格多德/阿里巴巴全球速卖通
- XT60连接器....................................亚马逊/伯格多德/阿里巴巴全球速卖通
- 伺服电机 ..........................................亚马逊/伯格多德/阿里巴巴全球速卖通
- Arduino电路板 .....................................亚马逊/伯格多德/阿里巴巴全球速卖通
必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。
因此,我开始按照解释的方式连接组件。为了将两个ESCs连接到单个电池,我使用了一个平行电池连接器分配器,类型XT60。
为了在项目中添加电源开关,我使用了另一个XT60连接器,在它上我切断了一根电线,并在那里焊接了一个拨动开关。所以,一边是Y分线,另一边是电池。
接下来,我把ESCs放到主体中,把它们困在主体和气垫船的船体之间。然后用4个M3螺栓将两个部分固定在一起。从顶部开口的身体,我然后把电池插入驾驶舱区域。
接下来,我们需要将组件连接到Arduino,为此我添加了两个引脚头到Arduino,这将作为GND和5V引脚。
因此,一旦将所有内容连接到Arduino,我通过了NRF24L01天线,指示灯LED和电源开关,通过驾驶舱的顶盖。
然后我只需要将一切挤入驾驶舱内。这里有点紧张,因为我使用了Arduino Uno,并且可能已经使用了和Arduino Nano。
然而,我设法把所有东西都装了进去,还把一个小的装饰部分贴在了座舱的盖子上,然后把它夹在驾驶舱的身体上。
我继续安装转向系统。首先,我使用M2螺栓和螺母将小链路连接到伺服喇叭。然后我将第一方向舵插入到位并使用2mm金属线将其固定到推力壳体上,该金属线穿过其主体,因此舵可以旋转。以同样的方式我附着第二档。
该舵具有额外的插槽,因此我们可以将其连接到以前插入伺服的链接。同样,我使用M2螺栓和螺母来保护它们。最后,我使用另一个链接和转向系统彼此连接两个角膜。
接下来,我将把这个小装饰部分附在气垫船的一侧。我用钻头钻了一个洞,然后用一个单一的螺钉把这个部分固定在船体上。我把这些部分放在两边,我认为他们非常适合气垫船的整体外观。
好的,接下来我继续制作这个气垫船的裙子。你可以在这里注意到裙子支架上面有孔,这是为了将它连接到船体上。
也有可以放置螺母的槽,这样我们就可以使用M3螺栓轻松地将裙座固定在船体上。当我把所有的螺母固定好后,我继续做这条裙子,我用了一个简单的垃圾桶塑料袋。
所以我首先在支架的中间区域涂上了交流胶水,然后把它粘到塑料袋上。然后我把支架的周长偏移在6厘米左右。我在几个点上做了标记,然后把它们连接在一起。
使用实用刀,将塑料袋切割成正确的尺寸。然后我翻了一把裙子,向袋子添加了一些额外的支架,在那里我们以前使用AC胶水胶合。
接下来,袋子的外部需要粘到持有人的顶部。再一次,我用了交流胶水,小心地把塑料袋固定在上面。
这样做之后,这条裙子看起来应该是这样的。
接下来,我在螺栓应该穿过的地方在塑料袋上打洞。裙座只比气垫船的船体小1毫米,所以结合塑料袋,它完全适合船体。为确保裙子到船体,我简单地紧固M3螺栓周围的整个周长。
还有一件事要做的裙子,那就是剪掉塑料袋的中心区域。
所以,这一半的空气会直接使裙子膨胀然后从这个开口流出,在中间形成一个额外的气泡。
最后,剩下的是要做的,是将螺旋桨连接到无刷电机。为此目的,我正在使用无刷电机附带的夹头。将螺旋桨紧固到电机轴真的是简单有效的方式。
然而,我丢失了夹头为我的另一个电机,所以我不得不打印一个不同版本的螺旋桨直接适合到电机轴,这是3.15毫米。实际上,打印出来的效果非常好,它与马达完美地契合和固定,甚至不用胶水。
就这样,我们的无线电控制气垫船终于完工了。
但是,在此视频中留下的是看看Arduino代码以及程序的工作原理。
Arduino RC气垫船代码
这里是这个DIY Arduino基于RC气垫船项目的代码:
/* Arduino based RC Hovercraft == Receiver Code - ESC and Servo Control = by Dejan, www.bet188官方网站HowToMechatronics.com Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include#include #include #include #define led 10 RF24 radio(8,9);// nRF24L01 (CE, CSN) const byte address[6] = "00001";unsigned long lastReceiveTime = 0;unsigned long currentTime = 0;伺服esc1;//创建伺服对象控制ESC伺服esc2;伺服servo1;int esc1Value, esc2Value, servo1Value;NRF24L01 buffer limit struct Data_Package{字节j1PotX;字节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; }
描述:因此,首先我们需要包括无线电通信的RF24库以及用于控制伺服和无刷电机的伺服库。然后我们需要定义无线电和伺服对象,下面的程序需要一些变量以及用于将传入数据从DIY RC发射器存储的变量的结构。有关更多详细信息,此沟通如何工作我会建议检查我的特定教程.
在设置部分中,我们需要初始化无线电通信以及定义连接伺服和ESCs的引脚。
在回路部分,我们读取从发射机输入的数据,并使用该值控制伺服和无刷电机。操纵杆输入的数据从0到255转换成0到50的值我们用这些值来控制伺服的位置。
用同样的方法,我们用ESCs控制无刷电机。从0到255的传入数据被转换为1000到2000的值,并使用wirteMicroseconds()函数将该数据作为控制信号发送给ESC。
为了监测电池电压,我们读取来自分压器的模拟输入,通过一些简单的数学运算,我们将输入值转换为电池电压的实际值。如果电池电压下降到11V以下,我们只需点亮LED指示灯。
就是这样。如果您需要更多的细节,您可以查看其他建议的教程,这样您就能够完全理解一切是如何工作的。
我希望你喜欢这个教程,并学到一些新的东西。欢迎在评论区提出任何问题,并查看我的Arduino项bet188me目集合.
这是一个伟大的项目,解释得很好。
但是,由于我已经拥有标准的R / C发射器和带有9个通道的接收器,我在技术上仍然需要一个Arduino来控制电机和伺服,或者可以通过将接收器连接到ESC和伺服来直接从接收器模块完成?
什么实际值是arduino在此添加(除了监控电池电压)?
谢谢。
谢谢你!
是的,你绝对可以用标准的RC发射器和接收器做这个项目。我只是想做一个很酷的Arduino项目,其中将包括无刷电机控制,所以这就是为什么我使用Arduino。
分压器在哪里接地的?顺便说一句很棒的项目
谢谢!你可以在任何地点把它接地。
我有一个Arduino Nano。如何将NRF24L01的电压降至3.3V。
用于电压检测的电压分界电阻,不是会对电池造成持续的损耗吗?(意思是,当系统处于“关闭”状态时,电池会因为电压检测而耗尽,对吧?)如何解决这个问题?
好吧是的,这是一个很好的点。但是如果在电源开关后连接分压器,则不会通过它流过任何电流。
和我的儿子们一起做这个项目,这是一个伟大的项目。感谢你出版的伟大作品。我非常感激。
我们可能会稍后升级到使用Arduino,但是现在我们正在使用一些外墙控制部件。Flysky I6x发射器可轻松连接到FS-X6B接收器(PWM输出),这是如此微小的,可以直接发出电动机/伺服电机...电压监控显示在I6x上。您可能会考虑这样的内容,因为它使Newbies更容易获得工作,如果它们不是Arduino / Programmer Savvy。(或提供制作您的自定义发射器之一的替代方案。)
在玩这些自制EDF时,请警告每个人的人至少会戴上安全眼镜。我们最初在PLA中印刷,我有点害怕破碎......所以我们正在切换到PETG或ABS。在远程操作时可能不是一个问题,但任何近距离测试都可能对您的脸部危险。
谢谢STEP文件。我设法修改了它们,增加了一些关节,这样它们就可以打印在更小的25厘米的Prusa打印床上。
我还没有,但考虑配置ESC从“平滑”到“加速”的推力,因为它可能使推力加速一点更snapper和更少的滞后。
仍然享受这个伟大的项目…
如果你有一把旧的,半破的伞,那么这些提供了一些很棒的部分。我们使用雨伞衬里作为一种升级的裙子材料(而不是塑料袋)。伞状结构为舵提供了一些大小适中的硬金属丝。
PS。您的融合项目不包括较小,最底部的保留支架机身,您可以安全地握住裙子。(也许是它在STL文件中,但我刚刚从较大的上括号中制作一个。
很好的教育项目。我做了两个。现在是代码。这对我来说有点太难了。
是否有一个用于Ardino RC发射机的完整Arduino代码来控制气垫船?
非常感谢。
嘿,谢谢!完整的Arduino代码的RC发射机可以在特定的RC发射机项目中找到。
我想尝试这个项目,但下载3D视觉的链接是死的,你能纠正这个吗?
嘿,试着使用不同的浏览器,以防你下载文件有问题。
嗨Dejan,我想从印刷气垫船开始。在我开始之前,退款是否正确?
对于文件“boddy6”:278.0×147.0x70.0
谢谢你的回答。
是的,这些是正确的尺寸。
嗨Dejan,
我做了这个很酷的项目,但我有一个问题的ESC 's他们使这哔哔声,得到真正热。当我调整无线电控制器上的电位器时,什么也没发生。我尝试重新连接从ESC到引擎的电线,但这没有改变任何事情。希望您能给出一个提示,如何解决这个问题。
谢谢
嘿,你的电池电量够吗?你用的是哪种控制器?确保你给一个适当的50Hz PWM信号来控制ESC。查看我的其他详细教程控制无刷直流电机使用Arduino更多细节。
嘿,德扬,
首先神奇的网站,但我有点困惑,我想构建控制器和悬停接收机作为一艘船项目我想适应它,但当我看着项目部分列出了似乎有一个未列出的条目数量,有没有一个完整列表为每个项目吗?
尽可能多的信息,因为它似乎很难得到零件在英国
嘿,谢谢!嗯,我没有特定的完整零件列表,但您可以从电路图中查看所有所需组件。
嘿,德扬,
将文件放入3D打印软件时,组件将大。你有什么规模的stl文件是???
干杯
好吧,它取决于3D打印机的床大小。我使用了30x30cm的CR-10。如果您使用的是较小的打印机,则它们将出现床位。