RRoy | NPC | 创造力: | 帖子: | 发消息 | 串个门 | 加好友 | 打招呼
2021-9-2 13:40:12 [显示全部楼层]
808浏览
查看: 808|回复: 9

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

[复制链接]
本帖最后由 RRoy 于 2021-9-3 02:21 编辑

qw2.jpg


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

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

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

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

qw3.jpg

qw4.jpg







▲  效果演示

冷知识:

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


步骤一:降落伞制作

qw5.jpg

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

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

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

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

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

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

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

步骤二

qw6.jpg

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

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

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

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

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

将另一个圆粘在上面;

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

步骤三

qw7.jpg

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

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

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

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

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

步骤四
qw8.jpg

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

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

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

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

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


步骤五
qw9.jpg

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

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

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

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

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

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

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

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

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

qw10.jpg



步骤六 电子部分
qw11.jpg

qw12.jpg

qw13.jpg

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

qw14.jpg

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

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

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

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

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

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

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

步骤7
qw15.jpg

在电路板的顶部,如(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)所示。

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

步骤八 站台
qw16.jpg

qw17.jpg

现在制作站台,这个只需要一块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波特),看是否有打印的错误。如果与无线电模块或加速度计有连接错误,请检查板上的连接情况。

步骤九 机身
qw18.jpg

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



步骤十
qw19.jpg

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



步骤十一
qw20.jpg

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

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

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

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

步骤十二


qw21.jpg

对于火箭的顶部,取一张薄塑料板,标出两条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, 下载次数: 4

白凡  中级技师

发表于 2021-9-3 09:21:10

膜拜巨佬!
回复

使用道具 举报

zoologist  高级技师

发表于 2021-9-3 21:13:27

如果瓶子里面装的是可乐,再加上曼妥思,能不能飞的更高?
回复

使用道具 举报

追梦的少年  中级技师

发表于 2021-9-4 07:12:27

6666666666
回复

使用道具 举报

创客达闻西  初级技师

发表于 2021-9-7 17:06:22

膜拜,太帅了
回复

使用道具 举报

RRoy  NPC
 楼主|

发表于 2021-9-8 11:54:42

zoologist 发表于 2021-9-3 21:13
如果瓶子里面装的是可乐,再加上曼妥思,能不能飞的更高?

哈哈,专门去查了下什么是曼妥思
回复

使用道具 举报

佛系唐法官  中级技师

发表于 2021-9-12 09:34:11

自己准备搞个双级火箭,已经有个大概的框架了
回复

使用道具 举报

RRoy  NPC
 楼主|

发表于 2021-9-13 10:20:01

佛系唐法官 发表于 2021-9-12 09:34
自己准备搞个双级火箭,已经有个大概的框架了

记得记录一下制作过程,让我们学习学习
回复

使用道具 举报

安卓机器人  中级技神

发表于 2021-9-14 12:27:03

不仅自己玩,还带领一群人玩!
回复

使用道具 举报

glwz007  中级技师

发表于 4 天前

非常庞大的工程,写的非常详细,谢谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail