หน้าเว็บตัวอย่างโครงงาน IoT สำหรับนักศึกษา โดยใช้ LDR ตรวจวัดระดับแสงรอบข้าง แล้วควบคุมหลอด LED หรือหลอดไฟจำลองให้เปิดเมื่อแสงน้อยและปิดเมื่อแสงเพียงพอ พร้อมเพิ่มโหมด Manual/Auto และแสดงผลผ่าน Dashboard
โครงงานนี้พัฒนาระบบตรวจวัดระดับแสงรอบข้างด้วย LDR แล้วนำค่าที่ได้ไปประมวลผลบน Arduino หรือ ESP32 เพื่อควบคุมหลอด LED หรือหลอดไฟจำลองให้เปิด–ปิดโดยอัตโนมัติ เมื่อแสงสว่างต่ำกว่าค่า Threshold ระบบจะเปิดไฟ และเมื่อแสงเพียงพอจะปิดไฟ พร้อมรองรับโหมด Manual/Auto และสามารถแสดงค่าความสว่าง สถานะไฟ และโหมดการทำงานผ่าน Dashboard ได้
ภาพด้านล่างแสดงลำดับการทำงานของระบบเปิด–ปิดไฟอัตโนมัติตามแสง ตั้งแต่การตรวจวัดแสงด้วย LDR การประมวลผล การเปรียบเทียบค่า Threshold การควบคุมไฟ และการแสดงผลบน Dashboard
ภาพนี้แสดงแนวคิดการออกแบบกล่องต้นแบบสำหรับระบบเปิด–ปิดไฟอัตโนมัติตามแสง โดยรวมช่องรับแสงสำหรับ LDR, หน้าจอ OLED, ไฟ LED แสดงสถานะ, Buzzer, บอร์ด ESP32/NodeMCU, โมดูลรีเลย์ และพอร์ตต่อหลอดไฟหรือรีเลย์โหลด เพื่อให้นักศึกษานำไปใช้เป็นแนวทางพัฒนา Prototype ที่เป็นระเบียบและสาธิตการทำงานได้จริง
ใช้ LDR Sensor ติดตั้งบริเวณช่องรับแสงด้านหน้ากล่อง เพื่ออ่านระดับแสงรอบข้างแบบ Real-time และส่งค่าเข้าสู่บอร์ดควบคุมสำหรับเปรียบเทียบกับค่า Threshold
แสดงค่าความสว่าง สถานะไฟ และโหมด AUTO/MANUAL บน OLED พร้อมไฟ LED สีแดง/เหลือง/เขียว และ Buzzer สำหรับแจ้งเตือนเมื่อค่าแสงผิดปกติหรือเปลี่ยนสถานะ
ESP32/NodeMCU ควบคุม LED หรือ Relay Module เพื่อเปิด–ปิดหลอดไฟตามระดับแสง พร้อมเชื่อมต่อ Wi‑Fi เพื่อส่งข้อมูลขึ้น Dashboard และปรับค่า Threshold ผ่าน Web/Mobile ได้
ในหลายพื้นที่มีการเปิดไฟทิ้งไว้แม้มีแสงสว่างเพียงพอ หรือปิดไฟไม่ทันเมื่อพื้นที่มืดลง ทำให้สิ้นเปลืองพลังงานและไม่สะดวกต่อการใช้งาน ระบบนี้จึงใช้ LDR ตรวจวัดระดับแสงและควบคุมไฟแบบอัตโนมัติ เพื่อเพิ่มความสะดวก ลดการใช้พลังงาน และใช้เป็นต้นแบบ Smart Lighting ขนาดเล็กได้
สิ้นเปลืองพลังงานเมื่อไม่มีการควบคุมตามสภาพแสงจริง
ช่วงเช้า กลางวัน เย็น หรือฝนตกทำให้ระดับแสงแตกต่างกัน
ควรมีทั้งโหมด Auto และ Manual เพื่อให้ผู้ใช้เลือกตามสถานการณ์
อ่านค่าระดับแสงด้วย LDR และแปลงเป็นค่าที่เข้าใจง่าย เช่น เปอร์เซ็นต์หรือ Lux จำลอง
สั่งเปิดไฟเมื่อแสงน้อยและปิดไฟเมื่อแสงเพียงพอตามค่า Threshold
ให้ผู้ใช้เลือกควบคุมไฟเองหรือปล่อยให้ระบบตัดสินใจอัตโนมัติ
แสดงค่าความสว่าง สถานะไฟ โหมดการทำงาน และประวัติย้อนหลัง
| อุปกรณ์ | หน้าที่ | หมายเหตุ |
|---|---|---|
| LDR Sensor | ตรวจวัดระดับแสงรอบข้าง | ใช้ร่วมกับตัวต้านทาน 10kΩ ทำวงจรแบ่งแรงดัน |
| Arduino UNO / ESP32 | อ่านค่า Analog และตัดสินใจควบคุมไฟ | ESP32 เหมาะเมื่อต้องการ Wi‑Fi Dashboard |
| LED / Lamp Module | แสดงผลการเปิด–ปิดไฟ | ใช้ LED สำหรับจำลอง หรือ Relay สำหรับควบคุมหลอดไฟ |
| Relay Module | สวิตช์ควบคุมโหลดไฟฟ้า | ใช้เมื่อควบคุมหลอดไฟจริงหรือโหลดกำลังสูง |
| OLED/LCD Display | แสดงค่าความสว่างและสถานะไฟ | เป็นอุปกรณ์เสริมเพื่อให้ Prototype ดูสมบูรณ์ขึ้น |
| Blynk / ThingSpeak / Web Dashboard | แสดงข้อมูลและควบคุมผ่านเครือข่าย | เหมาะสำหรับทีมที่ใช้ ESP32 |
LDR อ่านระดับแสงรอบข้าง
Arduino/ESP32 ประมวลผลและเทียบค่า
LED/Relay เปิด–ปิดไฟตามเงื่อนไข
แสดงค่าแสง สถานะไฟ และโหมด
| อุปกรณ์ | ขาอุปกรณ์ | ต่อกับ Arduino/ESP32 | คำอธิบาย |
|---|---|---|---|
| LDR + Resistor | จุดแบ่งแรงดัน | A0 / GPIO34 | อ่านค่า Analog ของระดับแสง |
| LDR | ขาหนึ่ง | 5V หรือ 3.3V | จ่ายแรงดันให้วงจร LDR |
| Resistor 10kΩ | ขาหนึ่ง | GND | สร้างวงจร Voltage Divider |
| LED | ขา Anode | D13 / GPIO23 ผ่าน R 220Ω | ไฟแสดงสถานะหรือไฟจำลอง |
| Relay Module | IN | D7 / GPIO26 | ควบคุมหลอดไฟจริงหรือโหลดภายนอก |
| OLED I2C | SDA/SCL | A4/A5 หรือ GPIO21/22 | แสดงค่าแสงและสถานะ |
ระบบอ่านค่า Analog จาก LDR ทุกช่วงเวลาที่กำหนด เช่น ทุก 1–3 วินาที
แปลงค่าเป็นเปอร์เซ็นต์หรือระดับแสง และอาจใช้ค่าเฉลี่ยเพื่อลดการแกว่งของข้อมูล
ถ้าเป็นโหมด Manual ให้ผู้ใช้สั่งเปิด–ปิดเอง ถ้าเป็น Auto ให้ระบบตัดสินใจตาม Threshold
เมื่อแสงต่ำกว่าเกณฑ์ให้เปิดไฟ และเมื่อแสงสูงกว่าเกณฑ์ให้ปิดไฟ โดยอาจใช้ hysteresis กันไฟกระพริบถี่
ส่งค่าแสง สถานะไฟ และโหมดการทำงานไปยัง Dashboard หรือแสดงบน OLED/LCD
int ldrPin = A0;
int ledPin = 13;
int threshold = 500; // ปรับตามสภาพแสงจริง
bool autoMode = true; // true = Auto, false = Manual
bool manualLight = false;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int ldrValue = analogRead(ldrPin);
Serial.print("LDR Value: ");
Serial.println(ldrValue);
if (autoMode) {
if (ldrValue < threshold) {
digitalWrite(ledPin, HIGH); // แสงน้อย → เปิดไฟ
} else {
digitalWrite(ledPin, LOW); // แสงพอ → ปิดไฟ
}
} else {
digitalWrite(ledPin, manualLight ? HIGH : LOW);
}
delay(1000);
}Dashboard ควรแสดงข้อมูลที่จำเป็นต่อการควบคุมไฟ เช่น ค่าความสว่าง สถานะไฟ โหมดการทำงาน ค่า Threshold และปุ่มสั่งงาน Manual
| กรณีทดสอบ | วิธีทดสอบ | ผลที่คาดหวัง |
|---|---|---|
| แสงน้อย | ใช้มือบัง LDR หรือทดสอบในที่มืด | ไฟเปิดอัตโนมัติ |
| แสงเพียงพอ | ใช้ไฟฉายหรือวางในที่สว่าง | ไฟปิดอัตโนมัติ |
| เปลี่ยน Threshold | ปรับค่าเกณฑ์ในโค้ดหรือ Dashboard | จุดเปิด–ปิดไฟเปลี่ยนตามค่าใหม่ |
| Manual Mode | สลับโหมดและกดเปิด–ปิดเอง | ระบบทำตามคำสั่งผู้ใช้โดยไม่อิง LDR |
| Dashboard | ดูค่าผ่านมือถือหรือเว็บ | ข้อมูลแสดงถูกต้องและอัปเดตต่อเนื่อง |
แบ่งงานเป็นรอบสั้น ๆ เพื่อให้ทีมตรวจความคืบหน้าได้ต่อเนื่องและลดความเสี่ยงตอนรวมระบบ
| ช่วงเวลา | กิจกรรม | ผลลัพธ์ที่ต้องได้ |
|---|---|---|
| สัปดาห์ที่ 1 | วิเคราะห์ปัญหา กำหนด Requirement และออกแบบผังระบบ | เอกสาร Requirement, รายการอุปกรณ์, Block Diagram |
| สัปดาห์ที่ 2 | ต่อวงจร อ่านค่าเซ็นเซอร์ และคาลิเบรตค่าสภาพแสงแห้ง/สภาพแสงชื้น | ค่าทดสอบ Sensor และตาราง Calibration |
| สัปดาห์ที่ 3 | เขียนโปรแกรมควบคุม Relay/LED / Lamp และทดสอบเงื่อนไขอัตโนมัติ | Firmware ที่เปิด–ปิดปั๊มตาม Threshold ได้ |
| สัปดาห์ที่ 4 | เชื่อมต่อ Dashboard และบันทึกข้อมูลย้อนหลัง | Dashboard แสดงค่าและ Log ได้ |
| สัปดาห์ที่ 5 | ทดสอบรวมระบบ ปรับปรุงกล่อง/สายไฟ และเตรียมนำเสนอ | Prototype พร้อมวิดีโอ รายงาน และสไลด์ |
นักศึกษาควรส่งทั้งชิ้นงาน Prototype ไฟล์โค้ด วิดีโอสาธิต และรายงานสรุปผลการทดสอบ เพื่อแสดงให้เห็นว่าระบบทำงานได้จริง
เพิ่ม Ultrasonic Sensor หรือ Float Switch เพื่อแจ้งเตือนเมื่อน้ำใกล้หมด
เชื่อมต่อ API สภาพอากาศ เพื่อลดการเปิด–ปิดไฟเมื่อมีฝนหรือแสงสูง
ส่ง Notification เมื่อสภาพแสงแห้งมาก ปั๊มทำงาน หรือถังน้ำหมด
ทำกราฟรายวันและสรุปจำนวนครั้ง/ปริมาณเวลาในการเปิด–ปิดไฟ
ใช้หน้านี้เป็นแนวทางสำหรับวางแผนโครงงาน เขียนรายงาน ทำสไลด์ และสาธิตผลงานปลายภาคในรายวิชา IoT