陳開開
摘 要 太陽能熱水器作為太陽能利用中最常見的一種裝置,經濟效益明顯,正在迅速的推廣應用。本課題根據太陽能熱水器的功能特點以及對其控制器的要求,提出一種基于51單片機的太陽能熱水器智能控制器的設計方法。該設計利用51單片機作為系統的主控制器,配合其他控制電路協調工作。利用溫度傳感器和水位測量傳感器實現了對水溫和水位的測量,并通過預定值,實時調節溫度和水量,實現24小時不間斷供應熱水;同時,通過相關控制電路和軟件程序的設計還實現了加熱裝置和上水裝置的全自動運行,提高了熱水器的自動化和智能化程度。
關鍵詞 太陽能熱水器;單片機;智能控制器
中圖分類號:TP273 文獻標識碼:A 文章編號:1671-7597(2014)19-0009-02
1 系統硬件設計
1.1 概述
太陽能因其無污染、取自自然、費用低廉等特點而受到越來越多的人的關注。本設計應用范圍很廣、技術成熟的STC公司生產的89C51單片機為中央控制核心,將來自溫度傳感器的溫度信號和水位檢測傳感器的水位信號經單片機處理后,由LCD1602液晶顯示屏顯示當前水箱中的水溫和水量;并通過跟預設定值作比較,驅動輔助加熱裝置和上手裝置的電磁開關的工作狀態,自動實現溫度控制和水量加載,同時根據軟件程序的設定,實現低溫/高溫報警,水位低限/高限報警等過程。
1.2 總體硬件結構
依據設計任務和系統需要實現的功能,綜合成本等考慮設計出如下的硬件結構框圖,如圖1所示。
圖1 硬件結構框圖
該控制系統以STC89C51單片機作為中央控制器,通過DS18B20溫度傳感器檢測當前水溫,通過單片機的處理在1602液晶顯示屏上顯示當前的溫度值。另外一路是水位檢測傳感器測量儲水箱中水位高低,并通過指示燈的變化顯示水位檔。系統工作時,單片機在內部通過比較設定的溫度和當前溫度:當前溫度小于設定值時就會閉合繼電器開關,開啟加熱裝置。在自動上水控制方面,當水位低于低水檔時會自動閉合上水裝置的繼電器開關,啟動上水裝置,水位到達高水位檔時就會自動斷開繼電器開關,停止上水。
1.3 溫度傳感器選型與介紹
本系統所選用的溫度傳感器是美國達拉斯公司設計生產的DS18B20數字傳感器,它以9位數字量的形式反映被測物的實際溫度值。DS18B20通過一個單總線接口發送或接收數據,用于讀寫和溫度轉換的電源可以從數據線本身獲得,無需外部提供電源[1]。
DS18B20在使用時,通常連接微控制器系統實現溫度數據的采集。使用時只需將DS18B20信號線與單片機某位I/O接口相連,如果想實現多點、多地測溫可以在改位I/O上掛接多個。
1.4 水位檢測電路設計
本設計中的水位檢測傳感器利用的檢測原理是水的導電性。此處將儲水箱等分為三個區域,水位檢測利用不同深度下的水位電極和水底公共電極直間的電勢差的不同來完成;具體檢測操作如下。
1)由單片機依次向各個水位的電極輸出高電平。
2)由公共電極實現不同水位下的電位轉換,即當水位達到對應的電極,則輸出低電平,否則為高電平。
3)每進行一次循環檢測便得到4個串行數據,分析這幾個數據后便可得知當前的水位值,再由1602顯示屏顯示水位情況,以此達到水位檢測的目的[3]。
1.5 電磁繼電器電路及原理
水溫和水位的控制需要在水溫低限時進行加熱,在水位低限時進行加水,這就要有一個相應水位和水溫信號的開關,實現水溫和水位的自動控制,這里用到的是電磁繼電器,當其線圈接通,由于電磁感應就會在鐵心上產生磁性,將開關彈片吸合,使外部電路導通。
控制電路工作原理:單片機輸出電平信號,通過正向驅動器,得到穩定的低電平信號,使發光二極管上下導通,通過發出的光導通后面的電路,導通三極管,電磁繼電器線圈得電,電磁繼電器工作,彈片向下吸引,開關閉合,后面的電路開始工作。
1.6 液晶顯示模塊選型和介紹
LCD1602液晶顯示屏能夠同時顯示16 x 2個字符,模塊內部已經存儲了包括阿拉伯數字0-9,英文字母A-Z、a-z、和日文假名等。模塊工作時,只需把想要顯示的字符對應的地址中的點陣字符圖形顯示出來,我們就能看到字母出現在顯示屏上。同時,由于1602顯示屏識別的是計算機系統的ASCII碼,操作時也可以用ASCII碼直接賦值。1602通過D0-D7的8位數據端傳輸數據和控制指令[4]。
同時,由于該LCD模塊內部已經集成硬件驅動電路,因此為了方便與單片機的連接,模塊給出的是總線接口。1602內部驅動模塊提供八位或者四位數據總線連接方式,同時,模塊外加一些電源接口和控制信號接口。各引腳編號及功能如表1
所示。
表1 1602引腳接口表
2 系統軟件設計
2.1 軟件總體流程
系統上電自動完成初始化設置,使各傳感器及控制電路完成準備工作。初始化結束,程序開始溫度及水位的測量,并將測量結果顯示在液晶屏屏,供用戶查看。當溫度低于下限值時,自動閉合加熱繼電器開關,以提高水溫,直至水溫在合理范圍,自動切斷繼電器開關。同時,系統設置了三個水位檔,根據水位的高度,自動判斷當前水位,并以相應指示燈提示水位情況。當水位低于最低限時,系統自動閉合上水繼電器開關,直至水位達到最高檔水位線,再切斷該繼電器開關。系統總體軟件流程如圖2所示,實現了水溫和水位的自動調節,提高了熱水器的智能化程度。
圖2 系統總體流程圖
2.2 溫度采集設計流程
DS18B20溫度采集程序流程是根據DS18B20通訊協議,單片機控制DS18B20時首先需對其初始化,完成各寄存器初始設置;隨后啟動溫度轉換功能,等待溫度的獲??;獲取數值后,讀取數據寄存器,獲取高字節數據DH,和低字節數據DL;最后根據二進制規則換算出溫度值,并用于顯示。endprint
以下為溫度采集函數的關鍵程序代碼:
unsigned int ReadTemperature(void)//讀取溫度函數
{
unsigned char TL=0;
unsigned char TH=0;
unsigned int temp=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
// Delay(200);
TL=ReadOneChar(); //讀低8位
TH=ReadOneChar(); //讀高8位
temp = TH;
temp <<=8;
temp = temp |TL;
tt=temp*0.0625;
temp= tt*10+0.5; //放大10倍輸出并四舍五入
return(temp);
}
2.3 水位檢測流程
本系統中的水位檢測流程是通過判斷三根水位線被水淹沒的情況,實現水位的檢測,并有相應的水位指示燈告知用戶,即當前水位為高水位檔時,綠燈亮;當前為中水位檔時,黃燈亮;當前為低水位檔時,紅燈亮。
以下代碼為水位檢測控制程序:
if(temp) <= 20) //水溫低于20度,啟動加熱
switch_hot = 1;
else if(temp >= 40) //水溫高于40度,停止加熱
switch_hot = 0;
else
switch_hot = 0;
if(low == 0) //水位為低水位時,紅色指示燈亮
red = 1;
else
{
red = 0;
switch_water = 1; //水位 低于 低水位時,開啟自動上水開關
}
if(middle == 0) //水位為中水位時,黃色指示燈亮
yellow = 1;
else
yellow = 0;
if(high == 0) //水位為高水位時,綠色指示燈亮
{
green = 1;
switch_water = 0;
}
else
green = 0;
3 系統測試
通過以上章節對系統軟硬件的設計,為驗證實際測試效果,焊接了硬件電路板,并向單片機中下載了本系統程序代碼。該系統實現了如下功能。
1)水溫顯示:水溫通過18B20傳感器的測量,在4位LED上顯示數值,且測溫范圍為0-90℃,精確到1度。實際測試中,發現該系統對水溫的檢測響應快速、測量準確,并能將溫度值以數字形式顯示在數碼管上,觀測方便。
2)水位顯示:實際測試中,當水位高于低水位檔導線時,系統的低水位指示燈(紅色)亮起;當水位高于中水位檔導線時,系統的中水位指示燈(黃色)亮起;當水位高于高水位檔導線時,系統的高水位指示燈(綠色)亮起;此時,逐漸放水,會發現指示燈又依次熄滅,達到向用戶觀測水位和指示水位變化的作用。
3)系統水位/水溫自動控制實現:當水位低于低水位檔時,系統自動閉合上水裝置的繼電器開關,開始上水,直到超過高水位檔時,自動斷開上水開關;當水溫低于設定的溫度下限時,系統根據外部檢測信號啟動加熱裝置的繼電器開關,輔助加熱,直到溫度達到高限值時,斷開加熱開關。
參考文獻
[1]王俊杰.基于89C51單片機的太陽能熱水器智能控制器的設計[J].鄭州輕工業學院學報,2005,20(3):67-68.
[2]張振榮,晉明武,王毅平.MCS- 51單片機原理及實用技術[M].北京:人民郵電出版社,2000:64-120.
[3]張景文,王震宏.基于單片機的太陽能熱水器智能控制系統[J].西華大學學報,2008,27(5):25-28.
[4]張學峰.基于單片機控制的太陽能熱水器全自動電路[J].現代電子技術,2005,195(4):5-7.endprint
以下為溫度采集函數的關鍵程序代碼:
unsigned int ReadTemperature(void)//讀取溫度函數
{
unsigned char TL=0;
unsigned char TH=0;
unsigned int temp=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
// Delay(200);
TL=ReadOneChar(); //讀低8位
TH=ReadOneChar(); //讀高8位
temp = TH;
temp <<=8;
temp = temp |TL;
tt=temp*0.0625;
temp= tt*10+0.5; //放大10倍輸出并四舍五入
return(temp);
}
2.3 水位檢測流程
本系統中的水位檢測流程是通過判斷三根水位線被水淹沒的情況,實現水位的檢測,并有相應的水位指示燈告知用戶,即當前水位為高水位檔時,綠燈亮;當前為中水位檔時,黃燈亮;當前為低水位檔時,紅燈亮。
以下代碼為水位檢測控制程序:
if(temp) <= 20) //水溫低于20度,啟動加熱
switch_hot = 1;
else if(temp >= 40) //水溫高于40度,停止加熱
switch_hot = 0;
else
switch_hot = 0;
if(low == 0) //水位為低水位時,紅色指示燈亮
red = 1;
else
{
red = 0;
switch_water = 1; //水位 低于 低水位時,開啟自動上水開關
}
if(middle == 0) //水位為中水位時,黃色指示燈亮
yellow = 1;
else
yellow = 0;
if(high == 0) //水位為高水位時,綠色指示燈亮
{
green = 1;
switch_water = 0;
}
else
green = 0;
3 系統測試
通過以上章節對系統軟硬件的設計,為驗證實際測試效果,焊接了硬件電路板,并向單片機中下載了本系統程序代碼。該系統實現了如下功能。
1)水溫顯示:水溫通過18B20傳感器的測量,在4位LED上顯示數值,且測溫范圍為0-90℃,精確到1度。實際測試中,發現該系統對水溫的檢測響應快速、測量準確,并能將溫度值以數字形式顯示在數碼管上,觀測方便。
2)水位顯示:實際測試中,當水位高于低水位檔導線時,系統的低水位指示燈(紅色)亮起;當水位高于中水位檔導線時,系統的中水位指示燈(黃色)亮起;當水位高于高水位檔導線時,系統的高水位指示燈(綠色)亮起;此時,逐漸放水,會發現指示燈又依次熄滅,達到向用戶觀測水位和指示水位變化的作用。
3)系統水位/水溫自動控制實現:當水位低于低水位檔時,系統自動閉合上水裝置的繼電器開關,開始上水,直到超過高水位檔時,自動斷開上水開關;當水溫低于設定的溫度下限時,系統根據外部檢測信號啟動加熱裝置的繼電器開關,輔助加熱,直到溫度達到高限值時,斷開加熱開關。
參考文獻
[1]王俊杰.基于89C51單片機的太陽能熱水器智能控制器的設計[J].鄭州輕工業學院學報,2005,20(3):67-68.
[2]張振榮,晉明武,王毅平.MCS- 51單片機原理及實用技術[M].北京:人民郵電出版社,2000:64-120.
[3]張景文,王震宏.基于單片機的太陽能熱水器智能控制系統[J].西華大學學報,2008,27(5):25-28.
[4]張學峰.基于單片機控制的太陽能熱水器全自動電路[J].現代電子技術,2005,195(4):5-7.endprint
以下為溫度采集函數的關鍵程序代碼:
unsigned int ReadTemperature(void)//讀取溫度函數
{
unsigned char TL=0;
unsigned char TH=0;
unsigned int temp=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
// Delay(200);
TL=ReadOneChar(); //讀低8位
TH=ReadOneChar(); //讀高8位
temp = TH;
temp <<=8;
temp = temp |TL;
tt=temp*0.0625;
temp= tt*10+0.5; //放大10倍輸出并四舍五入
return(temp);
}
2.3 水位檢測流程
本系統中的水位檢測流程是通過判斷三根水位線被水淹沒的情況,實現水位的檢測,并有相應的水位指示燈告知用戶,即當前水位為高水位檔時,綠燈亮;當前為中水位檔時,黃燈亮;當前為低水位檔時,紅燈亮。
以下代碼為水位檢測控制程序:
if(temp) <= 20) //水溫低于20度,啟動加熱
switch_hot = 1;
else if(temp >= 40) //水溫高于40度,停止加熱
switch_hot = 0;
else
switch_hot = 0;
if(low == 0) //水位為低水位時,紅色指示燈亮
red = 1;
else
{
red = 0;
switch_water = 1; //水位 低于 低水位時,開啟自動上水開關
}
if(middle == 0) //水位為中水位時,黃色指示燈亮
yellow = 1;
else
yellow = 0;
if(high == 0) //水位為高水位時,綠色指示燈亮
{
green = 1;
switch_water = 0;
}
else
green = 0;
3 系統測試
通過以上章節對系統軟硬件的設計,為驗證實際測試效果,焊接了硬件電路板,并向單片機中下載了本系統程序代碼。該系統實現了如下功能。
1)水溫顯示:水溫通過18B20傳感器的測量,在4位LED上顯示數值,且測溫范圍為0-90℃,精確到1度。實際測試中,發現該系統對水溫的檢測響應快速、測量準確,并能將溫度值以數字形式顯示在數碼管上,觀測方便。
2)水位顯示:實際測試中,當水位高于低水位檔導線時,系統的低水位指示燈(紅色)亮起;當水位高于中水位檔導線時,系統的中水位指示燈(黃色)亮起;當水位高于高水位檔導線時,系統的高水位指示燈(綠色)亮起;此時,逐漸放水,會發現指示燈又依次熄滅,達到向用戶觀測水位和指示水位變化的作用。
3)系統水位/水溫自動控制實現:當水位低于低水位檔時,系統自動閉合上水裝置的繼電器開關,開始上水,直到超過高水位檔時,自動斷開上水開關;當水溫低于設定的溫度下限時,系統根據外部檢測信號啟動加熱裝置的繼電器開關,輔助加熱,直到溫度達到高限值時,斷開加熱開關。
參考文獻
[1]王俊杰.基于89C51單片機的太陽能熱水器智能控制器的設計[J].鄭州輕工業學院學報,2005,20(3):67-68.
[2]張振榮,晉明武,王毅平.MCS- 51單片機原理及實用技術[M].北京:人民郵電出版社,2000:64-120.
[3]張景文,王震宏.基于單片機的太陽能熱水器智能控制系統[J].西華大學學報,2008,27(5):25-28.
[4]張學峰.基于單片機控制的太陽能熱水器全自動電路[J].現代電子技術,2005,195(4):5-7.endprint