甲醛傳感器模塊ZE08-CH2O的使用及控制

一.簡介

ZE08-CH2O型電化學甲醛模組是一個通用型、小型化模組。利用電化學原理對空氣中存在CH2O(甲醛)進行探測,具有良好的選擇性,穩定性。內置溫度傳感器,可進行溫度補償;同時具有數字輸出與模擬電壓輸出,方便使用。
ZE08-CH2O傳感器模塊是將成熟的電化學檢測技術與精良的電路設計緊密結合,設計製造出的通用型氣體模組。
在這裏插入圖片描述

二.模塊參數

1.特點

在這裏插入圖片描述

2.引腳說明

在這裏插入圖片描述
ZE08-CH2O模塊內部已集成了數據處理電路,將甲醛濃度信號轉換爲電信號,最後轉化爲數據信號,通過串口(UART)發送出來;
ZE08-CH2O模塊也支持模擬信號輸出,即Pin2腳DAC,將信號轉化爲0-2V電壓信號,連接至單片機ADC轉換引腳,實現模擬信號的轉化。

3.參考電路

在這裏插入圖片描述
控制電路採用了串口(UART)的通訊方式,模塊只需接上5.0V電源,並將UART引腳接到單片機的UART引腳上。

三.通訊協議

ZE08-CH2O模塊採用串口通訊,串口波特率等參數如下,波特率出廠默認爲9600,不可更改:
在這裏插入圖片描述
通信分爲主動上傳式和問答式,出廠默認主動上傳,每間隔1S發送一次濃度值,命令行格式如下:

1.主動上傳式指令

在這裏插入圖片描述
所得到的氣體濃度計算公式爲:

氣體濃度值=氣體濃度高位*256+氣體濃度低位

2.問答式指令

問答式指令即需要單片機主動發送讀取濃度值指令,模塊纔會返回當前的濃度值。
切換到問答式,命令行格式如下:
在這裏插入圖片描述讀氣體濃度值格式如下:
在這裏插入圖片描述
模塊接收到讀取濃度指令後,就會返回一條氣體濃度值數據:
在這裏插入圖片描述

四.控制程序

此次例程採用了模塊默認的主動上傳式模式,每1s接收一個甲醛濃度值。

void show()			//顯示當前數據,LCD第一行
{
	LCD1602_write(0,0x80);
	LCD1602_writebyte("CH2O:");  	  //顯示當前的甲醛濃度值
	LCD1602_write(1,0x30+ch2o/10000%10);
	LCD1602_writebyte(".");
	LCD1602_write(1,0x30+ch2o/1000%10);
	LCD1602_write(1,0x30+ch2o/100%10);
	LCD1602_write(1,0x30+ch2o/10%10);
	LCD1602_write(1,0x30+ch2o%10);
	LCD1602_writebyte("mg/m3");
}

void main()
{
	uchar h,l;
	LCD1602_cls();	  //LCD 1602   調用初始化程序
	TMOD=0x21;	//配置定時
	TH0=0x4c;		//50ms  定時賦值
	TL0=0x00;
	ET0=1;
	TR0=1;
	TH1=0xfd;		//串口波特率定時初始
	TL1=0xfd;
	SCON=0x50;	//只發送
	EA=1;		//打開定時總中斷
	ES=1;		//打開串口中斷				
	TR1=1;
	h=byte_read(0x2000);
	l=byte_read(0x2001);   //讀取保存的數據
	ch2o_H=h*256+l;
	if(ch2o_H>700)
	ch2o_H=80;
	while(1)
	{
		show();		 //顯示函數
		key();		 //按鍵處理程序
	}
}

void UART_4() interrupt 4 //處理接收的串口數據,接收甲醛傳感器指令
{
	if(RI)
	{
		RI=0;   //RI 置0
		UART_dat[bz]=SBUF;	  //暫存串口數據
		switch(bz)
		{
			case 0:
				if(UART_dat[bz]==0xFF) bz=1;
				else bz=0; 
			break;

			case 1:
				if(UART_dat[bz]==0x17) bz=2;
				else bz=0; 
			break;

			case 2:
				if(UART_dat[bz]==0x04) bz=3;
				else bz=0; 
			break;

			case 3:
				if(UART_dat[bz]==0x00) bz=4; 
				else bz=0; 
			break;

			case 4:
				bz=5;   
			break;

			case 5:
				bz=6; 
			break;

			case 6:
				if(UART_dat[bz]==0x13) bz=7;   
				else bz=0; 
			break;

			case 7:
				if(UART_dat[bz]==0x88) bz=8;  
				else bz=0; 
			break;

			case 8:  //校驗接收的數據  正確則處理接收的數據
				if((UART_dat[bz]+UART_dat[1]+UART_dat[2]+UART_dat[3]+UART_dat[4]+UART_dat[5]+UART_dat[6]+UART_dat[7])%256==0)
				{
					ch2o=UART_dat[4]*256+UART_dat[5];
					ch2o=ch2o*13.392857;
					bz=0;
				}else
				{
					bz=0;   
				}
			break;
		}
	}

如需甲醛傳感器相關資料及完整例程, 請關注公衆號,首頁回覆甲醛傳感器獲取資料
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章