在本教程中,我们将学习如何构建基于Arduino的RC气垫船。我将向你展示建造它的整个过程,从设计和3D打印气垫船部件,包括螺旋桨,到连接电子元件和Arduino编程。yabo7. com
为了控制气垫船,我使用了我的DIY Arduino基于RC发射器,我在我之前的一个视频中制作。我设置正确的操纵杆以控制伺服电机,用于将舵机定位在推力电机的背面,设置一个电位计,以控制实际连接在无刷直流电动机上的电梯螺旋桨,并将左侧操纵杆设置为控制推进。所以,让我们来看看建立这个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螺栓我固定电机到住房。
接下来,我可以将推力外壳与气垫船的主体合并。该部分有一个开口,因此伺服和BLDC电动机电线可以通过。
使用四个M3螺栓,我将它们牢牢固定在一起。
一旦我完成了,我继续将第二无刷电机安装到气垫船的船体上。我再次使用相同的方法。首先,我通过开口,然后在背面使用四个M3螺栓固定电动机。
线路图
接下来是电子产品。yabo7. com电子元件将放置在船体和气垫船的主体之间。但在我们这样做之前,让我们来看看电路图,看看需要如何连接。
所以,这种气垫船的大脑是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收发器模块............亚马逊/伯格多德/aliexpress.
- nrf24l01 + pa + lna ............ ............。亚马逊/伯格多德/aliexpress.
- 无刷电机 ………………………………亚马逊/伯格多德/aliexpress.
- Esc 30a .................................... ........ ......亚马逊/伯格多德/aliexpress.
- Li-Po电池..........................................亚马逊/伯格多德/aliexpress.
- XT60 2女性到1只男性.....................。亚马逊/伯格多德/aliexpress.
- XT60连接器....................................亚马逊/伯格多德/aliexpress.
- 伺服电机 ..........................................亚马逊/伯格多德/aliexpress.
- Arduino电路板 .....................................亚马逊/伯格多德/aliexpress.
yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。
因此,我开始如解释的连接组件。将两个ESC连接到单个电池,我使用并联电池连接器分离器,键入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.亚搏手机版官方下载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项足彩网女欧洲杯目集合。
这是一个伟大的项目,并解释得很好。
然而,由于我已经有一个9通道的标准R/C发射器和接收器,我是否在技术上仍然需要Arduino来控制电机和伺服,或这一切可以从接收器模块直接通过连接接收机到ESCs和伺服?
什么实际值是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的问题,他们让这个哔哔声很热,真的很热。当我在无线电控制器上调整电位计时,没有任何反应。我试图重新连接从ESC到发动机的电线,但这不会改变任何东西。希望您可以提示暗示如何排除此问题的故障。
谢谢
嘿,你有足够的电池电量,你用的是什么样的控制器?确保为控制ESC提供适当的50Hz PWM信号。使用Arduino控制BLDC电机的其他详细教程获取更多详细信息。
嘿,德扬,
首先神奇的网站,但我有点困惑,我想构建控制器和悬停接收机作为一艘船项目我想适应它,但当我看着项目部分列出了似乎有一个未列出的条目数量,有没有一个完整列表为每个项目吗?
尽可能多的信息,因为它似乎很难得到零件在英国
嘿,谢谢!嗯,我没有特定的完整零件列表,但您可以从电路图中查看所有所需组件。
嘿,德扬,
将文件放入3D打印软件时,组件将大。你有什么规模的stl文件是???
干杯
好吧,它取决于3D打印机的床大小。我使用了30x30cm的CR-10。如果您使用的是较小的打印机,则它们将出现床位。