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

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

概述

本教程将学习如何制作一款基于 Arduino 的 RC 气垫船。我将展示从设计和 3D 打印气垫船零件(包括螺旋桨)到连接电子元件和编程 Arduino 的全过程。

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

控制气垫船使用我之前视频制作的 DIY Arduino RC 发射器。我将右摇杆设为控制后部推进电机舵机(控制方向舵),将一个电位器设为控制升力螺旋桨(实际连接在无刷直流电机上),将左摇杆设为控制推进。让我们看看制作这款 RC 气垫船需要什么。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

气垫船 3D 模型

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

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

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

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

在 Thangs 下载组装 3D 模型。

STL 文件用于 3D 打印:

气垫船工作原理

气垫船的基本工作原理是船体由气垫托起。中央螺旋桨向船底吹气,充气由软材料制成的裙边。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

当裙边内气压足够高时,船体被托起。持续供给的空气从船体中部、裙边与地面之间逸出,产生额外升力并减少气垫船与地面的摩擦。

一旦悬浮,使用第二个螺旋桨产生推力使气垫船前进。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

推进螺旋桨后部有一组简单的方向舵,用于转向气垫船。

3D 打印

不管怎样,设计完成后开始 3D 打印零件。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

气垫船船体是最大的打印件,我专门设计适配我的 Creality CR-10 3D 打印机(打印床 30x30cm)。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

这是该 3D 打印机链接,如果您想了解。

打印完成后需清理。气垫船主体或驾驶舱是耗时最长的打印,约 18 小时。由于曲面设计且为单次打印,使用了大量支撑材料。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

不过支撑很容易移除,最终件非常完美。船体倒置打印,仅需移除少量支撑。实际上我对此打印做了些调整,切割掉中央鼓风机外壳部分材料以便裙边支架能正确安装。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

我已更新 3D 模型,您不会遇到此问题。

某些零件圆弧区域稍粗糙,用砂纸打磨光滑。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

螺旋桨无需清理,直接从 3D 打印机出来就工作良好。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

气垫船喷漆

好的,下一步给 3D 打印零件喷漆。我没用底漆,直接喷涂丙烯酸喷漆。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

第一层用巧克力棕色。一些较小的装饰件用浅棕色。

为让气垫船更酷,第一层干后继续加两种颜色。在普通纸上做随机图案,用作模板喷涂条纹和斑点。使用浅棕色和黑色。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

组装 Arduino RC 气垫船

我非常喜欢零件效果,干燥后继续组装。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

首先将控制方向舵的舵机安装到推进鼓风机外壳上。用两个 M2 螺栓螺母固定舵机。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

接下来是无刷电机。我用的特定型号是 D2830,直径 28mm 长 30mm,外壳专门设计适配此电机。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

插入电机时先将线穿过开口。有点紧但仍可穿过。背面用 M3 螺栓将电机固定到外壳。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

接下来将推进外壳与气垫船主体合并。此部件有开口供舵机和无刷电机线穿过。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

用四个 M3 螺栓将其牢固连接。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

完成后,继续将第二个无刷电机安装到气垫船船体。同样方法:先穿线,背面用四个 M3 螺栓固定电机。

电路图

接下来是电子部分。电子元件将放置在船体和主体之间。但先看电路图了解连接方式。

气垫船的大脑是 Arduino 开发板。通过 Arduino 可轻松控制舵机和两个无刷电机(使用两个电子调速器 ESC)。为无刷电机供电用 3S 锂聚合物电池(约 11V),Arduino 可用 ESC 通过 BEC 功能提供的稳压 5V 供电。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

无线通信用 NRF24L01 收发模块,若配合增强天线可在开阔地稳定达 700 米。控制气垫船的 RC 发射器是我之前教程自制的,可查看详情。也有 NRF24L01 模块和 Arduino 使用无刷电机的详细教程。基本原理是发射器发送摇杆或电位器数据到接收器,控制无刷电机转速和舵机位置。

电路图还有一个小细节:电池监测。我添加了一个由两个电阻组成的简单分压器,直接连接电池,输出接 Arduino 模拟输入。分压器将 11V 降至约 4V,适合 5V Arduino 引脚。这样可监测电池电压,当电压低于 11V 时点亮指示 LED。

所需元件

按说明开始连接元件。为将两个 ESC 连接到单个电池,我使用并联电池连接器分线器,类型 XT60。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

为添加电源开关,我用另一个 XT60 连接器,剪断一根线焊接拨动开关。一侧接 Y 分线器,另一侧接电池。

接下来将 ESC 放入主体,夹在主体和船体之间。用四个 M3 螺栓拧紧两部分。从车身顶部开口将电池插入驾驶舱区域。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

接下来将元件连接到 Arduino,为此我在 Arduino 上添加两个排针作为 GND 和 5V 引脚。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

连接所有元件到 Arduino 后,将 NRF24L01 天线、指示 LED 和电源开关穿过驾驶舱顶盖。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

然后将所有东西塞进驾驶舱。有点紧,因为我用 Arduino UNO,可能应该用 Arduino Nano。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

但我设法塞进所有东西,也安装了一个小装饰件到盖子,然后卡扣固定到驾驶舱主体。

继续安装转向系统。先用 M2 螺栓螺母将小连杆连接到舵机舵盘。然后插入第一个方向舵并用 2mm 金属线穿过其本体固定到推进外壳,使舵可绕其旋转。同样方式安装第二个方向舵。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

这个方向舵有额外槽可连接之前插入的连杆。再次用 M2 螺栓螺母固定。最后用另一根连杆连接两个方向舵,转向系统完成。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

接下来在气垫船侧面安装小装饰件。钻孔后用单螺丝固定到船体。两侧各放一个,我认为它们很适合气垫船整体外观。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

好的,接下来制作气垫船的裙边。裙边支架周围有孔用于固定到船体。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

也有螺母槽,这样可用 M3 螺栓轻松将裙边支架固定到船体。固定所有螺母后,开始制作裙边,我用普通垃圾袋塑料袋。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

先在支架中间区域涂 AC 胶,粘到塑料袋。然后将支架周边偏移约 6cm。在几点标记并连成线。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

用美工刀将塑料袋裁剪至合适尺寸。翻转裙边,在之前用 AC 胶粘贴的地方加额外支架。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

袋子外侧需粘到支架顶部。再次用 AC 胶小心固定塑料袋。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

完成后,裙边应如下图所示。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

在塑料袋螺栓位置打孔。裙边支架比船体小 1mm,配合塑料袋完美嵌入船体。用 M3 螺栓拧紧整个周边固定裙边。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

裙边还需做一件事:剪掉塑料袋中央区域。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

这样一半空气直接充气裙边,然后通过此开口逸出,在中间形成额外气泡。

最后剩下将螺旋桨安装到无刷电机。为此使用随无刷电机附带的夹头。这是将螺旋桨固定到电机轴的简单有效方法。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

但我弄丢了另一个电机的夹头,所以不得不打印另一个版本的螺旋桨直接适配电机轴(3.15mm)。打印效果很好,无需胶水即可完美适配固定。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

就这样,我们的遥控气垫船终于完成了。

制作 Arduino 动力 RC 气垫船:全 3D 打印设计与编程指南

不过,视频剩下的部分是看 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 <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;
}

说明: 首先包含 RF24 库进行无线电通信,以及 Servo 库控制舵机和无刷电机。然后定义无线电和舵机对象、程序所需变量以及用于存储来自 DIY RC 发射器传入数据的变量结构。更多通信工作细节建议查看我的相关教程。

在 setup 部分初始化无线电通信,定义舵机和 ESC 连接引脚。

在 loop 部分读取发射器传入数据并用这些值控制舵机和无刷电机。摇杆传入数据 0-255 映射为 0-50 值控制舵机位置。

同理控制无刷电机使用 ESC。传入数据 0-255 映射为 1000-2000 值,用 writeMicroseconds() 函数发送控制信号到 ESC。

监测电池电压:读取分压器来的模拟输入,简单数学转换为真实电池电压。若电池电压低于 11V 点亮指示 LED。

就是这样。如果需要更多细节,可查看其他建议教程以完全理解工作原理。

希望您喜欢这个教程并学到新知识。欢迎在下方评论区提问,查看我的 Arduino 项目合集。

制造工艺

  1. 自制LUMAZOID:基于Arduino的音乐可视化灯光控制器
  2. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  3. Pixie:基于 Arduino Pro Mini 的 NeoPixel 智能腕表 - 极简 DIY LED 时钟
  4. DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
  5. Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
  6. DIY Arduino 电子波疗设备 - 基于拉德尼克疗法的 EMR 治疗仪
  7. 基于 Arduino 与 Google Sheets 的实时 RFID 考勤系统
  8. DIY二自由度竞速模拟器:Arduino Nano驱动SG90微型舵机
  9. 基于 Arduino UNO 构建可靠的智能能源监测仪——分步指南
  10. Arduino 智能安防系统:超声波测距 + 舵机扫描 + 声光报警
  11. 使用 Arduino 制作便携式 RFID 门锁——分步指南
  12. DIY三轴CNC立式加工中心:打造精密铣床