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