ESP32 วัดค่าไฟแบบเรียลไทม์ พร้อมแจ้งเตือนผ่าน SMS
สร้างระบบมิเตอร์วัดพลังงานไฟฟ้าอัจฉริยะด้วย PZEM-004T
ในยุคที่ค่าไฟฟ้าสูงขึ้นเรื่อยๆ การมีระบบติดตามการใช้พลังงานแบบเรียลไทม์จึงเป็นสิ่งสำคัญ โปรเจกต์นี้จะแนะนำการสร้างมิเตอร์วัดพลังงานไฟฟ้าอัจฉริยะ (Smart Energy Meter) ด้วย ESP32 และโมดูล PZEM-004T ซึ่งสามารถวัดค่าไฟฟ้าแบบเรียลไทม์ รวมถึงแรงดันไฟฟ้า กระแสไฟฟ้า กำลังไฟฟ้า และพลังงานที่ใช้ไป พร้อมส่งข้อมูลขึ้น Cloud และส่งการแจ้งเตือนผ่าน SMS เมื่อการใช้ไฟเกินกำหนด ระบบนี้ช่วยให้คุณสามารถตรวจสอบและควบคุมการใช้ไฟฟ้าได้อย่างมีประสิทธิภาพ ลดค่าใช้จ่าย และป้องกันปัญหาไฟฟ้าเกินโหลด

ทำไมต้องเลือก PZEM-004T?
PZEM-004T เป็นโมดูลวัดพลังงานไฟฟ้าที่ได้รับความนิยมสูงในหมู่ Maker และ Hobbyist เนื่องจากมีราคาไม่แพง ความแม่นยำสูง และใช้งานง่าย โมดูลนี้สามารถวัดแรงดันไฟฟ้า AC 80-260V กระแสไฟฟ้าได้สูงสุด 100A (ผ่าน CT - Current Transformer) วัดกำลังไฟฟ้า (Power) ค่า Power Factor และพลังงานสะสม (Energy) ที่ใช้ไปในหน่วย kWh การสื่อสารกับ Microcontroller ใช้โปรโตคอล Modbus RTU ผ่าน Serial interface ทำให้สามารถเชื่อมต่อกับ ESP32 หรือ Arduino ได้ง่าย โมดูลมาพร้อมกับ LCD Display แสดงค่าต่างๆ ทำให้สามารถใช้งานแบบ Standalone ได้ด้วย และที่สำคัญคือมีความปลอดภัยสูงเพราะใช้ Current Transformer ในการวัดกระแส จึงไม่ต้องต่อตรงกับสายไฟฟ้าหลัก
ความสามารถในการวัดของ PZEM-004T
PZEM-004T สามารถวัดค่าพลังงานไฟฟ้าได้หลากหลายพารามิเตอร์อย่างแม่นยำ ได้แก่ แรงดันไฟฟ้า (Voltage) ในช่วง 80-260V AC ความแม่นยำ ±1% กระแสไฟฟ้า (Current) 0-100A ความแม่นยำ ±1% กำลังไฟฟ้า (Active Power) 0-22kW ค่า Power Factor (Cos φ) ซึ่งบอกประสิทธิภาพการใช้ไฟ ความถี่ไฟฟ้า (Frequency) 45-65Hz และพลังงานสะสม (Energy) ที่สามารถเก็บค่าได้ถึง 9999.99 kWh โมดูลสามารถอัพเดทข้อมูลได้เร็วถึงวินาทีละครั้ง ทำให้เหมาะสำหรับการตรวจสอบแบบเรียลไทม์ การสื่อสารผ่าน TTL Serial (5V) หรือ RS485 ทำให้สามารถต่อระยะไกลได้ถึง 1,200 เมตร และสามารถเชื่อมต่อหลายโมดูลในระบบเดียวกันได้ด้วยการตั้งค่า Modbus Address ที่แตกต่างกัน
💡 หลักการทำงานของ PZEM-004T
PZEM-004T ใช้วิธีการวัดแบบ Non-invasive ผ่าน Current Transformer (CT) ซึ่งเป็นหม้อแปลงกระแสไฟฟ้าที่คล้องรอบสายไฟเฟสเดียว โดยไม่ต้องตัดสายหรือต่อตรง CT จะตรวจจับสนามแม่เหล็กที่เกิดจากกระแสไฟฟ้าที่ไหลผ่านสาย แล้วแปลงเป็นสัญญาณไฟฟ้าขนาดเล็กส่งไปยังโมดูล PZEM ในขณะที่โมดูลหลักจะวัดแรงดันไฟฟ้าโดยตรงผ่านขั้ว Input ด้วยวงจร Voltage Divider และ Isolation Circuit เพื่อความปลอดภัย จากนั้น Microcontroller ภายในโมดูลจะคำนวณค่าต่างๆ เช่น Power = V × I × Cos φ และสะสมค่า Energy ตลอดเวลา ข้อมูลทั้งหมดสามารถอ่านออกมาผ่าน Modbus Protocol ซึ่ง ESP32 สามารถ Query ข้อมูลเหล่านี้ได้ด้วยคำสั่ง Serial
อุปกรณ์ที่ต้องใช้
สำหรับโปรเจกต์นี้คุณจะต้องเตรียมอุปกรณ์ดังนี้ บอร์ด ESP32 Development Board (หรือใช้ Arduino ก็ได้) โมดูล PZEM-004T พร้อม Current Transformer (CT 100A) สายไฟ Jumper wires สำหรับเชื่อมต่อ อะแดปเตอร์ 5V สำหรับจ่ายไฟให้ ESP32 และ PZEM Load ที่ต้องการวัด เช่น หลอดไฟ พัดลม หรือเครื่องใช้ไฟฟ้าอื่นๆ (สำหรับทดสอบ) Optional: โมดูล GSM (SIM800L หรือ SIM900) หากต้องการส่ง SMS Alert โมดูล OLED Display หากต้องการแสดงผลที่ตัวเครื่อง Box กันน้ำสำหรับติดตั้งจริง และ DIN Rail Mount หากต้องการติดตั้งในตู้ไฟ การเลือกใช้ ESP32 แทน Arduino จะได้ประโยชน์จาก Built-in WiFi และ Bluetooth สามารถส่งข้อมูลขึ้น Cloud ได้ง่าย และมี Processing Power สูงกว่า
อธิบาย Block Diagram
Block Diagram แสดงให้เห็นสถาปัตยกรรมของระบบทั้งหมด เริ่มจากแหล่งจ่ายไฟ AC 220V ที่เชื่อมต่อกับ Load ผ่าน Current Transformer (CT) ซึ่งคล้องรอบสายเฟสเดียว CT จะส่งสัญญาณกระแสไปยังโมดูล PZEM-004T ในขณะเดียวกัน PZEM ก็วัดแรงดันไฟฟ้าโดยตรงจาก AC Source ผ่านขั้ว Input โมดูล PZEM จะคำนวณค่าต่างๆ และสื่อสารกับ ESP32 ผ่าน TTL Serial (TX/RX) ESP32 ทำหน้าที่เป็น Gateway โดยอ่านข้อมูลจาก PZEM ผ่าน Modbus Protocol แล้วประมวลผล จากนั้นส่งข้อมูลไปยังหลายจุด ได้แก่ Cloud Server (ผ่าน WiFi) สำหรับเก็บข้อมูลและแสดงผลบน Dashboard, Local Display (OLED) สำหรับแสดงผลที่ตัวเครื่อง และ GSM Module (Optional) สำหรับส่ง SMS Alert เมื่อการใช้ไฟเกินกำหนด ระบบนี้ทำงานแบบ Real-time Monitoring ตลอด 24 ชั่วโมง
วงจรและการเชื่อมต่อ
การต่อวงจรทำได้ง่ายมาก เริ่มจากเชื่อมต่อ ESP32 กับ PZEM-004T ต่อ VCC ของ PZEM เข้า 5V, GND เข้า GND, TX ของ PZEM เข้า RX2 (GPIO16) ของ ESP32, RX ของ PZEM เข้า TX2 (GPIO17) ของ ESP32 สำหรับการวัดไฟฟ้า ให้ต่อ AC Source เข้าขั้ว Input ของ PZEM (L และ N) และนำสายเฟส (L) ผ่าน Current Transformer โดยสาย L ต้องเดินผ่านตรงกลางของ CT แล้วต่อไปยัง Load สายนิวทรัล (N) ต่อตรงไปยัง Load โดยไม่ผ่าน CT ปลั๊ก CT เข้ากับขั้วบน PZEM ที่มีเครื่องหมาย CT ⚠️ คำเตือน: การต่อวงจรไฟฟ้า AC 220V มีความเสี่ยงสูง ควรให้ผู้ที่มีความรู้และประสบการณ์เท่านั้นที่ทำ ตรวจสอบให้แน่ใจว่าตัดไฟก่อนทำการต่อวงจรทุกครั้ง ใช้สายไฟที่มีขนาดเหมาะสมกับกระแสที่ใช้ และติดตั้งในตู้ที่ปลอดภัย
⚠️ ข้อควรระวังด้านความปลอดภัย: อย่าสัมผัสวงจรขณะเปิดไฟ AC, ใช้ Case ฉนวนไฟฟ้า, ตรวจสอบขั้วต่อให้แน่นหนา, อย่าเกินโหลดที่ CT รองรับ (100A), และควรมี Circuit Breaker ป้องกัน
การประกอบฮาร์ดแวร์
เริ่มต้นการประกอบด้วยการเตรียม ESP32 และ PZEM-004T วางบนบอร์ดทดสอบหรือ PCB ใช้สายจัมเปอร์ต่อตาม Circuit Diagram ที่อธิบายไว้ เมื่อต่อสาย Signal เสร็จแล้ว ให้ทดสอบด้วยการจ่ายไฟ 5V ให้ ESP32 และตรวจสอบว่าไฟ LED บน PZEM ติดหรือไม่ จากนั้นอัพโหลดโค้ดทดสอบเพื่อดูว่า ESP32 สื่อสารกับ PZEM ได้หรือไม่ผ่าน Serial Monitor หลังจากนั้นจึงทำการต่อส่วน AC Power ในขั้นตอนนี้ตัดไฟทุกอย่างก่อน นำ Current Transformer คล้องรอบสายเฟส (L) เพียงสายเดียว ห้ามคล้องทั้งสายเฟสและนิวทรัล อาจทำให้การวัดไม่ถูกต้อง ต่อ AC Input เข้า PZEM ตรวจสอบขั้วต่อว่าแน่นหนาดี จากนั้นจึงเปิดไฟ AC ทดสอบการทำงานด้วย Load เล็กๆ ก่อน เช่น หลอดไฟ 60W สังเกตค่าที่วัดได้บน LCD ของ PZEM และบน Serial Monitor
คำอธิบายโค้ด
โค้ดสำหรับโปรเจกต์นี้เขียนด้วย Arduino IDE โดยใช้ Library PZEM004Tv30 สำหรับสื่อสารกับโมดูล PZEM ผ่าน Modbus โค้ดเริ่มต้นด้วยการกำหนด Serial Port ที่ใช้สื่อสาร (Serial2 สำหรับ ESP32) และสร้าง Object ของ PZEM ในฟังก์ชัน setup() จะทำการเชื่อมต่อ WiFi และเริ่มต้นการสื่อสารกับ PZEM ใน loop() จะอ่านค่าต่างๆ จาก PZEM เช่น Voltage = pzem.voltage(), Current = pzem.current(), Power = pzem.power(), Energy = pzem.energy(), Frequency = pzem.frequency(), Power Factor = pzem.pf() จากนั้นส่งข้อมูลขึ้น Cloud ผ่าน HTTP POST หรือ MQTT Protocol และตรวจสอบเงื่อนไข Alert เช่น ถ้า Power > 2000W ให้ส่ง SMS เตือน การส่ง SMS ทำได้ผ่าน GSM Module หรือใช้บริการ Cloud SMS API เช่น Twilio โค้ดมีการจัดการ Error Handling กรณีที่อ่านค่าจาก PZEM ไม่ได้ และมีการ Retry เพื่อความเสถียร ทั้งหมดนี้ทำงานใน Real-time Loop ที่อัพเดททุกๆ 1-5 วินาที
📱 ตัวอย่าง Dashboard และ Interface
ข้อมูลจาก ESP32 สามารถแสดงผลได้หลายรูปแบบ เช่น Blynk App สำหรับมือถือที่แสดง Gauge แบบเรียลไทม์, Grafana Dashboard สำหรับแสดงกราฟแบบละเอียด, Home Assistant Integration สำหรับควบคุมร่วมกับอุปกรณ์ Smart Home อื่นๆ, หรือสร้าง Web Dashboard เองด้วย HTML/JavaScript โดยใช้ ESP32 เป็น Web Server ข้อมูลสามารถเก็บใน InfluxDB หรือ MySQL สำหรับวิเคราะห์การใช้ไฟย้อนหลัง คำนวณค่าใช้จ่ายต่อเดือน และสร้างรายงาน
การทำงานจริง (Demo)
เมื่อระบบทำงานจริง คุณจะเห็นข้อมูลแบบเรียลไทม์บน Dashboard แสดงค่าแรงดันไฟฟ้า (Voltage) ประมาณ 220V, กระแสไฟฟ้า (Current) ขึ้นอยู่กับ Load ที่ใช้, กำลังไฟฟ้า (Power) ในหน่วย Watts, ค่า Power Factor ซึ่งควรอยู่ใกล้ 1.0 สำหรับ Load แบบ Resistive, และพลังงานสะสม (Energy) ที่เพิ่มขึ้นเรื่อยๆ ตามการใช้งาน ระบบจะส่งข้อมูลขึ้น Cloud ทุกๆ 5 วินาที และเมื่อการใช้ไฟเกินค่าที่กำหนด (เช่น เกิน 2,000W) ระบบจะส่ง SMS Alert ไปยังมือถือที่ตั้งค่าไว้ทันที ข้อความจะบอกรายละเอียด เช่น "Warning: Power consumption is 2,500W (Exceeded threshold)" คุณสามารถดูประวัติการใช้ไฟย้อนหลังได้จากกราฟบน Dashboard และคำนวณค่าไฟโดยเอาพลังงานสะสม (kWh) คูณกับอัตราค่าไฟต่อหน่วย
🌐 แอปพลิเคชันและการใช้งานจริง
- ติดตามการใช้ไฟฟ้าในบ้านหรือออฟฟิศแบบเรียลไทม์
- ตรวจสอบประสิทธิภาพของเครื่องปรับอากาศ ตู้เย็น หรืออุปกรณ์ที่กินไฟมาก
- แจ้งเตือนเมื่อมีการใช้ไฟผิดปกติ (อาจบ่งบอกถึงอุปกรณ์ชำรุด)
- วิเคราะห์รูปแบบการใช้ไฟเพื่อลดค่าใช้จ่าย
- ใช้ในโรงงานเพื่อตรวจสอบการใช้ไฟของเครื่องจักร
- สร้างระบบ Prepaid Energy Meter ที่ตัดไฟอัตโนมัติเมื่อเครดิตหมด
- Integration กับระบบ Solar Monitoring เพื่อดู Net Energy
💡 เคล็ดลับ: ควร Calibrate โมดูล PZEM ด้วยมิเตอร์มาตรฐานเพื่อความแม่นยำสูงสุด และตรวจสอบ CT ว่าติดตั้งถูกทิศทาง (มีลูกศรบน CT บอกทิศทางกระแส) มิฉะนั้นอาจอ่านค่าไม่ถูกต้อง
🔧 Troubleshooting (แก้ปัญหาที่พบบ่อย)
- ปัญหา: ESP32 อ่านค่าจาก PZEM ไม่ได้ → ตรวจสอบการต่อ TX/RX ว่าสลับกันถูกต้อง และตรวจสอบ Baud rate ต้องเป็น 9600
- ปัญหา: ค่า Current แสดง 0 แม้มี Load → ตรวจสอบ CT ว่าคล้องสายเฟสเพียงสายเดียว และทิศทางถูกต้อง
- ปัญหา: ค่า Voltage แสดง 0 → ตรวจสอบการต่อ AC Input ที่ PZEM และตรวจสอบ Fuse บนโมดูล
- ปัญหา: ค่า Power Factor ผิดปกติ → อาจเป็น Load แบบ Inductive (มอเตอร์) ซึ่งมี PF ต่ำกว่า 1 เป็นปกติ
- ปัญหา: ESP32 Reset บ่อย → อาจเป็น Power Supply ไม่เพียงพอ ใช้ Adapter 5V/2A ขึ้นไป
- ปัญหา: ค่า Energy ไม่สะสม → ต้อง Power PZEM ตลอดเวลา ไม่งั้นข้อมูลจะ Reset
สรุป: สร้างระบบมิเตอร์อัจฉริยะของคุณเอง
โปรเจกต์ Smart Energy Meter นี้แสดงให้เห็นถึงความสามารถของ ESP32 และ PZEM-004T ในการสร้างระบบตรวจสอบพลังงานไฟฟ้าที่มีประสิทธิภาพด้วยต้นทุนต่ำ ระบบนี้ไม่เพียงแค่วัดค่าไฟฟ้า แต่ยังสามารถส่งข้อมูลขึ้น Cloud เก็บข้อมูลประวัติ วิเคราะห์รูปแบบการใช้งาน และส่งการแจ้งเตือนแบบเรียลไทม์ได้ ด้วยข้อมูลเหล่านี้ คุณสามารถตัดสินใจเปลี่ยนพฤติกรรมการใช้ไฟ ปรับเปลี่ยนอุปกรณ์ที่สิ้นเปลืองพลังงาน และประหยัดค่าไฟได้อย่างมีนัยสำคัญ โปรเจกต์นี้สามารถปรับแต่งและขยายความสามารถได้อีกมาก เช่น เชื่อมต่อกับ Home Assistant เพื่อควบคุม Automation, เพิ่มการวัดหลาย Phase สำหรับไฟ 3 เฟส, ใช้ Solar Panel Data เพื่อคำนวณ Net Energy, หรือสร้างระบบ Prepaid Meter สำหรับห้องเช่า ความรู้ที่ได้จากโปรเจกต์นี้สามารถนำไปประยุกต์กับ IoT Projects อื่นๆ ได้อีกมากมาย เริ่มต้นสร้างระบบมิเตอร์อัจฉริยะของคุณเองวันนี้!
พร้อมสร้าง Smart Energy Meter ของคุณแล้วหรือยัง? มาช้อป ESP32 และ PZEM-004T กันเลย!
ช้อป ESP32 และอุปกรณ์