做一個(gè)可實(shí)現(xiàn)軟著陸的“火箭” ,逐夢(mèng)太空!
時(shí)間:2021-09-16 14:03:44
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]大家好,我是張巧龍,今天給大家?guī)硪粋€(gè)自制的“火箭”項(xiàng)目。在這個(gè)項(xiàng)目中,我們將建造一個(gè)帶有自動(dòng)降落傘彈射機(jī)制的水火箭,以及一個(gè)數(shù)據(jù)傳輸系統(tǒng),這樣我們就可以監(jiān)測(cè)火箭在空中時(shí)候的方向(根據(jù)加速度計(jì)和陀螺儀數(shù)據(jù)估計(jì))。水火箭是一種模型火箭,它使用壓力室(通常是一個(gè)PET瓶,也就是碳酸飲...
大家好,我是張巧龍,今天給大家?guī)硪粋€(gè)自制的“火箭”項(xiàng)目。在這個(gè)項(xiàng)目中,我們將建造一個(gè)帶有自動(dòng)降落傘彈射機(jī)制的水火箭,以及一個(gè)數(shù)據(jù)傳輸系統(tǒng),這樣我們就可以監(jiān)測(cè)火箭在空中時(shí)候的方向(根據(jù)加速度計(jì)和陀螺儀數(shù)據(jù)估計(jì))。
水火箭是一種模型火箭,它使用壓力室(通常是一個(gè)PET瓶,也就是碳酸飲料瓶)內(nèi)的水和壓縮空氣作為推力發(fā)動(dòng)機(jī)。火箭的運(yùn)行可以用牛頓第三定律來解釋,壓縮室中的水被壓縮空氣拋出,因?yàn)樗噲D釋放壓力釋放積累的勢(shì)能,所以在相反的方向會(huì)產(chǎn)生一個(gè)推動(dòng)火箭的力。
▲? 效果演示
切開大的長方形,在中間切線,切成兩個(gè)大小相同的長方形,如(6)所示;對(duì)于每一個(gè)長方形紙板,通過標(biāo)記線切割紙板的頂層,以便我們可以折疊它們;在其中一個(gè)圓圈的標(biāo)記線上涂上熱熔膠,并將其中一個(gè)折疊的長方形紙板粘起來,然后將另一個(gè)長方形紙板粘在前一個(gè)長方形紙板的后面以加固它;我們需要為扎帶開孔,所以在距離長方形兩端約15毫米處標(biāo)出一條線,并在這條線上畫出4個(gè)高約3毫米、寬約5毫米的長方形,如(9)所示,它們之間的距離大約相等;將另一個(gè)圓粘在上面;切斷小矩形,并測(cè)試一下扎帶是否能穿過小孔。
把用硬紙板做的支架放在這個(gè)瓶子里。支架在里面,在瓶子上標(biāo)出一個(gè)矩形,覆蓋支架的正面(支架的正面是我們?yōu)樵鷰Т蚩椎哪且幻?,或者是空間最大的那一面),這個(gè)矩形在每個(gè)水平端應(yīng)該有20毫米的額外空間。現(xiàn)在取下紙板支架,用切割機(jī)切割矩形,如(12)、(13)和(14)所示,小心地將矩形從瓶子里切出來,因?yàn)檫@部分以后將用于固定里面的降落傘。然后在長方形的一端上開個(gè)洞,用橡皮筋穿過,如(15)所示,最后用膠帶把長方形固定在瓶子的右邊(就是把瓶子豎起來的時(shí)候),這樣就可以當(dāng)一個(gè)蓋子了,如(16)所示。
現(xiàn)在切開這個(gè)長方形的小孔,插入電機(jī)。如(19)和(20)所示,用螺釘或熱熔膠把電機(jī)固定在支架上。PS: 如果紙板有點(diǎn)薄,螺絲可能會(huì)不起作用,對(duì)螺絲用力過猛也會(huì)導(dǎo)致安裝松動(dòng),在這種情況下,熱膠更容易、更安全。在紙板支架的左側(cè),開一個(gè)小孔,讓電機(jī)的電線通過,盡量靠右放,如(19)所示。
如(21)所示,從一個(gè)未使用的瓶子上剪下一個(gè)230毫米×96毫米的矩形(用卷尺測(cè)量)作為降落傘“彈簧”。在剪下來的正方形塑料片的每個(gè)短端,在離邊界約10毫米處劃一條線,將標(biāo)記線與紙板支架兩端的孔的邊緣對(duì)齊(在紙板支架的背面),并在每個(gè)孔上做一個(gè)標(biāo)記,如(22)所示。用切割器或電烙鐵在每個(gè)標(biāo)記的矩形上打一個(gè)孔。如(23)所示,用扎帶將“彈簧”固定在紙板支架上。如(24)所示,必要時(shí)用鉗子將扎帶穿過(如果“彈簧”礙事,你也可以將它彎曲)。將紙板插入瓶中,使“彈簧”位于孔的一側(cè);為了把紙板支架推入,可能需要先把“彈簧”推到支架上,然后再把支架推到瓶子里面去;在電機(jī)的頂部畫一個(gè)長方形,并把它剪下來,這個(gè)孔是橡皮筋穿過的地方,它將被連接到電機(jī)上,保持蓋子關(guān)閉,降落傘被壓縮在“彈簧”上。在下面GIF里,你可以看到如何將降落傘放入火箭內(nèi)部。
我們?cè)陔娐钒迳蠟闊o線電模塊放置了一些母頭,并使用長的公頭到母頭的電纜連接它。
對(duì)于伺服電機(jī),我們放了一些公頭。穩(wěn)壓器用于為NRF24L01 提供電源,因?yàn)槲覀儼l(fā)現(xiàn)Arduino的3.3V輸出不能提供足夠的電壓,程序有時(shí)會(huì)失敗。你可以使用任何你想要的方法連接元件,但請(qǐng)記住紙板支架內(nèi)的空間是有限的。要把電路板安裝到紙板支架上,首先,把它從瓶子里拿出來(1),把電路板放在紙板支架的左側(cè)上面,并在左上角和右下角做標(biāo)記,如(2)所示。取出電路板,在每個(gè)角上標(biāo)記并切出2個(gè)相距約10毫米的小矩形,如(3)所示。對(duì)于每一對(duì)孔,從紙板支架的背面把一條小線穿過孔(可能需要推動(dòng)“彈簧”使線穿過),用線將線路板固定在紙板上,如圖(4)。在最后一張圖片上,我們展示了固定其中一個(gè)角的結(jié)果,電線的一端穿過紙板上的一個(gè)孔,然后我們扭動(dòng)它,使它保持在原位。
然后將電源線連接到充電寶,將NRF24L01 連接到電路板,如(6)和(7)所示。最后將元件固定在紙板上(8)。我們用膠帶將無線電模塊固定住,用雙面膠帶將充電寶固定住,并用膠帶加固。請(qǐng)記住,為了使紙板支架適合于瓶?jī)?nèi),它上面的元件不應(yīng)越過圓圈的邊界,所以要把所有東西放在圓圈內(nèi)。在把紙板支架放進(jìn)瓶子里之前,把程序
??Requires?the?following?libraries:
??RF24?by?TMRh20,?Avamander
??MPU6050?by?Electronic?Cats
??Connections:
????Shown?in?the?schematic
*/
#include?
#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?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(
水火箭是一種模型火箭,它使用壓力室(通常是一個(gè)PET瓶,也就是碳酸飲料瓶)內(nèi)的水和壓縮空氣作為推力發(fā)動(dòng)機(jī)。火箭的運(yùn)行可以用牛頓第三定律來解釋,壓縮室中的水被壓縮空氣拋出,因?yàn)樗噲D釋放壓力釋放積累的勢(shì)能,所以在相反的方向會(huì)產(chǎn)生一個(gè)推動(dòng)火箭的力。
▲? 效果演示
冷知識(shí):
PET:Polyethylene Terephthalate(聚對(duì)苯二甲酸乙二醇酯)礦泉水瓶用的塑料就是聚對(duì)苯二甲酸乙二醇酯,翻轉(zhuǎn)礦泉水的瓶子,可以看見下面有個(gè)小小的符號(hào),三角形中寫了數(shù)字“1”,這是最常見的塑料材質(zhì)之一,絕大多數(shù)的礦泉水、飲料瓶采用這種材料。具質(zhì)輕、透明度高、耐沖擊不易碎裂等特性;耐熱至70℃,只適合裝暖飲或凍飲,裝高溫液體、或加熱則易變形,有對(duì)人體有害的物質(zhì)融出。
材料
火箭機(jī)身
- 3個(gè)PET瓶,3L大?。ㄖ匾氖?,至少有一個(gè)瓶子是用來儲(chǔ)存蘇打水的,因?yàn)樗仨毮軌虺惺芨邏毫Γ?/span>
- 4x Balsa木板 200 * 25mm
- 8x 螺釘
- 1x 噴漆
- 1x 橡皮筋
- 1x 降落傘(我們用了一把舊傘,在布的每個(gè)尖端都系上了繩子)
- 1x PC板 250 * 250mm
電子部分
- 4根扎帶
- 紙板
- 1個(gè)面包板
- 1x 加速器(我們使用MPU6050,它有一個(gè)加速器和陀螺儀)
- 2個(gè)Arduino板(我們使用了Arduino nano和Arduino mega)
- 1個(gè)3.3V電壓調(diào)節(jié)器(我們使用LM317可調(diào)電壓調(diào)節(jié)器)如果使用LM317的電壓調(diào)節(jié)器電路,則還需要:
- 1x 電阻器(390歐姆)
- 1x 電阻器(240歐姆)
- 1x 伺服電機(jī) (我們使用的是普通的SG90)
- 2x NRF24L01 模塊
- 1x 電池,為電路板供電(我們使用了一個(gè)充電寶)。將充電寶連接到電路板需要:
- 1x USB-A連接器
- 母頭和公頭
- 膠帶
- 雙面膠帶
- 熱熔膠
工具
- 熱熔膠槍
- 剪刀
- 記號(hào)筆
- 電烙鐵
- 鑷子
- 測(cè)量帶
- 訂書機(jī)
- 水火箭發(fā)射器(我們?cè)谶@個(gè)說明中沒有解釋如何制作火箭發(fā)射器,但你可以查看這篇水火箭的文章,自己制作一個(gè)http://aircommandrockets.com/rocket_launcher.htm)
步驟一:降落傘制作
計(jì)算瓶子的半徑
如(1)所示,測(cè)量周長,然后應(yīng)用公式r=c/(2*pi)
來計(jì)算半徑,在我們的例子中,半徑是60毫米。根據(jù)這些信息,在紙板上標(biāo)出2個(gè)半徑為瓶子半徑減去1毫米的圓(在我們的例子中是59毫米),并將其剪下,如(2)和(3)所示。對(duì)每個(gè)圓,按(4)所示畫線。為此,我們首先畫出一條穿過圓心的線,這條線將被稱為線1;在線1的一端測(cè)量40毫米,然后畫一條與圓的邊界相接觸的垂直線,這條線將被稱為線2;在線1的另一端測(cè)量20毫米,畫一個(gè)點(diǎn);現(xiàn)在在該點(diǎn)和線2的兩端之間各畫一條虛線,這條虛線的長度記為L。步驟二
根據(jù)上述測(cè)量值(L),在紙板上畫一個(gè)高110毫米,寬(L)×4毫米的長方形,每隔(L)毫米劃一條垂直線(5);切開大的長方形,在中間切線,切成兩個(gè)大小相同的長方形,如(6)所示;對(duì)于每一個(gè)長方形紙板,通過標(biāo)記線切割紙板的頂層,以便我們可以折疊它們;在其中一個(gè)圓圈的標(biāo)記線上涂上熱熔膠,并將其中一個(gè)折疊的長方形紙板粘起來,然后將另一個(gè)長方形紙板粘在前一個(gè)長方形紙板的后面以加固它;我們需要為扎帶開孔,所以在距離長方形兩端約15毫米處標(biāo)出一條線,并在這條線上畫出4個(gè)高約3毫米、寬約5毫米的長方形,如(9)所示,它們之間的距離大約相等;將另一個(gè)圓粘在上面;切斷小矩形,并測(cè)試一下扎帶是否能穿過小孔。
步驟三
在火箭頂部的降落傘彈射系統(tǒng)的空腔中,如(11)所示,在距離瓶子底部約50毫米處劃出一個(gè)圓圈,并切開它,這就成了一個(gè)沒有底部的瓶子。把用硬紙板做的支架放在這個(gè)瓶子里。支架在里面,在瓶子上標(biāo)出一個(gè)矩形,覆蓋支架的正面(支架的正面是我們?yōu)樵鷰Т蚩椎哪且幻?,或者是空間最大的那一面),這個(gè)矩形在每個(gè)水平端應(yīng)該有20毫米的額外空間。現(xiàn)在取下紙板支架,用切割機(jī)切割矩形,如(12)、(13)和(14)所示,小心地將矩形從瓶子里切出來,因?yàn)檫@部分以后將用于固定里面的降落傘。然后在長方形的一端上開個(gè)洞,用橡皮筋穿過,如(15)所示,最后用膠帶把長方形固定在瓶子的右邊(就是把瓶子豎起來的時(shí)候),這樣就可以當(dāng)一個(gè)蓋子了,如(16)所示。
步驟四
從背面看紙板支架,在右側(cè)標(biāo)記一個(gè)長方形,大約在中心位置標(biāo)記伺服電機(jī)底部的尺寸,對(duì)于我們使用的那個(gè)電機(jī)(SG90),尺寸是22毫米高,12毫米寬,如(18)所示。現(xiàn)在切開這個(gè)長方形的小孔,插入電機(jī)。如(19)和(20)所示,用螺釘或熱熔膠把電機(jī)固定在支架上。PS: 如果紙板有點(diǎn)薄,螺絲可能會(huì)不起作用,對(duì)螺絲用力過猛也會(huì)導(dǎo)致安裝松動(dòng),在這種情況下,熱膠更容易、更安全。在紙板支架的左側(cè),開一個(gè)小孔,讓電機(jī)的電線通過,盡量靠右放,如(19)所示。
步驟五
接下來我們將要制作降落傘“彈簧”,并把它固定在紙板箱上。如(21)所示,從一個(gè)未使用的瓶子上剪下一個(gè)230毫米×96毫米的矩形(用卷尺測(cè)量)作為降落傘“彈簧”。在剪下來的正方形塑料片的每個(gè)短端,在離邊界約10毫米處劃一條線,將標(biāo)記線與紙板支架兩端的孔的邊緣對(duì)齊(在紙板支架的背面),并在每個(gè)孔上做一個(gè)標(biāo)記,如(22)所示。用切割器或電烙鐵在每個(gè)標(biāo)記的矩形上打一個(gè)孔。如(23)所示,用扎帶將“彈簧”固定在紙板支架上。如(24)所示,必要時(shí)用鉗子將扎帶穿過(如果“彈簧”礙事,你也可以將它彎曲)。將紙板插入瓶中,使“彈簧”位于孔的一側(cè);為了把紙板支架推入,可能需要先把“彈簧”推到支架上,然后再把支架推到瓶子里面去;在電機(jī)的頂部畫一個(gè)長方形,并把它剪下來,這個(gè)孔是橡皮筋穿過的地方,它將被連接到電機(jī)上,保持蓋子關(guān)閉,降落傘被壓縮在“彈簧”上。在下面GIF里,你可以看到如何將降落傘放入火箭內(nèi)部。
步驟六 電子部分
電子裝置主要由Arduino Nano、MPU6090加速器 陀螺儀、設(shè)置為3.3V的LM317穩(wěn)壓電路、一個(gè)充電寶、一個(gè)無線電模塊NRF240L01 和一個(gè)伺服電機(jī)組成,下面的原理圖rocket.pdf
顯示了連接圖。我們?cè)陔娐钒迳蠟闊o線電模塊放置了一些母頭,并使用長的公頭到母頭的電纜連接它。
對(duì)于伺服電機(jī),我們放了一些公頭。穩(wěn)壓器用于為NRF24L01 提供電源,因?yàn)槲覀儼l(fā)現(xiàn)Arduino的3.3V輸出不能提供足夠的電壓,程序有時(shí)會(huì)失敗。你可以使用任何你想要的方法連接元件,但請(qǐng)記住紙板支架內(nèi)的空間是有限的。要把電路板安裝到紙板支架上,首先,把它從瓶子里拿出來(1),把電路板放在紙板支架的左側(cè)上面,并在左上角和右下角做標(biāo)記,如(2)所示。取出電路板,在每個(gè)角上標(biāo)記并切出2個(gè)相距約10毫米的小矩形,如(3)所示。對(duì)于每一對(duì)孔,從紙板支架的背面把一條小線穿過孔(可能需要推動(dòng)“彈簧”使線穿過),用線將線路板固定在紙板上,如圖(4)。在最后一張圖片上,我們展示了固定其中一個(gè)角的結(jié)果,電線的一端穿過紙板上的一個(gè)孔,然后我們扭動(dòng)它,使它保持在原位。
步驟7
在電路板的頂部,如(5)所示,在紙板支架上標(biāo)記并切割一個(gè)大約10 * 30毫米的矩形。將電源和無線電模塊(NRF24L01 )的電纜穿過該孔。然后將電源線連接到充電寶,將NRF24L01 連接到電路板,如(6)和(7)所示。最后將元件固定在紙板上(8)。我們用膠帶將無線電模塊固定住,用雙面膠帶將充電寶固定住,并用膠帶加固。請(qǐng)記住,為了使紙板支架適合于瓶?jī)?nèi),它上面的元件不應(yīng)越過圓圈的邊界,所以要把所有東西放在圓圈內(nèi)。在把紙板支架放進(jìn)瓶子里之前,把程序
rocket.ino
上傳到Arduino上,用下面的測(cè)試程序檢查程序的運(yùn)行情況。/*??Requires?the?following?libraries:
??RF24?by?TMRh20,?Avamander
??MPU6050?by?Electronic?Cats
??Connections:
????Shown?in?the?schematic
*/
#include?
#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?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(