ISS 天线:打造你的桌面太空追踪器
在浩瀚的宇宙中,国际空间站(ISS)作为一个重要的科研平台,始终吸引着无数太空爱好者的目光。作为一名太空爱好者,我曾多次尝试通过在线服务追踪 ISS 的位置,但随着这些服务的逐渐消失,我决定自己动手打造一个能够实时提醒我 ISS 过境的桌面天线。今天,我将分享这个项目的详细制作过程,希望它能成为你或你朋友的下一个有趣项目。
项目简介
这个 ISS 天线项目是我制作的第三个 ISS 跟踪设备。它不仅能告诉你 ISS 是否在你的头顶上方,还能显示它离你有多远。这个迷你桌面天线的核心是一个 RGB LED,当 ISS 远离你的位置时,它会发出红色光芒;当 ISS 接近大约 1000 公里范围内时,它会发出黄色光芒并缓慢闪烁;当 ISS 进入可见范围时,它会发出绿色光芒并快速闪烁。这正是你冲到外面欣赏 ISS 飞越的绝佳时机。
这个项目不仅外观酷炫,而且非常实用,适合作为礼物送给任何太空爱好者。接下来,我将详细介绍如何制作这个 ISS 天线。
所需材料
在开始制作之前,我们需要准备以下材料和工具:
电子元件
- ESP8266 微控制器:例如 Wemos D1 Mini,用于处理数据和控制 LED。
- 共阴极 RGB LED:用于显示 ISS 的位置信息。
- 470Ω 电阻:用于限制 LED 的电流,防止损坏。
- 连接线:用于连接各个组件。
- Micro USB 数据线:用于给 ESP8266 供电。
3D 打印材料
- PLA 或 ABS 耗材:用于打印天线的外壳。
- 3D 打印机:用于打印天线的各个部件。
其他材料
- 喷漆(可选):用于给天线外壳上色。
- 胶水:用于固定各个部件。
设计与 3D 打印
设计思路
为了制作这个 ISS 天线,我使用了 Fusion 360 进行建模。整个天线由以下几个部分组成:
- 侧三角架:用于支撑整个天线结构。
- 外壳:用于容纳 ESP8266 微控制器和电线。
- 桥接部分:用于固定天线的碟形部分。
- 碟形部分:用于安装 RGB LED。
- 圆形盖板:用于覆盖 LED 引脚的焊接部分。
3D 打印过程
- 模型设计:在 Fusion 360 中设计好各个部件后,将模型导出为 STL 文件。
- 切片设置:将 STL 文件导入到切片软件(如 Cura)中,设置打印参数。建议使用默认参数,以确保打印质量。
- 打印过程:将 PLA 或 ABS 耗材装入 3D 打印机,开始打印。打印完成后,检查各个部件是否有瑕疵,如有需要可以进行简单的清理。
如果你没有 3D 打印机,也可以使用 PVC 板手工制作天线的各个部件。例如,你可以用冰激凌杯作为碟形部分。
电路搭建
电路连接
-
连接 RGB LED:
- RGB LED 的红色引脚连接到 ESP8266 的 D5 引脚。
- RGB LED 的绿色引脚连接到 ESP8266 的 D6 引脚。
- RGB LED 的蓝色引脚连接到 ESP8266 的 D7 引脚。
- RGB LED 的共阴极引脚连接到 ESP8266 的 GND 引脚。
-
连接电阻:
- 在每个 LED 引脚和 ESP8266 引脚之间串联一个 470Ω 电阻,以限制电流。
-
连接电源:
- 使用 Micro USB 数据线为 ESP8266 供电。
- 使用 Micro USB 数据线为 ESP8266 供电。
焊接过程
- 焊接电阻:将 470Ω 电阻焊接到 RGB LED 的每个引脚上。
- 连接电线:将电阻的另一端连接到 ESP8266 的对应引脚上。
- 固定 LED:将 LED 安装到圆形盖板上,并用胶水固定。
最终组装
组装步骤
- 安装三角架:将三角架的各个部分用胶水粘合在一起,确保结构稳固。
- 安装外壳:将 ESP8266 微控制器放入外壳中,并用胶水固定。
- 安装碟形部分:将碟形部分安装到桥接部分上,并用胶水固定。
- 安装 LED:将 RGB LED 安装到碟形部分的中心,并用胶水固定。
- 连接电线:将所有电线通过外壳的孔洞引出,并连接到 ESP8266 上。
- 安装天线:将天线安装到桥接部分上,并用胶水固定。
上色与装饰
- 喷漆:使用喷漆为天线的各个部件上色,使其外观更加美观。
- 组装完成:将所有部件组装在一起,完成整个天线的制作。
代码上传
代码功能
这个项目的代码主要实现以下功能:
- 获取 ISS 的实时位置:通过 Open Notify API 获取 ISS 的实时经纬度。
- 计算距离:使用 Haversine 公式计算 ISS 与你当前位置的距离。
- 更新 LED 颜色:根据 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; // 替换为你的经度
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 官方网站下载并安装 Arduino IDE。
- 安装 ESP8266 板管理器:在 Arduino IDE 中,打开“文件”->“首选项”,然后打开“工具”->“开发板”->“开发板管理器”,搜索并安装 ESP8266。
- 安装所需库:在 Arduino IDE 中,打开“草图”->“包含库”->“管理库”,搜索并安装以下库:
- ESP8266WiFi
- ArduinoJson
- 上传代码:将上述代码复制到 Arduino IDE 中,选择正确的开发板类型(Wemos D1 Mini)和 COM 端口,然后点击“上传”按钮。
测试与使用
测试步骤
- 连接电源:使用 Micro USB 数据线为 ESP8266 供电。
- 检查 LED:观察 RGB LED 的颜色变化,确保其能够根据 ISS 的距离正确显示颜色。
- 调整位置:将天线放置在你的工作桌上,确保其能够正常工作。
使用建议
- 夜间观察:在夜间,你可以通过 LED 的颜色变化快速判断 ISS 是否在可见范围内。
- 个性化:你可以通过修改代码来调整 LED 的颜色和闪烁频率,使其更适合你的需求。
- 美化外壳:你可以使用喷漆或贴纸来美化 3D 打印的外壳,使其更加符合你的个人风格。
项目扩展
这个项目不仅是一个有趣的 DIY 项目,还可以根据你的需求进行扩展和定制。以下是一些扩展建议:
- 添加更多传感器:例如,添加温度传感器或湿度传感器,扩展设备的功能。
- 数据记录:添加一个 SD 卡模块,用于记录 ISS 的过境数据,方便后续分析。
- 添加蓝牙功能:通过添加蓝牙模块,将测量数据传输到手机或其他设备。
- 美化外壳:使用喷漆或贴纸来美化 3D 打印的外壳,使其更加符合你的个人风格。
总结
这个 ISS 天线项目是一个非常有趣且实用的 DIY 项目,它不仅能够让你亲手制作一个能够实时提醒你 ISS 过境的桌面天线,还能让你学习到 3D 打印、电子电路搭建和 Arduino 编程的基础知识。通过这个项目,你可以实现对 ISS 的实时追踪,并通过 RGB LED 清晰地显示其位置信息。更重要的是,你可以根据自己的需求对项目进行扩展和定制,让它成为你独一无二的桌面装饰品。
希望这篇文章能够激发你的创造力,让你动手制作属于自己的 ISS 天线。如果你在制作过程中遇到任何问题,欢迎在评论区留言,我会尽力为你解答。如果你已经完成了这个项目,也欢迎在评论区分享你的作品,让我们一起交流和学习!
希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。
作者:Svan.
注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!