วิธีทำระบบดูไฟแบตเตอรี่ 12V ผ่านมือถือด้วย ESP32 (ฉบับมือใหม่)
ใครที่เล่นโซลาร์เซลล์ระบบ 12V หรือมีชุดนอนนา ชุดแคมป์ปิ้ง คงเคยเจอปัญหาว่าไม่รู้ไฟแบตเหลือเท่าไหร่ วันนี้ผมจะมาสอนทำระบบมอนิเตอร์ไฟแบตเตอรี่แบบง่ายๆ ด้วยบอร์ด ESP32 ที่เราสามารถเปิดดูผ่านมือถือได้จากทุกที่ในบ้านครับ
1. หลักการทำงาน (แบบภาษาบ้านๆ)
บอร์ด ESP32 ของเราเปรียบเหมือน “มิเตอร์วัดไฟ” ครับ แต่มันรับไฟได้แค่ 3.3 โวลต์ ในขณะที่แบตเตอรี่เรามีไฟแรงถึง 12-14 โวลต์ ถ้าต่อตรงๆ บอร์ดพังแน่นอน เราจึงต้องใช้ตัวต้านทาน 2 ตัว มาช่วย “ลดแรงดันไฟ” ให้เบาลงก่อนส่งเข้าบอร์ดครับ
2. อุปกรณ์ที่ต้องเตรียม
-
บอร์ด ESP32
-
ตัวต้านทาน (Resistor): ขนาด 10k (1 ตัว) และ 1k (1 ตัว)
-
โมดูลลดแรงดัน (Step Down): เพื่อแปลงไฟจากแบต 12V มาเลี้ยงบอร์ด ESP32 (เหลือ 5V)
3. สูตรคำนวณที่ใช้
ใช้สูตร “แบ่งแรงดัน” ง่ายๆ ดังนี้ครับ: แรงดันที่ส่งเข้าบอร์ด = แรงดันแบตเตอรี่ x (ตัวต้านทานตัวล่าง / (ตัวต้านทานตัวบน + ตัวต้านทานตัวล่าง))
ตัวอย่าง: ถ้าใช้ตัวบน 10k และตัวล่าง 1k
-
ถ้าแบตเตอรี่มีไฟ 14.6 โวลต์
-
ผ่านวงจรนี้แล้วจะเหลือแค่ 1.32 โวลต์ (ปลอดภัยสำหรับบอร์ด 100%)
4. แจกโค้ดตัวเต็ม (Full Source Code)
ก๊อปปี้โค้ดนี้ไปใส่ในโปรแกรม Arduino IDE แล้ว Flash ลงบอร์ดได้เลยครับ (อย่าลืมเปลี่ยนชื่อ Wi-Fi และรหัสผ่านด้วยนะ)
/code
/* * Project: Smart Battery Monitor 12V v1.3
* Source: satawat.com
* Update: 2026-03-11
*/
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
const char* ssid = “ชื่อไวไฟของคุณ”; // แก้เป็นชื่อ Wi-Fi บ้านคุณ
const char* password = “รหัสผ่านไวไฟ”; // แก้เป็นรหัสผ่าน Wi-Fi
const char* hostName = “esp32-0B060089FD08”;
WebServer server(80);
float vInput = 0.0;
const float R1 = 10000.0; // ตัวต้านทาน 10k
const float R2 = 1000.0; // ตัวต้านทาน 1k
void handleRoot() {
String msg = (vInput < 12.0) ? “แบตเตอรี่ต่ำ! กรุณาชาร์จ” : “สถานะปกติ”;
String html = “<html><head><meta charset=’UTF-8′><meta name=’viewport’ content=’width=device-width, initial-scale=1′>”;
html += “<style>body{font-family:Tahoma; text-align:center; padding-top:50px; background:#f0f0f0;}”;
html += “.card{background:#fff; padding:20px; border-radius:15px; display:inline-block; box-shadow:0 4px 6px rgba(0,0,0,0.1);}</style></head>”;
html += “<body><div class=’card’><h1>ระบบเช็คไฟแบต 12V</h1>”;
html += “<h2 style=’color:blue; font-size:40px;’>” + String(vInput, 2) + ” โวลต์</h2>”;
html += “<p><b>สถานะ:</b> ” + msg + “</p>”;
html += “<hr><p>Node ID: ” + String(hostName) + “.local</p></div></body></html>”;
server.send(200, “text/html”, html);
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); }
if (MDNS.begin(hostName)) { Serial.println(“mDNS started”); }
server.on(“/”, handleRoot);
server.begin();
Serial.println(“พร้อมใช้งาน! เข้าดูได้ที่ IP: ” + WiFi.localIP().toString());
}
void loop() {
int analogVal = analogRead(34); // ต่อสายจากจุดแบ่งแรงดันเข้าขา 34
vInput = (analogVal / 4095.0) * 3.3 * ((R1 + R2) / R2);
server.handleClient();
delay(1000);
}
/code