สร้างระบบ IoT ไร้แบตเตอรี่ด้วย ESP32 + Supercapacitor + Solar Energy Harvesting

เรียนรู้วิธีสร้างเครื่องมือ IoT ที่ทำงานได้ตลอดไปโดยไม่ต้องเปลี่ยนแบตเตอรี่ ด้วยเทคโนโลยี Energy Harvesting และ Supercapacitor ที่เป็นมิตรต่อสิ่งแวดล้อม

📅 29 มีนาคม 2026⏱️ 15 นาที🎯 ระดับ Advanced

ข้อควรระวัง: โปรเจกต์นี้ต้องการความรู้เรื่องอิเล็กทรอนิกส์พื้นฐานและการใช้งานหม้อแปลงไฟฟ้า ควรศึกษาข้อมูลเพิ่มเติมก่อนทดลอง

ภาพรวม Energy Harvesting สำหรับ IoT

🌱 Energy Harvesting คืออะไร?

Energy Harvesting (การเก็บเกี่ยวพลังงาน) คือเทคโนโลยีที่เก็บเกี่ยวพลังงานจากแหล่งพลังงานรอบตัว เช่น แสงอาทิตย์ ความร้อน การสั่น หรือคลื่นวิทยุ เพื่อใช้เป็นพลังงานทดแทนแบตเตอรี่

✅ ข้อดี

  • • ไม่ต้องเปลี่ยนแบตเตอรี่
  • • เป็นมิตรต่อสิ่งแวดล้อม
  • • ลดค่าใช้จ่ายระยะยาว
  • • เหมาะกับสถานที่เข้าถึงยาก

⚠️ ข้อจำกัด

  • • พลังงานไม่สม่ำเสมอ
  • • ต้องออกแบบให้ประหยัดพลังงาน
  • • อุปกรณ์แพงกว่าเล็กน้อย
  • • ต้องมี Energy Buffer

🔋 Supercapacitor vs Battery

Supercapacitor (SuperCap) หรือ Ultracapacitor คือตัวเก็บประจุที่มีความจุสูงมาก เหมาะสำหรับ Energy Harvesting เพราะ:

คุณสมบัติSupercapacitorLithium Battery
วงจรชีวิต500,000+500-1,000
ความหนาแน่นพลังงาน5-10 Wh/kg100-265 Wh/kg
อุณหภูมิทำงาน-40°C to +85°C-20°C to +60°C
ชาร์จ/ดิสชาร์จวินาทีชั่วโมง
ความปลอดภัยไม่ไหม้เสี่ยงไหม้

อุปกรณ์ที่ต้องใช้

📋 รายการอุปกรณ์

1. Solar Panel (แผงโซลาร์เซลล์)

  • • แนะนำ: 5V 1W - 5V 2W Mini Solar Panel
  • • ขนาด: ขั้นต่ำ 100mm x 70mm
  • • ราคาประมาณ: ฿50-150
  • • หมายเหตุ: เลือกแบบมีขาต่อง่าย (JST หรือขอ USB)

2. Supercapacitor (ตัวเก็บประจุซุเปอร์แคป)

  • • แนะนำ: 1F - 10F, 5.5V
  • • ยี่ห้อ: Eaton, Panasonic, Maxwell
  • • ขนาด: 10mm x 20mm (1F) ถึง 16mm x 30mm (10F)
  • • ราคาประมาณ: ฿20-100
  • • หมายเหตุ: สามารถต่อขนานเพื่อเพิ่มความจุ

3. Energy Harvesting IC (ไอซีเก็บเกี่ยวพลังงาน)

  • • ตัวเลือกที่ 1: BQ25570 (Texas Instruments) - แนะนำ ⭐
  • • ตัวเลือกที่ 2: AEM10941 (E-peas)
  • • ตัวเลือกที่ 3: LTC3105 (Analog Devices)
  • • ราคาประมาณ: ฿80-200
  • • หมายเหตุ: มีบอร์ดสำเร็จรูปหรือ SMD IC

4. ESP32 Board

  • • แนะนำ: ESP32-WROOM หรือ ESP32-S2/S3
  • • เวอร์ชันที่มี Deep Sleep ดี: DevKitC
  • • ต้องการ: JST connector หรือ USB connector
  • • ราคาประมาณ: ฿100-200

5. อุปกรณ์เสริม

  • • Diode: 1N5817 (Schottky) - ป้องกัน reverse current
  • • Resistor: 100Ω, 10kΩ (หลายตัว)
  • • Capacitor: 10µF, 100µF (สำหรับ filtering)
  • • LED: สำหรับแสดงสถานะ (ถ้าต้องการ)
  • • PCB หรือ Breadboard + wires

💰 งบประมาณรวม: ประมาณ ฿300-600 (ขึ้นอยู่กับคุณภาพและยี่ห้ออุปกรณ์)

วงจร Energy Harvesting

🔌 Block Diagram

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│ Solar Panel │────▶│ Energy       │────▶│ SuperCap    │
│ 5V 1-2W     │     │ Harvesting   │     │ 1-10F 5.5V  │
└─────────────┘     │ IC (BQ25570) │     └─────────────┘
                    └──────────────┘            │
                          ▲                    │
                          │                    ▼
                    ┌─────┴─────┐      ┌─────────────┐
                    │ MPPT &    │      │ ESP32       │
                    │ Battery   │      │ (Deep Sleep)│
                    │ Mgmt      │      └─────────────┘
                    └───────────┘
                                    

คำอธิบาย:

  • Solar Panel: เปลี่ยนแสงอาทิตย์เป็นไฟฟ้า DC
  • Energy Harvesting IC: จัดการและสร้างแรงดันที่เหมาะสม (MPPT, Battery Management)
  • SuperCap: เก็บพลังงานและจ่ายไฟให้ ESP32
  • ESP32: ทำงานในโหมด Deep Sleep เพื่อประหยัดพลังงาน

🔧 การต่อวงจรรายละเอียด (ด้วย BQ25570)

Step 1: Solar Panel → BQ25570

ต่อแผงโซลาร์เข้ากับขา VIN_DC และ GND ของ BQ25570 ใส่ Diode (1N5817) แบบ series เพื่อป้องกัน reverse current

Solar(+) → 1N5817(A→K) → VIN_DC
Solar(-) → GND

Step 2: SuperCap → BQ25570

ต่อ Supercapacitor เข้ากับขา VBAT และ GND สามารถต่อขนานหลายตัวเพื่อเพิ่มความจุ (เช่น 2x 4.7F ขนาน = 9.4F)

SuperCap(+) → VBAT
SuperCap(-) → GND

Step 3: BQ25570 → ESP32

ต่อ VOUT (3.3V output) จาก BQ25570 เข้า 3.3V ของ ESP32 ต่อ GND ร่วมกัน และต่อขา EN เพื่อควบคุมการเปิด/ปิด ESP32

VOUT → ESP32 3.3V
GND → ESP32 GND
VBAT_EN → ESP32 EN (optional)

Step 4: การตั้งค่า MPPT

ต่อตัวต้านทานแบบ voltage divider ที่ขา MPPT เพื่อตั้งค่า voltage ratio สำหรับแผงโซลาร์ที่ใช้ (โดยปกติ 80% ของ Voc)

MPPT divider: R1 = 4.7MΩ, R2 = 1.0MΩ (สำหรับ 5V solar)

⚠️ ข้อควรระวัง

  • • ตรวจสอบ polarity ของ Supercapacitor ให้ถูกต้อง (+/-)
  • • ไม่ควรชาร์จ SuperCap เกิน 5.5V (อาจทำให้เสียหาย)
  • • BQ25570 มี thermal shutdown ที่ ~120°C - ต้องระบายความร้อน
  • • ทดสอบวงจรกับ multimeter ก่อนต่อ ESP32

ซอฟต์แวร์และโค้ด

💻 การเขียนโปรแกรม ESP32 สำหรับ Energy Harvesting

หลักการสำคัญคือการทำให้ ESP32 ทำงานในโหมด Deep Sleep เพื่อประหยัดพลังงานมากที่สุด และตื่นขึ้นมาทำงานเฉพาะเวลาที่จำเป็นเท่านั้น

โครงสร้างโปรแกรมหลัก

#include <WiFi.h>
#include <HTTPClient.h>

// การตั้งค่า WiFi
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// การตั้งค่า Deep Sleep
#define uS_TO_S_FACTOR 1000000  // แปลง microsecond เป็น second
#define TIME_TO_SLEEP  600      // นอน 10 นาที (ถัดไป)

// การตั้งค่า Sensor (ถ้ามี)
const int sensorPin = 34;

void setup() {
  Serial.begin(115200);

  // ตรวจสอบแรงดัน SuperCap ก่อนทำงาน
  float voltage = readSuperCapVoltage();
  Serial.printf("SuperCap Voltage: %.2f V\n", voltage);

  // ถ้าแรงดันต่ำเกินไป ให้กลับไปนอนทันที
  if (voltage < 3.0) {
    Serial.println("Battery too low, going back to sleep...");
    goToDeepSleep();
    return;
  }

  // เชื่อมต่อ WiFi
  connectWiFi();

  // อ่านค่า sensor
  float sensorValue = readSensor();

  // ส่งข้อมูลไปยัง Server
  sendData(sensorValue);

  // ปิด WiFi เพื่อประหยัดพลังงาน
  WiFi.disconnect();

  // กลับไปนอน
  goToDeepSleep();
}

void loop() {
  // ไม่ต้องใช้ loop() เพราะใช้ Deep Sleep
}

// ฟังก์ชันเชื่อมต่อ WiFi
void connectWiFi() {
  Serial.println("Connecting to WiFi...");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  // ตั้ง timeout 30 วินาที
  int timeout = 30;
  while (WiFi.status() != WL_CONNECTED && timeout > 0) {
    delay(1000);
    timeout--;
    Serial.print(".");
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("\nWiFi connected!");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println("\nWiFi connection failed!");
  }
}

// ฟังก์ชันอ่านค่า Sensor
float readSensor() {
  int rawValue = analogRead(sensorPin);
  // แปลงค่า ADC เป็น voltage (0-4095 → 0-3.3V)
  float voltage = (rawValue * 3.3) / 4095.0;
  return voltage;
}

// ฟังก์ชันส่งข้อมูล
void sendData(float value) {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi not connected, cannot send data");
    return;
  }

  HTTPClient http;
  String url = "http://your-server.com/api/data?value=" + String(value);
  http.begin(url);
  http.addHeader("Content-Type", "application/json");

  int httpResponseCode = http.GET();

  if (httpResponseCode > 0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
  } else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }

  http.end();
}

// ฟังก์ชันอ่านแรงดัน SuperCap (ใช้ ADC หรือ voltage divider)
float readSuperCapVoltage() {
  // ใช้ ADC pin 35 เพื่ออ่านแรงดัน (ต้องมี voltage divider)
  int rawValue = analogRead(35);
  // สมมติใช้ voltage divider 1:2 (เพื่อลดแรงดันจาก 0-5.5V เป็น 0-2.75V)
  float voltage = (rawValue * 3.3 * 2) / 4095.0;
  return voltage;
}

// ฟังก์ชันเข้าสู่ Deep Sleep
void goToDeepSleep() {
  Serial.println("Going to deep sleep now...");
  Serial.printf("Will wake up in %d seconds\n", TIME_TO_SLEEP);

  // ตั้งค่า timer wake
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);

  // เข้าสู่ Deep Sleep mode
  esp_deep_sleep_start();
}

⚡ เทคนิคการประหยัดพลังงานเพิ่มเติม

1. WiFi Power Management

// ลดกำลังส่งสัญญาณ WiFi
WiFi.setTxPower(WIFI_POWER_2dBm);  // ลด TX power เหลือ 2dBm

// ใช้ WiFi แบบ dynamic
WiFi.setSleep(true);  // เปิด WiFi sleep mode

2. ปิด Peripherals ที่ไม่ใช้

// ปิด ADC, DAC, Bluetooth
adc_power_release();       // ปิด ADC
dac_power_release();       // ปิด DAC
btStop();                  // ปิด Bluetooth

// ปิด Serial หลังจากใช้งาน
Serial.end();              // ปิด Serial หลัง debug

3. ปรับสมดุล Sleep/Wake Cycle

ปรับเวลา sleep ตามสภาพแวดล้อม:

  • กลางคืน: 30-60 นาที (ไม่มีแสงอาทิตย์)
  • กลางวัน: 5-15 นาที (มีแสงอาทิตย์ชาร์จ)
  • เมฆมาก: 20-30 นาที

4. ใช้ External Wake-up

ตื่นเมื่อมีเหตุการณ์พิเศษ:

// ตื่นเมื่อแรงดันถึงระดับหนึ่ง
esp_sleep_enable_ext0_wakeup(GPIO_NUM_35, 1);  // ตื่นเมื่อ HIGH

// ตื่นเมื่อมี touch sensor
esp_sleep_enable_touchpad_wakeup();

การทดสอบ

🧪 ขั้นตอนการทดสอบ

Step 1: ทดสอบวงจร Energy Harvesting

  • • วัดแรงดันจาก Solar Panel ภายใต้แสงแดด (ควร 5-6V)
  • • วัดแรงดัน VOUT จาก BQ25570 (ควร 3.3V)
  • • วัดแรงดัน VBAT (SuperCap) ระหว่างชาร์จ
  • • ตรวจสอบว่าไม่มี short circuit

Step 2: ทดสอบการชาร์จ SuperCap

  • • วัดแรงดัน SuperCap ทุก 5 นาที
  • • SuperCap ควรชาร์จจาก 0V → 3.3V ภายใน 10-30 นาที
  • • ถ้าชาร์จช้าเกินไป: ตรวจสอบแผงโซลาร์และแสงแดด
  • • ถ้าชาร์จไม่ได้: ตรวจสอบวงจรและ Diode

Step 3: ทดสอบ ESP32

  • • ต่อ ESP32 เข้ากับ VOUT 3.3V
  • • อัปโหลดโค้ดและเปิด Serial Monitor (115200 baud)
  • • ตรวจสอบว่าอ่านแรงดัน SuperCap ได้ถูกต้อง
  • • ดูว่า ESP32 เข้า Deep Sleep และตื่นตามเวลาที่กำหนด

Step 4: ทดสอบระบบสมบูรณ์

  • • นำไปวางในที่โล่งแจ้ง (ใต้แดด)
  • • สังเกตการทำงาน 24-48 ชั่วโมง
  • • ตรวจสอบว่า SuperCap ไม่หมดในช่วงกลางคืน
  • • ตรวจสอบว่าข้อมูลถูกส่งไปยัง Server อย่างสม่ำเสมอ

📊 ตัวบ่งชี้การทำงาน

✅ ระบบทำงานดี

  • • SuperCap ชาร์จ 0-3.3V ภายใน 10-20 นาที (กลางวัน)
  • • SuperCap ไม่หมดในช่วงกลางคืน
  • • ESP32 ตื่นและส่งข้อมูลได้ทุกครั้ง
  • • อุณหภูมิ BQ25570 ไม่เกิน 60°C

❌ มีปัญหา

  • • SuperCap หมดในช่วงกลางคืน (ต้องเพิ่มขนาด)
  • • ESP32 ตื่นไม่ได้ (แรงดันต่ำเกินไป)
  • • WiFi เชื่อมต่อไม่ได้ (พลังงานไม่พอ)
  • • BQ25570 ร้อนเกินไป (ต้องเพิ่ม heat sink)

การปรับแต่งประสิทธิภาพ

🎯 การเพิ่มประสิทธิภาพพลังงาน

1. เพิ่มขนาด Supercapacitor

ต่อขนานหลายตัวเพื่อเพิ่มความจุ:

2x 4.7F ขนาน = 9.4F (เพิ่มเวลาทำงาน 2 เท่า)
3x 4.7F ขนาน = 14.1F (เพิ่มเวลาทำงาน 3 เท่า)

2. เพิ่มขนาด Solar Panel

ใช้แผงโซลาร์ที่ใหญ่ขึ้นเพื่อชาร์จเร็วขึ้น:

1W → 2W (ชาร์จเร็ว 2 เท่า)
2W → 5W (ชาร์จเร็ว 2.5 เท่า)

3. ลดเวลาตื่น ESP32

ทำให้ ESP32 ตื่นน้อยลง:

ตื่นทุก 10 นาที → ทุก 15 นาที (ประหยัด 33%)
ตื่นทุก 15 นาที → ทุก 20 นาที (ประหยัด 25%)

4. ใช้ MCU ที่ประหยัดกว่า

เปลี่ยนเป็น MCU ที่ใช้พลังงานต่ำกว่า:

ESP32-S2: ~60mA ตื่น, ~10µA deep sleep
ESP32-C3: ~50mA ตื่น, ~8µA deep sleep
ESP8266: ~70mA ตื่น, ~20µA deep sleep

5. ใช้ Protocol ที่เร็วกว่า

ใช้ MQTT แทน HTTP (เร็วกว่าและประหยัดกว่า):

HTTP GET: ~5-10 วินาที, ~50mA
MQTT Publish: ~1-2 วินาที, ~30mA

แอพพลิเคชันจริง

🌍 การใช้งานในชีวิตจริง

🏠 Smart Home

  • • เซ็นเซอร์วัดอุณหภูมิในสวน
  • • ตรวจจับความชื้นในดิน
  • • ควบคุมรดน้ำอัตโนมัติ

🏭 Industrial IoT

  • • เซ็นเซอร์ตรวจจับในโรงงาน
  • • ตรวจสอบอุปกรณ์ระยะไกล
  • • ส่งข้อมูลผลิตภัณฑ์

🌾 Agriculture

  • • ตรวจสอบคุณภาพดิน
  • • วัดระดับน้ำในนาข้าว
  • • ติดตามสภาพอากาศ

🚗 Automotive

  • • TPMS (Tire Pressure Monitoring)
  • • ตรวจจับความเร็ว
  • • ส่งข้อมูลระยะทาง

สรุป

ในบทความนี้ เราได้เรียนรู้วิธีสร้างระบบ IoT ไร้แบตเตอรี่ด้วย Energy Harvesting และ Supercapacitor ซึ่งเป็นเทคโนโลยีที่ยั่งยืนและเป็นมิตรต่อสิ่งแวดล้อม

สิ่งที่เรียนรู้:

  • ✅ หลักการ Energy Harvesting และ Supercapacitor
  • ✅ วิธีต่อวงจร Energy Harvesting ด้วย BQ25570
  • ✅ การเขียนโปรแกรม ESP32 ให้ประหยัดพลังงานด้วย Deep Sleep
  • ✅ เทคนิคการปรับแต่งประสิทธิภาพ
  • ✅ แอพพลิเคชันจริงในชีวิตประจำวัน

📚 แหล่งเรียนรู้เพิ่มเติม

© 2026 CynoIoT. All rights reserved.

สร้างด้วย ❤️ สำหรับชุมชน IoT ไทย