STC15F2KA60S2芯片粉尘传感器的应用

来源:互联网 发布:spin磁共振分析软件 编辑:程序博客网 时间:2024/04/29 13:38

STC15F2KA60S2芯片粉尘传感器的应用

1.粉尘有什么危害?

什么是粉尘?

总悬浮颗粒物(TSP)—环境空气中空气动力学当量直径小于等于100μm的颗粒物。

• PM10—环境空气中空气动力学当量直径小于等于10μm的颗粒物。

• PM2.5—环境空气中空气动力学当量直径小于等于2.5μm的颗粒物。

粉尘对人体的危害,根据其理化性质、进入人体的量的不同,可引起不同的病变。如呼吸性系统疾病、局部作用、中毒作用等。

职业性呼吸系统疾病有如下4种表现

1.尘肺
2.粉尘沉着症
3.有机粉尘引起的肺部病变
4.呼吸系统肿瘤

2. 目的:

随着经济的发展,大气中的污染物也随之增加了许多。现如今的雾霾天气也越来越严重,这些恶劣的天气与空气中的粉尘有着紧密的关系,当然也与其他的因素有关。为了时刻使人们能够更加直观地了解到自己所处环境中粉尘的浓度,这才引进了基于51单片机的GE粉尘传感器技术,这样才能够对大气进行全方位,实时性地采集与处理。

3.粉尘传感器工作原理

① 光散射方法

② LED发射出光线遇粉尘产生反射光

③ 接收传感器检测到反射光的光强,输出信号

④ 通过光强的大小判断粉尘的浓度。



4.传感器内部设计



• 连续光发射的IR LED

• 可见光滤波器,减少外界光线干扰

• 线性电源控制,稳压器稳定探测器的电压,减少噪声

• MICOM自动控制传感器的灵敏度,消除偏移,信噪比好

• 使用加热电阻形成自然向上气流

 

5.传感器输出



空气中粉尘浓度的计算方法:

一个规定的周期内所有低脉冲时间之和除以这个周期时间。



 

6.程序

/************************************************************/

//利用单片机P1.0测试10秒内接收到的低脉冲时长

//计算10秒内空气中平均粉尘浓度,并显示。

/************************************************************/

#include<reg51.h>

unsigned charseven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned intj,k,counter1,counter2,dat1=1,dat2;

unsigned int i;

sbit  P1_0 = P1^0; //脉冲输入

bit P1_0_S;

/*******************Timer0中断服务函数**********************/

voidtimer0_isr(void) interrupt 1

{    

       TH0 = (65536 - 1000) / 255;       

       TL0 = (65536 - 1000) % 255;

       i++;

       if(P1_0 == 0){P1_0_S = 1;counter2++;}            //检测低电平并计时

       if(P1_0 == 1 && P1_0_S == 1)        

       {P1_0_S = 0;counter1++;}                  //检测脉冲个数

       if(i >= 10000)                                   //10秒到了

       {

              i = 0;

              dat2 = counter2 * 0.1;           //求10秒内平均值

              counter1 = 0;

              counter2 = 0;

              if(dat2 <= 130)dat1 = 1;         //颗粒物等级显示

              else

                     {

                            if(dat2 >=250)dat1 = 3;

                            else dat1 = 2;

                     }

       }           

       P0 = 0xff;      //Proteus仿真需要消隐

       switch(j)

       {

              case 0: P0 = seven_seg[dat2 % 100% 10];

              P2 = ~0x01;break;

              case 1: P0 = seven_seg[dat2 % 100/ 10];

              P2 = ~0x02;break;

              case 2: P0 = seven_seg[dat2 % 1000/ 100] & 0x7f;

              P2 = ~0x04;break;

              case 3: P0 = seven_seg[dat2 %10000 / 1000];

              P2 = ~0x08;break;

              case 4:

              P2 = ~0x00;break;

              case 5: P0 = seven_seg[dat1 % 10];             //显示颗粒物污染等级

              P2 = ~0x20;break;

       }

       j++;

       if(j >= 6)

       j = 0;

}

/*********************Timer0初始化函数***********************/

voidtimer0_init(void)

{

       TMOD = 0x01;

       TH0 = (65536 - 1000) / 255;

       TL0 = (65536 - 1000) % 255;

       EA = 1;

       ET0 = 1;

       TR0 = 1;

}

/**************************主函数****************************/

void main(void)

{

       timer0_init();

       while(1);

}

0 0
原创粉丝点击