ISS 天線:打造你的桌面太空追蹤器
在浩瀚的宇宙中,國際空間站(ISS)作為一個(gè)重要的科研平臺,始終吸引著無數(shù)太空愛好者的目光。作為一名太空愛好者,我曾多次嘗試通過在線服務(wù)追蹤 ISS 的位置,但隨著這些服務(wù)的逐漸消失,我決定自己動手打造一個(gè)能夠?qū)崟r(shí)提醒我 ISS 過境的桌面天線。今天,我將分享這個(gè)項(xiàng)目的詳細(xì)制作過程,希望它能成為你或你朋友的下一個(gè)有趣項(xiàng)目。
項(xiàng)目簡介
這個(gè) ISS 天線項(xiàng)目是我制作的第三個(gè) ISS 跟蹤設(shè)備。它不僅能告訴你 ISS 是否在你的頭頂上方,還能顯示它離你有多遠(yuǎn)。這個(gè)迷你桌面天線的核心是一個(gè) RGB LED,當(dāng) ISS 遠(yuǎn)離你的位置時(shí),它會發(fā)出紅色光芒;當(dāng) ISS 接近大約 1000 公里范圍內(nèi)時(shí),它會發(fā)出黃色光芒并緩慢閃爍;當(dāng) ISS 進(jìn)入可見范圍時(shí),它會發(fā)出綠色光芒并快速閃爍。這正是你沖到外面欣賞 ISS 飛越的絕佳時(shí)機(jī)。
這個(gè)項(xiàng)目不僅外觀酷炫,而且非常實(shí)用,適合作為禮物送給任何太空愛好者。接下來,我將詳細(xì)介紹如何制作這個(gè) ISS 天線。
所需材料
在開始制作之前,我們需要準(zhǔn)備以下材料和工具:
電子元件
- ESP8266 微控制器:例如 Wemos D1 Mini,用于處理數(shù)據(jù)和控制 LED。
- 共陰極 RGB LED:用于顯示 ISS 的位置信息。
- 470Ω 電阻:用于限制 LED 的電流,防止損壞。
- 連接線:用于連接各個(gè)組件。
- Micro USB 數(shù)據(jù)線:用于給 ESP8266 供電。
3D 打印材料
- PLA 或 ABS 耗材:用于打印天線的外殼。
- 3D 打印機(jī):用于打印天線的各個(gè)部件。
其他材料
- 噴漆(可選):用于給天線外殼上色。
- 膠水:用于固定各個(gè)部件。
設(shè)計(jì)與 3D 打印
設(shè)計(jì)思路
為了制作這個(gè) ISS 天線,我使用了 Fusion 360 進(jìn)行建模。整個(gè)天線由以下幾個(gè)部分組成:
- 側(cè)三角架:用于支撐整個(gè)天線結(jié)構(gòu)。
- 外殼:用于容納 ESP8266 微控制器和電線。
- 橋接部分:用于固定天線的碟形部分。
- 碟形部分:用于安裝 RGB LED。
- 圓形蓋板:用于覆蓋 LED 引腳的焊接部分。
3D 打印過程
- 模型設(shè)計(jì):在 Fusion 360 中設(shè)計(jì)好各個(gè)部件后,將模型導(dǎo)出為 STL 文件。
- 切片設(shè)置:將 STL 文件導(dǎo)入到切片軟件(如 Cura)中,設(shè)置打印參數(shù)。建議使用默認(rèn)參數(shù),以確保打印質(zhì)量。
- 打印過程:將 PLA 或 ABS 耗材裝入 3D 打印機(jī),開始打印。打印完成后,檢查各個(gè)部件是否有瑕疵,如有需要可以進(jìn)行簡單的清理。
如果你沒有 3D 打印機(jī),也可以使用 PVC 板手工制作天線的各個(gè)部件。例如,你可以用冰激凌杯作為碟形部分。
電路搭建
電路連接
- 連接 RGB LED:
- RGB LED 的紅色引腳連接到 ESP8266 的 D5 引腳。
- RGB LED 的綠色引腳連接到 ESP8266 的 D6 引腳。
- RGB LED 的藍(lán)色引腳連接到 ESP8266 的 D7 引腳。
- RGB LED 的共陰極引腳連接到 ESP8266 的 GND 引腳。
- 連接電阻:
- 在每個(gè) LED 引腳和 ESP8266 引腳之間串聯(lián)一個(gè) 470Ω 電阻,以限制電流。
- 連接電源:
- 使用 Micro USB 數(shù)據(jù)線為 ESP8266 供電。
- 使用 Micro USB 數(shù)據(jù)線為 ESP8266 供電。
焊接過程
- 焊接電阻:將 470Ω 電阻焊接到 RGB LED 的每個(gè)引腳上。
- 連接電線:將電阻的另一端連接到 ESP8266 的對應(yīng)引腳上。
- 固定 LED:將 LED 安裝到圓形蓋板上,并用膠水固定。
最終組裝
組裝步驟
-
- 安裝三角架:將三角架的各個(gè)部分用膠水粘合在一起,確保結(jié)構(gòu)穩(wěn)固。
- 安裝外殼:將 ESP8266 微控制器放入外殼中,并用膠水固定。
- 安裝碟形部分:將碟形部分安裝到橋接部分上,并用膠水固定。
- 安裝 LED:將 RGB LED 安裝到碟形部分的中心,并用膠水固定。
- 連接電線:將所有電線通過外殼的孔洞引出,并連接到 ESP8266 上。
- 安裝天線:將天線安裝到橋接部分上,并用膠水固定。
上色與裝飾
- 噴漆:使用噴漆為天線的各個(gè)部件上色,使其外觀更加美觀。
- 組裝完成:將所有部件組裝在一起,完成整個(gè)天線的制作。
代碼上傳
代碼功能
這個(gè)項(xiàng)目的代碼主要實(shí)現(xiàn)以下功能:
- 獲取 ISS 的實(shí)時(shí)位置:通過 Open Notify API 獲取 ISS 的實(shí)時(shí)經(jīng)緯度。
- 計(jì)算距離:使用 Haversine 公式計(jì)算 ISS 與你當(dāng)前位置的距離。
- 更新 LED 顏色:根據(jù) ISS 的距離,更新 RGB LED 的顏色和閃爍頻率。
代碼示例
以下是代碼的核心部分:
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <Adafruit_NeoPixel.h>
#define LED_PIN D5
#define LED_COUNT 1
#define WIFI_SSID "your_ssid"
#define WIFI_PASS "your_password"
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
const char* api_url = "http://api.open-notify.org/iss-now.json";
const double home_lat = 37.7749; // 替換為你的緯度
const double home_lon = -122.4194; // 替換為你的經(jīng)度
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
strip.begin();
strip.show();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(api_url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
double iss_lat = doc["iss_position"]["latitude"];
double iss_lon = doc["iss_position"]["longitude"];
double distance = haversine(home_lat, home_lon, iss_lat, iss_lon);
updateLED(distance);
}
http.end();
}
delay(30000); // 每 30 秒更新一次
}
double haversine(double lat1, double lon1, double lat2, double lon2) {
const double R = 6371; // 地球半徑,單位:公里
double dLat = degToRad(lat2 - lat1);
double dLon = degToRad(lon2 - lon1);
double a = sin(dLat / 2) * sin(dLat / 2) +
cos(degToRad(lat1)) * cos(degToRad(lat2)) *
sin(dLon / 2) * sin(dLon / 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
return R * c;
}
void updateLED(double distance) {
if (distance > 1000) {
strip.setPixelColor(0, strip.Color(255, 0, 0)); // 紅色
} else if (distance > 500) {
strip.setPixelColor(0, strip.Color(255, 255, 0)); // 黃色
} else {
strip.setPixelColor(0, strip.Color(0, 255, 0)); // 綠色
}
strip.show();
}
上傳代碼
- 安裝 Arduino IDE:從 Arduino 官方網(wǎng)站下載并安裝 Arduino IDE。
- 安裝 ESP8266 板管理器:在 Arduino IDE 中,打開“文件”->“首選項(xiàng)”,然后打開“工具”->“開發(fā)板”->“開發(fā)板管理器”,搜索并安裝 ESP8266。
- 安裝所需庫:在 Arduino IDE 中,打開“草圖”->“包含庫”->“管理庫”,搜索并安裝以下庫:
- ESP8266WiFi
- ArduinoJson
- 上傳代碼:將上述代碼復(fù)制到 Arduino IDE 中,選擇正確的開發(fā)板類型(Wemos D1 Mini)和 COM 端口,然后點(diǎn)擊“上傳”按鈕。
測試與使用
測試步驟
- 連接電源:使用 Micro USB 數(shù)據(jù)線為 ESP8266 供電。
- 檢查 LED:觀察 RGB LED 的顏色變化,確保其能夠根據(jù) ISS 的距離正確顯示顏色。
- 調(diào)整位置:將天線放置在你的工作桌上,確保其能夠正常工作。
使用建議
- 夜間觀察:在夜間,你可以通過 LED 的顏色變化快速判斷 ISS 是否在可見范圍內(nèi)。
- 個(gè)性化:你可以通過修改代碼來調(diào)整 LED 的顏色和閃爍頻率,使其更適合你的需求。
- 美化外殼:你可以使用噴漆或貼紙來美化 3D 打印的外殼,使其更加符合你的個(gè)人風(fēng)格。
項(xiàng)目擴(kuò)展
這個(gè)項(xiàng)目不僅是一個(gè)有趣的 DIY 項(xiàng)目,還可以根據(jù)你的需求進(jìn)行擴(kuò)展和定制。以下是一些擴(kuò)展建議:
- 添加更多傳感器:例如,添加溫度傳感器或濕度傳感器,擴(kuò)展設(shè)備的功能。
- 數(shù)據(jù)記錄:添加一個(gè) SD 卡模塊,用于記錄 ISS 的過境數(shù)據(jù),方便后續(xù)分析。
- 添加藍(lán)牙功能:通過添加藍(lán)牙模塊,將測量數(shù)據(jù)傳輸到手機(jī)或其他設(shè)備。
- 美化外殼:使用噴漆或貼紙來美化 3D 打印的外殼,使其更加符合你的個(gè)人風(fēng)格。
總結(jié)
這個(gè) ISS 天線項(xiàng)目是一個(gè)非常有趣且實(shí)用的 DIY 項(xiàng)目,它不僅能夠讓你親手制作一個(gè)能夠?qū)崟r(shí)提醒你 ISS 過境的桌面天線,還能讓你學(xué)習(xí)到 3D 打印、電子電路搭建和 Arduino 編程的基礎(chǔ)知識。通過這個(gè)項(xiàng)目,你可以實(shí)現(xiàn)對 ISS 的實(shí)時(shí)追蹤,并通過 RGB LED 清晰地顯示其位置信息。更重要的是,你可以根據(jù)自己的需求對項(xiàng)目進(jìn)行擴(kuò)展和定制,讓它成為你獨(dú)一無二的桌面裝飾品。
希望這篇文章能夠激發(fā)你的創(chuàng)造力,讓你動手制作屬于自己的 ISS 天線。如果你在制作過程中遇到任何問題,歡迎在評論區(qū)留言,我會盡力為你解答。如果你已經(jīng)完成了這個(gè)項(xiàng)目,也歡迎在評論區(qū)分享你的作品,讓我們一起交流和學(xué)習(xí)!
希望你喜歡這個(gè)項(xiàng)目,并在構(gòu)建過程中找到樂趣!如果你有任何問題或需要幫助,歡迎在評論區(qū)交流。
作者:Svan.
注意:本博文為不得在未經(jīng)本人同意進(jìn)行轉(zhuǎn)載或者二次創(chuàng)作,違者必究?。?!
博客主頁:https://blog.csdn.net/weixin_51141489,需要源碼或相關(guān)資料實(shí)物的友友請關(guān)注、點(diǎn)贊,私信吧!