新房子快下来了,装修后怕甲醛影响身体,便决定自己动手做一个甲醛传感器检测,本来很简单的一个东西,做了快一个月了,简直是累死个人,下面听我慢慢给大家道来。
硬件平台:stm32f103c8t6,甲醛传感器
程序功能: uart2 与传感器通信,将采集到的数据通过uart1打印出,通过串口调试助手便可看到。
记得以前白嫖过一个某讯的空气检测仪,带甲醛检测、PM2.5检测。于是想着废物利用,把里面的传感器取出来岂不是美哉?于是就开始了悲惨的遭遇。
这个就是空气检测仪,我把上面的传感器取下来,死活测不出数据来,后来从某宝买了个回来,数据便有了,简直坑爹啊!!!!
买了个这个,花了35块,我看还有80多的,100多的,不同的厂家,不同的价格,由于自费,我就挑了个35块包邮的。图片给大家做个参考,我就不发链接了。
某讯的空气检测仪里面的传感器长这样:
不知道是不是ze-08,反正长的一样,唯一不同的是,就是不出数据。
接下来为大家讲一下工作原理,网上卖的这种传感器都一样,规格书除了厂家不一样,其它的参数全一样,每一位代表的数据,这些全一样,所以说,你用我这套程序,就可以驱动网上买的传感器了。
这个传感器有好多数据模式,串口,DAC,pwm。我们在这里选用常用的串口作为通信接口,程序容易写,单片机资源也够用。
这个是串口2中断处理函数,首先判断0XFF,收到了0XFF就代表接收到了数据,然后将接收到的数据保存到数组中。
//串口2中断
void USART2_IRQHandler(void)
{
static int i = 0; //Êý×éϱê
static int flag_data = 0;
unsigned char res;
if(USART_GetITStatus(USART2,USART_IT_RXNE) == 1)
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //Çå³ýUART ÖжϱêÖ¾
buff_usart2[i++] = USART_ReceiveData(USART2);
if(!(buff_usart2[0] == 0xFF))
{
i=0;
buff_usart2[0]=0;
}
if(i==9)
{
if(buff_usart2[8]==FucCheckSum(buff_usart2,9))
{
flag_usart2 = 1;
}
i=0;
}
}
在规格书中介绍,需要将采集到的数据取反,并给出了个函数,我们照抄就可以。
extern unsigned char FucCheckSum(unsigned char *i,unsigned char ln)
{
unsigned char j,tempq=0;
i+=1;
for(j=0;j<(ln-2);j++)
{
tempq+=*i;
i++;
}
tempq=(~tempq)+1;
return(tempq);
}
将数据采集后还有一个甲醛计算公式:
国家甲醛计算标准:0.08mg/m3 = 833 * 0.08 = 66.64 ppb
不清楚是真的还是假的,手册就是这么写的。
最后我们看一下主函数:
while(1)
{
if(flag_usart2 == 1) //ZE08_CH2O
{
flag_usart2 = 0 ; //Çå³ýUART2 ÖжÏ
/*¹ú¼Ò±ê×¼ÊÒÄÚ 0.08mg/m3 = 833 * 0.08 = 66.64 ppb */
pm25Value = buff_usart2[4]*256 + buff_usart2[5];
result = pm25Value / 66.64 * 0.08;
//printf("pm25 = %d \r\n",pm25Value);
printf("¼×È©Á¿ = %f \r\n",result);
}
}
这样,我们就可以从串口调试助手看到打印出的数据了,这样就可以方便大家移植甲醛传感器,进行更综合的项目了。
博主V:haveaseat