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