flying03 发表于 2016-1-18 14:34:02

DIY雾霾指数测试仪完成了

本帖最后由 flying03 于 2016-1-18 14:36 编辑

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

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


然后进入测试仪的开发,在实验状态下,使用一台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中查看数据输出,先不接蓝牙模块。
代码如下:

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

#include <math.h>
char model;
float pm10 = 0;
float pm25 = 0;
float pm10_weight =0;
float pm25_weight =0;
float P25Weight=0;
float aqi=0;
float total_aqi=0;
unsigned int ten=0;
unsigned long duration25;
unsigned long duration10;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
//unsigned long lowpulseoccupancy25 = 0;
//unsigned long lowpulseoccupancy10 = 0;
//float ratio25 = 0;
//float ratio10 = 0;
//float concentration = 0;

void setup() {
Serial.begin(9600);
pinMode(7,INPUT);//pm25
pinMode(8,INPUT);//pm10
starttime = millis();
}

void loop() {
while (Serial.available() > 0)
{   
   model =char(Serial.read());
if(model=='a'){
    Serial.println(total_aqi/ten);
    Serial.flush();
    }
}

duration25 = pulseIn(7, LOW);
duration10 = pulseIn(8, LOW);
pm25 += duration25;
pm10 += duration10;

    if ((millis()-starttime) > sampletime_ms)
{
    pm25=pm25/1000;
    pm10=pm10/1000;
    //Serial.print("pm25=");
    //Serial.println(pm25);
   //Serial.print("pm10=");
    //Serial.println(pm10);
   
   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;
   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;
   P25Weight = pm10_weight- pm25_weight;
   
          if (P25Weight>= 0 && P25Weight <= 15.4) {
      aqi = 0 +(50.0 / 15.5 * P25Weight);
      } else if (P25Weight > 15.5 && P25Weight <= 40.5) {
      aqi = 50 + (50.0 / 25.0 * (P25Weight - 15.5));
      } else if (P25Weight > 40.5 && P25Weight <= 65.5) {
      aqi = 100 + (50.0 / 25.0 * (P25Weight - 40.5));
      } else if (P25Weight > 65.5 && P25Weight <= 150.5) {
      aqi = 150 + (50.0 / 85.0 * (P25Weight - 65.5));
      } else if (P25Weight > 150.5 && P25Weight <= 250.5) {
      aqi = 200 + (100.0 / 100.0 * (P25Weight - 150.5));
      } else if (P25Weight > 250.5 && P25Weight <= 350.5) {
      aqi = 300 + (100.0 / 100.0 * (P25Weight - 250.5));
      } else if (P25Weight > 350.5 && P25Weight <= 500.0) {
      aqi = 400 + (100.0 / 150.0 * (P25Weight - 350.5));
      } else if (P25Weight > 500.0) {
      aqi = 500 + (500.0 / 500.0 * (P25Weight - 500.0));
      } else if(P25Weight<0){
      aqi = -1;
      }
total_aqi += aqi;
ten ++;
if (ten>=10)
{
    Serial.println(total_aqi/10);
    total_aqi=0;
    ten=0;
}
   
    pm25 = 0;
    pm10 = 0;
    starttime = millis();
}
}

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


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

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

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

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



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

scpj 发表于 2016-1-18 15:15:12

厉害~~先mark下

davidce 发表于 2016-1-18 15:21:05

第一张图的滤芯是卷筒纸吗?

flying03 发表于 2016-1-18 15:50:10

davidce 发表于 2016-1-18 15:21 static/image/common/back.gif
第一张图的滤芯是卷筒纸吗?

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

bacon6581 发表于 2016-1-18 17:05:40

我也认为那是厕纸:lol

echiz 发表于 2016-1-18 19:42:26

bacon6581 发表于 2016-1-18 17:05 static/image/common/back.gif
我也认为那是厕纸

我也觉得像是厕纸

flying03 发表于 2016-1-19 15:47:33

echiz 发表于 2016-1-18 19:42 static/image/common/back.gif
我也觉得像是厕纸

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

Cupid 发表于 2016-1-20 07:22:19

恩,不错,标记一下

性感的阿淇 发表于 2016-1-20 10:58:34

博主,看了你的DIY雾霾指数测试仪,很感兴趣,不知道你能不能分享一下你的蓝牙与安卓系统的app的开发环节。谢谢 。

flying03 发表于 2016-1-20 13:19:32

性感的阿淇 发表于 2016-1-20 10:58 static/image/common/back.gif
博主,看了你的DIY雾霾指数测试仪,很感兴趣,不知道你能不能分享一下你的蓝牙与安卓系统的app的开发环节。 ...

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

冬迹 发表于 2016-1-21 22:50:26

楼主,你这个东西,放在室内,抽风机不开,示数是多少?

flying03 发表于 2016-1-22 09:37:50

冬迹 发表于 2016-1-21 22:50 static/image/common/back.gif
楼主,你这个东西,放在室内,抽风机不开,示数是多少?

150-200之间,红外的传感器,误差20%,只可参考

hesg 发表于 2016-1-22 10:44:00

不错,只要有参考数据就知道是否有净化效果。

hesg 发表于 2016-1-22 10:47:06

flying03 发表于 2016-1-19 15:47 static/image/common/back.gif
好吧,确实像,正规圆柱形净化器,外壳里面,都是这个东西。售价都在1K以上

其实就是一种过滤棉,我的水族箱里必用的一种材料。

zhanghuanqian 发表于 2016-1-23 13:23:37

第一次发言:学习下!
页: [1] 2
查看完整版本: DIY雾霾指数测试仪完成了