基于ESP8266的桌面太空追踪器

ISS 天线:打造你的桌面太空追踪器

在浩瀚的宇宙中,国际空间站(ISS)作为一个重要的科研平台,始终吸引着无数太空爱好者的目光。作为一名太空爱好者,我曾多次尝试通过在线服务追踪 ISS 的位置,但随着这些服务的逐渐消失,我决定自己动手打造一个能够实时提醒我 ISS 过境的桌面天线。今天,我将分享这个项目的详细制作过程,希望它能成为你或你朋友的下一个有趣项目。
在这里插入图片描述
在这里插入图片描述

项目简介

这个 ISS 天线项目是我制作的第三个 ISS 跟踪设备。它不仅能告诉你 ISS 是否在你的头顶上方,还能显示它离你有多远。这个迷你桌面天线的核心是一个 RGB LED,当 ISS 远离你的位置时,它会发出红色光芒;当 ISS 接近大约 1000 公里范围内时,它会发出黄色光芒并缓慢闪烁;当 ISS 进入可见范围时,它会发出绿色光芒并快速闪烁。这正是你冲到外面欣赏 ISS 飞越的绝佳时机。

这个项目不仅外观酷炫,而且非常实用,适合作为礼物送给任何太空爱好者。接下来,我将详细介绍如何制作这个 ISS 天线。
在这里插入图片描述

所需材料

在开始制作之前,我们需要准备以下材料和工具:

电子元件

  1. ESP8266 微控制器:例如 Wemos D1 Mini,用于处理数据和控制 LED。
  2. 共阴极 RGB LED:用于显示 ISS 的位置信息。
  3. 470Ω 电阻:用于限制 LED 的电流,防止损坏。
  4. 连接线:用于连接各个组件。
  5. Micro USB 数据线:用于给 ESP8266 供电。

3D 打印材料

  • PLA 或 ABS 耗材:用于打印天线的外壳。
  • 3D 打印机:用于打印天线的各个部件。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

其他材料

  • 喷漆(可选):用于给天线外壳上色。
  • 胶水:用于固定各个部件。

设计与 3D 打印

设计思路

为了制作这个 ISS 天线,我使用了 Fusion 360 进行建模。整个天线由以下几个部分组成:

  1. 侧三角架:用于支撑整个天线结构。
  2. 外壳:用于容纳 ESP8266 微控制器和电线。
  3. 桥接部分:用于固定天线的碟形部分。
  4. 碟形部分:用于安装 RGB LED。
  5. 圆形盖板:用于覆盖 LED 引脚的焊接部分。
    在这里插入图片描述

3D 打印过程

  1. 模型设计:在 Fusion 360 中设计好各个部件后,将模型导出为 STL 文件。
  2. 切片设置:将 STL 文件导入到切片软件(如 Cura)中,设置打印参数。建议使用默认参数,以确保打印质量。
  3. 打印过程:将 PLA 或 ABS 耗材装入 3D 打印机,开始打印。打印完成后,检查各个部件是否有瑕疵,如有需要可以进行简单的清理。

如果你没有 3D 打印机,也可以使用 PVC 板手工制作天线的各个部件。例如,你可以用冰激凌杯作为碟形部分。

电路搭建

电路连接

在这里插入图片描述
在这里插入图片描述

  1. 连接 RGB LED

    • RGB LED 的红色引脚连接到 ESP8266 的 D5 引脚。
    • RGB LED 的绿色引脚连接到 ESP8266 的 D6 引脚。
    • RGB LED 的蓝色引脚连接到 ESP8266 的 D7 引脚。
    • RGB LED 的共阴极引脚连接到 ESP8266 的 GND 引脚。
  2. 连接电阻

    • 在每个 LED 引脚和 ESP8266 引脚之间串联一个 470Ω 电阻,以限制电流。
  3. 连接电源

    • 使用 Micro USB 数据线为 ESP8266 供电。
      在这里插入图片描述

焊接过程

  1. 焊接电阻:将 470Ω 电阻焊接到 RGB LED 的每个引脚上。
  2. 连接电线:将电阻的另一端连接到 ESP8266 的对应引脚上。
  3. 固定 LED:将 LED 安装到圆形盖板上,并用胶水固定。
    在这里插入图片描述
    在这里插入图片描述

最终组装

组装步骤

  1. 安装三角架:将三角架的各个部分用胶水粘合在一起,确保结构稳固。
  2. 安装外壳:将 ESP8266 微控制器放入外壳中,并用胶水固定。
  3. 安装碟形部分:将碟形部分安装到桥接部分上,并用胶水固定。
  4. 安装 LED:将 RGB LED 安装到碟形部分的中心,并用胶水固定。
  5. 连接电线:将所有电线通过外壳的孔洞引出,并连接到 ESP8266 上。
  6. 安装天线:将天线安装到桥接部分上,并用胶水固定。
    在这里插入图片描述
    在这里插入图片描述

上色与装饰

  1. 喷漆:使用喷漆为天线的各个部件上色,使其外观更加美观。
  2. 组装完成:将所有部件组装在一起,完成整个天线的制作。

代码上传

代码功能

这个项目的代码主要实现以下功能:

  1. 获取 ISS 的实时位置:通过 Open Notify API 获取 ISS 的实时经纬度。
  2. 计算距离:使用 Haversine 公式计算 ISS 与你当前位置的距离。
  3. 更新 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();
}

上传代码

  1. 安装 Arduino IDE:从 Arduino 官方网站下载并安装 Arduino IDE。
  2. 安装 ESP8266 板管理器:在 Arduino IDE 中,打开“文件”->“首选项”,然后打开“工具”->“开发板”->“开发板管理器”,搜索并安装 ESP8266。
  3. 安装所需库:在 Arduino IDE 中,打开“草图”->“包含库”->“管理库”,搜索并安装以下库:
    • ESP8266WiFi
    • ArduinoJson
  4. 上传代码:将上述代码复制到 Arduino IDE 中,选择正确的开发板类型(Wemos D1 Mini)和 COM 端口,然后点击“上传”按钮。

测试与使用

测试步骤

  1. 连接电源:使用 Micro USB 数据线为 ESP8266 供电。
  2. 检查 LED:观察 RGB LED 的颜色变化,确保其能够根据 ISS 的距离正确显示颜色。
  3. 调整位置:将天线放置在你的工作桌上,确保其能够正常工作。
    在这里插入图片描述
    在这里插入图片描述

使用建议

  • 夜间观察:在夜间,你可以通过 LED 的颜色变化快速判断 ISS 是否在可见范围内。
  • 个性化:你可以通过修改代码来调整 LED 的颜色和闪烁频率,使其更适合你的需求。
  • 美化外壳:你可以使用喷漆或贴纸来美化 3D 打印的外壳,使其更加符合你的个人风格。

项目扩展

这个项目不仅是一个有趣的 DIY 项目,还可以根据你的需求进行扩展和定制。以下是一些扩展建议:

  1. 添加更多传感器:例如,添加温度传感器或湿度传感器,扩展设备的功能。
  2. 数据记录:添加一个 SD 卡模块,用于记录 ISS 的过境数据,方便后续分析。
  3. 添加蓝牙功能:通过添加蓝牙模块,将测量数据传输到手机或其他设备。
  4. 美化外壳:使用喷漆或贴纸来美化 3D 打印的外壳,使其更加符合你的个人风格。

总结

这个 ISS 天线项目是一个非常有趣且实用的 DIY 项目,它不仅能够让你亲手制作一个能够实时提醒你 ISS 过境的桌面天线,还能让你学习到 3D 打印、电子电路搭建和 Arduino 编程的基础知识。通过这个项目,你可以实现对 ISS 的实时追踪,并通过 RGB LED 清晰地显示其位置信息。更重要的是,你可以根据自己的需求对项目进行扩展和定制,让它成为你独一无二的桌面装饰品。

希望这篇文章能够激发你的创造力,让你动手制作属于自己的 ISS 天线。如果你在制作过程中遇到任何问题,欢迎在评论区留言,我会尽力为你解答。如果你已经完成了这个项目,也欢迎在评论区分享你的作品,让我们一起交流和学习!

希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。

作者:Svan.


注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Svan.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值