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