看图说话测量PM2,5-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16944|回复: 7

看图说话测量PM2,5

[复制链接]
发表于 2013-6-23 16:51 | 显示全部楼层 |阅读模式
本帖最后由 ardypro 于 2013-6-23 16:51 编辑

乐联老刘送俺一块DSM501A,可以像美帝那样测量pm2.5污染程度{:soso_e144:},还可以发表到物联网服务器,随时随地都可以看到空气清洁程度的变化。

所需要的硬件:
序 号 硬 件 数 量 备 注
1 Arduino 1
2 DSM501A 1
3W5100网络模块1
4 DHT11 1 非必须
5 TPLink 703N 1 非必须


物联网服务器:
乐联或者yeelink,这里选择的是乐联。

考虑到要监测的地点可能要变动,所以方案中用到TPLink703N无线路由器,这样可以端着到处跑,变成移动监测站{:soso_e113:},当然,如果你只是要监测路由器旁边的空气质量,那就扯一根网线就行,703N就省了,顺便省了不少银子。

一、连接硬件
硬件连接拓扑图:

拓扑图.PNG

注意,DSM501A传感器有两个数据输出引脚,4号脚是可以调节采样精度的,这个我们不用,接2号脚,另外一端接入Arduino,程序中用的是D8,也可以是其它可用IO脚。

二、注册/设置乐联帐户
如果你已经注册成功乐联帐户,并且已经添加网关和设备,那可以跳过这一步。

2.1 添加网关
乐联网的网关概念跟pachube里的设备概念差不多,就是可以管理传感器的设备。
addgate.PNG
标识是服务器自动给出的,类型可以根据自己的设备选择,我这里选择的是Arduino,名称取一个自己好记的有含义的词语就行。

是否可控不用勾选,目前用不到这个属性。

如果你准备在你的乐联门户页面公开你的传感器数据,则可以勾选是否公开,这样以后不用登录就可以通过互联网查看传感器数据,当然其他人也可以随便查看。

2.2 添加设备
这里的设备就是传感器。
addsensor.PNG

注意类型要选择颗粒物3;是否公开跟网关对应选项一样。


三、设置TPLink703N工作模式
在这个应用中,TPLink703N工作方式类似于无线网卡,负责将W5100网络模块的网络请求发给主路由器,或者将路由器接收到的服务器反馈转发给W5100,因此需要将TPLink703N设置成client模式。

3.1 设置模式
选择无线AP模式
ap.PNG

选择client模式
client.PNG

3.2 设置IP地址
按理讲设置成动态IP也应该可以,但是遇到过麻烦,而且不方便以后对它的管理,所以这里选择设置成固定IP
ip.PNG

3.3 无线设置
因为主路由器采用WPA2安全措施,所以TPLink703N要连接到主路由器的话,需要设置SSID和密码才能成功接入。这里的设置跟主路由器的设置密切相关,不清楚的话要打开主路由器的设置界面查看选项。下面图示仅供参考。
password.PNG

wireless.PNG

设置完之后,重启TPLink703N,就可以以client模式接入主路由器。

四、Arduino程序
所有的硬件接线正确之后,就可以upload程序到Arduino,从而采集颗粒物数据。

为了简化程序,方便维护,我将DSM501传感器的采集过程单独封装成一个library,需要的可以从这里下载。

另外,还需要一个最新版的leweiclient库,注意不要下载那个带TCP字样的library。

主程序:

[mw_shl_code=cpp,true]#include <DHT11.h>
#include <dsm501.h>
#include <LeweiClient.h>
#include <SPI.h>
#include <Ethernet.h>


#define LW_USERKEY "你自己的USERKEY"
#define LW_GATEWAY "01"

char my_addr[50]="http://192.168.16.221/api";
int port =8889;

LeWeiClient *lwc;
dsm501 DSM501A;
DHT11 dht11(2);

void setup()
{
  Serial.begin(9600);

  DSM501A.setDatapin(8);
  DSM501A.enableFilter();

  connectRouter();
  lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY);
}

void loop()
{
  if (lwc)
  {
    unsigned long op,fp; //origin particles, filtered particles
    DSM501A.getParticles(op,fp);
    lwc->append("p1",double(op));
    lwc->append("p2",double(fp));

    Serial.print(">>>>>>>>>>>>>>>>>>>>>p1.particles: ");
    Serial.println(op);
    Serial.print(">>>>>>>>>>>>>>>>>>>>>p2.particles: ");
    Serial.println(fp);

    int err;
    float t,h;
    if ((err=dht11.read(h,t))==0)
    {
      char* sensor;
      sensor="t1";
      lwc->append(sensor, t);
      sensor="h1";
     lwc->append("h1", h);
    }

    lwc->send();
  }
}


void connectRouter()
{
  String stringOne;
  uint8_t mac[] = {
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED                        };
#if 0
  IPAddress  myip(192, 168, 16, 133);
  IPAddress  dnsip(202,103,225,68); //get this ip from local isp
  IPAddress  gateway(192, 168, 16, 105);
  Ethernet.begin(mac, myip, dnsip, gateway);
#else
  Serial.println("DHCP in process !");
  if (Ethernet.begin(mac) == 0)
  {
    Serial.print(F("Failed to configure Ethernet using DHCP\n"));
  }
  else
  {
    Serial.print("My IP address: ");
    for (byte thisByte = 0; thisByte < 4; thisByte++) {
      // print the value of each byte of the IP address:
      Serial.print(Ethernet.localIP()[thisByte], DEC);
      Serial.print(".");
    }
    Serial.println();
    Serial.println(F("Ethernet configuration OK\n"));
    stringOne="http://";
    stringOne+=Ethernet.localIP()[0];
    stringOne+=".";
    stringOne+=Ethernet.localIP()[1];
    stringOne+=".";
    stringOne+=Ethernet.localIP()[2];
    stringOne+=".";
    stringOne+=Ethernet.localIP()[3];
    stringOne+=":";
    stringOne+=port;
    stringOne+="/api";   
    Serial.println(stringOne);
    stringOne.toCharArray(my_addr, 50);
  }
#endif

}

[/mw_shl_code]

正常上传之后,便可以查看数据曲线
particles.PNG

所有的硬件装在一个快餐盒里的,接线太难看,先不上图。{:soso_e106:}
 楼主| 发表于 2013-6-23 16:53 | 显示全部楼层
注意DSM501传感器安装的时候,必须跟地面垂直,因为它底下有个电阻加热空气,要是偏的话,热空气从孔里直接排到空气中了,影响数据准确性。
发表于 2013-6-23 19:29 | 显示全部楼层
图画的真好~
 楼主| 发表于 2013-6-24 12:26 | 显示全部楼层
奈何col 发表于 2013-6-23 19:29
图画的真好~

哈哈
发表于 2013-11-11 18:10 | 显示全部楼层
楼主你好,请问你图中PM2.5的单位是什么?
发表于 2013-11-15 17:43 | 显示全部楼层
楼主,有空加我QQ:18333856
有DSM501A的问题请教,谢谢。
发表于 2014-3-10 10:29 | 显示全部楼层
DSM501传感器的采集过程单独封装成一个library  这个我没法下载,你可以发一个给我嘛,楼主,我的邮箱:
312797290@qq.com
发表于 2015-5-11 17:57 | 显示全部楼层
楼主,求DSM501A的library  邮箱372308269@qq.com  感激不尽!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-27 22:21 , Processed in 0.244732 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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