[尼克的robot]實做arduino pm2.5感測器 GP2Y1010AU0F 偵測空氣懸浮微粒汙染

20190101_194814.jpg

GP2Y1010AU0F的原理是用LED光源去偵測空氣中懸浮微粒
算是個粗略估計的方法,不會非常精準精確
不過優點就是成本相對雷射式感應器的便宜很多
但尼克用起來數值的相對變化正確性還是有的
 
 
底下就是今天所需的材料 : 
麵包版 一塊
UNO版 一塊
pm2.5感測器 一顆
電容及電阻基本上你買的時候他就會附給你
如果沒有的話需要自己準備
一顆 150歐姆的電阻
一顆 220uF的電容
 
接線的部分 :
感應器總共有六條線
由左至右分別是 白,藍,綠,黃,黑,紅
白的部分為方便觀看尼克暫時用淺藍代替
 
1321.png
 
這顆感應器比較要注意的地方是他的線比較多也比較細,所以剝皮的時候,尼克建議剝兩倍的長度,然後再對折轉一轉,當然這樣會變的很麻煩,不過不這樣的話線很容易從麵包板鬆脫
另外一種方法是剝皮完後直接用銲錫沾一沾

底下是程式的部分

/*

尼克的robot網址 :

https://kenny2019.pixnet.net/blog

*/

//測試得到的資料和空氣品質對照:
//3000 + =很差
//1050-3000 =差
//300-1050 =一般
//150-300 =好
//75-150 =很好
//0-75 =非常好

int measurePin = 0; //右邊第二條線的接腳
int ledPower = 2;   // 左邊第三條線的接腳
  
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
  
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
  
void setup(){
  Serial.begin(9600);
  pinMode(ledPower,OUTPUT);
}
  
void loop(){
  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(samplingTime);
  
  voMeasured = analogRead(measurePin); // read the dust value
  
  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);
  
  // 0 - 5V mapped to 0 - 1023 integer values
  // recover voltage
  calcVoltage = voMeasured * (5.0 / 1024.0);
  
  // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/
  // Chris Nafis (c) 2012
  dustDensity = 0.17 * calcVoltage - 0.1;
  
  Serial.print("原始信號值 (0-1023): ");
  Serial.print(voMeasured);
  
  Serial.print(" - 電壓: ");
  Serial.print(calcVoltage);
  
  Serial.print(" - 灰塵密度: ");
  Serial.print(dustDensity * 1000); // 這裡將數值呈現改成較常用的單位( ug/m3 )
  Serial.println(" ug/m3 ");
  delay(10000);
}


程式上傳後就可以開啟序列埠觀看數值囉

另外尼克也有遇到很多的問題

像是有時候感應器測值會變負的

在沒有接任何其他的模組情況下

這可能是接線的問題

尼克直接把線焊死後就沒這個問題了

另外如果有接其他的模組

就很容易發發衝突的問題

尼克還沒有時間找出問題所在

因此之後有其他的發現會再寫一篇文章跟大家說
 
 
 
 
 
相关文章