STC15F2KA60S2芯片粉尘传感器的应用
2022-08-16 来源:csdn
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 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); }