一、項(xiàng)目介紹
井下瓦斯監(jiān)控系統(tǒng)是煤礦安全生產(chǎn)中非常重要的一部分,防止井下瓦斯爆炸事故的發(fā)生,保障煤礦工人的人身安全。由于地下環(huán)境特殊,需要特殊的監(jiān)測(cè)系統(tǒng)來(lái)實(shí)時(shí)監(jiān)測(cè)瓦斯?jié)舛鹊汝P(guān)鍵指標(biāo),并及時(shí)報(bào)警以便采取措施進(jìn)行處理。
瓦斯氣體,又稱沼氣,是一種輕質(zhì)烴類氣體,主要成分是甲烷(CH4),也包含少量的乙烷、丙烷等。它是在地下煤炭層與泥巖等巖石中通過(guò)微生物作用或者煤炭化學(xué)反應(yīng)形成的。在煤礦等地下工程中,瓦斯常常是一種具有危險(xiǎn)性的氣體,如果采取不當(dāng)?shù)拇胧?,就有可能發(fā)生瓦斯爆炸事故。
基于51單片機(jī)的井下瓦斯監(jiān)控系統(tǒng),可以通過(guò)傳感器檢測(cè)瓦斯氣體濃度,將檢測(cè)到的數(shù)據(jù)通過(guò)AD轉(zhuǎn)換后送入單片機(jī)處理,再通過(guò)LCD顯示器顯示出來(lái)。如果瓦斯?jié)舛瘸^(guò)了預(yù)設(shè)閾值,系統(tǒng)會(huì)自動(dòng)啟動(dòng)報(bào)警裝置進(jìn)行警示。同時(shí),這種系統(tǒng)具有適用面廣、成本低、可靠性高等特點(diǎn)。
在目前環(huán)保意識(shí)提高的背景下,煤炭企業(yè)和政府對(duì)于井下瓦斯監(jiān)控系統(tǒng)的需求越來(lái)越大,系統(tǒng)的市場(chǎng)潛力巨大。

二、設(shè)計(jì)原理
2.1 傳感器選型
(1)瓦斯氣體檢測(cè)
MQ2傳感器是一種常用于氣體檢測(cè)的半導(dǎo)體傳感器,主要用于檢測(cè)多種易燃、易爆氣體,如瓦斯、丙烷、液化氣等。它采用了半導(dǎo)體氧化物層敏感元件技術(shù),當(dāng)檢測(cè)到目標(biāo)氣體時(shí),其電阻值會(huì)發(fā)生變化,從而可以通過(guò)測(cè)量電阻值的變化來(lái)檢測(cè)目標(biāo)氣體的濃度。MQ2傳感器具有靈敏度高、響應(yīng)速度快、使用方便等特點(diǎn),因此在氣體檢測(cè)領(lǐng)域廣泛應(yīng)用。
MQ2傳感器包括熱敏電阻、電化學(xué)傳感器、半導(dǎo)體敏感元件等部分,其中半導(dǎo)體敏感元件是其核心部件,也是影響傳感器性能的關(guān)鍵因素。在使用前需要進(jìn)行預(yù)熱處理,一般預(yù)熱時(shí)間為1-2分鐘,然后將待測(cè)氣體與傳感器接觸,即可讀取傳感器的輸出信號(hào)并進(jìn)行濃度計(jì)算。

(2)ADC采集模塊
PCF8591模塊是一種集成了AD轉(zhuǎn)換器和DA轉(zhuǎn)換器的模塊,通過(guò)I2C總線可以連接到單片機(jī)或其他電子設(shè)備上,用于模擬信號(hào)的輸入和輸出。其主要特點(diǎn)是集成度高、精度高、使用方便、成本低廉等。
模塊由PCF8591芯片和相關(guān)外圍電路組成,其中PCF8591芯片是一個(gè)具有4個(gè)模擬輸入通道和1個(gè)模擬輸出通道的集成電路,內(nèi)部集成了128級(jí)AD轉(zhuǎn)換器和8位DA轉(zhuǎn)換器,并且支持外部基準(zhǔn)電壓輸入。同時(shí),該模塊還包括4個(gè)可變電阻,可以通過(guò)調(diào)節(jié)來(lái)改變模擬輸入通道的電阻值,從而實(shí)現(xiàn)對(duì)信號(hào)的增益和衰減。通過(guò)I2C總線,可以方便地讀取和輸出模擬信號(hào)。
在實(shí)際應(yīng)用中,PCF8591模塊廣泛用于傳感器信號(hào)的采集和處理,例如溫度、光強(qiáng)、聲音等信號(hào)的轉(zhuǎn)換和傳輸。

2.2 設(shè)計(jì)思路
基于51單片機(jī)設(shè)計(jì)的井下瓦斯監(jiān)控系統(tǒng)的原理如下:
(1)傳感器檢測(cè)瓦斯?jié)舛龋菏褂猛咚箓鞲衅鳈z測(cè)井下瓦斯?jié)舛?,并將檢測(cè)結(jié)果轉(zhuǎn)換為電信號(hào)輸出。
(2)單片機(jī)采集數(shù)據(jù):使用ADC模塊將傳感器輸出的電信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),并將其存儲(chǔ)到單片機(jī)內(nèi)部的RAM中。
(3)數(shù)據(jù)處理:?jiǎn)纹瑱C(jī)通過(guò)對(duì)采集到的數(shù)據(jù)進(jìn)行處理,可以實(shí)現(xiàn)瓦斯?jié)舛鹊膶?shí)時(shí)監(jiān)測(cè),并根據(jù)預(yù)設(shè)閾值進(jìn)行報(bào)警處理。
(4)報(bào)警處理:當(dāng)瓦斯?jié)舛瘸^(guò)預(yù)設(shè)閾值時(shí),單片機(jī)會(huì)觸發(fā)報(bào)警器進(jìn)行報(bào)警。同時(shí),可以通過(guò)OLED顯示屏實(shí)時(shí)顯示瓦斯?jié)舛?,并通過(guò)蜂鳴器發(fā)出警報(bào)聲音。
(5)數(shù)據(jù)存儲(chǔ):?jiǎn)纹瑱C(jī)還可以將采集到的數(shù)據(jù)存儲(chǔ)到外部存儲(chǔ)器中,以便后續(xù)的數(shù)據(jù)分析和處理。
基于51單片機(jī)設(shè)計(jì)的井下瓦斯監(jiān)控系統(tǒng)通過(guò)傳感器檢測(cè)瓦斯?jié)舛龋瑔纹瑱C(jī)采集數(shù)據(jù)并進(jìn)行處理,實(shí)現(xiàn)了對(duì)瓦斯?jié)舛鹊膶?shí)時(shí)監(jiān)測(cè)和報(bào)警處理,同時(shí)還可以將數(shù)據(jù)存儲(chǔ)到外部存儲(chǔ)器中,方便后續(xù)的數(shù)據(jù)分析和處理。
三、代碼實(shí)現(xiàn)
3.1 采集MQ2濃度打印到串口
以下是基于STC89C52通過(guò)PCF8591采集MQ2煙霧傳感器的值,并轉(zhuǎn)為濃度打印到串口的詳細(xì)代碼。
#include < reg52.h >
 #include < intrins.h >
 ?
 #define uchar unsigned char
 #define uint unsigned int
 ?
 sbit SCL=P1^0;  // I2C時(shí)鐘線
 sbit SDA=P1^1;  // I2C數(shù)據(jù)線
 ?
 sbit MQ2=P3^2;  // MQ2煙霧傳感器
 ?
 // 函數(shù)聲明
 void delay(uint n);
 void I2C_Start();
 void I2C_Stop();
 void I2C_SendACK(bit ack);
 bit I2C_RecvACK();
 void I2C_SendByte(uchar dat);
 uchar I2C_RecvByte();
 void PCF8591_Write(uchar addr, uchar dat);
 uchar PCF8591_Read(uchar addr);
 void InitPCF8591();
 uint ReadMQ2();
 ?
 // 主函數(shù)
 void main()
 {
     InitPCF8591();  // 初始化PCF8591
     while(1)
     {
         uint mq2val = ReadMQ2();  // 讀取MQ2傳感器的值
         float mq2con = (mq2val / 255.0) * 100.0;  // 將傳感器的值轉(zhuǎn)換為濃度
         printf("MQ2煙霧濃度:%f%%\\n", mq2con);  // 打印濃度到串口
         delay(1000);  // 延時(shí)1秒
     }
 }
 ?
 // 延時(shí)函數(shù)
 void delay(uint n)
 {
     uint i, j;
     for(i = 0; i < n; i++)
         for(j = 0; j < 125; j++);
 }
 ?
 // I2C總線函數(shù)
 ?
 // I2C起始信號(hào)
 void I2C_Start()
 {
     SDA = 1;
     SCL = 1;
     _nop_();
     _nop_();
     _nop_();
     SDA = 0;
     _nop_();
     _nop_();
     _nop_();
     SCL = 0;
 }
 ?
 // I2C停止信號(hào)
 void I2C_Stop()
 {
     SDA = 0;
     SCL = 1;
     _nop_();
     _nop_();
     _nop_();
     SDA = 1;
     _nop_();
     _nop_();
     _nop_();
 }
 ?
 // I2C發(fā)送應(yīng)答信號(hào)
 void I2C_SendACK(bit ack)
 {
     SDA = ack;
     SCL = 1;
     _nop_();
     _nop_();
     _nop_();
     SCL = 0;
 }
 ?
 // I2C接收應(yīng)答信號(hào)
 bit I2C_RecvACK()
 {
     SCL = 1;
     _nop_();
     _nop_();
     _nop_();
     bit ack = SDA;
     SCL = 0;
     return ack;
 }
 ?
 // I2C發(fā)送一個(gè)字節(jié)
 void I2C_SendByte
          
        
        
基于51單片機(jī)設(shè)計(jì)的井下瓦斯監(jiān)控系統(tǒng)