极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3386|回复: 16

DIY雾霾指数测试仪完成了

  [复制链接]
发表于 2016-1-18 14:34:02 | 显示全部楼层 |阅读模式
本帖最后由 flying03 于 2016-1-18 14:36 编辑

想做这个东西其实是因为已经DIY了一台空气净化器。
苦于没有测试仪来验证空净的工作效果。
哪怕只看到大至的趋势也行。

先来一张自制空气净化器的图片,这东西使用兼容小米空气净化器的滤芯,在上面卡进去一个涡轮抽风机,风机是从无叶风扇上取下来的,废物利用,还有一部分是抽风机的调速部分,这个也从风扇上取下来。
419148708906350247.jpg

然后进入测试仪的开发,在实验状态下,使用一台uno r3的板子,通过面包板,连接DSM501A粉尘传感器,输出部分使用HC06蓝牙模块,在手机上查看输出。

先来一张实验状态的图片

实验

实验


物料列表:
1,AT8芯片 1PCS
2,22PF电容 2PCS
3,16M晶振  1pCS
4,DSM501A传感器  1PCS
5,HC06蓝牙模块  1PCS
6,洞洞板   1PCS
7,USB线    1PCS(废物利用)
8,外壳 1PCS (废物利用)
9,螺丝钉、导线、热溶胶 若干(废物利用)

首先,在实验板状态下,写代码测试,这一关最重要,可以直接在IDE中查看数据输出,先不接蓝牙模块。
代码如下:

  1. //dsm501A接线方法
  2. // pin1 -------- 不用接
  3. // pin2 -------- 8 >=PM1.0
  4. // pin3 -------- ACC
  5. // pin4 -------- 7 >=PM2.5
  6. // pin5 -------- GND
  7. //HC06接线方法
  8. //HC06 RX-----unor3  的TX
  9. //HC06 TX-----unor3  的RX
  10. //HC06 ACC 接R3的5V
  11. //HC06 GND 接R3 的gnd

  12. #include <math.h>
  13. char model;
  14. float pm10 = 0;
  15. float pm25 = 0;
  16. float pm10_weight =0;
  17. float pm25_weight =0;
  18. float P25Weight=0;
  19. float aqi=0;
  20. float total_aqi=0;
  21. unsigned int ten=0;
  22. unsigned long duration25;
  23. unsigned long duration10;
  24. unsigned long starttime;
  25. unsigned long sampletime_ms = 30000;
  26. //unsigned long lowpulseoccupancy25 = 0;
  27. //unsigned long lowpulseoccupancy10 = 0;
  28. //float ratio25 = 0;
  29. //float ratio10 = 0;
  30. //float concentration = 0;

  31. void setup() {
  32.   Serial.begin(9600);
  33.   pinMode(7,INPUT);//pm25
  34.   pinMode(8,INPUT);//pm10  
  35.   starttime = millis();
  36. }

  37. void loop() {
  38.   while (Serial.available() > 0)  
  39.   {   
  40.    model =char(Serial.read());
  41.   if  (model=='a'){
  42.     Serial.println(total_aqi/ten);
  43.     Serial.flush();  
  44.     }
  45.   }
  46.   
  47.   duration25 = pulseIn(7, LOW);
  48.   duration10 = pulseIn(8, LOW);
  49.   pm25 += duration25;
  50.   pm10 += duration10;
  51.   
  52.     if ((millis()-starttime) > sampletime_ms)
  53.   {
  54.     pm25=pm25/1000;
  55.     pm10=pm10/1000;
  56.     //Serial.print("pm25=");
  57.     //Serial.println(pm25);
  58.      //Serial.print("pm10=");
  59.     //Serial.println(pm10);
  60.    
  61.      pm10_weight = 0.30473 * pow((pm10/sampletime_ms)*100, 3) - 2.63943 * pow((pm10/sampletime_ms)*100, 2) + 102.60291 * (pm10/sampletime_ms)*100 - 3.49616;
  62.      pm25_weight = 0.30473 * pow((pm25/sampletime_ms)*100, 3) - 2.63943 * pow((pm25/sampletime_ms)*100, 2) + 102.60291 * (pm25/sampletime_ms)*100 - 3.49616;
  63.      P25Weight = pm10_weight- pm25_weight;
  64.    
  65.           if (P25Weight>= 0 && P25Weight <= 15.4) {
  66.         aqi = 0 +(50.0 / 15.5 * P25Weight);
  67.       } else if (P25Weight > 15.5 && P25Weight <= 40.5) {
  68.         aqi = 50 + (50.0 / 25.0 * (P25Weight - 15.5));
  69.       } else if (P25Weight > 40.5 && P25Weight <= 65.5) {
  70.         aqi = 100 + (50.0 / 25.0 * (P25Weight - 40.5));
  71.       } else if (P25Weight > 65.5 && P25Weight <= 150.5) {
  72.         aqi = 150 + (50.0 / 85.0 * (P25Weight - 65.5));
  73.       } else if (P25Weight > 150.5 && P25Weight <= 250.5) {
  74.         aqi = 200 + (100.0 / 100.0 * (P25Weight - 150.5));
  75.       } else if (P25Weight > 250.5 && P25Weight <= 350.5) {
  76.         aqi = 300 + (100.0 / 100.0 * (P25Weight - 250.5));
  77.       } else if (P25Weight > 350.5 && P25Weight <= 500.0) {
  78.         aqi = 400 + (100.0 / 150.0 * (P25Weight - 350.5));
  79.       } else if (P25Weight > 500.0) {
  80.         aqi = 500 + (500.0 / 500.0 * (P25Weight - 500.0));
  81.       } else if(P25Weight<0){
  82.         aqi = -1;
  83.       }
  84.   total_aqi += aqi;
  85.   ten ++;
  86.   if (ten>=10)
  87.   {
  88.     Serial.println(total_aqi/10);
  89.     total_aqi=0;
  90.     ten=0;
  91.   }
  92.    
  93.     pm25 = 0;
  94.     pm10 = 0;
  95.     starttime = millis();
  96.   }
  97. }
复制代码


在15平房子开启自制的空气净化器,1个小时内手机读数情况如下:需要说的是,这个手机APP是网上的,用来连接蓝牙交接收串口数据。我程序中指定每5分钟输出一次,其实传感器每分钟测试出两个数,但我在实验状态下发现每半分钟测出一这个数不准确,所以用5分钟出来的10个数,再除以10平均一下这种方法,得到5分钟一个的读数,是相对比较准确的。
706153082306265349.png

代码完成后,使用ISP方式,把代码烧进一块全新的AT8芯片,烧写分两部分,先写引导部分,再写入程序,这一部分坛子里有详细的方法,就不多说了。

然后在洞洞板上焊接一个IC座,把AT8放进去,然后最重要的部分来了,制作最小系统,要让AT8起振,要在9,10两脚加入晶振与电容,我先是没有这一步,后来加入之后就成功了。

再接下去,接入传感器与蓝牙模块,相当于I/O输入与输出.
这些东西都固定到外壳上去,用热溶胶固定电路板上的电线,以及传感器与外壳之间的接缝。

最后从电路板接一个USB线出来,母头接电源或充电宝。成品是这样子的:

773308199371670218.jpg

改进的空间:
1,可以使用数码管显示,这样不用手机APP,也不用蓝牙模块,但会比较耗电。
2,使用wifi 模块把数据传到物联网平台上,数据通过网站读取。
3,反向控制风机的控制电路,根据输出数据做电机调速。
回复

使用道具 举报

发表于 2016-1-18 15:15:12 | 显示全部楼层
厉害~~先mark下
回复 支持 反对

使用道具 举报

发表于 2016-1-18 15:21:05 | 显示全部楼层
第一张图的滤芯是卷筒纸吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-18 15:50:10 | 显示全部楼层
davidce 发表于 2016-1-18 15:21
第一张图的滤芯是卷筒纸吗?

不是,小米滤芯是圆简形状的,就像超大号卷简纸,外面那层是静电吸尘无纺布,做为初滤层保护滤芯
回复 支持 反对

使用道具 举报

发表于 2016-1-18 17:05:40 | 显示全部楼层
我也认为那是厕纸
回复 支持 反对

使用道具 举报

发表于 2016-1-18 19:42:26 | 显示全部楼层
bacon6581 发表于 2016-1-18 17:05
我也认为那是厕纸

我也觉得像是厕纸
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-19 15:47:33 | 显示全部楼层
echiz 发表于 2016-1-18 19:42
我也觉得像是厕纸

好吧,确实像,正规圆柱形净化器,外壳里面,都是这个东西。售价都在1K以上
回复 支持 反对

使用道具 举报

发表于 2016-1-20 07:22:19 | 显示全部楼层
恩,不错,标记一下
回复 支持 反对

使用道具 举报

发表于 2016-1-20 10:58:34 | 显示全部楼层
博主,看了你的DIY雾霾指数测试仪,很感兴趣,不知道你能不能分享一下你的蓝牙与安卓系统的app的开发环节。谢谢 。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-20 13:19:32 | 显示全部楼层
性感的阿淇 发表于 2016-1-20 10:58
博主,看了你的DIY雾霾指数测试仪,很感兴趣,不知道你能不能分享一下你的蓝牙与安卓系统的app的开发环节。 ...

蓝牙与APP都不用开发,使用蓝牙串口通讯,接arduino的TX与RX,APP是网上免费的,打开APP,查找蓝牙设备,匹配成功,APP 就自动接收蓝牙从arduino过来的串口数据。
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-11-25 13:47 , Processed in 0.045873 second(s), 6 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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