攀藤G1是一款数字式通用颗粒浓度传感器,可以用于获得单位体积内空气中悬浮颗粒物个数及质量,即颗粒物浓度,并以数字接口形式输出。传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射,同时在某一特定角度收集散射光,得到散射光强随时间变化的曲线。进而微处理器利用基于米氏(MIE)理论的算法,得出颗粒物的等效粒径及单位体积内不同粒径的颗粒物数量。输出为单位体积内各浓度颗粒物质量及个数。
攀藤G1传感器传输协议串口默认波特率:9600bps,校验位:无,停止位:1位。模块工作在连续采样方式下,模块在每一次采样结束后主动发送采样数据,采样响应时间小于600毫秒,数据更新时间小于2秒。模块发送数据包定义32个字节。控制器只要读取串口中数据,处理、传唤得到需要的数值。
屏幕显示的污染级别对应的颜色,严格按照这个配色来的,照片颜色显示质量不如实际显示颜色鲜艳。照不出效果。
合体到一块了,内部空间。
电路原理图如下:
STM32单片机源程序如下:
- #include"led.h"
- #include"LCD.h"
- #include"delay.h"
- extern u16 Conce_PM1_0; // PM1.0浓度
- extern u16 Conce_PM2_5; // PM2.5浓度
- extern u16 Conce_PM10; // PM10浓度
- u16 IAQI[8]={0,50,100,150,200,300,400,500};
- u16 PM10[8]={0,50,150,250,350,420,500,600};
- u16 PM25[8]={0,35,75,115,150,250,350,500};
- u16 IAQIPM10; //PM10空气质量分指数
- u16 IAQIPM25; //PM2.5空气质量分指数
- u16 CpPM10; //PM10浓度
- u16 CpPM25; //PM2.5浓度
- u16 BpHi; //与Cp相近的污染物浓度限值的高值
- u16 BpLo; //与Cp相近的污染物浓度限值的低值
- u16 IAQIHi; //与BpHi对应的空气质量分指数
- u16 IAQILo; //与BpLo对应的空气质量分指数
- u16 AQI; //空气质量指数
- u8 Max=10; //Max=0,首要污染物为PM25,Max=1,为PM10,Max=2双重污染
- void delay_BUSY(void) // 触摸显示屏 发送延时
- {
- u16 a;
- for (a=0; a<100; a++) ;
- while(HMI_BUSY); // 当发送完之后,等待BUSY为0
- }
- void Window(void)
- {
- printf("CLS(0);");
- printf("DS48(10,12,'唐山',7,0);");
- printf("DS32(110,28,'实时空气质量指数(AQI)',7,0);");
- printf("CIR(92,160,56,4);");
- printf("CIR(92,160,55,4);");
- printf("DS24(55,198,'AQI指数',4,0);");
- printf("CIR(239,160,55,4);");
- printf("CIR(239,160,56,4);");
- printf("DS24(180,198,'首要污染物',4,0);");
- printf("CIR(386,160,55,4);");
- printf("CIR(386,160,56,4);");
- printf("DS24(340,198,'PM2.5浓度',4,0);");
- printf("BOXF(50,265,100,280,2);"); //绿色
- printf("BOXF(100,265,150,280,4);"); //黄色
- printf("SCC(37,64480);");
- printf("BOXF(150,265,200,280,37);"); //橙色
- printf("BOXF(200,265,250,280,1);"); //红色
- printf("SCC(19,38921);");
- printf("BOXF(250,265,300,280,19);"); //紫色
- printf("SCC(18,30724);");
- printf("BOXF(300,265,350,280,18);"); //褐红色
- printf("DS16(48,285,'0',7,0);");
- printf("DS16(91,285,'50',7,0);");
- printf("DS16(140,285,'100',7);");
- printf("DS16(190,285,'150',7);");
- printf("DS16(240,285,'200',7);");
- printf("DS16(290,285,'300',7);");
- printf("DS16(340,285,'500',7);");
- printf("DS16(369,178,'ug/m3',7,0);");
- printf("CBOX(0,0,479,318,5,4);");
- printf("PL(0,76,479,76,4);");
- printf("DS16(400,265,'13:20:36',7);");
- printf("DS16(395,285,'2016-5-18',7,0);");
- printf("rn");
- // delay_BUSY(); //当发送完之后,等待BUSY为0
- }
- void AQI_Count(void) //计算AQI指数,判断首要污染物
- {
- u8 i=0;
- u8 j=0;
- CpPM10=Conce_PM10;
- for(i=0;i<7;i++)
- {
- if((CpPM10>PM10)&&(CpPM10
- {
- BpHi=PM10[i+1];
- BpLo=PM10;
- IAQIHi=IAQI[i+1];
- IAQILo=IAQI;
- IAQIPM10=(IAQIHi-IAQILo)*(CpPM10-BpLo)/(BpHi-BpLo)+IAQILo;
- }
- else if(CpPM10==PM10)
- {
- IAQIPM10=IAQI;
- }
- else if(CpPM10>=600)
- {
- IAQIPM10=((50/6)*(CpPM10-600))/10+500; //爆表
- }
- }
- CpPM25=Conce_PM2_5;
- for(j=0;j<7;j++)
- {
- if((CpPM25>PM25[j])&&(CpPM25
- {
- BpHi=PM25[j+1];
- BpLo=PM25[j];
- IAQIHi=IAQI[j+1];
- IAQILo=IAQI[j];
- IAQIPM25=(IAQIHi-IAQILo)*(CpPM25-BpLo)/(BpHi-BpLo)+IAQILo;
- }
- else if(CpPM25==PM25[j])
- {
- IAQIPM25=IAQI[j];
- }
- else if(CpPM25>=500)
- {
- IAQIPM25=CpPM25; //爆表
- }
- }
- if(IAQIPM10>IAQIPM25)
- {
- AQI=IAQIPM10;
- Max=1;
- }
- else if(IAQIPM10
- {
- AQI=IAQIPM25;
- Max=0;
- }else if(IAQIPM10==IAQIPM25)
- {
- AQI=IAQIPM10;
- Max=2;
- }
- }
- void Display(void)
- {
- // printf("CLS(0);rn"); //清屏
- // printf("PIC(0,0,1);"); //画图
- // printf("SBC(2);"); //设置背景色
- // printf("TPN(2);"); //触摸屏模式
- // printf("BTN(6,396,278,475,315,0);"); //热点区域按钮
- // printf("BTN(7,0,0,479,274,0);rn");
- printf("DS48(350,132,'%4d ',7);",Conce_PM2_5); // PM2.5输出
- // printf("PS64(0,10,100,'PM1.0:%5d',2);rn",Conce_PM1_0); // PM1.0输出
- // printf("DS48(0,10,240,'PM10 :%5d',3);rn",Conce_PM10); // PM10 输出
- // delay_BUSY(); //当发送完之后,等待BUSY为0
- // printf("DS48(0,0,'PM2.5:%4d ',1);",Conce_PM2_5); // PM2.5输出
- // printf("DS48(0,60,'PM10 :%4d ',2);",Conce_PM10); // PM10 输出
- printf("DS48(55,135,'%4d ',3;",AQI); // AQI
- // printf("DS48(0,240,'IAQIPM10:%4d ',5;",IAQIPM10); // PM2.5输出
- if(Max==0)
- {
- printf("DS32(203,145,'PM2.5',14);"); // PM2.5 输出
- }
- else if(Max==1)
- {
- printf("DS32(203,145,' PM10',14);"); // PM10 输出
- }else if(Max==2)
- {
- // printf("DS32(203,135,'PM2.5',14)");
- // printf("DS32(203,160,' PM10',14)");
- }
- if(AQI<=50)
- {
- printf("DS24(60,235,' 优 ',5)");
- }
- else if((AQI>50)&&(AQI<=100))
- {
- printf("DS24(60,235,' 良 ',5)");
- ……………………
- …………限于本文篇幅 余下代码请从电子发烧友下载附件…………
所有资料51hei提供下载:
设计说明.doc
激光PM2.5 传感器攀藤G1资料包.zip
STM32F103C8T6-2原理图.pdf
PM2.5 Program.zip
|