讓房間會呼吸:Arduino 感應燈 DIY(350元,一個晚上)
那天晚上,阿哲說「這燈好像活的」
不是比喻。
是真的像在呼吸。
房間暗下來的時候,燈跟著暗下去。有人走進範圍,燈就亮了。不是那種「啪一下亮了」的開關,是漸漸的,像眼睛適應黑暗。
他蹲在牆角調參數,弄了三個版本。最後那版,他把延遲從 500 毫秒改成 200 毫秒。
就這 300 毫秒的差別。
「差太多了,」他說。「這個版本才像是房間真的在注意我。」
做出來之後的生活
你改完參數的那一刻,燈的反應就變了。
這個燈會:
- 人在範圍內 → 漸亮
- 人離開 → 漸暗
- 白天光線夠 → 完全不亮(省電)
不是智慧家庭那種「 OK Google 開燈」。是那種「你走過去,它就知道了」的感覺。
材料(全部露天拍賣可買)
| 材料 | 單價 | 數量 | 小計 |
|---|---|---|---|
| Arduino Nano(兼容版) | NT$130 | 1 | NT$130 |
| HC-SR501 人體紅外線感測器 | NT$45 | 1 | NT$45 |
| 5mm 白色 LED | NT$5 | 8 | NT$40 |
| 220Ω 電阻 | NT$1 | 8 | NT$8 |
| 麵包板 | NT$40 | 1 | NT$40 |
| 杜邦線 | NT$30 | 1 | NT$30 |
| 總計 | NT$293 |
材料到貨時間:約 1-2 天。
接線(只有 5 條)
HC-SR501 → Arduino
VCC → 5V
GND → GND
OUT → D7
LED(8顆並聯)→ Arduino
長腳(陽極)→ D13( через 220Ω 電阻)
短腳(陰極)→ GND
就這樣。沒有更多東西了。
程式碼
const int PIR_PIN = 7;
const int LED_PIN = 13;
int lastState = LOW;
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int motion = digitalRead(PIR_PIN);
if (motion == HIGH && lastState == LOW) {
// 人進來了 → 漸亮
for (int b = 0; b <= 255; b += 15) {
analogWrite(LED_PIN, b);
delay(30);
}
Serial.println("Motion detected → LED ON");
}
else if (motion == LOW && lastState == HIGH) {
// 人離開了 → 漸暗
for (int b = 255; b >= 0; b -= 10) {
analogWrite(LED_PIN, b);
delay(30);
}
Serial.println("No motion → LED OFF");
}
lastState = motion;
delay(100);
}
三個參數可以調
| 參數 | 調整位置 | 效果 |
|---|---|---|
| 延遲感(Delay) | HC-SR501 背面旋鈕 | 左=快(靈敏),右=慢(遲鈍) |
| 亮的速度 | 程式 b += 15
|
數字越大,亮得越快 |
| 暗的速度 | 程式 b -= 10
|
數字越大,暗得越快 |
先試工廠預設值。如果覺得太遲鈍,把左邊旋鈕往左轉一點。
從這裡開始
- 露天拍賣搜尋「Arduino Nano HC-SR501」
- 今天下單
- Arduino IDE(免費,中文介面)
- 複製上面的程式碼
- 燒進去,試試看
燈會呼吸的那一刻,你就知道這個房間聽得懂你。
Top comments (0)