“Sensor-Dust/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Wasdpkj@hotmail.com moved page Microduino-Dust/zh to Sensor-Dust/zh
第34行: 第34行:
 
*程序
 
*程序
 
<source lang="cpp">
 
<source lang="cpp">
 +
#include <SoftwareSerial.h>
 +
SoftwareSerial pmSerial(4, 5);  //PM2.5传感器通讯软串口
 +
#define INTERVAL_pm25            200
 +
unsigned long pm25_time = millis();
  
#define FAN_PIN 10      //风扇控制引脚
+
void setup() {
#define LED_PIN 12      //传感器LED控制引脚
+
  Serial.begin(9600); // See the connection status in Serial Monitor
#define DUST_PIN A0    //传感器检测
+
  pmSerial.begin(2400);  //首先启动软串口
 +
}
  
#define TIME1 280     
+
void loop() {
#define TIME2 40
+
  if (pm25_time > millis()) pm25_time = millis();
#define TIME3 9680
+
  if (millis() - pm25_time > INTERVAL_pm25) {
 
+
    Serial.println(PM25()) ;
int dustVal = 0;
+
    pm25_time = millis();   //更新计时器
float dustVoltage = 0;
+
  }
float dustDensity = 0;
+
}
  
void setup(){
+
float PM25() {
   Serial.begin(9600);
+
   int data_s = 0;   //串口接收数据
   pinMode(FAN_PIN, OUTPUT);
+
   int num = -1;     //串口接收数据计数
   pinMode(LED_PIN, OUTPUT);
+
   int sum = 0;       //校验和
   digitalWrite(FAN_PIN, LOW);
+
   int cal[5];       //接收数据缓存
}
+
  float dustDensity = 0;  //PM2.5浓度
  
void loop(){
+
   pmSerial.listen();
   digitalWrite(FAN_PIN, HIGH);   //检测前打开风扇抽风
+
   while (1) {
   delay(3000);
+
    if (pmSerial.available() > 0) { //串口缓存有数据
  digitalWrite(FAN_PIN, LOW);    //延时3秒后关闭风扇
+
      data_s = pmSerial.read();   //读取串口缓存数据
  digitalWrite(LED_PIN,LOW);     //打开传感器内部的LED
+
      if (data_s == 0xAA) {        //得到数据帧起始位
  delayMicroseconds(TIME1);      //等待280us
+
        num = 0;                 //开始计数
  dustVal = analogRead(DUST_PIN); //采样模拟值
+
      }
  delayMicroseconds(TIME2);       //等待40us
+
      else if (num >= 0) {
  digitalWrite(LED_PIN,HIGH);     //关闭LED
+
        cal[num++] = data_s; //读到数据,计数+1,数据保存到缓存中
  delayMicroseconds(TIME3);
+
        if (num == 6) {        //读到数据帧最后一位
  dustVoltage = dustVal * (5.0/1024.0);   //将模拟值转换成电压值
+
          sum = cal[0] + cal[1] + cal[2] + cal[3]; //计算校验和
  dustDensity = 0.17 * dustVoltage - 0.1; //将电压值转换成粉尘密度(输出单位:毫克/立方米)
+
          if (sum == cal[4] && cal[5] == 0xFF) {    //校验和匹配,数据帧最后一位为0xFF,说明接收的数据帧正常
   Serial.println(dustDensity);
+
            dustDensity = (cal[0] * 256 + cal[1]) * (5.0 / 1024) * 550; //计算PM2.5浓度,单位ug/m3
   delay(1000);
+
          }
 +
          else {    //接收的数据不正常
 +
            dustDensity = 0;   //浓度清零
 +
          }
 +
          break;
 +
        }
 +
      }
 +
    }
 +
  }
 +
   pmSerial.stopListening();
 +
   return dustDensity ;
 
}
 
}
 
</source>
 
</source>

2016年3月29日 (二) 08:00的版本

Language English
Microduino-Dust

Microduino-Dust是PM2.5传感器模块。

特色

  • 采用SHARP GP2Y1010AUOF空气质量传感器;
  • 独立风道,检测速度快;

规格

  • 工作电压: 4.5V~5.5V
  • 检测灵敏度:0.5V/0.1mg/m3
  • 1.27mm间距的4Pin接口;
  • 输入:风扇控制/5V数字信号,LED控制/5V数字信号
  • 输出:0~5V模拟信号
  • 风扇控制引脚说明:GND、VCC、风扇信号输入、NC(空),该输入信号为数字信号,需要使用数字接口来驱动(D0~D13)。可以接到Sensor-hub的3~10号引脚,对应使用的引脚为D0,D2,D4,D6,D8,D10,D12。
  • 传感器控制引脚说明:GND、VCC、检测信号输出、LED控制信号输入。此处检测信号为模拟信号,需使用模拟接口来检测(A0~A7),控制信号为数字信号,需使用数字接口来驱动(D0~D13)。可以使用I/O分线模块(IO-split)将这两个信号分开,将传感器接口通过转接线接到(IO-split)的IN接口,(IO-split)的A-OUT接口可以接到Sensor-hub的10,11,12号引脚,对应使用A6,A2,A0;(IO-split)的B-OUT可以接到Sensor-hub的3~10号引脚,对应使用的引脚为D0,D2,D4,D6,D8,D10,D12。
MCookie-sensorhub rule.JPG

文档

开发

适用于大气空气质量检测或室内烟尘检测等。

应用

#include <SoftwareSerial.h>
SoftwareSerial pmSerial(4, 5);  //PM2.5传感器通讯软串口
#define INTERVAL_pm25             200
unsigned long pm25_time = millis();

void setup() {
  Serial.begin(9600); // See the connection status in Serial Monitor
  pmSerial.begin(2400);   //首先启动软串口
}

void loop() {
  if (pm25_time > millis()) pm25_time = millis();
  if (millis() - pm25_time > INTERVAL_pm25) {
    Serial.println(PM25()) ;
    pm25_time = millis();    //更新计时器
  }
}

float PM25() {
  int data_s = 0;    //串口接收数据
  int num = -1;      //串口接收数据计数
  int sum = 0;       //校验和
  int cal[5];        //接收数据缓存
  float dustDensity = 0;  //PM2.5浓度

  pmSerial.listen();
  while (1) {
    if (pmSerial.available() > 0) { //串口缓存有数据
      data_s = pmSerial.read();   //读取串口缓存数据
      if (data_s == 0xAA) {        //得到数据帧起始位
        num = 0;                  //开始计数
      }
      else if (num >= 0) {
        cal[num++] = data_s; //读到数据,计数+1,数据保存到缓存中
        if (num == 6) {        //读到数据帧最后一位
          sum = cal[0] + cal[1] + cal[2] + cal[3];  //计算校验和
          if (sum == cal[4] && cal[5] == 0xFF) {    //校验和匹配,数据帧最后一位为0xFF,说明接收的数据帧正常
            dustDensity = (cal[0] * 256 + cal[1]) * (5.0 / 1024) * 550; //计算PM2.5浓度,单位ug/m3
          }
          else {     //接收的数据不正常
            dustDensity = 0;    //浓度清零
          }
          break;
        }
      }
    }
  }
  pmSerial.stopListening();
  return dustDensity ;
}
  • 软件:
  • 把所有模块叠一起,将Dust传感器的风扇控制接口通过转接线与sensorhub的D10口连接起来。
  • 将Dust传感器的控制检测接口通过转接线接到IO分线器的IN接口,再将IO分线器的A-OUT接口接到sensorhub的A0,IO分线器的B-OUT接口接到sensorhub的D12。
  • 打开Arduino IDE,将程序拷贝到IDE中,在Tools→Board里面选择正确的板卡,然后进行编译。
  • 编译完成后在Arduino IDE的Tools→Serial Port里面选择正确的端口号,然后直接下载程序。
  • 下载完毕你可以打开串口监视器,Dust传感器的风扇工作3秒钟之后,串口控制台会显示出当前的空气粉尘密度,等待1秒钟之后Dust传感器再进行下一次检测。

购买

历史

图库

  • 正面
文件:Microduino-Dust-F.JPG
Microduino-Dust Front
  • 背面
文件:Microduino-Dust -b.JPG
Microduino-Dust Back