เนื้อหาในบทความ
ภาพรวม Solar Panel Monitoring System
☀️ ทำไมต้องติดตามแผงโซลาร์เซลล์?
ระบบ Solar Panel Monitoring ช่วยให้คุณ:
- ติดตามการผลิตพลังงาน - รู้ได้ทันทีว่าแผงผลิตกระแสไฟเท่าไหร่
- ตรวจสอบประสิทธิภาพ - เปรียบเทียบกับมาตรฐานของผู้ผลิต
- คาดการณ์ปัญหา - ตรวจจับแผงที่เริ่มเสื่อมสภาพ
- วางแผนการใช้พลังงาน - ใช้ไฟเมื่อแผงผลิตได้มากที่สุด
- ประหยัดค่าไฟ - เพิ่มประสิทธิภาพการใช้พลังงาน
หลักการทำงาน
ระบบ Solar Monitoring ทำงานโดยวัดค่าไฟฟ้าที่แผงโซลาร์เซลล์ผลิต ซึ่งประกอบด้วย:
โดยใช้สูตร: Power (W) = Voltage (V) × Current (A)
ตัวอย่างเช่น ถ้าแผงผลิต 18V ที่ 5.5A จะได้กำลังไฟฟ้า 99W
เกร็ดความรู้: แผงโซลาร์เซลล์ส่วนใหญ่จะมี Maximum Power Point (MPP) อยู่ที่ประมาณ 75-80% ของแรงดัน Open Circuit (Voc) การวัดค่าเหล่านี้จะช่วยให้คุณตั้งค่า MPPT (Maximum Power Point Tracking) ได้อย่างเหมาะสม
อุปกรณ์ที่ต้องใช้
🛒 รายการอุปกรณ์
| อุปกรณ์ | จำนวน | หมายเหตุ |
|---|---|---|
| ESP32 Board | 1 | ESP32 DevKit หรือ XIAO ESP32-C3 |
| INA219 Sensor | 1 | Current/Power Sensor Module |
| Solar Panel | 1+ | 100W หรือมากกว่า |
| Jumper Wires | 若干 | Male-to-Female |
| Resistor 10kΩ | 2 | สำหรับ I2C Pull-up (ถ้าจำเป็น) |
| Battery (Optional) | 1 | 12V Li-ion หรือ Lead-acid |
⚠️ คำเตือน: แผงโซลาร์เซลล์ 100W สามารถผลิตกระแสไฟได้มากกว่า 5A อย่าเชื่อมต่อโดยตรงกับ ESP32 ต้องใช้ INA219 เพื่อวัดค่า และต้องมีระบบชาร์จแบตเตอรี่ที่เหมาะสม
การต่อสายวงจร
🔌 การเชื่อมต่อ INA219 กับ ESP32
INA219 เป็น Sensor วัดกระแสและแรงดันที่ใช้บัส I2C ต่อเข้ากับ ESP32 ได้ง่าย:
| INA219 Pin | ESP32 Pin | หมายเหตุ |
|---|---|---|
| VCC | 3.3V | หรือ 5V ตาม Module |
| GND | GND | Ground |
| SCL | GPIO 22 | I2C Clock |
| SDA | GPIO 21 | I2C Data |
การต่อ Solar Panel เข้ากับ INA219
สำคัญมาก: Solar Panel ต้องต่อเข้ากับพอร์ต IN+ (Input) และ IN- (Input) ของ INA219:
- IN+ → ขั้วบวก (+) ของ Solar Panel
- IN- → ขั้วลบ (-) ของ Solar Panel (หรือไปที่ Battery/Charge Controller)
❌ อย่ากลับขั้ว: การต่อขั้วกลับจะทำให้ INA219 เสียหาย ตรวจสอบให้แน่ใจว่าขั้วบวกและลบถูกต้องก่อนจ่ายไฟ
💡 เคล็ดลับ: ในระบบจริง ควรมี Solar Charge Controller ระหว่างแผงโซลาร์เซลล์และแบตเตอรี่ เพื่อป้องกันการชาร์จเกิน และใช้ INA219 วัดค่าที่ Output ของแผง หรือที่ Input ของแบตเตอรี่
โค้ด Arduino สำหรับ Solar Monitoring
โค้ดนี้จะอ่านค่า Voltage, Current และ Power จาก INA219 และแสดงผลบน Serial Monitor:
// ESP32 Solar Panel Monitoring with INA219
// วัดแรงดัน กระแส และกำลังไฟฟ้าจากแผงโซลาร์เซลล์
#include <Wire.h>
#include <Adafruit_INA219.h>
// สร้างออบเจกต์ INA219
Adafruit_INA219 ina219;
// ตัวแปรเก็บค่า
float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float loadvoltage = 0;
float power_mW = 0;
unsigned long lastMillis = 0;
const long interval = 5000; // อ่านค่าทุก 5 วินาที
void setup() {
Serial.begin(115200);
Serial.println("ESP32 Solar Panel Monitoring");
// เริ่มต้นใช้งาน INA219
if (!ina219.begin()) {
Serial.println("Failed to find INA219 chip");
while (1) {
delay(10);
}
}
// ตั้งค่า INA219 สำหรับ Solar Panel
// 32V, 2A ค่าเริ่มต้น (สามารถปรับได้)
ina219.setCalibration_32V_2A();
Serial.println("INA219 Ready!");
Serial.println("----------------------------------");
}
void loop() {
// อ่านค่าทุก 5 วินาที
unsigned long currentMillis = millis();
if (currentMillis - lastMillis >= interval) {
lastMillis = currentMillis;
// อ่านค่าจาก INA219
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();
// คำนวณแรงดันที่โหลด (Load Voltage)
loadvoltage = busvoltage + (shuntvoltage / 1000);
// แสดงผล
Serial.println("🌞 Solar Panel Status:");
Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
Serial.print("Power: "); Serial.print(power_mW / 1000); Serial.println(" W");
// ตรวจสอบสถานะแผง
if (current_mA < 100) {
Serial.println("⚠️ กระแสต่ำ: แผงอาจถูกบดบังโดยเมฆหรือเงา");
}
if (busvoltage < 10) {
Serial.println("⚠️ แรงดันต่ำ: แบตเตอรี่อาจต้องการชาร์จ");
}
Serial.println("----------------------------------");
}
}📝 คำอธิบายโค้ด:
- ใช้ Library Adafruit INA219 สำหรับอ่านค่า Sensor
- setCalibration_32V_2A() - ตั้งค่าช่วงวัดสูงสุด 32V, 2A (ปรับได้)
- อ่านค่าทุก 5 วินาที เพื่อไม่ให้ Serial Monitor ล้น
- ตรวจสอบแรงดันและกระแสต่ำเพื่อเตือนปัญหา
การใช้งาน INA219 Sensor
🔧 การตั้งค่า INA219
INA219 รองรับหลายช่วงการวัด ขึ้นกับ Shunt Resistor ที่ใช้:
ina219.setCalibration_32V_2A()สำหรับ Solar Panel ขนาดเล็ก (10-50W)
ina219.setCalibration_32V_1A()ความละเอียดสูงขึ้น สำหรับ Panel เล็ก
ina219.setCalibration_26V_3A2()สำหรับ Solar Panel ขนาดกลาง (100W)
ina219.setCalibration_32V_2A()ปรับค่า Calibration Register ได้
ค่าที่ INA219 สามารถวัดได้
| ฟังก์ชัน | ค่าที่ได้ | หน่วย |
|---|---|---|
| getBusVoltage_V() | 0-26V (ปรับได้) | Volts (V) |
| getShuntVoltage_mV() | ±320mV | Millivolts (mV) |
| getCurrent_mA() | ±3.2A (ปรับได้) | Milliamps (mA) |
| getPower_mW() | 0-100W+ | Milliwatts (mW) |
เชื่อมต่อกับ CynoIoT Platform
🌐 ส่งข้อมูล Solar ขึ้น Cloud ด้วย MQTT
เพื่อให้ติดตามข้อมูลได้ตลอด 24 ชม. สามารถส่งข้อมูลไปยัง CynoIoT Platform ผ่าน MQTT:
// MQTT สำหรับ CynoIoT
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi Credentials
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// MQTT Settings
const char* mqtt_server = "mqtt.cynoiot.com";
const int mqtt_port = 1883;
const char* mqtt_user = "YOUR_CYNOIOT_TOKEN";
const char* mqtt_pass = "";
// MQTT Topics
const char* solar_voltage_topic = "cyno/{device_id}/solar/voltage";
const char* solar_current_topic = "cyno/{device_id}/solar/current";
const char* solar_power_topic = "cyno/{device_id}/solar/power";
WiFiClient espClient;
PubSubClient client(espClient);
void setupWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
if (client.connect("ESP32_Solar", mqtt_user, mqtt_pass)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retry in 5 seconds");
delay(5000);
}
}
}
void sendSolarData() {
// ส่ง Voltage (V)
char voltageStr[10];
dtostrf(loadvoltage, 2, 2, voltageStr);
client.publish(solar_voltage_topic, voltageStr);
// ส่ง Current (A)
char currentStr[10];
dtostrf(current_mA / 1000, 2, 3, currentStr);
client.publish(solar_current_topic, currentStr);
// ส่ง Power (W)
char powerStr[10];
dtostrf(power_mW / 1000, 2, 2, powerStr);
client.publish(solar_power_topic, powerStr);
}
// ใน loop()
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// ... อ่านค่า INA219 ...
// ส่งข้อมูลไป CynoIoT
sendSolarData();
}ปรับปรุงประสิทธิภาพแผงโซลาร์เซลล์
📈 เคล็ดลับเพิ่มประสิทธิภาพ
ทำความสะอาดแผง
ฝุ่นและสิ่งสกปรกสามารถลดประสิทธิภาพได้ 10-20% ควรทำความสะอาดทุก 1-2 เดือน
หันหน้าเข้าหาแดด
ในซีกโลกเหนือ แผงควรหันไปทางทิศใต้ ปรับมุมเอียง 15-30 องศา
หลีกเลี่ยงเงา
ต้นไม้และสิ่งก่อสร้างควรไม่บังแสงแดง ติดตามเงาตลอดทั้งวัน
ใช้แบตเตอรี่ที่เหมาะสม
LiFePO4 ทนทานต่อการชาร์จซ้ำมากกว่า Lead-acid และมีประสิทธิภาพสูงกว่า
การแก้ปัญหาที่พบบ่อย
❌ INA219 อ่านค่าไม่ได้
สาเหตุ: การต่อสาย I2C ผิด หรือ Address ไม่ถูกต้อง
วิธีแก้: ตรวจสอบการต่อ SDA, SCL และลองใช้ I2C Scanner เพื่อหา Address
⚡ ค่ากระแสติดลบ
สาเหตุ: ต่อขั้ว IN+ และ IN- กลับ
วิธีแก้: สลับขั้ว IN+ และ IN- หรือเปลี่ยนโค้ดให้แสดงค่าสัมบูรณ์
📉 แรงดันต่ำกว่าที่ควรจะเป็น
สาเหตุ: แผงเล็กเกินไป หรือฟุ้งกระแสสูงเกินไป
วิธีแก้: ใช้แผงที่ใหญ่กว่า หรือต่อแผงหลายบอร์ดแบบ Series/Parallel
🔌 WiFi เชื่อมต่อไม่ได้
สาเหตุ: ระยะห่างจาก Access Point ไกลเกินไป
วิธีแก้: ใช้ ESP32 ที่มี External Antenna หรือเพิ่ม Range Extender
สรุป
🌞 คุณได้เรียนรู้อะไรบ้าง?
- การวัดพลังงาน Solar - ใช้ INA219 วัด Voltage, Current, Power ได้อย่างแม่นยำ
- การต่อใช้งาน - I2C Interface ต่อเข้ากับ ESP32 ได้ง่าย
- การส่งข้อมูล IoT - MQTT ส่งค่าไปยัง CynoIoT Platform ได้
- การปรับปรุงประสิทธิภาพ - เคล็ดลับเพิ่มผลผลิตจากแผงโซลาร์เซลล์
🚀 โปรเจกต์ต่อไปที่ควรลอง
- Solar Tracker - ระบบติดตามแดดอัตโนมัติเพิ่มประสิทธิภาพ 25-30%
- MPPT Charge Controller - ใช้ ESP32 ควบคุมการชาร์จแบตเตอรี่อย่างชาญฉลาด
- Grid-tie Inverter Monitor - ติดตามการใช้ไฟจากกริด vs แผงโซลาร์
- Energy Management System - ระบบจัดการพลังงานอัจฉริยะสำหรับบ้าน Smart Home