发 帖  
stm32+攀藤G1空气质量检测源码与参考资料下载
2018-7-6 04:08:00  263 STM32
分享
      攀藤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("\r\n");
  • //                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<PM10[i+1]))
  •                                 {
  •                                                 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<PM25[j+1]))
  •                                 {
  •                                                 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<IAQIPM25)
  •                 {
  •                                 AQI=IAQIPM25;
  •                                 Max=0;
  •                 }else if(IAQIPM10==IAQIPM25)
  •                 {
  •                                 AQI=IAQIPM10;
  •                                 Max=2;
  •                 }
  • }
  • void Display(void)
  • {
  • //                        printf("CLS(0);\r\n");                          //清屏
  • //      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);\r\n");
  •                                 printf("DS48(350,132,'%4d ',7);",Conce_PM2_5);      // PM2.5输出
  • //                        printf("PS64(0,10,100,'PM1.0:%5d',2);\r\n",Conce_PM1_0);      // PM1.0输出
  • //                                printf("DS48(0,10,240,'PM10 :%5d',3);\r\n",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  







0
2018-7-6 04:08:00   评论

只有小组成员才能发言,加入小组>>

304个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表