五金店通常都會(huì)出售動(dòng)態(tài)感應(yīng)式泛光燈,您可以將這種泛光燈安裝在屋外,使其在有人穿過您的庭院時(shí)打開。其實(shí),只要使用一個(gè)廉價(jià)的運(yùn)動(dòng)傳感器,您就可以通過Arduino來構(gòu)建自己的動(dòng)態(tài)感應(yīng)燈(或其他任何動(dòng)態(tài)感應(yīng)設(shè)備)了。
運(yùn)動(dòng)傳感器的工作原理
在本項(xiàng)目中,我們將使用被動(dòng)紅外(PIR)運(yùn)動(dòng)傳感器。該傳感器通過檢測(cè)紅外線來進(jìn)行工作,類似人體以熱量形式所散發(fā)出的光。因?yàn)檫@種傳感器即使在人眼看不到的黑暗環(huán)境中也可以檢測(cè)到紅外光,所以成為了安保或安全系統(tǒng)的絕佳組件。圖片:帶有PIR的Arduino 大多數(shù)基本型PIR傳感器有三個(gè)引腳。一個(gè)接地引腳,一個(gè)電源引腳,第三個(gè)為信號(hào)引腳。當(dāng)傳感器檢測(cè)到運(yùn)動(dòng)時(shí),信號(hào)引腳返回HIGH(或1)。當(dāng)沒有檢測(cè)到運(yùn)動(dòng)時(shí),返回LOW(或0)。兩者之間不存在中間級(jí)別,例如,傳感器無法區(qū)分緩慢走過的人和快速走過的人,但是這對(duì)大多數(shù)項(xiàng)目來說已經(jīng)足夠了。 一些更高級(jí)的PIR傳感器(如 HC-SR501)具有額外的模塊,可以讓您調(diào)整傳感器的靈敏度和觸發(fā)模式。但是,我們將只使用一個(gè)簡單的PIR傳感器,以簡化項(xiàng)目內(nèi)容。
所需組件
該項(xiàng)目所需的大部分組件都可以在入門電子零件套件中找到。為了演示傳感器的工作原理,我們將使用它來控制一個(gè)簡單的LED。為了實(shí)現(xiàn)該目的,您需要以下組件:
Arduino Uno |
![]() |
一個(gè) PIR運(yùn)動(dòng)傳感器 |
![]() |
Arduino IDE |
![]() |
一個(gè)LED |
![]() |
一個(gè)電阻器 對(duì)于大部分LED來說,如果將它們直接連接到Arduino的5V輸出,將會(huì)被燒壞。因此需要在輸出引腳和LED之間放置套件中的電阻器。 |
![]() |
您還需要準(zhǔn)備一根USB電纜(如果身邊沒有的話)。 該項(xiàng)目的電路非常簡單,但是通過該過程,您將能夠?qū)W會(huì)如何在未來的任何項(xiàng)目中添加運(yùn)動(dòng)傳感器。
代碼
使用運(yùn)動(dòng)傳感器來觸發(fā)LED燈的代碼相對(duì)簡單。您需要將傳感器和LED分配給引腳,并且可以使用一個(gè)簡單的if-else循環(huán)來檢測(cè)運(yùn)動(dòng)并觸發(fā)LED。 首先,以下是完整的代碼。在設(shè)置接線之前,您可以將其添加到您的Arduino IDE并將其上傳到Arduino Uno。 int ledPIN = 8; // LED output int motionPin = 2; // PIR sensor pin int motionStatus = 0; // Motion detected status void setup() { pinMode(ledPin, OUTPUT); pinMode(motionPin, INPUT); Serial.begin(9600); } void loop(){ motionStatus = digitalRead(motionPin); if (motionStatus == HIGH) { // When motion is detected digitalWrite(ledPIN, HIGH); // turn LED ON Serial.println(“Motion detected.”); // Print motion detected message } else { digitalWrite(ledPIN, LOW); // Turn LED OFF if no motion is detected Serial.println(“All clear.”); // Print all clear message } } 現(xiàn)在,我們來分塊了解一下代碼內(nèi)容。首先是變量: int ledPIN = 8; // LED output int motionPin = 2; // PIR sensor pin int motionStatus = 0; // Motion detected status 在setup()部分之前,我們將初始化一些變量。首先,ledPIN將LED分配給引腳8。接下來,motionPin將運(yùn)動(dòng)傳感器信號(hào)連接器分配到引腳2。最后,motionStatus將存儲(chǔ)運(yùn)動(dòng)傳感器的狀態(tài)。 void setup() { pinMode(ledPin, OUTPUT); pinMode(motionPin, INPUT); Serial.begin(9600); } 這部分代碼出現(xiàn)在setup()部分中。這里的前兩行用于初始化LED和傳感器引腳,并把它們分配給OUTPUT和INPUT引腳。 最后一行用于初始化串行監(jiān)視器。我們將使用它來確認(rèn)運(yùn)動(dòng)傳感器是否在工作(即使在LED沒有工作的狀態(tài)下)。當(dāng)您對(duì)新項(xiàng)目進(jìn)行故障排除時(shí),這會(huì)很有用,因?yàn)槟苍S會(huì)使用比此處的LED更復(fù)雜的電路。 motionStatus = digitalRead(motionPin); if (motionStatus == HIGH) { // When motion is detected digitalWrite(ledPIN, HIGH); // turn LED ON Serial.println(“Motion detected.”); // Print motion detected message } else { digitalWrite(ledPIN, LOW); // Turn LED OFF if no motion is detected Serial.println(“All clear.”); // Print all clear message } 在草圖的主loop()部分內(nèi),第一行代碼用于將傳感器的狀態(tài)分配給變量motionStatus。 接下來,您將看到一個(gè)if-else循環(huán)。如果變量motionStatus為HIGH(表示檢測(cè)到運(yùn)動(dòng)),LED將會(huì)打開,并在串行監(jiān)視器中打印出“Motion detected(檢測(cè)到運(yùn)動(dòng))”。如果變量為LOW(表示沒有檢測(cè)到運(yùn)動(dòng)),那么LED將會(huì)關(guān)閉,并發(fā)送信息“All clear(全部清除)”到串行監(jiān)視器。 將草圖上傳到Arduino后,您就可以設(shè)置接線了。
接線 
設(shè)置PIR傳感器和LED的過程比較簡單。如果您有一個(gè)面包板,那么所有測(cè)試都會(huì)變得更容易。首先,我們連接PIR傳感器。 ●將傳感器上的接地引腳連接到GND。 ●將傳感器上的電源引腳連接到5V。 ●將傳感器上的信號(hào)引腳連接到數(shù)字引腳2。 接下來,我們需要設(shè)置LED。Arduino Uno帶有一個(gè)內(nèi)置LED,您可以將其用于技術(shù)測(cè)試, 就像默認(rèn)的Blink草圖那樣。但是,使用一個(gè)外部LED可以幫助您了解在未來的項(xiàng)目中如何連接其他光源或輸出設(shè)備。使用外部LED是一種比較常見的操作,所以可能您之前已經(jīng)很熟悉了,但是我們還是在這里對(duì)其進(jìn)行說明。 ●在面包板上添加一個(gè)LED。 ●使用電線將較短的 LED引腳連接到Arduino上的GND。 ●將較長的LED引腳連接到電阻器的一端。 ●用一根電線將電阻器的另一端連接到數(shù)字引腳8. 完成所有連接后,您就可以開始運(yùn)行Arduino了。嘗試在運(yùn)動(dòng)傳感器前揮手來查看LED是否亮起。如果沒有亮起,請(qǐng)查看您的串行監(jiān)視器以確認(rèn)傳感器是否工作正常。現(xiàn)在,您可以嘗試在項(xiàng)目中添加其他功能,例如控制伺服,或者添加一個(gè)繼電器來使用運(yùn)動(dòng)傳感器控制更大的光源。

評(píng)論