|
|
分享一個(gè)基于GPRS網(wǎng)絡(luò)的遠(yuǎn)程氣體檢測(cè)系統(tǒng),用到了煙霧傳感器、0.96寸的oled
四、畢業(yè)論文﹙設(shè)計(jì)﹚的內(nèi)容要求:
隨著越來越多的場(chǎng)合向自動(dòng)化無人職守邁進(jìn),尤其在安全、監(jiān)控等領(lǐng)域。為了進(jìn)一步降低成本,減少人力的投資,以及更集中、更方便的掌握現(xiàn)場(chǎng)情況,許多場(chǎng)合都采用了電子監(jiān)控設(shè)備。而這些電子設(shè)備的設(shè)計(jì)無疑涉及到這些領(lǐng)域的安全性,這就對(duì)監(jiān)控設(shè)備的成本,穩(wěn)定性,以及性能三方面都提出了更高的要求。
本設(shè)計(jì)主要是利用GPRS無線網(wǎng)絡(luò)實(shí)現(xiàn)環(huán)境的實(shí)時(shí)在線監(jiān)測(cè)。該系統(tǒng)由監(jiān)測(cè)端、通信網(wǎng)絡(luò)和監(jiān)測(cè)中心組成,監(jiān)測(cè)端由煙霧等傳感器、微處理器和控制電路部分組成,實(shí)現(xiàn)環(huán)境參數(shù)的實(shí)時(shí)測(cè)量和數(shù)據(jù)的處理。采通信網(wǎng)絡(luò)由GPRS無線發(fā)送模塊組成,將實(shí)時(shí)監(jiān)測(cè)到的數(shù)據(jù)發(fā)送到監(jiān)測(cè)中心。系統(tǒng)工作過程為:首先傳感器進(jìn)行環(huán)境監(jiān)測(cè)數(shù)據(jù)的采集,經(jīng)信號(hào)處理模塊處理后送到單片機(jī),經(jīng)過單片機(jī)串口送到GPRS模塊發(fā)射,經(jīng)GPRS通信網(wǎng)絡(luò)接入internet網(wǎng),將數(shù)據(jù)送到監(jiān)測(cè)中心。并對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)處理
具體要求如下:
1 完成系統(tǒng)硬件和軟件設(shè)計(jì);
2利用GPRS網(wǎng)絡(luò)實(shí)現(xiàn)液位數(shù)據(jù)的實(shí)時(shí)遠(yuǎn)程傳輸和液位實(shí)時(shí)控制。
五、畢業(yè)論文﹙設(shè)計(jì)﹚應(yīng)收集資料及參考文獻(xiàn):
收集關(guān)于單片機(jī)應(yīng)用、GPRS在數(shù)據(jù)采集和遠(yuǎn)程監(jiān)控方面的專業(yè)資料,閱讀和學(xué)習(xí)下列參考文獻(xiàn):
[1] 陳蒙蒙.雨量水位監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[D].杭州:杭州電子科技大學(xué),2013.
[2] 張廣馳.基于GPRS的水資源遠(yuǎn)程監(jiān)測(cè)系統(tǒng)研究[D].淮南:安徽理工大學(xué),2014.
[3] 胡勝利,萬晉軍.基于GPRS的地下水自動(dòng)監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].水利水電技術(shù).2011,4
[4] 湯新龍. GPRS數(shù)據(jù)通訊程序設(shè)計(jì)方法及應(yīng)用研究[D]. 蘇州: 蘇州大學(xué),2014.
[5] 潘驍 . 基于ZigBee與GPRS的無線倉儲(chǔ)環(huán)境參數(shù)監(jiān)測(cè)系統(tǒng)設(shè)計(jì) [D], 廣西師范大學(xué),2016
六、畢業(yè)論文﹙設(shè)計(jì)﹚的進(jìn)度安排:
1月10日——3月20日:查閱資料,完成外文翻譯原文和開題報(bào)告。
3月21日——4月20日:完成系統(tǒng)監(jiān)測(cè)終端的設(shè)計(jì)并提交中期檢查報(bào)告。
4月21日——5月20日:完成環(huán)境監(jiān)測(cè)參數(shù)的遠(yuǎn)程傳輸設(shè)計(jì),準(zhǔn)備作品驗(yàn)收。
5月21日——6月15日:撰寫、修改畢業(yè)設(shè)計(jì)論文,準(zhǔn)備并完成答辯。
接線說明:
STC89C52RC ADC0832
P3.5 ----------------------- 1
P3.4 ----------------------- 5
P3.3 ----------------------- 7
VCC ----------------------- 8
GND ----------------------- 4
OLED
P1.0 --------------------- CLK
P1.1 -------------------- SDA
DHT11
P2.0 -------------------- DATA
MQ7 A0------------------ ADC0832 2管腳
單片機(jī)源程序如下:
- /*************************************************************/
- #include <REG51.H>
- #include <string.H>
- #include <intrins.h>
- #include <oled.h>
- #include "bmp.h"
- #define uchar unsigned char
- #define uint unsigned int
- typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 無符號(hào)8位整型變量 */
- typedef signed char S8; /* defined for signed 8-bits integer variable 有符號(hào)8位整型變量 */
- typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 無符號(hào)16位整型變量 */
- typedef signed int S16; /* defined for signed 16-bits integer variable 有符號(hào)16位整型變量 */
- typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 無符號(hào)32位整型變量 */
- typedef signed long S32; /* defined for signed 32-bits integer variable 有符號(hào)32位整型變量 */
- typedef float F32; /* single precision floating point variable (32bits) 單精度浮點(diǎn)數(shù)(32位長度) */
- typedef double F64; /* double precision floating point variable (64bits) 雙精度浮點(diǎn)數(shù)(64位長度) */
- #define FOSC_110592M
- sbit P13=P1^3;
- sbit p32=P3^2;
- sbit P2_0 = P2^0 ;
- /*********************************端口定義**********************************/
- sbit CS = P3^5; //接adc0832 1口
- sbit Clk = P3^3;
- sbit DATI = P3^4;
- sbit DATO = P3^4;
- sbit P20=P2^0 ;
- /*******************************定義全局變量********************************/
- unsigned char dat = 0x00; //AD值
- unsigned char CH; //通道變量
- //以下是開機(jī)后發(fā)送到手機(jī)的內(nèi)容,發(fā)送的號(hào)碼在程序中修改。
- unsigned int rec_data_len_uart=0; //標(biāo)記Buffer_Uart0接收數(shù)組
- unsigned char idata Buffer_Uart0_Rec[25]={0}; //Uart0中斷接收數(shù)組
- char fasong[25] = "wen du:";
- int fasong1[];
- int a = 37;
- //----------------------------------------------//
- //----------------定義區(qū)--------------------//
- //----------------------------------------------//
- U8 U8FLAG,U8comdata,U8temp;
- U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
- U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
- void Delay(U16 j)
- { U8 i;
- for(;j>0;j--)
- {
- for(i=0;i<27;i++);
- }
- }
- void Delay_10us(void)
- {
- U8 i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
-
- void COM(void)
- {
-
- U8 i;
-
- for(i=0;i<8;i++)
- {
-
- U8FLAG=2;
- while((!P2_0)&&U8FLAG++);
- Delay_10us();
- Delay_10us();
- Delay_10us();
- U8temp=0;
- if(P2_0)U8temp=1;
- U8FLAG=2;
- while((P2_0)&&U8FLAG++);
- //超時(shí)則跳出for循環(huán)
- if(U8FLAG==1)break;
- //判斷數(shù)據(jù)位是0還是1
-
-
-
- U8comdata<<=1;
- U8comdata|=U8temp; //0
- }
-
- }
- //--------------------------------
- //-----濕度讀取子程序 ------------
- //--------------------------------
- //----以下變量均為全局變量--------
- //----溫度高8位== U8T_data_H------
- //----溫度低8位== U8T_data_L------
- //----濕度高8位== U8RH_data_H-----
- //----濕度低8位== U8RH_data_L-----
- //----校驗(yàn) 8位 == U8checkdata-----
- //----調(diào)用相關(guān)子程序如下----------
- //--------------------------------
- void RH(void)
- {
- //主機(jī)拉低18ms
- P2_0=0;
- Delay(180);
- P2_0=1;
- //總線由上拉電阻拉高 主機(jī)延時(shí)20us
- Delay_10us();
- Delay_10us();
- Delay_10us();
- Delay_10us();
- //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)
- P2_0=1;
- //判斷從機(jī)是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
- if(!P2_0) //T !
- {
- U8FLAG=2;
- //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
- while((!P2_0)&&U8FLAG++);
- U8FLAG=2;
- //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
- while((P2_0)&&U8FLAG++);
- //數(shù)據(jù)接收狀態(tài)
- COM();
- U8RH_data_H_temp=U8comdata;
- COM();
- U8RH_data_L_temp=U8comdata;
- COM();
- U8T_data_H_temp=U8comdata;
- COM();
- U8T_data_L_temp=U8comdata;
- COM();
- U8checkdata_temp=U8comdata;
- P2_0=1;
- //數(shù)據(jù)校驗(yàn)
-
- U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
- if(U8temp==U8checkdata_temp)
- {
- U8RH_data_H=U8RH_data_H_temp;
- if(U8RH_data_H>20)
- {
- U8RH_data_H = 0.6* U8RH_data_H;
- }
- U8RH_data_L=U8RH_data_L_temp;
- U8T_data_H=U8T_data_H_temp;
- U8T_data_L=U8T_data_L_temp;
- U8checkdata=U8checkdata_temp;
- }//fi
- }//fi
- }
-
- /****************************************************************************
- 函數(shù)功能:AD轉(zhuǎn)換子程序
- 入口參數(shù):CH 出口參數(shù):dat
- ****************************************************************************/
- unsigned char adc0832(unsigned char CH)
- {
- unsigned char i,test,adval;
- adval = 0x00;
- test = 0x00;
- Clk = 0; //初始化
- DATI = 1;
- _nop_();
- CS = 0;
- _nop_();
- Clk = 1;
- _nop_();
- if ( CH == 0x00 ) //通道選擇
- {
- Clk = 0;
- DATI = 1; //通道0的第一位
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- DATI = 0; //通道0的第二位
- _nop_();
- Clk = 1;
- _nop_();
- }
- else
- {
- Clk = 0;
- DATI = 1; //通道1的第一位
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- DATI = 1; //通道1的第二位
- _nop_();
- Clk = 1;
- _nop_();
- }
- Clk = 0;
- DATI = 1;
- for( i = 0;i < 8;i++ ) //讀取前8位的值
- {
- _nop_();
- adval <<= 1;
- Clk = 1;
- _nop_();
- Clk = 0;
- if (DATO)
- adval |= 0x01;
- else
- adval |= 0x00;
- }
- for (i = 0; i < 8; i++) //讀取后8位的值
- {
- test >>= 1;
- if (DATO)
- test |= 0x80;
- else
- test |= 0x00;
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- }
- if (adval == test) //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請(qǐng)將該行去掉
- dat = test;
- _nop_();
- CS = 1; //釋放ADC0832
- DATO = 1;
- Clk = 1;
- return dat;
- }
- /***************************顯示處理函數(shù)********************************/
-
- //注意,無論接收到信號(hào)還是發(fā)送完信號(hào),都會(huì)進(jìn)中斷服務(wù)程序的
- /************************************按鍵作為外部中斷的初始化*******************************************/
- void key_init(void)
- {
- IT0 = 1; //外部中斷0,使用端口P3.2.
- EX0 = 1;
- }
- /*初始化程序(必須使用,否則無法收發(fā)),次程序?qū)?huì)使用定時(shí)器1*/
- void SerialInti()//初始化程序(必須使用,否則無法收發(fā))
- {
- TMOD=0x20;//定時(shí)器1操作模式2:8位自動(dòng)重載定時(shí)器
- #ifdef FOSC_12M //在這里根據(jù)晶振大小設(shè)置不同的數(shù)值初始化串口
- TH1=0xf3;//裝入初值,波特率2400
- TL1=0xf3;
- #else
- TH1=0xfd;//裝入初值,波特率9600
- TL1=0xfd;
- #endif //end of SOC_12M
- TR1=1;//打開定時(shí)器
- SM0=0;//設(shè)置串行通訊工作模式,(10為一部發(fā)送,波特率可變,由定時(shí)器1的溢出率控制)
- SM1=1;//(同上)在此模式下,定時(shí)器溢出一次就發(fā)送一個(gè)位的數(shù)據(jù)
- REN=1;//串行接收允許位(要先設(shè)置sm0sm1再開串行允許)
- EA=1;//開總中斷
- ES=1;//開串行口中斷
- }
- unsigned char hand(unsigned char *data_source,unsigned char *ptr)
- {
- if(strstr(data_source,ptr)!=NULL)
- return 1;
- else
- return 0;
- }
- void clear_rec_data()
- {
- uchar i,temp_len;
- temp_len=strlen(Buffer_Uart0_Rec);
- if(temp_len>25)
- {
- temp_len=25;
- }
- for(i=0;i<temp_len;i++)
- {
- Buffer_Uart0_Rec[i]='\0';
- }
- rec_data_len_uart=0;
- }
- /*串行通訊中斷,收發(fā)完成將進(jìn)入該中斷*/
- void Serial_interrupt() interrupt 4
- {
- unsigned char temp_rec_data_uart0;
- temp_rec_data_uart0 = SBUF;//讀取接收數(shù)據(jù)
- RI=0;//接收中斷信號(hào)清零,表示將繼續(xù)接收
- Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0; //接收數(shù)據(jù)
- rec_data_len_uart++;
- if(rec_data_len_uart>24)
- {
- rec_data_len_uart=0; //從頭開始接收數(shù)據(jù)
- }
- }
- void Uart1Send(uchar c)
- {
- SBUF=c;
- while(!TI);//等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
- TI=0;
- }
- //串行口連續(xù)發(fā)送char型數(shù)組,遇到終止號(hào)/0將停止
- void Uart1Sends(uchar *str)
- {
- while(*str!='\0')
- {
- SBUF=*str;
- while(!TI);//等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
- TI=0;
- str++;
- }
- }
- void chuli(int c)
- {
- char bai,shi,ge;
- bai =((char) c/100)+48;
- shi =((char) c%100/10)+48;
- ge =((char) c%10)+48;
- Uart1Send(bai);
- Uart1Send(shi);
- Uart1Send(ge);
- //Uart1Send(ge);
- }
- //延時(shí)函數(shù)大概是1s鐘,不過延時(shí)大的話不準(zhǔn)...
- void DelaySec(int sec)
- {
- uint i , j= 0;
- for(i=0; i<sec; i++)
- {
- for(j=0; j<65535; j++)
- {
- }
- }
- }
- void main()
- {
- uchar i = 0;
- int j;
- u8 t;
- CH = 0x00; //在這里選擇通道 0x00或0x01
- P1 = 0XFF;
- key_init();
- SerialInti();
- OLED_Init(); //初始化OLED
- OLED_Clear();
- P13=0;
- while(1)
- {
- RH();
- dat = adc0832(CH);
- OLED_ShowString(18,3,"CO",72);
- OLED_ShowCHinese(36,2,4); //濃
- OLED_ShowCHinese(54,2,5); //度
- OLED_ShowNum(78,2,dat,3,16);//顯示ASCII字符的碼值
-
-
- OLED_ShowCHinese(18,4,0); //溫
- OLED_ShowCHinese(36,4,1); //度
- OLED_ShowCHinese(54,4,6); //為
- OLED_ShowNum(72,4,U8RH_data_H,4,16);//顯示ASCII字符的碼值
-
- OLED_ShowCHinese(18,6,3); //濕
- OLED_ShowCHinese(36,6,1); //度
- OLED_ShowCHinese(54,6,6); //為
- OLED_ShowNum(72,6,U8T_data_H,4,16);//顯示ASCII字符的碼值
- }
- }
- void getkey() interrupt 0
- {
- Delay_1ms(20);
- if(p32==0) //軟件消抖
- {
- P13=1;
- Uart1Sends("AT+CSCS=\"GSM\"\r\n");
- DelaySec(1);//延時(shí)大約3秒
- Uart1Sends("AT+CMGF=1\r\n");
- DelaySec(1);//延時(shí)3秒
- Uart1Sends("AT+CSCA?\r\n");
- DelaySec(1);//延時(shí)3秒
- Uart1Sends("AT+CSMP=17,167,0,241\r\n");
- DelaySec(1);//延時(shí)3秒
- Uart1Sends("AT+CMGS=\"13772830544\"\r\n");//此處修改為對(duì)方的電話號(hào)
- DelaySec(1);//延時(shí)3秒
- //fasong[20] = 2;
- Uart1Sends("CO concentration: ");//修改短信內(nèi)容,短信內(nèi)容可為英文和數(shù)字
- chuli(dat); //顯示一氧化碳濃度
- Uart1Sends("\nThe current hemperature is: ");//修改短信內(nèi)容,短信內(nèi)容可為英文和數(shù)字
- chuli(U8RH_data_H); //顯示一氧化碳濃度
- Uart1Sends("\nThe current humidity is: ");//修改短信內(nèi)容,短信內(nèi)容可為英文和數(shù)字
- chuli(U8T_data_H); //顯示一氧化碳濃度
- Uart1Send(0x1a);
- P13=0;
-
- }
- }
復(fù)制代碼
0.jpg (35.43 KB, 下載次數(shù): 32)
下載附件
2018-1-16 01:09 上傳
所有資料51hei提供下載:
學(xué)長畢業(yè)設(shè)計(jì)GPRS.rar
(5.94 MB, 下載次數(shù): 55)
2018-1-15 19:31 上傳
點(diǎn)擊文件名下載附件
GPRS煙霧檢測(cè) 下載積分: 黑幣 -5
|
|