ผู้เริ่มต้น
สร้างไฟส่องโต๊ะทำงานแบบตรวจจับการเคลื่อนไหว
เซ็นเซอร์ระบบอัตโนมัติจอแสดงผล
ใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหวและตัวควบคุมเพื่อเปิดปิดไฟแรงดันต่ำโดยอัตโนมัติ โดยจะแนะนำอินพุตดิจิทัล การจับเวลา และตรรกะระบบอัตโนมัติแบบง่ายๆ
รวมชิ้นส่วนจริง 7 รายการ
ราคารวมชุดนี้: 1,640.00 ฿
ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน
สิ่งที่คุณต้องใช้
เป้าหมายของโครงการ
โครงการนี้นำเสนอหลักการทำงานอัตโนมัติโดยใช้การกระทำทางกายภาพที่ง่ายที่สุดเท่าที่จะเป็นไปได้: ไฟที่จะเปิดเมื่อตรวจพบการเคลื่อนไหวและปิดอีกครั้งในเวลาอันสั้น โครงการนี้เป็นโครงการที่สองที่เหมาะสมหลังจากสร้างอุปกรณ์ที่อ่านค่าเซ็นเซอร์ เนื่องจากมีการเพิ่มอินพุตดิจิทัลและการตัดสินใจ (ตอนนี้ควรเปิดไฟหรือไม่?) แทนที่จะแสดงเพียงแค่ค่าเท่านั้น
การตรวจจับการเคลื่อนไหว
เซ็นเซอร์ตรวจจับการเคลื่อนไหวทั่วไปสำหรับโครงการประเภทนี้จะตรวจจับการเปลี่ยนแปลงของรังสีอินฟราเรดในขอบเขตการมองเห็นและส่งสัญญาณดิจิทัลแบบง่ายๆ -- สูงเมื่อตรวจพบการเคลื่อนไหว ต่ำเมื่อไม่มีการเคลื่อนไหว ไม่มีข้อมูลที่ซับซ้อนให้ตีความ ซึ่งทำให้เป็นเซ็นเซอร์เริ่มต้นที่ดีสำหรับการเรียนรู้อินพุตดิจิทัลโดยเฉพาะ
พื้นฐานอินพุตดิจิทัล
ต่างจากเซ็นเซอร์อนาล็อก อินพุตดิจิทัลจะรายงานเพียงสถานะใดสถานะหนึ่งจากสองสถานะเสมอ ตัวควบคุมของคุณจะอ่านพินนั้นในแต่ละรอบและตรวจสอบง่ายๆ ว่า: ตอนนี้เป็นสถานะสูงหรือต่ำ? การตัดสินใจทุกอย่างในโครงการนี้สร้างขึ้นจากการตรวจสอบเพียงครั้งเดียวนั้น
การสลับแรงดันต่ำอย่างปลอดภัย
โครงการนี้ตั้งใจที่จะใช้กับระบบไฟส่องสว่างแรงดันต่ำเท่านั้น -- ไฟที่จ่ายไฟในลักษณะเดียวกับตัวควบคุมของคุณ โดยสลับผ่านวงจรขับหรือทรานซิสเตอร์ที่มีพิกัดแรงดันต่ำที่เหมาะสมกับไฟเฉพาะนั้น อย่าพยายามปรับโครงการนี้เพื่อสลับไฟส่องสว่างในบ้านที่ใช้แรงดันไฟหลัก เนื่องจากต้องใช้อุปกรณ์ที่แตกต่างกัน ความรู้ด้านความปลอดภัยที่แตกต่างกัน และอยู่นอกเหนือขอบเขตของคู่มือนี้ทั้งหมด
ตรรกะการจับเวลา
แทนที่จะปิดไฟทันทีที่ตรวจไม่พบการเคลื่อนไหว เวอร์ชันที่ใช้งานได้จริงจะเปิดไฟทิ้งไว้เป็นระยะเวลาสั้นๆ ที่กำหนดหลังจากตรวจพบการเคลื่อนไหวครั้งล่าสุด โดยจะรีเฟรชตัวจับเวลานั้นทุกครั้งที่ตรวจพบการเคลื่อนไหวใหม่ นี่คือสิ่งที่ทำให้ไฟรู้สึกเหมือนกำลังเปิดอยู่สำหรับคนที่เคลื่อนไหวไปมา แทนที่จะกะพริบปิดทันทีที่พวกเขาหยุดนิ่งชั่วขณะ
การหลีกเลี่ยงการกระตุ้นซ้ำๆ
หากไม่มีตรรกะการจับเวลาเลย เซ็นเซอร์ตรวจจับการเคลื่อนไหวที่ทำงานอย่างรวดเร็วสามารถทำให้ไฟกะพริบเปิดและปิดหลายครั้งต่อวินาที หน้าต่างเปิดค้างแบบตั้งเวลาที่อธิบายข้างต้นเป็นวิธีแก้ไขที่ง่ายที่สุด และคุ้มค่าที่จะนำไปใช้ก่อนที่จะทำสิ่งที่ซับซ้อนกว่านี้
การแก้ไขข้อบกพร่องเบื้องต้น
- ไฟไม่เคยเปิด -- ยืนยันสถานะพินเอาต์พุตของเซ็นเซอร์โดยตรง (การอ่านค่าอย่างง่าย ก่อนเพิ่มตรรกะไฟใดๆ) เพื่อแยกแยะว่าเซ็นเซอร์หรือด้านการสลับไฟเป็นสาเหตุ
- ไฟเปิดค้างตลอดเวลา -- ตรวจสอบว่าเซ็นเซอร์ของคุณมีการปรับความไว/หน่วงเวลาภายในตัวที่อาจรบกวนตรรกะการจับเวลาของคุณเองหรือไม่
- ไฟกะพริบอย่างรวดเร็ว -- นี่คือปัญหาการกระตุ้นซ้ำๆ ข้างต้น; เพิ่มหรือขยายตัวจับเวลาเปิดค้าง
การอัปเกรดเสริม: ความสว่างของแสงโดยรอบ
เมื่อการสลับการเคลื่อนไหวพื้นฐานทำงานได้อย่างน่าเชื่อถือ การขยายที่เป็นธรรมชาติคือการเพิ่มเซ็นเซอร์ระดับแสงอย่างง่าย เพื่อให้ไฟทำงานเมื่อห้องมืดจริงเท่านั้น -- หลีกเลี่ยงการกระตุ้นที่ไม่จำเป็นในเวลากลางวัน
การเดินสายไฟ
- โมดูล PIR VCC → ESP32-C3 SuperMini 5V (VBUS) — โมดูล PIR ส่วนใหญ่ต้องการ 5V; ตรวจสอบช่วงพิกัดของโมดูลเฉพาะของคุณ
- โมดูล PIR GND → ESP32-C3 SuperMini GND
- โมดูล PIR OUT → ESP32-C3 SuperMini GPIO4 — อินพุตดิจิทัล, เป็น HIGH เมื่อมีการเคลื่อนไหว
- แหล่งจ่ายไฟ DC ภายนอก (เช่น 9–12V) → LM2596 IN+ / IN− (ข้ามส่วนนี้หากจ่ายไฟทุกอย่างจาก 5V อยู่แล้ว — ดูหมายเหตุ)
- LM2596 OUT+ → WS2812B strip 5V input
- LM2596 OUT− → WS2812B strip GND, ต่อเข้ากับ ESP32-C3 GND (กราวด์ร่วมกันสำหรับแหล่งจ่ายไฟทั้งหมด)
- WS2812B DIN → ESP32-C3 SuperMini GPIO5, ผ่านตัวต้านทานอนุกรม ~330–470Ω — ลดการสะท้อน/ป้องกัน LED ตัวแรก
- (ตัวเลือก) ตัวเก็บประจุอิเล็กโทรไลต์ขนาดใหญ่ (≥100–1000µF) ต่อคร่อม strip 5V/GND ที่ปลาย strip — ดูดซับกระแสไฟกระชากขณะเปิดเครื่องของ strip
ก่อนเชื่อมต่อแถบ LED ให้จ่ายไฟให้ LM2596 เพียงอย่างเดียวและปรับโพเทนชิออมิเตอร์บนบอร์ดในขณะที่วัดเอาต์พุตด้วยมัลติมิเตอร์จนกว่าจะได้ค่า 5.0V ที่สะอาดตา — การจ่ายแรงดันไฟฟ้าที่สูงขึ้นโดยไม่ได้ปรับให้กับแถบ LED จะทำให้แถบ LED เสียหายได้ ระวังงบประมาณกระแสไฟ: LED WS2812B จำนวน 30 ดวงที่สีขาวเต็มรูปแบบสามารถดึงกระแสไฟได้ถึง ~1.8A ซึ่งเกินกว่าที่พิน 5V/USB ของ ESP32-C3 จะจ่ายได้อย่างปลอดภัย ดังนั้นให้ใช้ LM2596 (หรือแหล่งจ่ายไฟ 5V ภายนอก) สำหรับแถบ LED และอย่าจ่ายไฟให้แถบ LED จากตัวควบคุมของ SuperMini สัญญาณข้อมูล 3.3V ของ ESP32 ที่ขับ WS2812B ลอจิก 5V ทำงานได้อย่างน่าเชื่อถือบนแถบสั้นๆ ในการสร้างส่วนใหญ่; หากคุณเห็นการกะพริบหรือสีผิดพลาดบนพิกเซลแรก ให้เพิ่ม 74HCT125/ตัวแปลงระดับระหว่าง GPIO5 และ DIN
แผนภาพการต่อสาย
โค้ดเริ่มต้น
#include <Adafruit_NeoPixel.h>
#define PIR_PIN 4
#define LED_DATA_PIN 5
#define NUM_LEDS 30
// How long to keep the light on after the last motion pulse
const unsigned long HOLD_TIME_MS = 30000;
Adafruit_NeoPixel strip(NUM_LEDS, LED_DATA_PIN, NEO_GRB + NEO_KHZ800);
bool lightsOn = false;
unsigned long lastMotionTime = 0;
void setLights(bool on) {
uint32_t color = on ? strip.Color(255, 214, 170) : strip.Color(0, 0, 0); // warm white / off
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, color);
}
strip.show();
lightsOn = on;
}
void setup() {
Serial.begin(115200);
pinMode(PIR_PIN, INPUT);
strip.begin();
strip.setBrightness(180);
setLights(false);
// Many PIR modules need 30-60s to calibrate ambient IR after power-up
Serial.println("Warming up PIR...");
delay(30000);
Serial.println("Ready.");
}
void loop() {
if (digitalRead(PIR_PIN) == HIGH) {
lastMotionTime = millis();
if (!lightsOn) {
Serial.println("Motion detected — lights on");
setLights(true);
}
}
if (lightsOn && (millis() - lastMotionTime > HOLD_TIME_MS)) {
Serial.println("Timeout — lights off");
setLights(false);
}
}
ไม่แน่ใจขั้นตอนไหน?
ถามเรา