大家好,本文帶來的是單片機課設-基于Zigee的溫度數據采集系統。
一、設計內容和要求
基于Zigbee的數據采集系統
1.1設計內容
(1)分析對比Bluetooth、Zigbee、Lora方式組網的基本原理和性能差異,撰寫分析報告;
(2)系統為主從結構,主機負責顯示和操作設置,從機負責采集溫度,主從之間通過串口(無線模塊)連接。從機可以有1臺或多臺;
(3)主機設有鍵盤和液晶顯示(漢字點陣12864);
(4)從機設有傳感器(LM20)和AD轉換器(MCP3004);
(5)一種系統拓撲示意如下,僅供參考,可根據實際情況調整。
1.2設計要求
基本功能:
(1)從機采集溫度數據,數據發送到主機。主機在屏幕上顯示從機編號、從機溫度、是否報警;
(2)從機顯示溫度范圍為00°C~50°C,不需顯示小數位;
(3)主機可以用鍵盤設定高低溫報警值(如溫度低于05°C或者高于40°C報警),且上下報警門限可調;
(4)當從機傳感器溫度發生變化后,主機顯示端可在10秒內刷新正確的溫度值。
擴展功能:
(5) 通過主機可以設置波特率(高中低)和采樣時間(5-60秒),從機自動適配;
(6) 通信過程中使用數據校驗來保證通信的可靠性;
(7) 實現多路溫度采集和多機通信;
(8) 在仿真的基礎上,使用立創EDA制版,并完成硬件電路
實習任務及工作量
(1)在Proteus中仿真實現。編程語言可以用C或者匯編,皆可。
(2)在Proteus中的硬件電路設計圖一份。
(3)C或者匯編軟件一份。
(4)錄制1~2分鐘的截屏,非常簡短的展示下效果。
(5)設計報告一份。包括硬件、軟件設計思路和實現過程,心得體會等。
4 參考文獻
[1] 胡漢才主編:《單片機原理及其接口技術》,清華大學出版社,2010年出版。
[2] 孫力娟主編:《微型計算機原理與接口技術》,清華大學出版社,2013年出版。
[3] 高洪志主編:《MCS51單片機原理及應用技術教程》,人民郵電出版社,2009年出版。
[4] 顧海洲,馬雙武:《PCB電磁兼容技術(設計實踐)》,清華大學出版社,2004年出版。
以上就是本次設計任務要求,下面帶來具體實現的內容!!!
二、基本原理
2.1什么是Zigee?
- 介紹:Zigbee技術是一種應用于短距離和低速率下的無線通信技術 主要用于距離短、功耗低且傳輸速率不高的各種電子設備之間進行數據傳輸以及典型的有周期性數據、間歇性數據和低反應時間數據傳輸的應用。
- 特點:自組織網絡與高容量?
(1)支持星型、樹型和網狀(Mesh)拓撲,具備自愈功能。Mesh網絡通過多跳傳輸擴展覆蓋范圍(可達幾百米至幾公里)。
(2)單網絡最多支持65,535個節點,區域內容納1000個網絡,滿足大規模物聯網需求。
2.2技術調研
在無線通信技術中,Bluetooth、Zigbee、Lora 是三種常見的組網方式,它們在基本原理和性能上存在顯著差異,以下是具體分析:
Bluetooth:基于無線個人區域網(WPAN)技術,采用跳頻擴頻技術,工作在 2.4GHz ISM 頻段。其通信建立在主從架構之上,主設備可同時與多個從設備進行通信,通過配對過程實現設備間的連接和數據傳輸。
Zigbee:基于 IEEE 802.15.4 標準,同樣工作在 2.4GHz ISM 頻段(部分地區也支持其他頻段),采用直接序列擴頻技術。它支持自組織網絡,包括星型、樹型和網狀(Mesh)拓撲結構,具備自愈功能,網絡中的節點可自動尋找路徑進行數據傳輸。
Lora:基于擴頻調制技術,工作在非授權頻段(如 433MHz、868MHz、915MHz 等),采用 Chirp 擴頻技術。其通信主要通過網關與終端節點之間的星形網絡架構實現,終端節點將數據發送給網關,再由網關進行數據的匯總和處理。
2.3設計方案
(1)系統功能
本系統為基于 Zigbee 的數據采集系統,采用主從結構。主機負責顯示和操作設置,設有鍵盤和液晶顯示(漢字點陣 12864),可通過鍵盤設定高低溫報警值,還能顯示從機編號、從機溫度以及是否報警等信息;從機負責采集溫度,設有傳感器(LM20)和 AD 轉換器(MCP3004),從機可以有 1 臺或多臺。主從之間通過串口(無線模塊)連接,實現數據的傳輸。
(2)系統工作框圖
(3)模塊工作原理
主機模塊:主機的核心是 MCS51 單片機,通過鍵盤接收用戶的操作指令,如設定高低溫報警值等。液晶顯示模塊(漢字點陣 12864)用于顯示從機編號、溫度數據以及報警信息等。主機通過串口與無線模塊連接,實現與從機之間的數據收發。
從機模塊:從機同樣以 MCS51 單片機為核心,傳感器(LM20)負責采集溫度信號,采集到的模擬信號傳輸給 AD 轉換器(MCP3004),AD 轉換器將模擬信號轉換為數字信號后傳輸給從機的單片機,單片機再通過無線模塊將數據發送給主機。
無線模塊:采用 2.4G 無線串口透傳模塊,支持即插即用,通過 Uart 通信方式實現主從機之間的數據無線傳輸,波特率可根據需要進行設置。
三、電路設計
3.1主機電路
主機電路主要由 MCS51 單片機、鍵盤、液晶顯示(漢字點陣 12864)和無線模塊組成。
MCS51 單片機作為主機的核心控制單元,負責接收鍵盤輸入的指令、處理從機發送的數據以及控制液晶顯示。
鍵盤采用矩陣鍵盤設計,通過按鍵與單片機的 I/O 口連接,實現指令的輸入。當按鍵按下時,相應的 I/O 口電平發生變化,單片機通過掃描識別按鍵信息。
液晶顯示(漢字點陣 12864)通過并行或串行方式與單片機連接,接收單片機發送的顯示數據并進行顯示。
無線模塊通過 TX、RX 引腳與單片機的串口連接,實現數據的無線收發,GND 引腳接地,保證電路的共地。
3.2從機電路
從機電路主要由 MCS51 單片機、傳感器(LM20)、AD 轉換器(MCP3004)和無線模塊組成。
MCS51 單片機作為從機的核心控制單元,負責控制傳感器采集溫度、接收 AD 轉換器轉換后的數字信號以及通過無線模塊發送數據。
傳感器(LM20)的輸出端與 AD 轉換器(MCP3004)的輸入端連接,將采集到的溫度模擬信號傳輸給 AD 轉換器。LM20 是一種高精度溫度傳感器,其輸出電壓與溫度呈線性關系,在 0°C~50°C 范圍內具有良好的精度。
AD 轉換器(MCP3004)通過 SPI 接口與單片機連接,將模擬信號轉換為數字信號后傳輸給單片機。MCP3004 是一款 10 位 AD 轉換器,具有 4 個輸入通道,滿足溫度信號轉換的需求。
無線模塊同樣通過 TX、RX 引腳與單片機的串口連接,實現與主機的數據傳輸。
3.3參數計算過程
以 LM20 溫度傳感器和 MCP3004 AD 轉換器為例進行參數計算:
LM20 在 0°C 時輸出電壓為 2.5V,溫度系數為 - 6.2mV/°C(在 0°C 至 50°C 范圍內)。MCP3004 的參考電壓設為 5V,其分辨率為 10 位,即總共有 1024 個量化等級。
則 1 個量化等級對應的電壓值為:5V / 1024 ≈ 4.88mV。
當溫度為 t°C 時,LM20 的輸出電壓 U = 2.5V - 6.2mV/°C × t。
AD 轉換器輸出的數字量 N = U / 4.88mV ≈ (2500mV - 6.2mV × t) / 4.88mV。
通過該式可由 AD 轉換器輸出的數字量計算得到對應的溫度值。
四、軟件設計
4.1仿真電路設計圖
4.2主機程序流程圖
4.3從機程序流程圖
五、測試與分析
5.1實際數據
在測試過程中,對系統的基本功能和部分擴展功能進行了驗證,得到以下實際數據:
- 溫度采集準確性:在 0°C~50°C 范圍內,從機采集的溫度與實際環境溫度的誤差在 ±1°C 以內,滿足設計要求。
- 數據刷新時間:當從機傳感器溫度發生變化后,主機顯示端能在 5 秒內刷新正確的溫度值,小于要求的 10 秒。
- 報警功能:當設置高溫報警值為 40°C,低溫報警值為 5°C 時,當溫度高于 40°C 或低于 5°C,主機能準確發出報警提示。
- 多機通信:測試了 3 臺從機與主機的通信情況,主機能準確識別各從機編號并顯示對應的溫度數據,通信穩定。
5.2分析
-
總結分析:
從測試數據來看,系統的基本功能均能正常實現,且性能指標符合設計要求。在溫度采集準確性方面,誤差較小,能滿足一般溫度監測的需求;數據刷新及時,保證了溫度數據的實時性;報警功能準確可靠,可及時提醒用戶溫度異常;多機通信穩定,說明系統的組網能力較好。 -
分析改進:
在測試過程中也發現一些問題,如在距離較遠時(超過 500 米),無線通信的穩定性有所下降,數據傳輸偶爾會出現延遲或丟失的情況,這可能與無線模塊的傳輸距離限制有關。在后續優化中,可考慮更換傳輸距離更遠的無線模塊或采用中繼節點來增強通信效果。
六、基礎問答
基本功能:
(1)問:從機采集溫度數據,數據發送到主機。主機在屏幕上顯示從機編號、從機溫度、是否報警?
答:可以
(2)問:從機顯示溫度范圍為00°C~50°C,不需顯示小數位?
答:可以
(3)問:主機可以用鍵盤設定高低溫報警值(如溫度低于05°C或者高于40°C報警),且上下報警門限可調嗎?
答:可以
(4)問:當從機傳感器溫度發生變化后,主機顯示端可在10秒內刷新正確的溫度值嗎?
答:可以
擴展功能:
(5) 問: 通過主機可以設置波特率(高中低)和采樣時間(5-60秒),從機自動 適配嗎?
答:未實現
(6) 問:通信過程中使用數據校驗來保證通信的可靠性了嗎?
答:未實現
(7) 問:實現多路溫度采集和多機通信了嗎?
答:已實現,一主機兩從機
(8) 問:在仿真的基礎上,使用立創EDA制版,并完成硬件電路?
答:未實現
(9)問:給顯示屏上溫度顯示加上單位符號?
答:已實現,如圖:
(10)問:能修改波特率嗎?
答:可以。按以下步驟具體實現:
1.定義常用波特率初值宏
#include “uart.h” // 晶振頻率11.0592MHz,SMOD=0(PCON=0x00)時的波特率初值 #define BAUD_2400 0xF3 // 2400bps(低) #define BAUD_9600 0xFD // 9600bps(中,默認) #define BAUD_19200 0xFE // 19200bps(高) unsigned char rx_data_addr_temperature[3] = {0}; // 新增:存儲當前波特率狀態(0=低,1=中,2=高),用于主機設置后從機適配 unsigned char current_baud = 1; // 默認9600bps
2.重構初始化函數,支持動態修改波特率
// 初始化串口框架(不包含波特率設置) void Uart_Init_Frame(void) { SCON = 0x50; // UART方式1:8位UART,允許接收(REN=1) PCON = 0x00; // SMOD=0,波特率不加倍 TMOD = 0x20; // T1工作在方式2(自動重裝載) TR1 = 1; // 啟動定時器T1 ES = 1; // 允許串口中斷 EA = 1; // 開總中斷 } // 設置波特率(通過主機鍵盤指令傳入參數baud:0=低,1=中,2=高) void Uart_SetBaudRate(unsigned char baud) { current_baud = baud; // 更新當前波特率狀態 switch(baud) { case 0: // 低波特率:2400bps TH1 = BAUD_2400; TL1 = BAUD_2400; break; case 1: // 中波特率:9600bps(默認) TH1 = BAUD_9600; TL1 = BAUD_9600; break; case 2: // 高波特率:19200bps TH1 = BAUD_19200; TL1 = BAUD_19200; break; default: // 默認保持9600bps TH1 = BAUD_9600; TL1 = BAUD_9600; break; } } // 初始化時調用(默認9600bps) void Uart_Init(void) { Uart_Init_Frame(); Uart_SetBaudRate(1); // 初始化為中波特率 }
3.配合主機指令實現“從機自動適配”
void UART_Routine() interrupt 4 { static unsigned char i = 0; unsigned char cmd; // 指令緩存 if(RI == 1) { RI = 0; cmd = SBUF; // 接收主機發送的指令 // 若接收到波特率設置指令(示例:0x01=低,0x02=中,0x03=高) if(cmd == 0x01) { Uart_SetBaudRate(0); // 切換到2400bps } else if(cmd == 0x02) { Uart_SetBaudRate(1); // 切換到9600bps } else if(cmd == 0x03) { Uart_SetBaudRate(2); // 切換到19200bps } // 否則按原邏輯接收溫度數據 else { if(i < 3) { rx_data_addr_temperature[i] = cmd; // 原數據接收邏輯 i++; } if(i >= 3) { i = 0; } } } }
以上就是全部內容了,如有幫助,還請一鍵三連!!!