找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2801|回复: 4
收起左侧

stm32+攀藤G1空气质量检测源码与参考资料下载

[复制链接]
ID:309230 发表于 2018-4-16 14:23 | 显示全部楼层 |阅读模式
     攀藤G1是一款数字式通用颗粒浓度传感器,可以用于获得单位体积内空气中悬浮颗粒物个数及质量,即颗粒物浓度,并以数字接口形式输出。传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射,同时在某一特定角度收集散射光,得到散射光强随时间变化的曲线。进而微处理器利用基于米氏(MIE)理论的算法,得出颗粒物的等效粒径及单位体积内不同粒径的颗粒物数量。输出为单位体积内各浓度颗粒物质量及个数。

攀藤G1传感器传输协议串口默认波特率:9600bps,校验位:无,停止位:1位。模块工作在连续采样方式下,模块在每一次采样结束后主动发送采样数据,采样响应时间小于600毫秒,数据更新时间小于2秒。模块发送数据包定义32个字节。控制器只要读取串口中数据,处理、传唤得到需要的数值。

屏幕显示的污染级别对应的颜色,严格按照这个配色来的,照片颜色显示质量不如实际显示颜色鲜艳。照不出效果。
0.jpg
合体到一块了,内部空间。

电路原理图如下:
0.jpg


stm32单片机源程序如下:
  1. #include"led.h"
  2. #include"LCD.h"
  3. #include"delay.h"

  4. extern u16  Conce_PM1_0;       // PM1.0浓度
  5. extern u16  Conce_PM2_5;       // PM2.5浓度
  6. extern u16  Conce_PM10;        // PM10浓度

  7. u16 IAQI[8]={0,50,100,150,200,300,400,500};
  8. u16 PM10[8]={0,50,150,250,350,420,500,600};
  9. u16 PM25[8]={0,35,75,115,150,250,350,500};

  10. u16 IAQIPM10;        //PM10空气质量分指数
  11. u16 IAQIPM25;        //PM2.5空气质量分指数
  12. u16 CpPM10;                //PM10浓度
  13. u16 CpPM25;                //PM2.5浓度
  14. u16 BpHi;                        //与Cp相近的污染物浓度限值的高值
  15. u16 BpLo;                        //与Cp相近的污染物浓度限值的低值
  16. u16 IAQIHi;                //与BpHi对应的空气质量分指数
  17. u16 IAQILo;                //与BpLo对应的空气质量分指数
  18. u16 AQI;                        //空气质量指数
  19. u8  Max=10;                //Max=0,首要污染物为PM25,Max=1,为PM10,Max=2双重污染

  20. void delay_BUSY(void)          // 触摸显示屏 发送延时
  21. {
  22.                 u16 a;
  23.                 for (a=0; a<100; a++) ;
  24.                 while(HMI_BUSY);                   // 当发送完之后,等待BUSY为0

  25. }

  26. void Window(void)
  27. {
  28.                 printf("CLS(0);");
  29.                 printf("DS48(10,12,'唐山',7,0);");
  30.                 printf("DS32(110,28,'实时空气质量指数(AQI)',7,0);");
  31.                 printf("CIR(92,160,56,4);");
  32.                 printf("CIR(92,160,55,4);");
  33.                 printf("DS24(55,198,'AQI指数',4,0);");
  34.                 printf("CIR(239,160,55,4);");
  35.                 printf("CIR(239,160,56,4);");
  36.                 printf("DS24(180,198,'首要污染物',4,0);");
  37.                 printf("CIR(386,160,55,4);");
  38.                 printf("CIR(386,160,56,4);");
  39.                 printf("DS24(340,198,'PM2.5浓度',4,0);");
  40.                 printf("BOXF(50,265,100,280,2);");                //绿色
  41.                 printf("BOXF(100,265,150,280,4);");                //黄色
  42.                 printf("SCC(37,64480);");
  43.                 printf("BOXF(150,265,200,280,37);");        //橙色
  44.                 printf("BOXF(200,265,250,280,1);");        //红色
  45.                 printf("SCC(19,38921);");
  46.                 printf("BOXF(250,265,300,280,19);");        //紫色
  47.                 printf("SCC(18,30724);");
  48.                 printf("BOXF(300,265,350,280,18);");        //褐红色
  49.                 printf("DS16(48,285,'0',7,0);");
  50.                 printf("DS16(91,285,'50',7,0);");
  51.                 printf("DS16(140,285,'100',7);");
  52.                 printf("DS16(190,285,'150',7);");
  53.                 printf("DS16(240,285,'200',7);");
  54.                 printf("DS16(290,285,'300',7);");
  55.                 printf("DS16(340,285,'500',7);");
  56.                 printf("DS16(369,178,'ug/m3',7,0);");
  57.                 printf("CBOX(0,0,479,318,5,4);");
  58.                 printf("PL(0,76,479,76,4);");
  59.                 printf("DS16(400,265,'13:20:36',7);");
  60.                 printf("DS16(395,285,'2016-5-18',7,0);");
  61.                 printf("\r\n");

  62. //                delay_BUSY();                //当发送完之后,等待BUSY为0
  63. }


  64. void AQI_Count(void)                                //计算AQI指数,判断首要污染物
  65. {
  66.                 u8 i=0;
  67.                 u8 j=0;

  68.         
  69.                 CpPM10=Conce_PM10;
  70.                

  71.                
  72.                 for(i=0;i<7;i++)
  73.                 {
  74.                                 if((CpPM10>PM10[i])&&(CpPM10<PM10[i+1]))
  75.                                 {
  76.                                                 BpHi=PM10[i+1];
  77.                                                 BpLo=PM10[i];
  78.                                                 IAQIHi=IAQI[i+1];
  79.                                                 IAQILo=IAQI[i];
  80.                                                 IAQIPM10=(IAQIHi-IAQILo)*(CpPM10-BpLo)/(BpHi-BpLo)+IAQILo;
  81.                                 }
  82.                                 else if(CpPM10==PM10[i])
  83.                                 {
  84.                                                 IAQIPM10=IAQI[i];
  85.                                 }
  86.                                 else if(CpPM10>=600)
  87.                                 {
  88.                                                 IAQIPM10=((50/6)*(CpPM10-600))/10+500;         //爆表
  89.                                 }
  90.                 }

  91.                 CpPM25=Conce_PM2_5;
  92.                                 
  93.                 for(j=0;j<7;j++)
  94.                 {
  95.                                 if((CpPM25>PM25[j])&&(CpPM25<PM25[j+1]))
  96.                                 {
  97.                                                 BpHi=PM25[j+1];
  98.                                                 BpLo=PM25[j];
  99.                                                 IAQIHi=IAQI[j+1];
  100.                                                 IAQILo=IAQI[j];
  101.                                                 IAQIPM25=(IAQIHi-IAQILo)*(CpPM25-BpLo)/(BpHi-BpLo)+IAQILo;
  102.                                 }
  103.                                 else if(CpPM25==PM25[j])
  104.                                 {
  105.                                                 IAQIPM25=IAQI[j];
  106.                                 }
  107.                                 else if(CpPM25>=500)
  108.                                 {
  109.                                                 IAQIPM25=CpPM25;         //爆表
  110.                                 }
  111.                 }
  112.                
  113.                 if(IAQIPM10>IAQIPM25)
  114.                 {
  115.                                 AQI=IAQIPM10;
  116.                                 Max=1;
  117.                 }
  118.                 else if(IAQIPM10<IAQIPM25)
  119.                 {
  120.                                 AQI=IAQIPM25;
  121.                                 Max=0;
  122.                 }else if(IAQIPM10==IAQIPM25)
  123.                 {
  124.                                 AQI=IAQIPM10;
  125.                                 Max=2;
  126.                 }
  127. }

  128. void Display(void)
  129. {
  130. //                        printf("CLS(0);\r\n");                          //清屏
  131. //      printf("PIC(0,0,1);");                //画图

  132.         
  133. //      printf("SBC(2);");                                //设置背景色
  134. //      printf("TPN(2);");                                //触摸屏模式
  135. //      printf("BTN(6,396,278,475,315,0);");        //热点区域按钮
  136. //      printf("BTN(7,0,0,479,274,0);\r\n");

  137.         
  138.                                 printf("DS48(350,132,'%4d ',7);",Conce_PM2_5);      // PM2.5输出
  139. //                        printf("PS64(0,10,100,'PM1.0:%5d',2);\r\n",Conce_PM1_0);      // PM1.0输出
  140. //                                printf("DS48(0,10,240,'PM10 :%5d',3);\r\n",Conce_PM10);      // PM10 输出
  141. //                        delay_BUSY();                //当发送完之后,等待BUSY为0
  142. //                                printf("DS48(0,0,'PM2.5:%4d  ',1);",Conce_PM2_5);      // PM2.5输出
  143. //                                printf("DS48(0,60,'PM10 :%4d  ',2);",Conce_PM10);      // PM10 输出
  144.                                 printf("DS48(55,135,'%4d ',3;",AQI);      // AQI
  145. //                                        printf("DS48(0,240,'IAQIPM10:%4d  ',5;",IAQIPM10);      // PM2.5输出
  146.                                 if(Max==0)
  147.                                 {
  148.                                                 printf("DS32(203,145,'PM2.5',14);");      // PM2.5 输出                                
  149.                                 }
  150.                                 else if(Max==1)
  151.                                 {
  152.                                                 printf("DS32(203,145,' PM10',14);");      // PM10 输出                                
  153.                                 }else if(Max==2)
  154.                                 {
  155. //                                                printf("DS32(203,135,'PM2.5',14)");
  156. //                                                printf("DS32(203,160,' PM10',14)");
  157.                                 }
  158.                         
  159.                                 if(AQI<=50)
  160.                                 {
  161.                                                 printf("DS24(60,235,' 优                                                       ',5)");
  162.                                 }
  163.                                 else if((AQI>50)&&(AQI<=100))
  164.                                 {
  165.                                                 printf("DS24(60,235,'          良                                              ',5)");
  166. ……………………

  167. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
设计说明.doc (460 KB, 下载次数: 40)
回复

使用道具 举报

ID:539902 发表于 2019-5-16 16:13 | 显示全部楼层
求源码
回复

使用道具 举报

ID:585455 发表于 2019-9-9 13:57 | 显示全部楼层
感謝分享
回复

使用道具 举报

ID:376018 发表于 2020-1-29 19:07 | 显示全部楼层
求源码下载。谢谢分享
回复

使用道具 举报

ID:688772 发表于 2020-1-30 13:37 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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