以stc15w408as為核心,基於gsm的紅外報警技術報告

異想天開的男孩發表於2020-10-22

基於gsm的紅外感應報警

摘要:本設計以stc15w408as微控制器為核心,實現有物體經過特定區域,手機上將會收到報警簡訊和電話。歹徒經過感應模組上的紅外發射管發射範圍,紅外訊號將會被彈回且被模組上的紅外接收管接收,改變傳入感應模組上的stc15w408as微控制器的電壓,stc15w408as通過ad轉換將電壓模擬訊號轉化為數字訊號儲存在stc15w408as上,當採集的ad值大於基準值時,將通過串列埠將資訊傳送到zigbee無線傳輸模組上,被髮送簡訊機器上的zigbee模組接收並通過串列埠傳輸到傳送簡訊機器上的stc15w408as微控制器上的串列埠上。stc15w408as微控制器接收到串列埠傳來的訊號後,通過串列埠傳送at指令給sim800c模組(gsm),sim800c將一條簡訊和撥打一次電話給手機。

關鍵詞:gsm,stc15w408as微控制器,紅外感應,zegbee

目錄

1設計目的和功能需求
1.1設計目的
1.2功能需求
2系統方案
2.1現使用系統總方案
2.2感應物體經過方案論證與選擇
2.3無線傳輸方案論證與選著
2.4與手機通訊方案論證與選著
3系統設計和電路設計
3.1紅外感應模組電路設計
3.2與手機通訊模組設計
4軟體程式設計
4.1感應模組程式程式設計
4.2與手機通訊模組程式設計
5測試方案所遇問題和解決方案
5.1製作和除錯紅外感應模組所遇問題和解決辦法
5.2製作和除錯與手機通訊模組所遇問題和解決辦法
6總結
7.參考文獻
8.附錄

1設計目的和功能需求

1.1設計目的
當非法人員進行非法入侵的時候,相應的防盜報警器就會通過一些電話甚至是簡訊來告訴主人,這樣主人就能夠依據警報的內容來做出選擇或者是應對措施,避免更大的損失出現。獨居人群遭遇了入室搶劫等非法入侵,那麼我們就可以利用報警主機來向外進行報警訊號的傳送,求助外部力量的幫助。
1.2功能需求
1.感應器要小,可以安裝在角落等隱蔽的地方
2.感應器非對射感應距離要大於1.5米,可以覆蓋門窗等容易進入的室內的地方
3.感應器與報警器需要分開,防止歹徒發現報警器後將其破壞中斷報警
4.報警器可以獨立自主傳送報警資訊,以防斷網等情況無法傳送資訊
5.報警器可以與感應器超多各對接
6.私人手機可以收到報警資訊

2系統方案

2.1現使用系統總方案
在這裡插入圖片描述

歹徒經過感應模組上的紅外發射管發射範圍,紅外訊號將會被彈回且被模組上的紅外接收管接收,改變傳入感應模組上的stc15w408as微控制器的電壓,stc15w408as通過ad轉換將電壓模擬訊號轉化為數字訊號儲存在stc15w408as上,當採集的ad值大於基準值時,將通過串列埠將資訊傳送到zigbee無線傳輸模組上,被髮送簡訊機器上的zigbee模組接收並通過串列埠傳輸到傳送簡訊機器上的stc15w408as微控制器上的串列埠上。stc15w408as微控制器接收到串列埠傳來的訊號後,通過串列埠傳送at指令給sim800c模組(gsm),sim800c將一條簡訊和撥打一次電話給手機。

2.2感應物體經過方案論證與選擇
方案一:用紅外發射管和接收管將物體進入的訊號轉化為電模擬訊號,再由393比較器來判斷輸出高低電輸出給stc89c52微控制器的外部中斷口,微控制器處理訊號後轉遞給無線模組。此方案感應距離在50cm左右,採用的微控制器較大,不利於安置與狹小角落不滿足要求,需要手動調節抗紅外干擾

方案二:用紅外發射管和接收管將物體進入的訊號轉化為電模擬訊號,用stc15W408as微控制器採集電模擬訊號進行ad轉化,微控制器處理判斷後將資訊傳遞給無線模組。此方案感應距離可達3米,整體模組可以做的很小,可以實現自動調節紅外干擾,不需像方案一那樣手動調節。
方案三:購買紅外感應模組和超聲波測距模組,探測物體進入轉化為電模擬訊號和電數字訊號,傳遞給stc15w408as微控制器處理後,微控制器在傳遞給無線模組。此方案節省畫原理圖,製作電路版的時間,感應距離在50cm以下,價格高。

綜合資金,時間,技術難度和需求,由於方案二感應距離出色,做出來模組小,可自動調節測量距離,自動調節抗干擾強度,故選取方案二。

2.3無線傳輸方案論證與選著
方案一:採用zigbee模組作為無線傳輸的橋樑。
此方案傳輸資訊速率低具有最高250kbit/s、20kbit/s和40kbit/s的傳輸速率傳輸圖片等資訊困難,
低功耗: 由於ZigBee的傳輸速率低,發射功率僅為1mW,而且採用了休眠模式,功耗低,因此ZigBee裝置非常省電。據估算,ZigBee裝置僅靠兩節5號電池就可以維持長達6個月到2年左右的使用時間,這是其它無線裝置望塵莫及的。
成本低: ZigBee模組的初始成本在6美元左右,估計很快就能降到1.5—2.5美元, 並且ZigBee協議是免專利費的。低成本對於ZigBee也是一個關鍵的因素。
時延短: 通訊時延和從休眠狀態啟用的時延都非常短,典型的搜尋裝置時延30ms,休眠啟用的時延是15ms, 活動裝置通道接入的時延為15ms。因此ZigBee技術適用於對時延要求苛刻的無線控制(如工業控制場合等)應用。
網路容量大: 一個星型結構的Zigbee網路最多可以容納254個從裝置和一個主裝置, 一個區域內可以同時存在最多100個ZigBee網路, 而且網路組成靈活,可組建上萬個機器之間的通訊。
可靠: 採取了碰撞避免策略,同時為需要固定頻寬的通訊業務預留了專用時隙,避開了傳送資料的競爭和衝突。MAC層採用了完全確認的資料傳輸模式, 每個傳送的資料包都必須等待接收方的確認資訊。如果傳輸過程中出現問題可以進行重發。
安全: ZigBee提供了基於迴圈冗餘校驗(CRC)的資料包完整性檢查功能,支援鑑權和認證, 採用了AES-128的加密演算法,各個應用可以靈活確定其安全屬性。
方案二:採用藍芽模組作為無線傳輸的橋樑。
此方案可容納的裝置少,最多7個。傳輸資訊速率高,可傳輸圖片視訊等資訊,安全性和抗干擾能力強,由於藍芽技術具有跳頻的功能,有效避免了ISM頻帶遇到干擾源。藍芽技術的相容性較好,目前,藍芽技術已經能夠發展成為獨立於作業系統的一項技術,實現了各種作業系統中良好的相容效能。傳輸距離較短:現階段,藍芽技術的主要工作範圍在10米左右,經過增加射頻功率後的藍芽技術可以在100米的範圍進行工作,只有這樣才能保證藍芽在傳播時的工作質量與效率,提高藍芽的傳播速度。另外,在藍芽技術連線過程中還可以有效的降低該技術與其他電子產品之間的干擾,從而保證藍芽技術可以正常執行。藍芽技術不僅有較高對傳播質量與效率,同時還具有較高的傳播安全性特點
方案三採用Wi-Fi 模組作為無線傳輸橋樑
此方案與有線網路技術相比,具有靈活、建網迅速、個人化等特點。將這一技術應用於電信網的接入網領域,能夠方便、靈活地為使用者提供網路接入,適合於使用者流動性較大、有資料業務需求的公共場所、高階的企業及家庭使用者、需要臨時建網的場合以及難以採用有線接入方式的環境等。傳輸距離在100-300M,速率可達300Mbps,功耗10-50mA。可直接與外界進行通訊。
綜合各方面因素,藍芽可容納裝置少,覆蓋範圍小。wi-fi需要成本貴,zigbee價格較低,可容納裝置巨大,雖然傳輸速率低但足以夠用了。最終選取方案一zigbee作為無線傳輸的橋樑。

2.4與手機通訊方案論證與選著
方案一:用gsm進行傳送簡訊和撥打電話。全球行動通訊系統(Global System for Mobile Communications) ,縮寫為GSM,由歐洲電信標準組織ETSI制訂的一個數字行動通訊標準。它的空中介面採用分時多重進接技術 [1] 。自90年代中期投入商用以來,被全球超過100個國家採用。GSM標準的無處不在使得在行動電話運營商之間簽署"漫遊協定"後使用者的國際漫遊變得很平常。 GSM 較之它以前的標準最大的不同是它的信令和語音通道都是數字式的,因此GSM被看作是第二代 (2G)行動電話系統
方案二:用wi-fi溝通手機上的app。無線網路在無線區域網的範疇是指“無線相容性認證”,實質上是一種商業認證,同時也是一種無線聯網技術,以前通過網線連線電腦,而Wi-Fi則是通過無線電波來連網;常見的就是一個無線路由器,那麼在這個無線路由器的電波覆蓋的有效範圍都可以採用Wi-Fi連線方式進行聯網,如果無線路由器連線了一條ADSL線路或者別的上網線路,則又被稱為熱點。
綜合考慮,wi-fi容易被人連結入侵,gsm可以獨立傳送簡訊,難以入侵進去,所以採用gsm作為與外界通許的橋樑。

3系統設計和電路設計

3.1紅外感應模組電路設計在這裡插入圖片描述

原理:給紅外發射管施加電壓,使紅外線發射出去,當有物體經過紅外線時紅外線將會反彈回來,反彈回來的紅外線射在了紅外接收管上,改變了紅外接收管的電阻,從而改變微控制器採集電壓的引腳的電壓,微控制器經過資料處理判斷當前電壓是否大於初始化採集的值(紅外噪音),如果大於將點亮led1燈並且通過串列埠傳遞資訊出去。
紅外發射管上與3個200歐的電阻並聯,一個200歐電阻串聯。是為了增大通過紅外發射管的電流,使其發射出更強的紅外訊號,提高感應距離,同時減少單個電阻的發熱量。
紅外接收管是一個二極體,當被紅外線照射到會迅速導通,本設計就是這個特性來判斷是否有物體經過。紅外接收管後面的電阻R5是一個下拉電阻是為了降低紅外接收管本身在無紅外源下反接也會對微控制器1腳輸送電壓,經過多次實驗測試當r5為200K阻值時感應距離是最佳的。
P1排針是用來讓微控制器與zigbee無線傳輸模組進行通訊的
本電路以stc15w408as微控制器作為核心。微控制器1腳是用來採集因紅外接收管電阻發生變化而輸送過來的電壓;6腳是電源輸入角;8腳是接地腳;9腳是微控制器串列埠通訊接收RX腳;10腳是微控制器串列埠通訊輸出TX腳;16腳是控制提示燈。

3.2與手機通訊模組設計
在這裡插入圖片描述

原理:stc15w408as在9腳收到來自zigbee的訊號後,傳送儲存在stc15w408as微控制器內的ta指令,指令通過10腳tx傳送出去給gsm模組。6腳是接vcc給微控制器供電,8腳接地。

4軟體程式設計

4.1感應模組程式編寫設計
接通電源後程式開始初始化串列埠,初始化ad轉化,然後控制stc15w408as微控制器採集1腳電壓儲存起來作為基值,然後開始不斷採集1腳電壓與基值進行對比,當採集到的值大於基值後,給16腳輸送高電平再通過串列埠向外發出9857的資訊,當採集到的值比基值小時,給16腳輸出低電平不對外通訊。

4.2與手機通訊模組程式設計
接通電源後程式開始串列埠傳輸然後不斷的迴圈不讓程式結束,等待串列埠傳來資訊,當串列埠傳來資訊後,通過串列埠向外傳送。使gsm傳送簡訊和撥打電話的at指令

5測試方案所遇問題和解決方案

5.1製作和除錯紅外感應模組所遇問題和解決辦法
問題:感應距離一直無法突破1米
猜測:當時採用的是方案一,用lm393比較器為核心,其精度不夠高,被硬體所限制
解決方案:更換方案,更換為方案二,用stc15w408as作為核心,重新制作一份電路。這樣不僅提高了測量精度,還能縮小整個感應模組體積。

5.2製作和除錯與手機通訊模組所遇問題和解決辦法
問題:stc15w408a微控制器9600波特率初值無法計算正確
猜測:可以使stc15w408as微控制器點亮一個led燈,證明其實內部是可以跑程式的,微控制器可使用串列埠向電腦傳送穩定的亂碼資訊,使用官方手冊上的9600波特率初值和自己手動直接計算得出的初值,都無法使stc15w408as微控制器與電腦用9600波特率進行正常的串列埠通訊。可能是晶片內部時脈頻率變了。
解決方案:給stc15w408as微控制器寫入一個不斷更換波特率初值同時向電腦以9600波特率傳送初值的串列埠通訊,當電腦可以看到完整資訊時,所看到的傳送出來的初值就是9600波特率的初值。這個方法確定的是大概範圍的值,可能誤差率較高,還需慢慢調節。

6.總結

本設計實現當有人經過感應區域,手機上將會收的一條“有人進入”的簡訊和一通時長5s的電話。感應距離穩定輸出超過1米。因時間有限傳送簡訊模組是用麵包版做的,並沒有製版出來。

7.參考文獻

[1] 黃智偉.全國大學生電子設計競賽系統設計[M].北京:航空航天大學出版社,2006
[2]《 電力電子技術》.廖冬初,聶漢平主編.華中科技大學出版社.2007,(09).
[3]《zigbee技術與實訓教程:基於cc2530的無線感測網技術》.姜仲.劉丹編.清華大學出版社.2018

附錄1:紅外感應模組電路原理圖
在這裡插入圖片描述

附錄2:與手機通訊模組電路原理圖
在這裡插入圖片描述

附錄3:與手機通訊模組程式
#include"reg52.h"
#include"intrins.h"

sfr AUXR = 0x8e; //定義AUXR暫存器名字, 控制定時器 串列埠

sfr T2H = 0xd6; //定義T2H暫存器名字 用來重灌定時器2的高八位
sfr T2L = 0xd7; //定義T2L暫存器名字 用來重灌定時器2的低八位

void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x5a; //設定串列埠為8位可變波特率

T2L = 0xE0;                 //設定波特率重灌值
T2H =  0xfE;                
AUXR = 0x14;                //T2為1T模式, 並啟動定時器2
AUXR |= 0x01;               //選擇定時器2為串列埠1的波特率發生器
EA=1;						//開啟總中斷
ES=1;						//開啟串列埠中斷
RI = 0;	

}

void Send_Char (unsigned char UART_data) //傳送單個字元
{
SBUF = UART_data;
while(TI == 0);
TI = 0;
}

/*****************************************************************************
字串傳送函式
/****************************************************************************/
void Send_String(unsigned char *str) // 傳送多個字元
{
while(*str != ‘\0’)
{
Send_Char(*str);
*str=*str++;
}
*str = 0;
}

void Delay_Ms (unsigned int a) //延時函式
{
unsigned int i;
while( a-- != 0)
{
for(i = 0; i < 600; i++);
}
}
main()
{
UartInit(); //初始化串列埠
while(1) ; //鎖住微控制器防止程式跑掉微控制器停止工作

}
void uart(void) interrupt 4 // 串列埠
{

if(RI)
{

													   //發簡訊
Send_String("AT+CMGF=1\r\n");
Delay_Ms(100);

Send_String("AT+CSMP=17,167,2,25\r\n");
Delay_Ms(100);

Send_String("AT+CSCS=\"UCS2\"\r\n");
Delay_Ms(100);

Send_String("AT+CMGS=\"00310035003800310033003200340032003300320032\"\r\n");			//設定接收簡訊號碼
Delay_Ms(100);

Send_String("67094EBA8FDB5165\r\n");										   //設定簡訊內容
Delay_Ms(100);

Send_Char(0x1A);
Delay_Ms(5000);	
								 
								      //打電話
Send_String("ATE1\r\n");
Delay_Ms(100);
Send_String("AT+COLP=1\r\n");
Delay_Ms(100);
Send_String("ATD15813242322;\r\n");
Delay_Ms(10000);
Delay_Ms(10000);
Send_String("ATH\r\n");

RI=0;	

	
		}
	}

附錄4:紅外感應模組程式
#include"reg52.h"
#include"intrins.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

sfr ADC_CONTR = 0xBC; //定義ADC_CONTR暫存器的名字 控制adc電源 結束 轉換 輸入腳 轉換速度
sfr ADC_RES = 0xBD; //定義ADC_RES暫存器的名字 adc結果高八位儲存暫存器
sfr ADC_LOW2 = 0xBE; //定義暫存器ADC_LOW2的名字 adc結果低二位儲存器
sfr P1ASF = 0x9D; //定義P1ASF暫存器的名字 控制那個io口為adc模擬量輸入口

sfr AUXR = 0x8e; //定義AUXR暫存器名字, 控制定時器 串列埠

sfr T2H = 0xd6; //定義T2H暫存器名字 用來重灌定時器2的高八位
sfr T2L = 0xd7; //定義T2L暫存器名字 用來重灌定時器2的低八位

sbit p11=P1^1; //定義p11為P1.1引腳別名

WORD temp=0,temp1=0,a=0;

void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x5a; //設定串列埠為8位可變波特率

T2L = 0xE0;                 //設定波特率重灌值
T2H =  0xfE;                
AUXR = 0x14;                //T2為1T模式, 並啟動定時器2
AUXR |= 0x01;               //選擇定時器2為串列埠1的波特率發生器

}

void Send_Char (unsigned char UART_data)
{
SBUF = UART_data;
while(TI == 0);
TI = 0;
}

/*****************************************************************************
字串傳送函式
/****************************************************************************/
void Send_String(unsigned char *str)
{
while(*str != ‘\0’)
{
Send_Char(*str);
*str=*str++;
}
*str = 0;
}

void Delay_us(WORD n)
{
WORD x;

while (n--)
{
    x = 5000;
    while (x--);
}

}

void InitADC()
{
P1ASF = 0x04; //設定P1.2口為AD口
ADC_RES = 0;
ADC_LOW2=0; //清除結果暫存器
ADC_CONTR = 0xe2;
Delay_us(2); //ADC上電並延時

}

main()
{
InitADC();
UartInit();

ADC_CONTR = 0xea; //開始ad轉換
while(!(ADC_CONTR&0X10)); //等待ad轉換
ADC_CONTR&=0xef; //消除標誌位
temp1=ADC_RES;
temp1=temp1<<2;
temp1|=ADC_LOW2;
Delay_us(100);
while(1)
{
ADC_CONTR = 0xea; //開始ad轉換
while(!(ADC_CONTR&0X10)); //等待ad轉換
ADC_CONTR&=0xef; //消除標誌位
temp=ADC_RES;
temp=temp<<2;
temp|=ADC_LOW2;
if(temp<temp1)
{
p11=0;

}
if(temp>temp1)
{
p11=1;

  Send_String("9857\r\n");
 Delay_us(5);

}
}
}

相關文章