色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

基于單片機的無線環(huán)境監(jiān)控系統(tǒng)設計

發(fā)布時間:2015-6-25 11:36    發(fā)布者:designapp
傳統(tǒng)方式中,對大型倉庫、博物館等無人環(huán)境的數(shù)據(jù)采集費時費力、效率低下,且實時性差,隨機性大?茖W技術(shù)的進步促進了自動檢測系統(tǒng)的發(fā)展,而利用無線通信技術(shù)實現(xiàn)對無人環(huán)境的監(jiān)測更是未來電子技術(shù)應用的發(fā)展趨勢。造價低廉、使用方便的單片機在小型控制系統(tǒng)中獲得了廣泛的應用。凌陽公司推出的16位單片機SPCE061A處理速度快,獨具語音識別的特色功能,是用作系統(tǒng)控制核心的理想選擇;而傳輸速率高、成本低、功耗小的nRF24L01無線模塊也是實現(xiàn)系統(tǒng)無線通信的最佳選擇。

1 系統(tǒng)設計方案

系統(tǒng)分為主控端與監(jiān)測端,通過無線模塊進行數(shù)據(jù)通信,核心部分是需要對數(shù)據(jù)進行處理的主控端。主控端以SPCE061A單片機為控制核心,通過nRF24L01模塊進行數(shù)據(jù)的收集,以12864液晶模塊作為數(shù)據(jù)顯示的平臺。監(jiān)測端采用8位的AT89S52單片機作為控制核心。使用DHT11數(shù)字溫濕度傳感器采集溫濕度數(shù)據(jù)。監(jiān)測端還設計有繼電器電路,可以模擬在溫度超過警戒值時自動打開 房間空調(diào)制冷。圖1為系統(tǒng)整體框架圖。


圖1  系統(tǒng)整體框架圖

2 硬件電路設計

2.1 微處理模塊設計

主控端微處理器選用凌陽公司推出的SPCE061A單片機。SPCE061A是一款16位的微處理器,運算速度快,非常適合處理復雜的數(shù)字信號。CPU工作電壓VDD 為 2.4~3.6V,CPU 時鐘頻率范圍為0.32~49.152MHz,內(nèi)置2K字SRAM以及32K字FLASH;具有2 個 16 位可編程定時器/計數(shù)器(可自動預置初始計數(shù)值);2個10位DAC(數(shù)/模轉(zhuǎn)換)輸出通道;32 位通用可編程輸入/輸出端口;具備觸鍵喚醒的功能;7通道10位電壓模/數(shù)轉(zhuǎn)換器(ADC)和單通道聲音模/數(shù)轉(zhuǎn)換器;聲音模/數(shù)轉(zhuǎn)換器輸入通道內(nèi)置麥克風放大器和自動增益控制(AGC)功能;具備串行設備接口;具有低電壓復位(LVR)功能和低電壓監(jiān)測(LVD)功能;內(nèi)置在線仿真電路ICE(In-Circuit Emulator)接口;具有保密功能;具有看門狗功能。圖2為SPCE061A內(nèi)部結(jié)構(gòu)圖;圖3為SPCE061A引腳圖。


圖2 SPCE061A內(nèi)部結(jié)構(gòu)圖


圖3 SPCE061A引腳圖

監(jiān)測端微處理器選用ATMEL公司的AT89S52單片機。AT89S52是一種低功耗、高性能的8位CMOS微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器,256字節(jié)RAM, 32 位I/O 口線,片內(nèi)晶振及時鐘電路,最高工作頻率可達33MHZ;內(nèi)部集成看門狗定時器,全雙工UART串行口,6個中斷源,3個16位定時器/計數(shù)器。圖4為AT89S52單片機引腳及其最小系統(tǒng)圖。


圖4  AT89S52單片機引腳及其最小系統(tǒng)
        
2.2 溫濕度模塊

DHT11數(shù)字溫濕度傳感器,是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器。它應用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),具有很高的可靠性與穩(wěn)定性。圖5為DHT11應用電路。


圖5 DHT11應用電路

DHT11采用單總線傳輸方式,供電電壓為3V~5.5V。傳感器上電后,要等待 1s 以越過不穩(wěn)定狀態(tài)。電源引腳(VDD,GND)之間可增加一個100nF 的電容,用以去耦濾波。

DATA引腳用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,當前小數(shù)部分用于以后擴展,現(xiàn)在讀出均為零。本設計中將DHT11的DATA引腳連接AT89S52的P1.0腳。一次完整的數(shù)據(jù)傳輸為40bit,高位先出。數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和。數(shù)據(jù)傳送正確時校驗和數(shù)據(jù)等于8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)所得結(jié)果的末8位。

2.3 無線模塊

nRF24L01是一款工作在2.4~2.5 GHz世界通用ISM頻段的單片無線收發(fā)器芯片,采用FSK調(diào)制,內(nèi)部集成自己的協(xié)議,有自動應答、自動重發(fā)、地址及CRC檢驗功能,可實現(xiàn)點對點或1對6的無線通信,無線通信速度可達2 Mbps;電流消耗極低,當工作在發(fā)射模式下發(fā)射功率為-6 dBm時電流消耗為9 mA,接收模式下為12.3 mA。

nRF24L01有四種工作模式:收發(fā)模式、配置模式、空閑模式、關機模式。工作模式由PWR_UP register 、PRIM_RX register和CE決定。本設計中讓NRF24L01工作于收發(fā)模式中的Enhanced ShockBurstTM收發(fā)模式下,這種工作模式下,系統(tǒng)的程序編制會更加簡單,并且穩(wěn)定性也會更高。

nRF24L01的所有配置工作都是通過SPI完成,共有30字節(jié)的配置字。

雖然nRF24L01模塊工作于1.9~3.6V的低電壓,但考慮到SPCE061A單片機及51單片機的IO口輸出電流均較小,nRF24L01無線模塊可以直接與其連接。圖6為nRF24L01芯片及其外圍電路。圖7為nRF24L01與AT89S52引腳連接圖。圖8為nRF24L01與SPCE061A引腳連接圖。


圖6 nRF24L01芯片及其外圍電路


圖7 nRF24L01與AT89S52引腳連接圖


圖8 nRF24L01與SPCE061A引腳連接圖
        
2.4 顯示模塊

系統(tǒng)顯示模塊采用帶中文字庫的12864液晶顯示屏。12864主要由行驅(qū)動器/列驅(qū)動器及128x64全點陣液晶顯示器組成。其顯示分辨率為128×64, 內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集。該模塊接口方式靈活,操作指令簡單、方便,可以顯示8×4行16×16點陣的漢字,也可完成圖形顯示,可構(gòu)成全中文人機交互圖形界面。低電壓低功耗也是其又一顯著特點。12864具有簡單而功能較強的指令集,可實現(xiàn)字符移動、閃爍等顯示功能,共有7條指令,單片機只需通過D/I、R/W、DB0~DB7送入數(shù)據(jù)或者指令便可顯示其指定內(nèi)容或顯示方式。

本設計中,12864液晶屏采用并行通信方式與SPCE061A單片機進行數(shù)據(jù)通信。為了方便的操作12864液晶屏,我們將12864的4、5、6引腳與SPCE061A的IOB9、IOB8、IOB10引腳連接,并編寫了能夠直接操作SPCE061A單個IO口狀態(tài)的函數(shù),以方便操作12864顯示屏而不影響其它IO口的數(shù)據(jù)通信。圖9為12864液晶屏與SPCE061A的引腳連接圖。


圖9  12864液晶屏與SPCE061A的引腳連接圖

2.5 鍵盤模塊

SPCE061A開發(fā)板自身集成了三個按鍵K1、K2、K3,按鍵一端連接單片機的高電平,另一端分別連接了SPCE061A單片機的IOA0、IOA1、IOA2口。圖10為SPCE061A開發(fā)板集成的三個按鍵電路圖。其中按K1鍵進入調(diào)整報警溫度模式,按K2鍵與K3鍵調(diào)整報警溫度的上下限值。


圖10  SPCE061A開發(fā)板按鍵電路圖

2.6 繼電器模塊

當檢測端檢測到溫度高于警戒值時,AT89S52單片機P1.1引腳輸出高電平,通過繼電器實現(xiàn)弱電控制強電,打開制冷空調(diào),當溫度低于警戒值時,AT89S52單片機P1.1引腳輸出低電平,控制制冷空調(diào)停止運行。實現(xiàn)自動控制時要先把開關S1閉合,本系統(tǒng)將警戒值設置為35℃。圖11為繼電器自動控制電路圖。


圖11 繼電器自動控制電路圖

2.7 語音模塊

凌陽的 SPCE061A 是 16 位單片機,具有很強的信息處理能力,最高時鐘頻率可達到

49MHz,具備運算速度高的優(yōu)勢,這些無疑為語音的播放、錄放、合成及辨識提供了條件。 凌陽壓縮算法中 SACM_A2000、SACM_S480 、SACM_S240 主要是用來放音,可用于語音提示,而 DVR 則用來錄放音。SPCE061A單片機提供了相關API函數(shù)及程序代碼范例,方便用C語言進行開發(fā)。本系統(tǒng)在編寫軟件時定義了SPCE061A相關寄存器的地址,通過調(diào)用相關定義即可方便進行操作。

軟件設計時采用S480壓縮算法將報警語音“有危險”進行壓縮,用S480自動方式播放報警語音。該壓縮算法壓縮比為80:3,存儲容量大,音質(zhì)介于 A2000 和 S240 之間,適用于語音播放。圖12為S480自動播放方式流程圖


圖12  S480自動播放方式流程圖
        
3 系統(tǒng)軟件設計流程

系統(tǒng)上電后,主控端軟件初始化相關IO口,并初始化NRF24L01無線收發(fā)模塊為接收模式,調(diào)用LCD字庫初始化程序。希捷軟件進入循環(huán)狀態(tài),讀取RF24L01無線收發(fā)模塊狀態(tài)寄存器,判斷是否接收到數(shù)據(jù)。如果接收到數(shù)據(jù),將數(shù)據(jù)存儲到預先定義的數(shù)組中,調(diào)用語音報警子函數(shù),判斷接收到的數(shù)據(jù)是否達到報警上下限,達到后液晶屏顯示危險狀態(tài),并啟用語音報警。沒有危險時則只通過液晶屏顯示當前溫濕度數(shù)據(jù)及狀態(tài)安全。

主控端軟件執(zhí)行完語音報警子函數(shù)后清除NRF24L01無線收發(fā)模塊狀態(tài)寄存器中斷標志,清看門狗。判斷報警溫度調(diào)整鍵是否被按下,如果按下則調(diào)用報警溫度調(diào)整子函數(shù),調(diào)整完畢后進入循環(huán)模式,重復執(zhí)行以上步驟。

監(jiān)測端軟件開始初始化相關IO口,并設置NRF24L01無線收發(fā)模塊為發(fā)射模式,然后進入循環(huán)狀態(tài),開始調(diào)用溫濕度采集子函數(shù)。采集完數(shù)據(jù)后,程序?qū)?shù)據(jù)放入NRF24L01無線收發(fā)模塊的發(fā)射數(shù)據(jù)緩存器中。此時要檢測溫度數(shù)據(jù)是否超過設定的警戒值,如果超過警戒值則開啟繼電器,否則關閉繼電器。下一步軟件啟動數(shù)據(jù)發(fā)射。發(fā)射完成后,讀NRF24L01無線收發(fā)模塊的狀態(tài)寄存器并清除相關中斷標志位,延時一段時間后再次進入循環(huán)采集發(fā)射狀態(tài),重復執(zhí)行以上步驟。圖13為主控端軟件流程圖,圖14為監(jiān)測端軟件流程圖。



3.1 主控端軟件設計

3.1.1 主程序設計

void main()
{   
  Initial_IO();                //初始化IO口
  flag=0;                    //調(diào)溫子程序標志位清0
  nRF24L01_Initial();          // NRF24L01初始化
  RX_Mode();                //設置NRF24L01為接收模式并開始接收數(shù)據(jù)
  initinal();                   //調(diào)用LCD字庫初始化程序
  while(1)
    {
                sta=SPI_Read(STATUS);                   // 讀取狀態(tài)寄存器的值
                if(RX_DR)                                          // 如果接收到數(shù)據(jù)開啟接收數(shù)據(jù)中斷
                {        
                        SPI_RW_Reg(WRITE_REG+STATUS,sta);   //清除中斷標志位
SPI_Read_Buf(RD_RX_PLOAD,Rx_Buffer,TX_PLOAD_WIDTH);   //從接收數(shù)據(jù)緩存器讀取接收到的數(shù)據(jù)
                        baojing();                        //調(diào)用顯示及報警子程序
                        *P_Watchdog_Clear=0x0001;        //清除看門狗
                }               
                SPI_RW_Reg(WRITE_REG+STATUS,sta);    //清除中斷標志位
                *P_Watchdog_Clear=0x0001;               //清除看門狗
                if((*P_IOA_Data&0x0007)==0x0001)        //如果調(diào)溫按鍵被按下
                {        
                        flag=1;                     //標志位置1
                        tiaowendu();                //調(diào)用調(diào)溫子程序
                }
                delayms(10);                   //延時一段時間
        }
}

3.1.2 nRF24L01收發(fā)數(shù)據(jù)子程序

以下程序設置NRF24L01無線收發(fā)模塊的工作方式,并開啟數(shù)據(jù)接收

void RX_Mode(void)
{
        CE_Low;                  //CE=0;
        delay1us(1);
          SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
         SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, TX_ADDRESS, TX_ADR_WIDTH);
          SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);       //開啟自動應答
          SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);            
SPI_RW_Reg(WRITE_REG + RF_CH, 40);        // 選擇無線頻道40
          SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);
          SPI_RW_Reg(WRITE_REG + RX_PW_P1, TX_PLOAD_WIDTH);
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);  // 設置為數(shù)據(jù)接收模式,開啟CRC檢測等
          CE_High;              //CE = 1   設置CE引腳為高來開啟模塊的數(shù)據(jù)接收模式
    delay1us(1);
}

3.1.3 12864液晶屏顯示子程序

void lcd_mesg(unsigned char *adder1)    //寫滿整屏!
{
        unsigned char i;
        TransferData(0x80,0); //設置圖形顯示存儲器的地址
        delay(100);
        for(i=0;i<32;i++)

{

TransferData(*adder1,1);

adder1++;

}

TransferData(0x90,0); //設置圖形顯示存儲器的地址

delay(100);

for(i=32;i<64;i++)

{

TransferData(*adder1,1);

adder1++;

}

}

void lcd_mesg1(unsigned char w_dizhi,unsigned char changdu,unsigned char *adder1)

//在任意位置寫入要顯示的任意長度的數(shù)據(jù)
{

unsigned char i;

TransferData(w_dizhi,0); //設置圖形顯示存儲器的地址

delay(100);

for(i=0;i        {

TransferData(*adder1,1);

adder1++;

}

}

3.1.4 報警溫度調(diào)整子程序

通過設置標志位,判斷K1鍵被按下的次數(shù)。如果是第一次被按下,則可以通過K2、K3鍵調(diào)整報警溫度上限;如果是第二次被按下,則可以通過K2、K3鍵調(diào)整報警溫度下限;如果是第三次被按下,則調(diào)出報警溫度調(diào)整子程序。

3.1.5 報警子程序

如果溫度報警界限,主控端會在12864液晶屏上顯示危險的字樣,并進行“有危險”的語音提示。

SPCE061A以S480自動方式播放語音的程序如下:

void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel)

{

SACM_S480_Initial(1);        //初始化為自動播放方式

SACM_S480_Play(uiSndIndex,uiDAC_Channel,3); //播放

while((SACM_S480_Status() & 0x0001) != 0)

{        //判斷播放狀態(tài),如還在播放則繼續(xù)循環(huán)

SACM_S480_ServiceLoop();        //播放系統(tǒng)服務程序

*P_Watchdog_Clear=0x0001;

}

SACM_S480_Stop();        //停止播放

}
        
3.2 監(jiān)測端軟件設計

3.2.1 監(jiān)測端主程序

void main(void)
{
        init_io();                // 初始化IO口
        TX_Mode();                // 設置NRF24L01無線收發(fā)模塊為發(fā)射方式
        while(1)
        {
                RH();         //采集溫濕度數(shù)據(jù)
                delay2(100);
                relay();   //控制繼電器的狀態(tài)
                tx_buf[0]=str[0];                           // 將檢測到的數(shù)據(jù)保存到tx_buf[0]
                tx_buf[1]=str[1];                           // 將檢測到的數(shù)據(jù)保存到tx_buf[1]        
                tx_buf[2]=str[2];                           // 將檢測到的數(shù)據(jù)保存到tx_buf[2]        
                tx_buf[3]=str[3];                           // 將檢測到的數(shù)據(jù)保存到tx_buf[3]        
                TX_Mode();                              //設置NRF24L01無線收發(fā)模塊為發(fā)射方式并開始發(fā)射                        
sta=SPI_Read(STATUS);          // 調(diào)取狀態(tài)寄存器的數(shù)值
                SPI_RW_Reg(WRITE_REG+STATUS,sta);   // 清除狀態(tài)寄存器的中斷標志位
                delay_ms(1000);
        }                                                         
}                        
        
3.2.2 Nrf24L01收發(fā)數(shù)據(jù)子程序

void TX_Mode(void)
{
        CE=0;
          SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);   
          SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
          SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); /
          SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
          SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
          SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);
          SPI_RW_Reg(WRITE_REG + RF_CH, 40);        
          SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
          SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   
        CE=1;
}

3.2.3 溫濕度檢測子程序

void RH(void)
{
        dht_data=0;
        delay1(20);                    //主機拉低18ms
        dht_data=1;
        delay2(2);                   //總線由上拉電阻拉高 主機延時20us
        dht_data=1;                  //主機設為輸入 判斷從機響應信號
if(!dht_data)                    //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行
{
                U8FLAG=2;
while((!dht_data)&&U8FLAG++);   //判斷從機是否發(fā)出 80us 的低電平響應信號是否結(jié)束
                U8FLAG=2;
                while((dht_data)&&U8FLAG++);
                COM();                   //開始進入數(shù)據(jù)接收狀態(tài)
                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;
dht_data=1;                  //拉高為下一輪做好準備          U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);            //進行數(shù)據(jù)校驗
                if(U8temp==U8checkdata_temp)
                {
                        U8RH_data_H=U8RH_data_H_temp;
                        U8RH_data_L=U8RH_data_L_temp;
                        U8T_data_H=U8T_data_H_temp;
                        U8T_data_L=U8T_data_L_temp;
                        U8checkdata=U8checkdata_temp;
                        str[0]=(U8T_data_H_temp/10)+0x30;
                        str[1]=(U8T_data_H_temp%10)+0x30;
                        str[2]=(U8RH_data_H_temp/10)+0x30;
                        str[3]=(U8RH_data_H_temp%10)+0x30;
                }
        }
}

3.2.4 繼電器控制子程序

void relay()
{
        if(str[0]>0x03)
                relay_sta=0x01;             //打開繼電器
else if(str[0]==0x03)
{
if(str[1]>0x05)
relay_sta=0x01;         //打開繼電器
else
relay_sta=0x00;         //關閉繼電器
}
else
relay_sta=0x00;           //關閉繼電器
}

4 系統(tǒng)運行測試

按照以上方案設計出整個系統(tǒng)后上電運行,系統(tǒng)工作狀態(tài)良好,能夠滿足生產(chǎn)生活中的要求,圖15為系統(tǒng)整體運行情況,圖16與圖17為調(diào)整報警溫度界面與系統(tǒng)報警界面。



5 結(jié)語

本系統(tǒng)使用處理速度快的16位單片機SPCE061A作為主控端核心,利用nRF24L01無線模塊,設計完成了能夠監(jiān)控小型無人環(huán)境溫濕度的人性化系統(tǒng)。經(jīng)過測試,系統(tǒng)溫濕度數(shù)據(jù)采集準確,nRF24L01模塊傳送數(shù)據(jù)穩(wěn)定;當環(huán)境溫度達到警戒值時,繼電器閉合,可以模擬開啟制冷空調(diào)的動作。本系統(tǒng)達到了預期設計目的,具有很高的實用價值。
本文地址:http://www.54549.cn/thread-150880-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表