功能效果演示

基於51單片機的智能家居控制環境監測智能防火火災報警系統

具體實現的功能

由STC89C52單片機+LCD1602液晶顯示屏+ADC0832模塊+蜂鳴器+DHT11温濕度傳感器 +煙霧傳感器+LED+按鍵構成
具體功能:
1、LCD1602液晶第一行顯示當前的煙霧值,第二行顯示當前的温度和濕度值;
2、可以設置煙霧、温濕度上下限報警值。共4個按鍵:復位按鍵、減鍵、加鍵、設置鍵;設定的參數具有掉電保存,保存在STC單片機的內部,上電無需重新設置;
3、當煙霧值高於設定的報警值或温度濕度超出上下限範圍,蜂鳴器和指示燈會發出聲光報警;
4、當温濕度值低於或高於設定的範圍時,相應的指示燈亮,蜂鳴器報警;
5、當同時滿足煙霧過高、温度過高、濕度過低三個條件時,控制繼電器吸合,以實現電機轉動,表示滅火。


基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#滅火系統

第1章 概述

(篇幅有限,詳見文末)

第2章 系統功能需求及方案設計

2.1 系統設計需求
為了實現實時温度、濕度、煙霧顯示,及時報警,以降低火災危害,本文將實現以下設計需求:
(1)精確、實時的檢測別墅內的温濕度及煙霧值;
(2)直接、清晰明瞭的顯示測得的温濕度值及煙霧濃度值;
(4)能夠實現防火自動報警報警;
(5)操作簡單、功能完善、精確度高。
具體如圖2-1所示。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#滅火系統_02


2.2 主要元器件(篇幅有限,詳見文末)

第3章 硬件設計

如圖3-1是本系統的硬件設計方案,具體地,硬件電路由以下模塊構成:
(1)單片機最小系統。用於驅動和控制其他模塊,以實現整體功能,其以STC89C51單片機為核心芯片,並輔以復位電路和晶振電路。
(2)信號採集電路。負責採集需要監測的數據,本設計中的信號採集電路由温度採集電路和煙霧採集電路、紅外採集電路構成。
(3)AD轉換電路。由ADC0832模塊構成,其與傳感器和單片機芯片相連,負責將模擬值轉換為數字量,併發送給單片機。
(4)按鍵和顯示電路。顯示電路用於顯示相關數據,按鍵電路用於控制芯片實現相關功能,直接與單片機相連。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#單片機_03


3.1主控制器電路設計

單片機最小系統是單片機擴展開發應用中最基礎和最主要的部分,一般由以下的電路構成,是整個設計的核心其保證了基於單片機的其他功能的擴展與實現。具體如圖3-2所示。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#課程設計_04


復位電路:復位電路是單片機應用中的最基本和最重要的電路,用於處理單片機工作失靈等緊急問題。復位電路分為斷電覆位和按鍵復位,本文采用的是按鍵復位,其原理為:當單片機復位端口為高電平時,單片機中的代碼將不會被執行。一開始上電時,電容還未充滿電,復位端口為高電平,避免了直接上電就運行程序導致的程序錯誤等問題。當電容充滿電後,復位端口變為低電平,程序開始運行。另外,當按鍵按下後,單片機處於復位狀態。

晶振電路:晶振電路提供單片機所必不可少的時鐘頻率,用以提供數據傳輸和單片機的工作時序。本畢設晶振電路提供11.0592MHZ時鐘頻率。單片機芯片XTAL1(19 腳)和XTAL2(18 腳)構成單片機時鐘管腳,以此構成整個穩定的振盪電路,為單片機的正常工作提供保障;晶振電路採用2個20pf電容。3.2 LCD1602顯示模塊設計

本系統顯示温濕度和煙霧數值採用的是LCD1602液晶顯示屏。眾所周知,單片機設計中一般採用LED數碼管或者LCD液晶顯示屏來顯示數據,而LCD液晶顯示屏的特點比較突出,顯示的數據更加清晰、明瞭,且功耗較少,很適合本次設計的使用,下圖3-3所示的是LCD液晶顯示屏的管腳。其各個引腳説明:

第1腳:VSS為地電源。

第2腳:VDD接5V正電源。

第3腳:V0接10K電阻後接電源正極。

第4腳:RS為寄存器選擇,高電平狀態下為數據寄存器、低電平狀態下為指令寄存器。

第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。

第6腳:E端為使能端,當其由高電平轉換為低電平時,液晶模塊開始執行代碼。

第7~14腳:D0~D7為數據輸入端。第15腳:背光源正極。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#火災報警_05


3.3温濕度傳感器模塊設計

温度傳感器的端口1接地,2端口和端口3接10K上拉電阻後接電源和單片機,採集的數字信號直接送單片機。用於處理和顯示。液位傳感器及流量傳感器需要通過排針外接,具體連接如圖3-4所示。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#課程設計_06

3.4煙霧傳感器模塊設計(篇幅有限,詳見文末)
3.5 繼電器控制電路(篇幅有限,詳見文末)

第4章 軟件設計

根據本文設計需求,在第三章硬件電路設計的基礎上,需要通過軟件編程實現的具體功能:
(1)驅動各個模塊工作,實現温度的採集與顯示,實現煙霧濃度的採集與AD轉換顯示;
(2)按鍵設置功能。實現温濕度報警閾值設置、煙霧報警閾值設置、電機驅動等功能;
(3)報警功能實現。實現温度温度過高、温度過低、濕度過高、濕度過低、煙霧濃度過高的聲光報警;
(4)繼電器控制電機。當同時滿足煙霧過高、温度過高、濕度過低三個條件時,控制繼電器吸合,以實現電機轉動,表示滅火。其設計流程如圖4-1所示。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#火災報警_07

部分程序代碼(完整詳見文末)

#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char		// 以後unsigned char就可以用uchar代替
#define uint  unsigned int		// 以後unsigned int 就可以用uint 代替

sfr ISP_DATA  = 0xe2;			// 數據寄存器
sfr ISP_ADDRH = 0xe3;			// 地址寄存器高八位
sfr ISP_ADDRL = 0xe4;			// 地址寄存器低八位
sfr ISP_CMD   = 0xe5;			// 命令寄存器
sfr ISP_TRIG  = 0xe6;			// 命令觸發寄存器
sfr ISP_CONTR = 0xe7;			// 命令寄存器

sbit dianji = P1^6;     //電機IO定義

sbit ADC_CLK =P2^6;		//SCL定義為P1口的第3位腳,連接ADC0832SCL腳
sbit ADC_DAT =P2^7;		//DO定義為P1口的第4位腳,連接ADC0832DO腳
sbit ADC_CS=P2^5;		//CS定義為P1口的第4位腳,連接ADC0832CS腳

sbit LcdRs_P   = P1^2;    // 1602液晶的RS管腳       
sbit LcdRw_P   = P1^3;    // 1602液晶的RW管腳 
sbit LcdEn_P   = P1^4;    // 1602液晶的EN管腳
sbit KeySet_P  = P3^2;		// “設置”按鍵的管腳
sbit KeyDown_P = P3^3;		// “減”按鍵的管腳
sbit KeyUp_P   = P3^4;		// “加”按鍵的管腳 
sbit Buzzer_P  = P1^5;		// 蜂鳴器
sbit DHT11_P   = P1^1;	 	// 温濕度傳感器DHT11數據接入
sbit LedTH_P   = P2^0;		// 温度過高報警指示燈
sbit LedTL_P   = P2^1;		// 温度過低報警指示燈
sbit LedHH_P   = P2^2;		// 濕度過高報警指示燈
sbit LedHL_P   = P2^3;		// 濕度過低報警指示燈
sbit LedLG_P   = P2^4;		// 煙霧過高報警指示燈

uchar temp;								// 保存温度
uchar humi;								// 保存濕度
uint  light;									// 保存煙霧

uchar gIndex=0;						// 串口接收索引
uint  Value[20]={0};			// 串口數據緩存區

uchar AlarmTL;						// 温度下限報警值
uchar AlarmTH;						// 温度上限報警值
uchar AlarmHL; 						// 濕度下限報警值
uchar AlarmHH;						// 濕度上限報警值
uint  AlarmLG;						// 煙霧報警值



/*********************************************************/
// 單片機內部EEPROM不使能
/*********************************************************/
void ISP_Disable()
{
	ISP_CONTR = 0;
	ISP_ADDRH = 0;
	ISP_ADDRL = 0;
}


/*********************************************************/
// 從單片機內部EEPROM讀一個字節,從0x2000地址開始
/*********************************************************/
unsigned char EEPROM_Read(unsigned int add)
{
	ISP_DATA  = 0x00;
	ISP_CONTR = 0x83;
	ISP_CMD   = 0x01;
	ISP_ADDRH = (unsigned char)(add>>8);
	ISP_ADDRL = (unsigned char)(add&0xff);
	// 對STC89C51系列來説,每次要寫入0x46,再寫入0xB9,ISP/IAP才會生效
	ISP_TRIG  = 0x46;	   
	ISP_TRIG  = 0xB9;
	_nop_();
	ISP_Disable();
	return (ISP_DATA);
}
/*********************************************************/
// 往單片機內部EEPROM寫一個字節,從0x2000地址開始
/*********************************************************/
void EEPROM_Write(unsigned int add,unsigned char ch)
{
	ISP_CONTR = 0x83;
	ISP_CMD   = 0x02;
	ISP_ADDRH = (unsigned char)(add>>8);
	ISP_ADDRL = (unsigned char)(add&0xff);
	ISP_DATA  = ch;
	ISP_TRIG  = 0x46;
	ISP_TRIG  = 0xB9;

第5章 仿真實現

5.1 仿真實現

5.1.1 仿真電路圖

本系統用protues8.7設計的仿真原理圖如圖5-1所示。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#課程設計_08

根據第四章軟件設計的思路,結合仿真需求,我們將仿真設計的C代碼利用KEIL5編寫好,並進行詳細地註釋。接着,我們點擊“create HEX file”,並再次編譯程序,這樣就會生成HEX燒錄文件,具體如圖5-2所示。

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#火災報警_09


接着,我們打開仿真原理圖,並將生產的“HEX”文件燒錄到單片機芯片中,點擊開始仿真,就可以實現相關仿真了,我們將在下一節中具體展示仿真的結果。

5.1.2 仿真結果(詳見開頭效果展示)
(1)温濕度值與煙霧值的顯示
(2)温濕度報警閾值和煙霧報警閾值的設置
(3)火災自動報警
(5)自動滅火

5.2 測試情況分析
經過以上一系列的仿真測試,本文設計的“基於51單片機的智能家居控制系統”能夠完成了2.1節的系統需求,具體仿真實現了以下功能:
(1)温濕度值測量及顯示穩定、精確;煙霧值測量及顯示穩定、精確;
(2)可以通過按鍵設定温濕度報警閾值,且測得的温濕度超過設定的閾值時,報警指示燈閃爍,蜂鳴器報警;可以通過按鍵設定煙霧報警閾值,且測得的煙霧濃度超過設定的閾值時,煙霧報警指示燈閃爍,蜂鳴器報警;
(3)當同時滿足煙霧過高、温度過高、濕度過低三個條件時,控制繼電器吸合,以實現電機轉動,表示滅火。



原理圖

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#智能家居_10

仿真圖

基於單片機的家庭火災警報系統設計_基於單片機的火災報警系統設計_#單片機_11