เนื้อหาในบทความ
ภาพรวม Energy Harvesting สำหรับ IoT
🌱 Energy Harvesting คืออะไร?
Energy Harvesting (การเก็บเกี่ยวพลังงาน) คือเทคโนโลยีที่เก็บเกี่ยวพลังงานจากแหล่งพลังงานรอบตัว เช่น แสงอาทิตย์ ความร้อน การสั่น หรือคลื่นวิทยุ เพื่อใช้เป็นพลังงานทดแทนแบตเตอรี่
✅ ข้อดี
- • ไม่ต้องเปลี่ยนแบตเตอรี่
- • เป็นมิตรต่อสิ่งแวดล้อม
- • ลดค่าใช้จ่ายระยะยาว
- • เหมาะกับสถานที่เข้าถึงยาก
⚠️ ข้อจำกัด
- • พลังงานไม่สม่ำเสมอ
- • ต้องออกแบบให้ประหยัดพลังงาน
- • อุปกรณ์แพงกว่าเล็กน้อย
- • ต้องมี Energy Buffer
🔋 Supercapacitor vs Battery
Supercapacitor (SuperCap) หรือ Ultracapacitor คือตัวเก็บประจุที่มีความจุสูงมาก เหมาะสำหรับ Energy Harvesting เพราะ:
| คุณสมบัติ | Supercapacitor | Lithium Battery |
|---|---|---|
| วงจรชีวิต | 500,000+ | 500-1,000 |
| ความหนาแน่นพลังงาน | 5-10 Wh/kg | 100-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 mode2. ปิด Peripherals ที่ไม่ใช้
// ปิด ADC, DAC, Bluetooth
adc_power_release(); // ปิด ADC
dac_power_release(); // ปิด DAC
btStop(); // ปิด Bluetooth
// ปิด Serial หลังจากใช้งาน
Serial.end(); // ปิด Serial หลัง debug3. ปรับสมดุล 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
- ✅ เทคนิคการปรับแต่งประสิทธิภาพ
- ✅ แอพพลิเคชันจริงในชีวิตประจำวัน