Skip to content

s881215/Smart-Orchard-Monitoring-System

Repository files navigation

Smart-Orchard-Monitoring-System

8051 多感測器資料擷取與 MATLAB 數據處理

DHT22(溫濕度)|GY-302 / BH1750(照度)|Watermark(土壤張力/濕度推估)

本專案使用 **8051 微控制器(MEGAWIN MPC82G 系列)**作為資料擷取端,整合多顆感測器並透過 UART 傳輸至電腦端,由 MATLAB 進行資料解析、換算、記錄與後處理。


專案亮點

  • DHT22 one-wire 通訊自行實作:8051 端以時序控制方式讀取 40-bit 資料並組成封包(含 checksum)
  • GY-302(BH1750)軟體 I²C(bit-bang)自行實作:因 8051 環境無原生 I²C 介面,手動完成 START/STOP/ACK/NACK、讀寫流程
  • Watermark 以 ADC 取樣,MATLAB 端換算成電阻與土壤張力(tension):透過電路模型將 ADC 轉換為電壓,再推回電阻,並用 MATLAB 分段公式換算張力/含水狀態指標
  • LMV358 實驗與電路量測差異分析:針對 Watermark 正反向量測電阻差異進行測試與改善方案(見 LMV358_test.pdf

我在這個專案中的貢獻(Contributions)

1) 8051 韌體端(C)

  • 整合多感測器流程與排程:以 Timer0 中斷週期性觸發感測、資料整理與 UART 輸出(All_Sensor.c
  • DHT22 one-wire driver 自製
    • 起始訊號、bit 時序判斷、40-bit 讀取與 5 bytes 組包(DHT.c/.h
  • GY-302 / BH1750 軟體 I²C 自製
    • bit-bang 實作 I²C 協議並完成 BH1750 指令設定與資料讀取(GY.c/.h
  • Watermark 多通道掃描 + 正反向激勵 + ADC 讀取
    • 控制 MUX 選通、enable、以及正反向激勵切換,讀取 ADCH/ADCL 並以 UART 回傳(watermark.c/.h
  • 通訊同步/復原機制
    • 主機回傳特定值(例如 255)時可重置封包序號/狀態以利重新同步(依現有設計)

2) MATLAB 端(資料處理 / 換算 / 紀錄)

  • 串口收資料、封包檢查與錯誤復原(flush + 重同步)
  • Watermark:ADC → 電壓 → 電阻 → 張力(tension)分段換算(含溫度補償參數)
  • 自動輸出 Excel、依日期建立資料夾(並可選擇同步拍照記錄)(data_processing.m

3) LMV358 測試與量測偏差分析(硬體實驗)

  • 針對 Watermark 量測中「正反向阻值不一致」進行根因實驗
  • 驗證 LMV358 在低電位輸出與非理想行為可能造成 ADC 偏差,並提出較佳配置建議
    詳細內容請參考:LMV358_test.pdf

Repo 檔案結構

.
├─ All_Sensor.c                                     # 主程式:Timer 排程 + 讀取所有感測器 + UART 輸出
├─ DHT.c
├─ DHT.h                                            # DHT22 one-wire 時序實作
├─ GY.c
├─ GY.h                                             # GY-302(BH1750) 軟體 I2C 實作
├─ watermark.c
├─ watermark.h                                      # Watermark:MUX 掃描 + 正反向量測 + ADC 讀取
├─ data_processing.m                                # MATLAB:串口收資料、換算、寫 Excel(可含拍照)
├─ Sensor_testing_and_Plan_of_this_project.pdf      # 各感測器測試實驗流程、結果與規劃
└─ LMV358_test.pdf                                  # LMV358 測試與電路偏差分析報告

系統架構與資料流

flowchart LR
  DHT["DHT22\none-wire bitbang"] --> MCU["8051 Timer Scheduler"]
  GY["GY-302/BH1750\nsoftware I2C"] --> MCU
  WM["Watermark\nMUX + ADC + polarity swap"] --> MCU
  MCU -->|UART bytes| PC["MATLAB data_processing.m"]
  PC --> XLSX["Excel log"]
  PC --> IMG["Camera snapshots (optional)"]
Loading

硬體接線

腳位可能依你的板子/接線略有不同,以下為程式內使用之 port 定義概念(請以實際硬體為準)

模組 訊號 8051 Port(範例) 說明
DHT22 DATA P2.5 one-wire,需上拉
GY-302 (BH1750) SDA P2.0 軟體 I²C
SCL P2.1 軟體 I²C
Watermark ADC_IN (bank1) P1.0 ADC
Watermark ADC_IN (bank2) P1.1 ADC
Watermark 控制 cc1/cc2/cc3/cc4 P1.x 正反向激勵/切換
MUX 選擇 s0/s1/s2 P0.x 多通道選擇
MUX enable m1en/m2en P0.x / P2.x bank enable
UART TX/RX 依晶片/板子 MATLAB 端連接

UART 通訊格式

本專案 UART 端主要傳輸:

  • DHT22:5 bytes(濕度高/低、溫度高/低、checksum)
  • BH1750:2 bytes(照度 raw)
  • Watermark:ADC raw(可包含多通道與正反向量測)
  • 封包同步:可透過 header/footer 或序號機制進行重同步(依韌體/腳本設計)

📌 注意:目前韌體端可能輸出「多通道完整資料」,而 data_processing.m 可能採用「簡化封包」解析。
建議在「能精進的部分」所述,將封包格式統一並加入 CRC/length。


MATLAB:Watermark 換算流程

data_processing.m 的主要概念:

  1. ADC code → 電壓(Vs 為供應電壓)
  2. 電壓 → 電阻(依分壓/電路模型)
  3. 正反向電阻取平均以降低偏差
  4. 電阻 → soil tension(分段公式 + 溫度補償)

LMV358 測試實驗摘要(LMV358_test.pdf

在 Watermark 量測中發現「正反向量測電阻不一致」現象,因此針對 LMV358 做實驗分析:

  • 驗證運放低電位輸出、非理想特性可能使 ADC 讀值偏離理論
  • 比較「有/無 LMV358」時線性校正效果,並提出較佳電路配置方向
    詳細流程、量測數據與結論請見 9.9報告.pdf

如何使用

1) 8051 韌體端

  • 使用 Keil C51 或對應 8051 toolchain 編譯
  • 確認包含晶片對應暫存器/標頭檔(例如 REG_MPC82G516.h
  • 燒錄後上電,系統將定期量測並透過 UART 輸出

2) MATLAB 端

  • 開啟 data_processing.m
  • 修改:
    • COM port(例如 COM6
    • BaudRate(例如 9600)
    • 參數:Vs / R / temp(依實際電路與環境)
  • 執行後開始接收、解析、換算並寫入 Excel(可選拍照觀察植物狀態)

能精進的部分(Future Work)

以下是本專案可以再進一步強化的方向(可作為 repo 的 roadmap):

1) 統一 UART 封包格式(最推薦)

  • 目前韌體端可能輸出「多通道 + 序號」,MATLAB 端可能使用「簡化封包」
    ✅ 建議統一為固定格式,例如:
  • Header(2 bytes)
  • Payload length(1 byte)
  • Payload(N bytes)
  • CRC8/CRC16(1~2 bytes)
  • Footer(1 byte)

這會讓 MATLAB 端在遇到雜訊/掉 byte 時更容易重同步,也更適合長時間紀錄。

2) MATLAB 支援完整多通道 Watermark 解析

  • 目前可先支援單通道(或少數通道)以利驗證
  • 後續擴充到完整 bank1/bank2 所有通道 (透過於電路中外加多工器以切換不同通道):
    • 輸出成表格(時間 × 通道 tension)
    • 每通道可視化(趨勢圖、濾波、異常偵測)

3) 加入韌體端資料驗證與錯誤處理

  • DHT22 checksum 在韌體端也可做快速驗證(錯誤直接丟棄或重讀)
  • BH1750 讀取可加入 ACK 檢查與 retry
  • UART 傳輸可加入重送/序號對齊策略

4) 校正與補償機制制度化

  • Watermark 換算公式可整理為「校正參數檔」(CSV/JSON 或 MATLAB struct)
  • 將 LMV358 造成的偏差以校正曲線/offset 的形式納入(視硬體配置而定)

License

建議可使用 MIT License(或依課程/實驗室規範調整)。


Acknowledgements

  • 感測器:DHT22、GY-302(BH1750)、Watermark
  • LMV358 測試與報告:見 LMV358_test.pdf

About

8051 MCU Project NYCU

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors