ESP32 Solar Panel Monitoring: ระบบติดตามแผงโซลาร์เซลล์ด้วย ESP32

คู่มือการสร้างระบบติดตามประสิทธิภาพแผงโซลาร์เซลล์ด้วย ESP32 วัดแรงดัน กระแส และกำลังไฟฟ้า พร้อมโค้ดตัวอย่างและคำอธิบายภาษาไทย

📅 12 มีนาคม 2026⏱️ 15 นาที🎯 ระดับเริ่มต้น - กลาง📂 Tutorial

Energy Independence: ระบบ Solar Monitoring ช่วยให้คุณเข้าใจประสิทธิภาพแผงโซลาร์เซลล์ ติดตามการผลิตพลังงาน และวางแผนการใช้พลังงานอย่างชาญฉลาด ประหยัดค่าไฟและลดการพึ่งพากริด

ภาพรวม Solar Panel Monitoring System

☀️ ทำไมต้องติดตามแผงโซลาร์เซลล์?

ระบบ Solar Panel Monitoring ช่วยให้คุณ:

  • ติดตามการผลิตพลังงาน - รู้ได้ทันทีว่าแผงผลิตกระแสไฟเท่าไหร่
  • ตรวจสอบประสิทธิภาพ - เปรียบเทียบกับมาตรฐานของผู้ผลิต
  • คาดการณ์ปัญหา - ตรวจจับแผงที่เริ่มเสื่อมสภาพ
  • วางแผนการใช้พลังงาน - ใช้ไฟเมื่อแผงผลิตได้มากที่สุด
  • ประหยัดค่าไฟ - เพิ่มประสิทธิภาพการใช้พลังงาน

หลักการทำงาน

ระบบ Solar Monitoring ทำงานโดยวัดค่าไฟฟ้าที่แผงโซลาร์เซลล์ผลิต ซึ่งประกอบด้วย:

Voltage (V)
แรงดันไฟฟ้า
📊
Current (A)
กระแสไฟฟ้า
💪
Power (W)
กำลังไฟฟ้า

โดยใช้สูตร: 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 Board1ESP32 DevKit หรือ XIAO ESP32-C3
INA219 Sensor1Current/Power Sensor Module
Solar Panel1+100W หรือมากกว่า
Jumper Wires若干Male-to-Female
Resistor 10kΩ2สำหรับ I2C Pull-up (ถ้าจำเป็น)
Battery (Optional)112V Li-ion หรือ Lead-acid

⚠️ คำเตือน: แผงโซลาร์เซลล์ 100W สามารถผลิตกระแสไฟได้มากกว่า 5A อย่าเชื่อมต่อโดยตรงกับ ESP32 ต้องใช้ INA219 เพื่อวัดค่า และต้องมีระบบชาร์จแบตเตอรี่ที่เหมาะสม

การต่อสายวงจร

🔌 การเชื่อมต่อ INA219 กับ ESP32

INA219 เป็น Sensor วัดกระแสและแรงดันที่ใช้บัส I2C ต่อเข้ากับ ESP32 ได้ง่าย:

INA219 PinESP32 Pinหมายเหตุ
VCC3.3Vหรือ 5V ตาม Module
GNDGNDGround
SCLGPIO 22I2C Clock
SDAGPIO 21I2C 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 ที่ใช้:

32V, 2A (Default)
ina219.setCalibration_32V_2A()
สำหรับ Solar Panel ขนาดเล็ก (10-50W)
32V, 1A
ina219.setCalibration_32V_1A()
ความละเอียดสูงขึ้น สำหรับ Panel เล็ก
26V, 3.2A
ina219.setCalibration_26V_3A2()
สำหรับ Solar Panel ขนาดกลาง (100W)
แบบกำหนดเอง
ina219.setCalibration_32V_2A()
ปรับค่า Calibration Register ได้

ค่าที่ INA219 สามารถวัดได้

ฟังก์ชันค่าที่ได้หน่วย
getBusVoltage_V()0-26V (ปรับได้)Volts (V)
getShuntVoltage_mV()±320mVMillivolts (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

บทความที่เกี่ยวข้อง

© 2026 CynoIoT. All rights reserved.