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