Skip to content

สอนทำ Smart Monitor ระบบ Solar Cell 12V ด้วย ESP32 ดูค่าไฟผ่านมือถือ (ฉบับมือใหม่ทำได้จริง)

  • by

วิธีทำระบบดูไฟแบตเตอรี่ 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

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *