甲醛传感器模块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;
		}
	}

如需甲醛传感器相关资料及完整例程, 请关注公众号,首页回复甲醛传感器获取资料
在这里插入图片描述

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