国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

Arduino連接夏普GP2Y1010AU0F空氣質(zhì)量傳感器檢測(cè)PM2.5

作者:楚風(fēng)狂 | 更新時(shí)間:2016-06-01 | 瀏覽量:7790


夏普GP2Y1010AU0F圖片



GP2Y1010AU0F引腳圖

序號(hào)名稱(chēng)作用
1V-LEDLED供電
2LED-GNDLED GND
3LEDLED控制
4S-GND傳感器GND
5VO檢測(cè)結(jié)果電壓模擬量輸出
6VCC供電


GP2Y1010AU0F接線圖



接線圖.jpg



程序代碼


/*
   Arduino連接夏普GP2Y1010AU0F空氣質(zhì)量傳感器檢測(cè)PM2.5
   些程序也適用于用 Arduino IDE 開(kāi)發(fā) ESP8266
*/

/* 定義引腳 */

 #define PIN_DATA_OUT A0 //連接空氣質(zhì)量傳感器模擬量輸出的IO口


 #define PIN_LED_VCC 2 //空氣質(zhì)量傳感器中為內(nèi)部Led供電的引腳

 /* 定義時(shí)間 */
 const int DELAY_BEFORE_SAMPLING = 280; //采樣前等待時(shí)間
 const int DELAY_AFTER_SAMPLING = 40; //采樣后等待時(shí)間
 const int DELAY_LED_OFF = 9680; //間隔時(shí)間

/**
   讀取輸出電壓
*/
double getOutputV() {
  digitalWrite(PIN_LED_VCC, LOW);
  delayMicroseconds(DELAY_BEFORE_SAMPLING);
  double analogOutput = analogRead(PIN_DATA_OUT);
  delayMicroseconds(DELAY_AFTER_SAMPLING);
  digitalWrite(PIN_LED_VCC, HIGH);
  delayMicroseconds(DELAY_LED_OFF);
  //Arduino模擬量讀取值的范圍為0~1023,以下?lián)Q算為0~5v
  double outputV = analogOutput / 1024 * 5;
  return outputV;
}

/**
   根據(jù)輸出電壓計(jì)算灰塵密度
*/
double getDustDensity(double outputV) {
  //輸出電壓和灰塵密度換算公式: ug/m3 = (V - 0.9) / 5 * 1000
  double ugm3 = (outputV - 0.9) / 5 * 1000;
  //去除檢測(cè)不到的范圍
  if (ugm3 < 0) {
    ugm3 = 0;
  }
  return ugm3;
}

/**
   根據(jù)灰塵密度計(jì)算AQI
   環(huán)境空氣質(zhì)量指數(shù)(AQI)技術(shù)規(guī)定(試行)](http://kjs.mep.gov.cn/hjbhbz/bzwb/dqhjbh/jcgfffbz/201203/t20120302_224166.htm
*/
double getAQI(double ugm3) {
  double aqiL = 0;
  double aqiH = 0;
  double bpL = 0;
  double bpH = 0;
  double aqi = 0;
  //根據(jù)pm2.5和aqi對(duì)應(yīng)關(guān)系分別計(jì)算aqi
  if (ugm3 >= 0 && ugm3 <= 35) {
    aqiL = 0;
    aqiH = 50;
    bpL = 0;
    bpH = 35;
  } else if (ugm3 > 35 && ugm3 <= 75) {
    aqiL = 50;
    aqiH = 100;
    bpL = 35;
    bpH = 75;
  } else if (ugm3 > 75 && ugm3 <= 115) {
    aqiL = 100;
    aqiH = 150;
    bpL = 75;
    bpH = 115;
  } else if (ugm3 > 115 && ugm3 <= 150) {
    aqiL = 150;
    aqiH = 200;
    bpL = 115;
    bpH = 150;
  } else if (ugm3 > 150 && ugm3 <= 250) {
    aqiL = 200;
    aqiH = 300;
    bpL = 150;
    bpH = 250;
  } else if (ugm3 > 250 && ugm3 <= 350) {
    aqiL = 300;
    aqiH = 400;
    bpL = 250;
    bpH = 350;
  } else if (ugm3 > 350) {
    aqiL = 400;
    aqiH = 500;
    bpL = 350;
    bpH = 500;
  }
  //公式aqi = (aqiH - aqiL) / (bpH - bpL) * (desity - bpL) + aqiL;
  aqi = (aqiH - aqiL) / (bpH - bpL) * (ugm3 - bpL) + aqiL;
  return aqi;
}

/**
   根據(jù)aqi獲取級(jí)別描述
*/
String getGradeInfo(double aqi) {
  String gradeInfo;
  if (aqi >= 0 && aqi <= 50) {
    gradeInfo = String("Perfect");
  } else if (aqi > 50 && aqi <= 100) {
    gradeInfo = String("Good");
  } else if (aqi > 100 && aqi <= 150) {
    gradeInfo = String("Mild polluted");
  } else if (aqi > 150 && aqi <= 200) {
    gradeInfo = String("Medium polluted");
  } else if (aqi > 200 && aqi <= 300) {
    gradeInfo = String("Heavily polluted");
  } else if (aqi > 300 && aqi <= 500) {
    gradeInfo = String("Severely polluted");
  } else {
    gradeInfo = String("Broken roof!!!");
  }
  return gradeInfo;
}

void setup() {
  Serial.begin(115200);
  pinMode(PIN_DATA_OUT, INPUT); //定義為輸入(ADC讀取模擬量)
  pinMode(PIN_LED_VCC, OUTPUT); //定義為輸出
}

void loop() {
  double outputV = getOutputV(); //采樣獲取輸出電壓
  double ugm3 = getDustDensity(outputV); //計(jì)算灰塵濃度
  double aqi = getAQI(ugm3); //計(jì)算aqi
  String gradeInfo = getGradeInfo(aqi); //計(jì)算級(jí)別

  //打印到串口
  Serial.println(String("outputV=") + outputV + "\tug/m3=" + ugm3 + "\tAQI=" + aqi + "\tgradeInfo=" + gradeInfo);

  //間隔1秒執(zhí)行下次檢測(cè)
  delay(1000);
}


輸出結(jié)果


outputV=1.05	ug/m3=29.96	AQI=42.80	gradeInfo=Perfect
outputV=1.36	ug/m3=92.46	AQI=121.83	gradeInfo=Mild polluted
outputV=1.29	ug/m3=77.81	AQI=103.52	gradeInfo=Mild polluted
outputV=1.16	ug/m3=51.45	AQI=70.56	gradeInfo=Good
outputV=1.12	ug/m3=43.63	AQI=60.79	gradeInfo=Good
outputV=1.26	ug/m3=72.93	AQI=97.41	gradeInfo=Good


本文大多摘自http://blog.fantasymaker.cn/2016/01/10/pm25-aqi-detector-based-on-nodemcu/

更多信息請(qǐng)自行查看


關(guān)于聯(lián)網(wǎng)請(qǐng)參考網(wǎng)站文檔,這里不在重復(fù)。


關(guān)于數(shù)據(jù)上傳這里給大家分享一個(gè)函數(shù)格式供大家參考


void update1(int did, int inputid1, int inputid2,int inputid3,float value1 ,float value2,float value3) // 定義一次傳遞3個(gè)參數(shù)的函數(shù)

{

String str1="{\"M\":\"update\",\"ID\":\"";

str1+=did;

str1+="\",\"V\":{\"";

str1+=inputid1;

str1+="\":\"";

str1+=value1;

str1+="\",\"" ;

str1+=inputid2;

str1+="\":\"";

str1+=value2;

str1+="\",\"" ;

str1+=inputid3;

str1+="\":\"";

str1+=value3;

str1+="\"" ;

str1+="}}\n";

 client.print(str1);  

//下面是串口打印 傳遞到服務(wù)器的信息,以便調(diào)試

  Serial.print("update:");   

  Serial.print(inputid1);   

  Serial.print("->");   

  Serial.println(value1);   

   Serial.print("update:");   

  Serial.print(inputid2);   

  Serial.print("->");   

  Serial.println(value2); 

   Serial.print("update:");   

  Serial.print(inputid3);   

  Serial.print("->");   

  Serial.println(value3); 

}


此函數(shù)出自網(wǎng)友 瘋狂的小車(chē) 借鑒網(wǎng)友 在路上 的勞動(dòng)成果并發(fā)表的 ”用ESP8266傳遞BMP180的溫度的氣壓到貝殼“一文


*所有圖片和程序均來(lái)源于互連網(wǎng),本人只是重新整理發(fā)布。如有侵權(quán)請(qǐng)及時(shí)聯(lián)系網(wǎng)站管理員或作者。謝謝







評(píng)論:共5條

z494627 評(píng)論于:2016-06-01 16:17:26
不錯(cuò)!謝謝分享!
楚風(fēng)狂 回復(fù)于:2016-06-01 16:34:49
回復(fù) @z494627:謝謝!還要多向你學(xué)習(xí)
貝殼物聯(lián) 回復(fù)于:2016-06-02 18:45:21
回復(fù) @楚風(fēng)狂:不錯(cuò)的教程。
activemee 評(píng)論于:2016-12-29 23:47:42
我最近在實(shí)驗(yàn)這個(gè)傳感器, 按照你的接線,AQI基本都是0,后來(lái)我把C1的位置挪到R1后面, 這樣能測(cè)出數(shù)值,但是感覺(jué)還是很不準(zhǔn)。
出門(mén)看天下 評(píng)論于:2017-03-21 18:34:36
感謝分享
返回頂部