利用GP2Y1010AU0F偵測空氣懸浮微粒汙染PM2.5 - 拉夫多多 ...

文章推薦指數: 80 %
投票人數:10人

簡單的上傳資料呈現範例可以看這篇. Arduno動手做- 使用Ds18b20監測冰箱溫度並自動上傳數據. 然後最近把這感測器裝在arduino nano上發現偶爾會有一些 ... 2013年12月10日星期二 Arduino動手做-利用GP2Y1010AU0F偵測空氣懸浮微粒汙染PM2.5 近年來,懸浮微粒在空氣汙染的影響上越來越不容忽視 其造成的霧霾天氣不僅讓交通受影響,亦讓許多對空氣品質敏感的過敏患者深受其害 我就是其中一員... 家裡一直都有使用空氣濾淨機 但是這種看不到摸不到的空氣品質難以評估成效或是決定何時該開啟濾淨機 於是找到了這個好東西......  SharpGP2Y1010AU0F ,  點我看datasheet 利用LED光源去偵測空氣中懸浮微粒,算是個粗略估計的方法,不會太精確 不過優點就是成本比雷射式的便宜很多 原廠datasheet的電路圖: 腳位的接法如下 接著程式碼的部分是拾人牙慧,並做點修改 intmeasurePin=0;//ConnectdustsensortoArduinoA0pin intledPower=2;//Connect3leddriverpinsofdustsensortoArduinoD2 intsamplingTime=280; intdeltaTime=40; intsleepTime=9680; floatvoMeasured=0; floatcalcVoltage=0; floatdustDensity=0; voidsetup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); } voidloop(){ digitalWrite(ledPower,LOW);//powerontheLED delayMicroseconds(samplingTime); voMeasured=analogRead(measurePin);//readthedustvalue delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH);//turntheLEDoff delayMicroseconds(sleepTime); //0-5Vmappedto0-1023integervalues //recovervoltage calcVoltage=voMeasured*(5.0/1024.0); //lineareqautiontakenfromhttp://www.howmuchsnow.com/arduino/airquality/ //ChrisNafis(c)2012 dustDensity=0.17*calcVoltage-0.1; Serial.print("RawSignalValue(0-1023):"); Serial.print(voMeasured); Serial.print("-Voltage:"); Serial.print(calcVoltage); Serial.print("-DustDensity:"); Serial.print(dustDensity*1000);//這裡將數值呈現改成較常用的單位(ug/m3) Serial.println("ug/m3"); delay(1000); } 接著上載至arduino就可以在serialmonitor看到即時的空氣中懸浮微粒的狀況 若再搭配wifi晶片將數據傳送至Xively就可以像這樣紀錄呈現 Xively的使用方法之後會再寫一篇教學 然後這是同時間氣象局的資料 其實相似度挺高的,當天傍晚懸浮微粒隨著東北季風增強而移入台灣 數值馬上就很明顯的飆高 如果能主動通知至行動裝置達到預警效果就更棒了...找時間再研究研究 20150207update:  後來因為xively對免費使用者的限制提高所以改成使用開源的thingspeak 簡單的上傳資料呈現範例可以看這篇 Arduno動手做-使用Ds18b20監測冰箱溫度並自動上傳數據 然後最近把這感測器裝在arduinonano上發現偶爾會有一些類似雜訊的peak 目前還搞不清楚是arduino問題,程式問題or電路設計問題(因為電路上還有其他元件) 不過我想再arduino程式碼加入篩選雜訊數據的應該可以簡單解決,有更新會再來分享 另外,有網友熱心分享才知道原來sharp這系列已經出了新款GP2Y1050AU0F 所以接法不同,看了datasheet是內建MCU的,輸出似乎會比較精確有機會入手再來試試 2016/11/26更新 發現還有網友持續在關心這款感測器,在這邊要給個忠顧,請對感測懸浮微粒有興趣的朋友們改用G3感測器(PMS3003),或其系列產品,因為雷射技術為基礎的感測器才能真正準確的感測出特定粒徑之懸浮微粒,且幾乎不需要校正即可使用,我在後續的感測專案都已經放棄本文介紹的GP2Y系列感測器了。

張貼者: 拉夫多西 於 清晨7:13 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest 標籤: 空氣汙染, 空氣品質, Arduino動手做, GP2Y1010AU0F, PM2.5, Xively 34則留言: IvanC2015年4月19日晚上8:07我看過這款sensor的datasheet內容並無標示可測得最小微粒子的直徑,不知道為何大家可以假設這款GP2Y1050AU0F能測得2.5um的微粒子呢?回覆刪除回覆拉夫多西2015年4月20日凌晨3:26因為有人實際和校正過的儀器做過mapping本篇電壓-粒徑轉換公式也是從此而來可以參考這裡http://www.howmuchsnow.com/arduino/airquality/這種利用顆粒反射光原理的感測極限在於總訊號的最低靈敏度且幾乎無法分辨粒徑的訊號差異刪除回覆回覆Unknown2016年3月14日凌晨2:55您好想向您請教一些問題參考您的程式,因為礙於需求,程式每次只會執行一次,但第一次輸出結果都會有誤差(濃度值為100ug/m3左右浮動)第二次以後執行的結果較為穩定(濃度值為15~18ug/m3左右)請問該如何解決執行誤差的問題?刪除回覆回覆回覆Unknown2015年4月23日凌晨2:54你好:不好意思想在請問一下,看完版主貼的參考文章後,還是有點不太懂為什麼公式是電壓-粒徑,而不是電壓-濃度(PM10、PM2.5...)?回覆刪除回覆拉夫多西2015年4月23日清晨5:40您好,您可能誤會了圖的表示那篇參考文章提供的公式就是電壓/濃度喔[volts/dustdensity(mg/m^3)]刪除回覆回覆回覆Unknown2015年4月29日凌晨4:14你好:謝謝!!瞭解了,但還有一些問題想請教,我也是在南港使用這顆sensor,但是打電話問過Sharp的銷售員這顆sensor所測量的是總懸浮微粒(TSP),也就是包含PM10、PM2.5等等,而測量出來的結果跟氣象站所提供的PM2.5、PM10相比,1.發現只跟PM2.5的圖形相似,與PM10的圖形有點差距2.如果是測量TSP的話那測量數值不是應該會比PM2.5以及PM10加起來還高嗎?3.想請問一下除了純粹GP2Y1010au0f的電路外,版主還有外加甚麼其他的電路嗎?4.版主是將此sensor放置在戶外還是室內?謝謝!!(PS.1.我是將sensor放置在室內的窗戶邊,窗戶都有開著,sensor上還有安裝一個25*25*10mm的小風扇,電路也是按照版主的圖接的,測量時也有用TSI的PM2.5專業儀器同時測量,雖然結果圖走勢差不多,但是數值差距非常大,不知道是哪裡有問題。

2.我還是學生,很多東西都還不懂,非常不好意思又打擾了!!)回覆刪除回覆拉夫多西2015年4月29日清晨5:19是的,這顆感測器無法分辨粒徑,所以測得的訊號是代表總懸浮微粒的量但由於PM2.5的滯空能力會比大粒徑的懸浮微粒來得強所以在大範圍的區域中PM2.5的值大家測起來的趨勢會比較一致至於訊號水準誤差的問題,我只能坦白說這感測器比較陽春所以如果你手上有更專業的儀器就可以自行再做公式校正我的sensor主要都是放在室內,但經驗上只要有開窗,甚至非氣密窗即使關著室內外PM2.5的值其實不會差很多我也不是學電子資訊的,純粹是有興趣研究了一點,互相交流經驗也不錯!刪除回覆回覆回覆Unknown2015年12月7日晚上9:05要怎麼用測得的數據結合LED燈數據愈高LED燈亮愈多這樣回覆刪除回覆拉夫多西2015年12月8日凌晨2:19提供個簡單的想法給您參考嘍首先決定亮燈數量的區間譬如pm測得的數值在10以下亮一個燈,100以上五個燈之類的幾組區間然後就寫一個判斷式去判斷測得的數值是落在哪個區間這可以用if或是switch做到同時也就可以用這判斷式觸發符合條件後的動作去控制LED(哪幾顆LED要亮要滅)刪除回覆回覆回覆kadela2015年12月17日晚上10:23因為自己的成品偵測結果會因組裝線路,套件的版本而有所不同,例如Uno改成Mini,用Chris的公式來計算後者的空氣品質高了50ug/M3.於是上網來找資料發現另一位高手的心得:http://www.xlgps.com/article/294254.html看來還是得找一台高精度的來抓補正值,否則得到的值就只能看趨勢,不能盡信了.回覆刪除回覆回覆Unknown2016年3月1日晚上7:53不好意思打擾了上文是不是有打錯?!dustDensity=0.17*calcVoltage-0.1;>>dustDensity=0.17*calcVoltage-0.01;他們提供的圖表是在0下面不到0.1所以應該要改成0.01吧??我是一個高職生有錯還請多多指教^_^謝謝回覆刪除回覆Unknown2016年3月1日晚上9:04原點的地方x軸不是0是0.5唷!你是因此看錯嗎?x數值帶0進去的話y是等於-0.1沒錯的!刪除回覆回覆回覆Unknown2016年3月1日晚上7:55http://www.howmuchsnow.com/arduino/airquality/這是程式裡面提供的網址鍋子下面的圖表是畫在0.01的地方而不是0.1回覆刪除回覆Unknown2016年3月1日晚上9:06我就假設你跟樓上是同一人了XD再回一次一樣的內容~原點的地方x軸不是0是0.5唷!你是因此看錯嗎?x數值帶0進去的話y是等於-0.1沒錯的!刪除回覆回覆回覆Unknown2016年3月9日凌晨12:17不好意思我全部的東西都按照上面的接可是最後http://www.howmuchsnow.com/arduino/airquality/的數據為什麼跑不出來呢?回覆刪除回覆拉夫多西2016年3月9日下午6:34請問可以把問題敘述得更詳細嗎?是指arduinoide的serialmonitor上沒有數據嗎?刪除回覆回覆回覆Unknown2016年3月15日晚上9:21作者已經移除這則留言。

回覆刪除回覆回覆Henry'sCollection2016年3月31日晚上9:43不好意思,我按照上面的做法,但出來的值卻是負值?RawSignalValue(0-1023):10.00-Voltage:0.05-DustDensity:-91.70ug/m3回覆刪除回覆拉夫多西2016年4月1日下午5:43從你的rawdata來看確實是太低的電壓值,建議檢查一下接線也可以伸個東西進去感測孔內測試測值是否會跟著變化刪除回覆回覆回覆Unknown2016年4月11日清晨6:18你好我剛接觸這個東西我想了解一下dustDensity=0.17*calcVoltage-0.1;當中的0.17是怎麼計算的?回覆刪除回覆拉夫多西2016年4月11日清晨6:23是搭配比較精確的儀器同時偵測出來的數值去做線性校正所得公式斜率和截距每台gp2y101都可以這樣個別做一個校正公式刪除回覆回覆回覆flightpig2016年10月1日上午10:43你好,我未點煙時voMeasured測出來為0,點煙時測出來的值為756,但因為公式有減0.1,所以最後的結果未點煙時為-0.1,請問這樣子是正常的嗎?因為我看datasheet,應該會有一個初始的電壓,也就是說未點煙時voMeasured的值不應該為0才對。

回覆刪除回覆拉夫多西2016年11月23日清晨5:25這代表你的GP2Y感測器預設電阻值與當初設計標準公式的那台GP2Y不同,這代表你就需要先有一台精確的機器對照才能重新設計你的感測器公式,本文末已有更新,若真的需要做懸浮微粒相關感測,建議改用雷射技術的感測器取代之。

刪除回覆回覆回覆Unknown2016年11月23日凌晨3:10不好意思請問最後為什麼是負的??RawSignalValue(0-1023):86.00-Voltage:0.42-DustDensity:-28.61ug/m3我們有測試過感應孔伸東西進去值是有反應不知道問題出在哪....麻煩老師解答^^回覆刪除回覆拉夫多西2016年11月23日清晨5:25這代表你的GP2Y感測器預設電阻值與當初設計標準公式的那台GP2Y不同,這代表你就需要先有一台精確的機器對照才能重新設計你的感測器公式,本文末已有更新,若真的需要做懸浮微粒相關感測,建議改用雷射技術的感測器取代之。

刪除回覆回覆Unknown2016年11月23日晚上8:47好的,感謝老師的解答!!刪除回覆回覆回覆Unknown2017年9月12日凌晨4:27你好!我的資料出來的時候也常是負值RawSignalValue(0-1023):26.00-Voltage:0.13-DustDensity:-78.42ug/m3我也看過上面老師您回復有關此問題的答案說是有關電壓過低的問題那是否可以藉更改公式來解決問題?抑或是必須要改成雷射技術的感測器呢?因為目前有經費問題所以才想說想是否可以不要更改感測器麻煩老師了!>



請為這篇文章評分?