小小云提示:教程作者caterpillar是來自臺(tái)灣的programmer,所以在一些專有名詞的使用上會(huì)和我們這邊使用的不太一樣啦,不過作者也有標(biāo)注出英文名稱,大家自行轉(zhuǎn)換喲(?????????)
在〈mBlock & Arduino(14)使用人體動(dòng)作感應(yīng)器〉中談過 PIR 動(dòng)作感應(yīng)器,Makeblock 提供有 PIR 動(dòng)作感應(yīng)器模組,以及光線感應(yīng)器模組,結(jié)合這兩個(gè),你就可以輕易地作出一個(gè)小夜燈。
Me PIR 動(dòng)作感應(yīng)器
Me PIR 動(dòng)作感應(yīng)器可以偵測(cè)到周圍六公尺左右的人體移動(dòng),范圍可以借由 PIR 上方的可變電阻器來調(diào)整,這個(gè)動(dòng)作感應(yīng)器在 D3 有個(gè) LED,當(dāng)偵測(cè)到人體紅外線時(shí),LED 會(huì)亮起:

這個(gè)動(dòng)作感應(yīng)器也可以設(shè)定是否可重復(fù)觸發(fā),仔細(xì)看看感應(yīng)器上可外接的腳位,或者是 RJ25 端口旁的腳位標(biāo)示,可以發(fā)現(xiàn)有個(gè) Mode 腳位,當(dāng)你給這個(gè) Mode 腳位高電位時(shí),就是可重復(fù)觸發(fā)模式,也就是當(dāng)感測(cè)到紅外線變化,在延遲時(shí)間內(nèi)若持續(xù)感測(cè)到紅外線變化,那么“人體紅外線感應(yīng)器方塊”就會(huì)持續(xù)傳回 1,直到不再感測(cè)到紅外線變化后一段延遲時(shí)間,才會(huì)傳回 0,這通常用于判斷,人體是否有持續(xù)動(dòng)作(或太久沒動(dòng)靜)的場(chǎng)合。
不可重復(fù)觸發(fā),是當(dāng)感測(cè)到紅外線變化而“人體紅外感應(yīng)器方塊”傳回 1,無(wú)論延遲時(shí)間內(nèi)有無(wú)感測(cè)到紅外線變化,時(shí)間一到就會(huì)先傳回 0。
因此,根據(jù)你將 RJ25 連接至哪個(gè)端口,查出 Mode 腳位是對(duì)應(yīng)至哪個(gè)數(shù)位腳位,給予高或低電壓,就可以設(shè)定為可重復(fù)觸發(fā)或不可重復(fù)觸發(fā)模式。
Me 光線感應(yīng)器
Me 光線感應(yīng)器可以偵測(cè)光線強(qiáng)弱,由于是借由類比腳位得到數(shù)值,因此光線強(qiáng)弱變化值由 0 到 1023:

從上面的照片中可以看到,這個(gè)感應(yīng)器還可以偵測(cè)灰階變化,這其實(shí)是利用反射光的強(qiáng)弱來達(dá)成,為了要能偵測(cè)灰階變化,你必須點(diǎn)亮照片中標(biāo)示為 D3 的 LED,然后讓光線感應(yīng)器很接近被偵測(cè)的平面,但不是接觸該平面,由于黑色會(huì)吸收光線,因此,越黑的平面,反射光進(jìn)入光線感應(yīng)器就會(huì)越少,偵側(cè)得到數(shù)值就會(huì)越低。
偵測(cè)灰階變化的應(yīng)用,常見于循跡車,在平面上畫條黑線,車子上的光線感應(yīng)器靠近黑線的一側(cè):

如果黑線是在感應(yīng)器的右方,當(dāng)車子越往左偏離黑線,反射光會(huì)越大,在大于某個(gè)值時(shí)可使其偏右接近黑線,如果車子越偏右進(jìn)入黑線,為避免它整個(gè)往右超出黑線,可在反射光小至某個(gè)值時(shí),讓車子偏左,像這樣始終讓感應(yīng)的反射光維持在某個(gè)范圍內(nèi),保持黑線在感應(yīng)器的右方,就可讓車子延著劃下的軌道前進(jìn)。
當(dāng)然,這樣的方式只適合不交叉的黑線,如果軌道有交叉,就要使用兩個(gè)感應(yīng)器夾住黑線,如此在兩個(gè)感應(yīng)器反射光都小于某個(gè)值時(shí),就表示目前處于交叉點(diǎn)。
那么,該怎么點(diǎn)亮標(biāo)示為 D3 的 LED 呢?這個(gè) LED 是借由標(biāo)示為 DI 的腳位控制,當(dāng)高電位時(shí)就會(huì)點(diǎn)亮 LED,不過光線感應(yīng)器只能使用于連接埠 6、7、8,查看這些連接埠對(duì)應(yīng)的腳位,都是類比輸入腳位,怎么輸出高電壓?
其實(shí)類比腳位也可以用來作為擴(kuò)充的數(shù)位腳位,以 Arduino Uno 為例,A0 到 A5,也可以當(dāng)作 D14 到 D19 數(shù)位腳位來使用,因此,查看你的連接埠,就可以知道要令哪個(gè)號(hào)碼的數(shù)位腳位為高電位了,例如,若連接在連接埠 6,其腳位為 A2,那么就是設(shè)置數(shù)位腳位 15 為高電位,就可以點(diǎn)亮 LED。
如果有興趣,你也可以使用光線感應(yīng)器實(shí)作個(gè)掃瞄器喔!可以參考〈EV3 Tutorial(7)使用顏色感應(yīng)器實(shí)作掃描器〉,道理是相同的!
實(shí)作小夜燈
接下來就實(shí)作個(gè)小夜燈吧!需求是,這個(gè)小夜燈只在夠暗的時(shí)候,才會(huì)感應(yīng)是否有人接近而啟用,小夜燈的部份,我們就直接使用光線感應(yīng)器上的 LED,為了方便調(diào)節(jié)什么樣的光線明亮程度才會(huì)感應(yīng)是否有人接近,我們使用 Me 可變電阻器,并將調(diào)整好的數(shù)值顯示于七段顯示器上。
我將 PIR 動(dòng)作感應(yīng)器連至端口?3,七段顯示器連至端口?4,光線感應(yīng)器連至端口?6,而可變電阻器連至端口?7。
首先處理偵測(cè)人體移動(dòng)的部份,當(dāng)偵測(cè)到人體靠近時(shí),LED 會(huì)點(diǎn)亮:

由于光線感應(yīng)器連至端口?6,為了控制 LED 明亮,必須使用腳位 A2 充當(dāng)數(shù)位腳位 D16,你可以調(diào)整 PIR 動(dòng)作感應(yīng)器上的可變電阻,設(shè)定好你想要感應(yīng)的距離范圍。
接下來,利用程式設(shè)定 PIR 動(dòng)作感應(yīng)器為可重復(fù)觸發(fā)模式且先關(guān)閉光線應(yīng)器上的 LED:

程式會(huì)每一秒鐘將可變電阻器的輸入值,設(shè)定給七段顯示器顯示,并作為判斷光線門檻值的依據(jù),你可以測(cè)試看看小夜燈是否如預(yù)期運(yùn)作。
當(dāng)然,我們不能老是開著電腦,使用 mBlock 來控制小夜燈,以上測(cè)試沒有問題的話,可以在“Arduino mode”中,將程式上傳至板子上:

記得,上傳前要改用“Arduino 主程式”方塊,并將自訂方塊的名稱部份改成英文,上傳完畢之后,你就可以將小夜燈裝在想要的地方,將板子連接上外部電源,板子上的電源開關(guān),就是你要不要啟用小夜燈的開關(guān)了!
感謝CodeData用戶:caterpillar的貢獻(xiàn) 著作權(quán)歸作者所有
整理:寧波家電物聯(lián)網(wǎng)云平臺(tái),中科極動(dòng)云
CONTACT US: http://www.iot-jd.com/