Arduino代碼同影片,用於HC-SR501動作感應器
喺呢個教學入面,我哋會探討HC-SR501動作感應器,佢係透過紅外線技術嚟偵測動作。感應器可以觸發輸出,令你可以根據動作偵測嚟控制LED或者警報等裝置。完成呢個教學之後,你就會清楚明白點樣接線感應器同埋實作Arduino程式碼令佢有效運作。(喺影片00:45)

硬件解說
HC-SR501動作感應器係一個細小模組,尺寸係32乘24毫米,可以喺5至20伏特嘅電壓範圍內運作。佢嘅核心係LHI 778紅外線感應器,透過感應紅外線輻射嘅變化嚟偵測動作。咁令到佢適合各種應用,包括保安系統同機械人項目。
呢個模組有三個主要針腳:VCC用嚟供電,GND用嚟接地,同埋OUT用嚟輸出訊號。當偵測到動作嘅時候,OUT針腳會送出高電平訊號(3.3伏特TTL),可以用嚟觸發警報或者其他裝置。感應器仲有可調較嘅靈敏度同時間延遲設定,令你可以根據自己嘅特定需要嚟自訂操作。
數據表詳情
| 製造商 | HC-SR501 |
|---|---|
| 零件編號 | HC-SR501 |
| 邏輯/IO電壓 | 3.3 V |
| 供電電壓 | 5–20 V |
| 輸出電流(每通道) | ≤ 20 mA |
| 峰值電流(每通道) | ≤ 50 mA |
| PWM頻率指引 | 唔適用 |
| 輸入邏輯閾值 | 0.8 V(LOW),2.0 V(HIGH) |
| 電壓降 / RDS(on) / 飽和 | 0.1 V |
| 熱限制 | 0°C至70°C |
| 封裝 | 模組 |
| 備註 / 變體 | 可調較靈敏度同時間延遲 |
- 確保供電電壓正確(5-20 V)。
- 同LED串聯電阻嚟限制電流。
- 調整靈敏度電位器嚟設定偵測範圍。
- 設定時間延遲嚟控制輸出保持高電平嘅時間。
- 留意浮空輸入;需要時使用上拉或下拉電阻。
接線指示

要接線HC-SR501動作感應器,首先將VCC針腳連接到Arduino嘅5V輸出。跟住將GND針腳連接到Arduino嘅接地(GND)。OUT針腳應該連接到Arduino嘅數碼針腳2,用嚟讀取動作偵測訊號。
如果你用LED嚟做視覺反饋,將LED嘅陽極(長針腳)連接到Arduino嘅數碼針腳8。陰極(短針腳)應該連接到一個680歐姆電阻嘅一端,而電阻嘅另一端接地。呢個設定令Arduino可以根據動作偵測嚟控制LED。
程式碼範例同講解
呢個設定嘅Arduino程式碼初始化序列監視器,並配置輸入同輸出針腳。程式碼入面嘅主要識別符包括motion,用嚟儲存動作感應器嘅狀態,以及用嚟讀取輸入同控制LED嘅數碼針腳。
void setup() {
Serial.begin(9600);// 設定序列監視器嚟顯示資訊
pinMode(2, INPUT);// 感應器輸入
pinMode(8, OUTPUT);// 輸出到警報或LED
}
喺呢段節錄入面,setup()函數初始化序列通訊,並設定感應器同LED嘅針腳模式。針腳2設定為輸入嚟讀取動作感應器嘅輸出,而針腳8設定為輸出嚟控制LED。
void loop() {
int motion = digitalRead(2);
if(motion){
Serial.println("偵測到動作");
digitalWrite(8, HIGH);
}else{
Serial.println("===冇嘢移動");
digitalWrite(8, LOW);
}
delay(500);
}
呢段程式碼係主迴圈,程式會持續檢查動作感應器嘅狀態。如果偵測到動作,就會喺序列監視器印出「偵測到動作」並開啟LED。如果冇偵測到動作,就會印出「===冇嘢移動」並關閉LED。
示範 / 預期效果
當設定完成並將程式碼上傳到Arduino之後,你應該會見到當HC-SR501感應器偵測到動作嘅時候LED會著燈。另外,序列監視器會顯示訊息話你知係咪偵測到動作。如果你調整感應器上面嘅靈敏度同時間延遲設定,你可能會注意到感應器對動作嘅反應速度有變化(喺影片05:30)。
常見錯誤包括接線唔正確,例如將VCC同GND嘅連接調轉,咁可能會整壞感應器。確保感應器嘅輸出針腳正確連接到Arduino上指定嘅輸入針腳,以避免浮空輸入。
影片時間標記
- 00:00 介紹
- 00:45 硬件概覽
- 02:30 接線指示
- 04:00 程式碼解說
- 05:30 示範
/*
* This is the Arduino code for HC-SR501 Motion Sensor
* to detect motion of humans or objects using Arduino for robotic car and other applications
* Watch the video https://youtu.be/mZCJNOf69JI
*
* Written by Ahmad Shamshiri for Robojax Video
* Date: Dec 27, 2017, in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(2, INPUT);// Input from sensor
pinMode(8, OUTPUT);// OUTPUT to alarm or LED
}
void loop() {
int motion =digitalRead(2);
if(motion){
Serial.println("Motion detected");
digitalWrite(8,HIGH);
}else{
Serial.println("===nothing moves");
digitalWrite(8,LOW);
}
delay(500);
}
資源與參考資料
暫時冇資源。
文件📁
其他文件
-
HC-SR501 動作感應器 LHI778 手冊
robojax-HC-SR501-motion-LHI778-manual.pdf0.20 MB