各位心靈手巧的Maker小伙伴們,是時候動手做一個空氣污染監測裝置了。利用一個空氣監測傳感器搭配Arduino控制器和擴展板,馬上就可以搭建出一個簡易空氣監測裝置。即使沒有那些專業的監測設備和磚家的報告,你也能科學客觀的了解你時刻呼吸的空氣質量!
硬件列表
-Sharp GP2Y10 空氣質量傳感器
- DFRduino UNO R3
- IO 傳感器擴展板 V7
-轉接板(如果沒有轉接板 可選150歐、220uF電容、面包板)
-杜邦線
步驟一:硬件連接
圖 1 完整連接圖
1、I/O擴展板插在UNO上
2、粉塵傳感器與轉接板通過杜邦線連接
3、轉接板上標有分別標有D和A的兩個接口
D → 數字口 2
A → 模擬口 0
只要輕松的插上幾根線就完成連接,是不是很方便呀?
步驟二:燒入代碼
按照教程代碼燒入DFRduino UNO R3
完成之后,得到一串的數字是不是還是很模糊呀?我們先簡單了解下粉塵傳感器,可以對應代碼一起看。
(當然,如果覺得不需要了解的話,只需直接下載代碼即可使用。)
上圖是個粉塵傳感器的內部結構圖以及硬件說明。
可以從圖中看出,在發射端,我們需要驅動一個紅外發射管,也就是引腳3。對應程序中定義的ledPower。同樣,我們也可以看出輸出是引腳5,輸出的是模擬量,對應到程序中的measurePin。
那我們如何得到我們想要的值呢?
下圖截自 datasheet,你可以看出粉塵傳感器的輸出電壓是幾乎呈線性的。dustDensity = 0.17 * calcVoltage - 0.1; 這個公式曲線近似轉換過來的(來自Chris Nafis)。這里dustDensity是粉塵密度值,單位mg/m3。calcVoltage是輸出電壓值。
我們都知道輸出0~5V電壓對應UNO模擬口讀出的是0~1023。calcVoltage = voMeasured * (5.0 / 1024.0); 這個公式就是模擬值轉為電壓值。voMeasured 模擬口輸出量。
根據datasheet,也就是上圖可看出,我們需要開啟內部的LED并等待280μs(微秒),之后再讀取輸出值。
上圖可以看出,整個脈沖持續時間為320μs。因此,我們還需再等待40μs,才能將LED關閉。
以上就是對程序以及,粉塵傳感器工作原理的簡單說明。
步驟三:沒有轉接板的情況
還有個問題,有人說如果沒有轉接板怎么辦,那就接著看上面這張圖。
看出來了嗎?我們需要在引腳1外接一個150歐的電阻,并且并聯一個220uF的電容。這也就是我們使用轉接板的原因,把這個部分在轉接板上完成了,大大方便了連線,也增加了穩定性。
下面來看下實物圖上的引腳位置,如果是需要自己外接電阻、電容的朋友們請繼續往下看。“
粉塵傳感器對應的Arduino引腳:
照著連就可以了,連接完成之后,同樣下載教程的樣例代碼。
PM2.5檢測器 代碼如下:
int measurePin = 0; // 連接模擬口0
int ledPower = 2; // 連接數字口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); //開啟內部LED
delayMicroseconds(samplingTime); // 開啟LED后的280us的等待時間
voMeasured = analogRead(measurePin); // 讀取模擬值
delayMicroseconds(deltaTime); // 40us等待時間
digitalWrite(ledPower,HIGH); // 關閉LED
delayMicroseconds(sleepTime);
// 0 - 5V mapped to 0 - 1023 integer values
// recover voltage
calcVoltage = voMeasured * (5.0 / 1024.0); //將模擬值轉換為電壓值
dustDensity = 0.17 * calcVoltage - 0.1; //將電壓值轉換為粉塵密度輸出單位
Serial.print(“Raw Signal Value (0-1023): ”);
Serial.print(voMeasured);
Serial.print(“ - Voltage: ”);
Serial.print(calcVoltage);
Serial.print(“ - Dust Density: ”);
Serial.println(dustDensity); // 輸出單位: 毫克/立方米
delay(1000);
}
-
傳感器技術
+關注
關注
51文章
345瀏覽量
98148 -
DIY
+關注
關注
176文章
888瀏覽量
349276
發布評論請先 登錄
相關推薦
評論