逐梦“太空” 自制一个带回收功能的火箭!

2021-09-021.6万
精华项目
AI 快速预览详细 收起
本项目介绍如何自制一个带有自动降落伞弹射机制和数据传输系统的水火箭。项目包括详细的材料清单、制作步骤及电子部分的连接方法。通过使用Arduino Nano和Mega板,结合MPU6050传感器和NRF24L01+模块,实现了数据传输和降落伞弹射控制。适合家长与孩子共同完成,激发孩子的科学兴趣。


逐梦“太空” 自制一个带回收功能的火箭!图1


马斯克造火箭,贝佐斯乘坐自家的火箭上天,我们怎么可以落后?

今天就给大家带来一个自制的火箭项目。

在这个项目中,我们将建造一个带有自动降落伞弹射机制的水火箭,以及一个数据传输系统,这样我们就可以在空中监测火箭的方向(根据加速度计和陀螺仪数据估计)。

水火箭是一种模型火箭,它使用压力室(通常是一个PET瓶,也就是碳酸饮料瓶)内的水和压缩空气作为推力发动机。火箭的运行可以用牛顿第三定律来解释,压缩室中的水被压缩空气抛出,因为它试图释放压力释放积累的势能,所以在相反的方向会产生一个推动火箭的力。

逐梦“太空” 自制一个带回收功能的火箭!图2

逐梦“太空” 自制一个带回收功能的火箭!图3







▲  效果演示

冷知识:

PET:Polyethylene Terephthalate(聚对苯二甲酸乙二醇酯)

矿泉水瓶用的塑料就是聚对苯二甲酸乙二醇酯,翻转矿泉水的瓶子,可以看见下面有个小小的符号,三角形中写了数字“1”,这是最常见的塑料材质之一,绝大多数的矿泉水、饮料瓶采用这种材料。

具质轻、透明度高、耐冲击不易碎裂等特性;

耐热至70℃,只适合装暖饮或冻饮,装高温液体、或加热则易变形,有对人体有害的物质融出。
材料火箭机身
  • 3个PET瓶,3L大小(重要的是,至少有一个瓶子是用来储存苏打水的,因为它必须能够承受高压力)
  • 4x Balsa木板 200 * 25mm
  • 8x 螺钉
  • 1x 喷漆
  • 1x 橡皮筋
  • 1x 降落伞(我们用了一把旧伞,在布的每个尖端都系上了绳子)
  • 1x PC板 250 * 250mm

电子部分
  • 4根扎带
  • 纸板
  • 1个面包板
  • 1x 加速器(我们使用MPU6050,它有一个加速器和陀螺仪)
  • 2个Arduino板(我们使用了Arduino nano和Arduino mega)
  • 1个3.3V电压调节器(我们使用LM317可调电压调节器)

    如果使用LM317的电压调节器电路,则还需要:
    • 1x 电阻器(390欧姆)
    • 1x 电阻器(240欧姆)
  • 1x 伺服电机 (我们使用的是普通的SG90)
  • 2x NRF24L01+模块
  • 1x 电池,为电路板供电(我们使用了一个充电宝)。将充电宝连接到电路板需要:
    • 1x USB-A连接器
  • 母头和公头
  • 胶带
  • 双面胶带
  • 热熔胶


工具

  • 热熔胶枪
  • 剪刀
  • 记号笔
  • 电烙铁
  • 镊子
  • 测量带
  • 订书机
  • 水火箭发射器(我们在这个说明中没有解释如何制作火箭发射器,但你可以查看这篇水火箭的文章,自己制作一个http://aircommandrockets.com/rocket_launcher.htm


步骤一:降落伞制作

逐梦“太空” 自制一个带回收功能的火箭!图4

计算瓶子的半径
如(1)所示,测量周长,然后应用公式r=c/(2*pi) 来计算半径,在我们的例子中,半径是60毫米。

根据这些信息,在纸板上标出2个半径为瓶子半径减去1毫米的圆(在我们的例子中是59毫米),并将其剪下,如(2)和(3)所示。

对每个圆,按(4)所示画线。

为此,我们首先画出一条穿过圆心的线,这条线将被称为线1;

在线1的一端测量40毫米,然后画一条与圆的边界相接触的垂直线,这条线将被称为线2;

在线1的另一端测量20毫米,画一个点;

现在在该点和线2的两端之间各画一条虚线,这条虚线的长度记为L。

步骤二

逐梦“太空” 自制一个带回收功能的火箭!图5

根据上述测量值(L),在纸板上画一个高110毫米,宽(L)×4毫米的长方形,每隔(L)毫米划一条垂直线(5);

切开大的长方形,在中间切线,切成两个大小相同的长方形,如(6)所示;

对于每一个长方形纸板,通过标记线切割纸板的顶层,以便我们可以折叠它们;

在其中一个圆圈的标记线上涂上热熔胶,并将其中一个折叠的长方形纸板粘起来,然后将另一个长方形纸板粘在前一个长方形纸板的后面以加固它;

我们需要为扎带开孔,所以在距离长方形两端约15毫米处标出一条线,并在这条线上画出4个高约3毫米、宽约5毫米的长方形,如(9)所示,它们之间的距离大约相等;

将另一个圆粘在上面;

切断小矩形,并测试一下扎带是否能穿过小孔。

步骤三

逐梦“太空” 自制一个带回收功能的火箭!图6

在火箭顶部的降落伞弹射系统的空腔中,如(11)所示,在距离瓶子底部约50毫米处划出一个圆圈,并切开它,这就成了一个没有底部的瓶子。

把用硬纸板做的支架放在这个瓶子里。

支架在里面,在瓶子上标出一个矩形,覆盖支架的正面(支架的正面是我们为扎带打孔的那一面,或者是空间最大的那一面),这个矩形在每个水平端应该有20毫米的额外空间。

现在取下纸板支架,用切割机切割矩形,如(12)、(13)和(14)所示,小心地将矩形从瓶子里切出来,因为这部分以后将用于固定里面的降落伞。

然后在长方形的一端上开个洞,用橡皮筋穿过,如(15)所示,最后用胶带把长方形固定在瓶子的右边(就是把瓶子竖起来的时候),这样就可以当一个盖子了,如(16)所示。

步骤四
逐梦“太空” 自制一个带回收功能的火箭!图7

从背面看纸板支架,在右侧标记一个长方形,大约在中心位置标记伺服电机底部的尺寸,对于我们使用的那个电机(SG90),尺寸是22毫米高,12毫米宽,如(18)所示。

现在切开这个长方形的小孔,插入电机。

如(19)和(20)所示,用螺钉或热熔胶把电机固定在支架上。

PS: 如果纸板有点薄,螺丝可能会不起作用,对螺丝用力过猛也会导致安装松动,在这种情况下,热胶更容易、更安全。

在纸板支架的左侧,开一个小孔,让电机的电线通过,尽量靠右放,如(19)所示。


步骤五
逐梦“太空” 自制一个带回收功能的火箭!图8

接下来我们将要制作降落伞“弹簧”,并把它固定在纸板箱上。

如(21)所示,从一个未使用的瓶子上剪下一个230毫米×96毫米的矩形(用卷尺测量)作为降落伞“弹簧”。

在剪下来的正方形塑料片的每个短端,在离边界约10毫米处划一条线,将标记线与纸板支架两端的孔的边缘对齐(在纸板支架的背面),并在每个孔上做一个标记,如(22)所示。

用切割器或电烙铁在每个标记的矩形上打一个孔。

如(23)所示,用扎带将“弹簧”固定在纸板支架上。如(24)所示,必要时用钳子将扎带穿过(如果“弹簧”碍事,你也可以将它弯曲)。

将纸板插入瓶中,使“弹簧”位于孔的一侧;

为了把纸板支架推入,可能需要先把“弹簧”推到支架上,然后再把支架推到瓶子里面去;

在电机的顶部画一个长方形,并把它剪下来,这个孔是橡皮筋穿过的地方,它将被连接到电机上,保持盖子关闭,降落伞被压缩在“弹簧”上。

在下面GIF里,你可以看到如何将降落伞放入火箭内部。

逐梦“太空” 自制一个带回收功能的火箭!图9



步骤六 电子部分
逐梦“太空” 自制一个带回收功能的火箭!图10

逐梦“太空” 自制一个带回收功能的火箭!图11

逐梦“太空” 自制一个带回收功能的火箭!图12

电子装置主要由Arduino Nano、MPU6090加速器+陀螺仪、设置为3.3V的LM317稳压电路、一个充电宝、一个无线电模块NRF240L01+和一个伺服电机组成,下面的原理图rocket.pdf显示了连接图。

逐梦“太空” 自制一个带回收功能的火箭!图13

我们在电路板上为无线电模块放置了一些母头,并使用长的公头到母头的电缆连接它。

对于伺服电机,我们放了一些公头。

稳压器用于为NRF24L01+提供电源,因为我们发现Arduino的3.3V输出不能提供足够的电压,程序有时会失败。

你可以使用任何你想要的方法连接元件,但请记住纸板支架内的空间是有限的。

要把电路板安装到纸板支架上,首先,把它从瓶子里拿出来(1),把电路板放在纸板支架的左侧上面,并在左上角和右下角做标记,如(2)所示。取出电路板,在每个角上标记并切出2个相距约10毫米的小矩形,如(3)所示。

对于每一对孔,从纸板支架的背面把一条小线穿过孔(可能需要推动“弹簧”使线穿过),用线将线路板固定在纸板上,如图(4)。

在最后一张图片上,我们展示了固定其中一个角的结果,电线的一端穿过纸板上的一个孔,然后我们扭动它,使它保持在原位。

步骤7
逐梦“太空” 自制一个带回收功能的火箭!图14

在电路板的顶部,如(5)所示,在纸板支架上标记并切割一个大约10 * 30毫米的矩形。将电源和无线电模块(NRF24L01+)的电缆穿过该孔。

然后将电源线连接到充电宝,将NRF24L01+连接到电路板,如(6)和(7)所示。最后将元件固定在纸板上(8)。

我们用胶带将无线电模块固定住,用双面胶带将充电宝固定住,并用胶带加固。

请记住,为了使纸板支架适合于瓶内,它上面的元件不应越过圆圈的边界,所以要把所有东西放在圆圈内。

在把纸板支架放进瓶子里之前,把程序rocket.ino上传到Arduino上,用下面的测试程序检查程序的运行情况。
/*
  Requires the following libraries:
  RF24 by TMRh20, Avamander
  MPU6050 by Electronic Cats

  Connections:
    Shown in the schematic
*/

#include <SPI.h>
#include "RF24.h"

// Radio Transmitter - NRF24L01+

RF24 radio(7, 8); // using pin 7 for the CE pin, and pin 8 for the CSN pin
uint8_t rocketAddress[] = "ROCKT";

const int payloadSize = 12; // *

union{
  struct {
    int16_t acc[3];
    int16_t gyr[3];
  } raw;
  char bytes[payloadSize];
} data;

// Sensor - Accelerometer and Gyroscope - MPU6050

#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

MPU6050 accelgyro;

#define THRESHOLD 1000

// Actuator - Servomotor

#include <Servo.h>

Servo servo;

#define START_ANGLE 110
#define END_ANGLE 30

void setup() {
  Serial.begin(115200);
  Serial.println("Started");

  // Configure Radio Transmitter - NRF24

  if (!radio.begin()) {
    Serial.println(F("Radio hardware not responding"));
    while (1) {}; // hold in infinite loop
  }

  if (radio.isChipConnected()){
    Serial.println("NRF24L01 connection successful");
  }
  else{
    Serial.println("NRF24L01 connection failed");
    while (1) {};
  }

  radio.setPALevel(RF24_PA_LOW);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);

  // This node sends data
  radio.openWritingPipe(rocketAddress);

  // Configure Sensor - Accelerometer and Gyroscope - MPU6050
  Wire.begin();
  accelgyro.initialize();

  if(accelgyro.testConnection()){
    Serial.println("MPU6050 connection successful");
  }
  else{
    Serial.println("MPU6050 connection failed");
    while (1) {};
  }

  // Configure Actuator - Servo

  servo.attach(3);
  servo.write(START_ANGLE);

  // Wait for devices to be ready
  delay(500);
}

void loop() {
  // Get sensor data
  accelgyro.getMotion6(&data.raw.acc[0], &data.raw.acc[1], &data.raw.acc[2], &data.raw.gyr[0], &data.raw.gyr[1], &data.raw.gyr[2]);

  // Send sensor data
  radio.writeFast(data.bytes, payloadSize);

  // Detect if there's free fall and eject the parachute accordingly
  float mag = sqrt(sq((float)data.raw.acc[0]) + sq((float)data.raw.acc[1]) + sq((float)data.raw.acc[2]));

  if (mag < THRESHOLD){
    servo.write(END_ANGLE);
  }

  Serial.println("");
}

注意,我们需要安装多个库,这些库可以通过库管理器轻松地安装在Arduino IDE上,这些库是:

  • RF24 by TMRh20, Avamander
  • MPU6050 by Electronic Cats


测试程序

将纸板支架从一个小的位置落在一个光滑的表面上,看看电机是否改变了位置,之后重启Arduino,重新做几次实验,以确定电机每次都会移动,因为这是一个展开降落伞的电机。

如果电机不动,增加rocket.ino中的阈值[ #define THRESHOLD 1000 ]到1500,再测试一次,如果有必要,你可以进一步增加它。

如果电机在纸板支架没有被放下时改变了位置,将rocket.ino里面[ #define THRESHOLD 1000 ]中的阈值减少到500,然后测试它在被放下时是否能正常工作。

电机必须在垂直位置启动,当下降时,支撑物必须顺时针移动到水平位置,如(9)所示,如果不是这样,就有必要设置起始和结束角度。

为此,上传程序test.ino,并通过Arduino的串行监视器(设置为115200波特),写一个0到180之间的数字,这样电机就会保持在垂直位置,当找到一个值时,在rocket.ino中更新这个值[ #define START_ANGLE 110 ]
// Actuator - Servomotor

#include <Servo.h>

Servo servo;

void setup() {
  Serial.begin(115200);
  Serial.println("Started");

  servo.attach(3);
  servo.write(90);
}

void loop() {
  if(Serial.available()){
    int val = Serial.parseInt();
    servo.write(val);
    Serial.print("Angle: ");
    Serial.println(val);
  }
}

然后,输入一个值,使电机从垂直位置顺时针移动到水平位置,当找到一个值时,在rocket.ino中更新这个值[ #define END_ANGLE 30 ]。

注意,如果无法找到合适的值,你可能需要重新定位伺服臂。

最后,经过测试,将纸板支架插入瓶中,结果如(10)所示。

你可能想知道,当电子装置在瓶子里时,我们如何打开它们,为此,在接下来的一个步骤中,我们将开一个孔,以便我们可以随意连接/断开电源线。

步骤八 站台
逐梦“太空” 自制一个带回收功能的火箭!图15

逐梦“太空” 自制一个带回收功能的火箭!图16

现在制作站台,这个只需要一块Arduino板和无线电模块,站台接收火箭的数据并将其发送到电脑上,以便我们查看。

连接很简单,所以我们不需要一个原理图。
连接:Arduino Board | NRF24L01+
Pin 7         | CE
Pin 8         | CSN
3.3V          | V+
GND           | GND
// For the following pins check a pinout of your board
SCK           | SCK
MISO          | MISO
MOSI          | MOSI

进行连接后,将程序station.ino上传到电路板上。

注意,我们需要安装一个库,它可以很容易地使用库管理器安装在Arduino IDE上,这个库是TMRh20,Avamander的RF24

为了测试我们是否能接收到数据,暂时把纸板支架从瓶子里拿出来,这样我们就可以通过把电源线连接到充电宝来打开它,在火箭电子设备打开的情况下,把站台连接到电脑上,在Arduino IDE上以115200波特打开串行显示器,如果数据被接收,你会看到火箭电子设备打开时出现随机字符。

如果我们没有接收到数据,请检查串行监视器上是否有打印的错误,如果没有,将火箭电子装置上的Arduino板连接到计算机上,检查串行监视器(以115200波特),看是否有打印的错误。如果与无线电模块或加速度计有连接错误,请检查板上的连接情况。

步骤九 机身
逐梦“太空” 自制一个带回收功能的火箭!图17

为了制作火箭的箭翼,如(1)和(2)所示,需要切割4块25毫米×200毫米的轻木板,按(3)和(4)所示的切割4块波纹塑料,最后用螺钉把两部分连接起来(5)。



步骤十
逐梦“太空” 自制一个带回收功能的火箭!图18

每块挡板应相互成90°,并用胶带固定在塑料瓶上(8)。



步骤十一
逐梦“太空” 自制一个带回收功能的火箭!图19

在充电宝的位置,也就是连接处,开一个孔,这样我们就可以断开和连接电源库,如(9)所示,然后用胶带盖住孔,不要影响火箭的空气动力学,如(10)所示(胶带用蓝色标出)。

将降落伞绳绑在瓶盖下,多打几个结,如(11)和(12)所示。

组装火箭时,将带箭翼的瓶底放在带电子器件的瓶底内(13),为了固定它的位置,在4个不同的点上互相等距离地贴上4块胶带,重要的是两个瓶子要平直,最后在连接处再贴上胶带,如(14)所示。

现在我们已经完成了火箭的大部分,如(15)所示。

步骤十二


逐梦“太空” 自制一个带回收功能的火箭!图20

对于火箭的顶部,取一张薄塑料板,标出两条180毫米的垂直线,如(16)所示。

在这两条线的两端之间画一个弧形。

在这两条线中的一条上画一个20毫米宽的长方形,然后剪出所得到的形状(17)。

如(18)所示,在2条垂直线相交的地方切出矩形的一角。

如图(19)所示,将该形状卷成圆锥体,并剪去尖端。

如图(20)所示,将其缠绕在降落伞绳上并将圆锥体钉在长方形上,用胶带加固圆锥体尖端的连接处(21)。最后用胶带将圆锥体粘在瓶子上,注意它是直的(22),胶带的用量视情况而定。

我们已经完成了我们的火箭!如(23)所示。

现在,如果你愿意,你还可以给它上色,好好装饰一番。

在视频中,你可以看到发射前的一般程序,即打开电子设备,检查电机是否在正确的位置,将折叠的降落伞放入火箭内,并将橡皮筋套在伺服臂上,关闭火箭的盖子。

我们还模拟了自由落体,看看降落伞是如何弹出的。


步骤十三 数据可视化


为了将站台收到的数据可视化,我们视频中展示了Processing的演示程序。

我们需要下载 Processing 3

下载所有附件中的.pde文件,并把它们放在一个名为rocket的文件夹中,然后打开rocket.pde

在运行之前,我们需要修改程序的第9行[ String serialPort = "COM7"; ]将串口更新为你的Arduino板的串口。

我们还需要安装一个库,Sketch > Import Library > Add Library。

要安装的库是Karsten Schmidt的ToxicLibs。
运行
你应该看到,当你移动火箭时,图形会有反应,一个长方形的棱镜会跟随(或至少是试图跟随)火箭的方向。

步骤十四  降落



最后,在发射前做一些简单的准备,给火箭装上大约1/3的水,把火箭放在水火箭发射器上,往里面打气,然后飞走!

火箭在下落时应该自动展开降落伞,火箭的估计方向可以在Processing中直观地看到。

好了,抓紧时间动手了!

原文链接:https://www.instructables.com/Wa ... nic-Systems-Design/

项目作者: luisferniño
开源项目,转载请务必注明项目出处与原作者信息


水火箭.zip

200.04 KB, 下载次数: 5251

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(9)
Asdrobin
Asdrobin
作者你好,我们想参考你的作品做一个类似的,但是经验欠缺,能否提供一些指导呢
李臻飏
李臻飏

无敌了呀
glwz007
glwz007
非常庞大的工程,写的非常详细,谢谢分享!
许培享
许培享
不仅自己玩,还带领一群人玩!
佛系唐法官
佛系唐法官
自己准备搞个双级火箭,已经有个大概的框架了
RRoy
RRoy
作者
回复佛系唐法官
记得记录一下制作过程,让我们学习学习
静心者人静也
静心者人静也
膜拜,太帅了
追梦的少年
追梦的少年
6666666666
zoologist
zoologist
如果瓶子里面装的是可乐,再加上曼妥思,能不能飞的更高?
RRoy
RRoy
作者
回复zoologist
哈哈,专门去查了下什么是曼妥思
白凡
白凡
膜拜巨佬!
- 没有更多了 -