2026年4月10日 星期五

全自動防結露天文中樞建置 (番外篇):全自動智慧除霧中樞 (開源獨立版)

  • 拒絕商業綁架
  • 堅持純粹的 DIY:會算露點的 Arduino 獨立防結露系統
  • 擺脫電腦束縛:隨插即用的獨立除霧演算法全自動智慧除霧帶
  • 免連 NINA 也懂露點:獨立型智慧氣象中樞實作
  • 雙通道精準降載:Arduino 獨立運作版防結露中樞

前情提要:全自動防結露天文中樞建置

⚠️ 重要提醒本篇釋出的 UNO 代碼為隨插即用的獨立運作版為了達成免接電腦即可獨立運作的目標,此版本去除了原本架構中 Raspberry Pi 4 與 ASCOM Alpaca 協議的橋接功能。因此,完成後的裝置無法連線至電腦,也無法透過 NINA 等天文軟體讀取溫濕度數據或進行控制前文能與 NINA 連動的版本是針對我個人設備特製的雙核心架構,特此說明。


獨立運作版:智慧除霧帶核心代碼

本專案將露點運算與動態 PWM 邏輯下放至 Arduino UNO,只要接上電源即可獨立運作,完全脫離外部電腦。代碼採 CC BY-NC 4.0 授權,僅供同好 DIY 交流,嚴禁商業量產。

C++

/*
 * Project: Auto-Dew Controller (Standalone Version)
 * Author: Luke
 * License: CC BY-NC 4.0 (Non-Commercial Use Only)
 * Copyright (c) 2026 Luke. All rights reserved.
 * * 本專案代碼與硬體架構設計僅供個人與同好交流使用,
 * 嚴禁任何未經授權的套件販賣、量產或其他商業牟利行為。
 * * 【免責聲明】
 * 本程式碼僅提供概念驗證與邏輯參考。使用者須自行承擔 DIY 風險,
 * 若因線路短接、供電錯誤造成設備燒毀或硬體損壞,作者概不負責。
 */

#include <DHT.h>
#include <math.h> // 引入數學函式庫計算 log

#define DHTPIN 4
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);

const int pwmPin1 = 9;  // 第一路 (導星鏡)
const int pwmPin2 = 11; // 第二路 (主鏡)

// 導星鏡火力權重 (避免過熱產生熱擾動影響導星)
const float GUIDE_WEIGHT = 0.5;

unsigned long lastReadTime = 0;

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(pwmPin1, OUTPUT);
  pinMode(pwmPin2, OUTPUT);
  analogWrite(pwmPin1, 0);
  analogWrite(pwmPin2, 0);
}

void loop() {
  // 每 5 秒讀取一次溫濕度,防止 DHT22 積熱
  if (millis() - lastReadTime >= 5000) {
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (!isnan(h) && !isnan(t)) {
      // 1. 計算露點溫度 (Magnus-Tetens 公式)
      float alpha = log(h / 100.0) + (17.62 * t) / (243.12 + t);
      float dewPoint = (243.12 * alpha) / (17.62 - alpha);

      // 2. 計算溫差
      float deltaT = t - dewPoint;
      int basePwm = 0;

      // 3. 動態 PWM 演算法判斷
      if (deltaT >= 5.0) {
        // 安全區
        basePwm = 0;
      } else if (deltaT <= 1.0) {
        // 高危險區
        basePwm = 255;
      } else {
        // 動態警戒區 (1.0°C ~ 5.0°C)
        // 將溫差線性轉換為 0~255 的 PWM 數值 (放大 10 倍處理浮點數對應)
        long dT_10 = deltaT * 10;
        basePwm = map(dT_10, 50, 10, 0, 255);
        basePwm = constrain(basePwm, 0, 255);
      }

      // 4. 計算雙通道實際輸出
      int pwm1 = basePwm * GUIDE_WEIGHT; // 導星鏡吃 50% 火力
      int pwm2 = basePwm;                // 主鏡吃 100% 火力

      // 5. 執行硬體輸出
      analogWrite(pwmPin1, constrain(pwm1, 0, 255));
      analogWrite(pwmPin2, constrain(pwm2, 0, 255));

      // 6. 序列埠監控輸出 (獨立運作時不影響,接電腦可看數據)
      Serial.print("T:"); Serial.print(t, 1); Serial.print("C, ");
      Serial.print("H:"); Serial.print(h, 1); Serial.print("%, ");
      Serial.print("Dew:"); Serial.print(dewPoint, 1); Serial.print("C, ");
      Serial.print("Diff:"); Serial.print(deltaT, 1); Serial.print("C -> ");
      Serial.print("PWM1(導星鏡):"); Serial.print(pwm1); Serial.print(", ");
      Serial.print("PWM2(主鏡):"); Serial.println(pwm2);
      
    } else {
      Serial.println("DHT22 Read Error!");
    }
    lastReadTime = millis();
  }
}

所需材料

  1. 大腦:Arduino UNO 開發板。
  2. 感測:DHT22 溫濕度感測器。
  3. 動力:N-MOSFET 四路驅動模組。
  4. 負載:12V 除霧帶兩組(分別用於導星鏡與主鏡)。
  5. 電源:12V 獨立變壓器或深循環電池(供除霧帶)、5V 手機充電器或電腦 USB(供 UNO)。
  6. 耗材:杜邦線、單芯線、保鮮盒、防水黏土、熱熔膠。

硬體製作步驟

  1. 接腳配置 (DHT22 感測端):

    • 將 DHT22 的 VCC 腳位唯一接至 UNO 的 3.3V 腳位(嚴禁接 5V 以免鎖死晶片)。
    • 將 DHT22 的 GND 接 UNO 的 GND
    • 將 DHT22 的 DATA 接 UNO 的 Pin 4
  2. 接腳配置 (N-MOSFET 控制端):

    • 將 UNO 的 Pin 9 接至 MOSFET 模組的第一路 PWM 訊號輸入(對應導星鏡)。
    • 將 UNO 的 Pin 11 接至 MOSFET 模組的第二路 PWM 訊號輸入(對應主鏡)。
    • 將 UNO 的 GND 接至 MOSFET 模組的訊號端 GND(共地)。
  3. 強弱電實體隔離 (電源佈線):

    • 將 12V 獨立電源的正負極,直接鎖入 N-MOSFET 端子台的主電源輸入。絕對不可將此 12V 電源接入 UNO。
    • 將兩組除霧帶分別鎖入 N-MOSFET 第一路與第二路的輸出端子台。
  4. 防水抗露工程:

    • 用美工刀在保鮮盒邊緣割出 U 型槽。
    • 將所有線材理齊通過 U 型槽。
    • 在縫隙處填滿防水黏土,蓋上保鮮盒蓋後,於外部接縫及 DHT22 裸露線頭處全面補上熱熔膠密封。

系統使用說明

  1. 韌體燒錄: 將 UNO 接上電腦,透過 Arduino IDE 將上述程式碼燒錄進開發板。

  2. 系統佈署: * 將 DHT22 放置於能真實反映環境氣溫的開闊處。

    • 將第一路除霧帶綁上導星鏡。
    • 將第二路除霧帶綁上主鏡。
  3. 獨立供電順序:

    • 先將 12V 電源接上 N-MOSFET 模組(此時除霧帶不會加熱,因無訊號驅動)。
    • 將任意手機 5V 充電器或行動電源插上 UNO 的 USB 孔。
  4. 全自動防護啟動:

    通電後,UNO 即刻接管溫差偵測,可透過 N-MOSFET 模組上的指示燈觀察狀態:

    • 環境乾燥 (溫差 ≥ 5°C):燈號熄滅,系統零耗電。
    • 水氣攀升 (溫差 < 5°C):燈號閃爍或微亮,進入動態輸出。第一路燈號亮度會明顯低於第二路(導星鏡 50% 降載發揮作用)。
    • 極端高濕 (溫差 ≤ 1°C):燈號恆亮,全功率輸出強制除霧。

沒有留言:

張貼留言

您可以留下意見,但 Luke 可能無法馬上回覆,尚請見諒。