บอกลาน้ำล้นแทงก์! สร้างระบบวัดระดับน้ำอัจฉริยะ (IoT) แจ้งเตือนผ่านมือถือด้วย ESP32

Smart IoT Water Level Monitoring System

เรื่องราวทั้งหมดมันเริ่มมาจากปัญหาสุดคลาสสิกยามเช้าครับ... ตื่นมาตอนตี 5 แล้วพบว่า "น้ำล้นแทงก์ไหลทะลักเป็นน้ำตก!" เพราะเผลอเปิดมอเตอร์ปั๊มน้ำทิ้งไว้ทั้งคืนโดยไม่มีใครสังเกตเห็น

ผลลัพธ์ที่ตามมาคืออะไร? น้ำประปาสูญเปล่า ค่าไฟพุ่งกระฉูด แถมมอเตอร์ปั๊มน้ำก็ร้อนจนเกือบไหม้เพราะทำงานหนักเกินไป (Overload) ซึ่งความจริงแล้ว ปัญหานี้ไม่ได้เกิดแค่ในบ้านเราหรอกครับ แต่มันเกิดขึ้นทุกวันในบ้าน อพาร์ทเมนต์ และหมู่บ้านอีกนับพันแห่ง

ในวินาทีนั้น ผู้สร้างโปรเจกต์ก็เกิดคำถามขึ้นมาว่า "ในยุคที่เราสร้างหุ่นยนต์ โดรน และเทคโนโลยี AI กันได้แล้ว... แต่ทำไมเรายังไม่รู้เลยว่าแทงก์น้ำบ้านตัวเองมันเต็มหรือมันแห้ง? มันแปลกไปหน่อยไหม?"

และนั่นคือจุดกำเนิดของไอเดีย Smart IoT-Based Water Level Monitoring System ระบบเฝ้าระวังระดับน้ำอัจฉริยะราคาประหยัด ที่จะเข้ามาเปลี่ยนแทงก์น้ำธรรมดาของคุณให้กลายเป็นระบบสมาร์ทโฮม (Smart Home) ครับ!

สร้างแทงก์น้ำอัจฉริยะด้วยไอเทมหลักร้อย! (The Smart Solution)

เพื่อให้ไอเดียนี้จับต้องได้จริง ลงทุนน้อย และทำง่าย (DIY-friendly) อุปกรณ์ฮาร์ดแวร์ที่ถูกเลือกมาใช้จึงมีเพียงไม่กี่ชิ้น แต่ให้ประสิทธิภาพที่ครอบคลุมครับ:

  • ESP32 Board: บอร์ดไมโครคอนโทรลเลอร์ตัวเก่งที่มี Wi-Fi ในตัว ทำหน้าที่เป็นสมองกล
  • HC-SR04 Ultrasonic Sensor: เซนเซอร์วัดระยะทางด้วยคลื่นเสียง ใช้จับระดับน้ำในแทงก์โดยไม่ต้องสัมผัสกับน้ำเลย
  • Blynk IoT App: แอปพลิเคชันบนสมาร์ทโฟนสำหรับสร้าง Dashboard และรับการแจ้งเตือน
  • Relay Module (Optional): สวิตช์สั่งงานด้วยไฟฟ้า สำหรับสั่งตัดหรือต่อการทำงานของปั๊มน้ำอัตโนมัติ

💡 Pro Tip สำหรับสายคราฟต์: เนื่องจากเซนเซอร์ต้องไปติดอยู่บนยอดแทงก์น้ำที่ต้องเจอทั้งแดดและความชื้น เราขอแนะนำให้ใช้ เส้นพลาสติก 3D Print (Filament) เกรดทนทานอย่าง PETG หรือ ABS มาปริ้นท์ทำกล่องกันน้ำ (Waterproof Enclosure) เพื่อปกป้องบอร์ด ESP32 ของคุณครับ!

หากโปรเจกต์ของคุณกำลังต้องการ บอร์ด ESP32, เซนเซอร์ Ultrasonic, โมดูล Relay และวัสดุ 3D Print คุณภาพเยี่ยม แวะไปช้อปอุปกรณ์พร้อมลุยได้ที่ Globalbyte เลยครับ ครบจบในที่เดียว!

4 สเตปเสกแทงก์น้ำให้ฉลาด (Journey of Building)

  1. ติดตั้งเซนเซอร์บนยอดแทงก์ (Placing the Sensor): นำเซนเซอร์ Ultrasonic ไปติดไว้ด้านบนของแทงก์น้ำ โดยคว่ำหน้าเซนเซอร์ลงไปหาผิวน้ำ เพื่อให้คลื่นเสียงสะท้อนกลับมาวัดระยะห่าง
  2. เขียนโค้ด (Writing the Code): ลอจิกการคำนวณนั้นง่ายมากครับ: ระดับน้ำ = ความสูงทั้งหมดของแทงก์ - ระยะที่เซนเซอร์วัดได้ จากนั้นเขียนโค้ดให้บอร์ด ESP32 ส่งค่าที่คำนวณได้ผ่าน Wi-Fi ไปยังแอป Blynk ทุกๆ 1 วินาที
  3. สร้าง Dashboard บนมือถือ (Blynk Mobile Dashboard): ตั้งค่าแอปให้แสดงระดับน้ำเป็นเกจวัด (เป็นเปอร์เซ็นต์ หรือ เซนติเมตร) พร้อมตั้งเงื่อนไขสุดสมาร์ท:
    • ถ้าระดับน้ำ ≥ 95% → แจ้งเตือน: "Tank Full – Motor Turned OFF!" (น้ำเต็มแล้ว ปิดปั๊ม!)
    • ถ้าระดับน้ำ ≤ 10% → แจ้งเตือน: "Water Low – Please Turn ON Motor" (น้ำใกล้หมดแล้ว เปิดปั๊มด่วน!)
  4. ตัดการทำงานปั๊มอัตโนมัติ (Auto Motor Control): เพิ่มรีเลย์ (Relay) เข้าไปต่อกับปั๊มน้ำ เพื่อให้บอร์ด ESP32 สั่งตัดไฟปั๊มน้ำโดยอัตโนมัติทันทีที่น้ำเต็ม ไม่ต้องเดินไปสับสวิตช์เองเลยครับ

ประสบการณ์หลังใช้งานจริง (Real-Life Experience)

ชีวิตดีขึ้นแบบก้าวกระโดดครับ! ไม่ว่าจะอยู่บ้านหรืออยู่นอกบ้าน ก็สามารถเปิดดูระดับน้ำผ่านมือถือได้ตลอดเวลา ได้รับแจ้งเตือนก่อนที่น้ำจะล้น สั่งเปิด/ปิดปั๊มได้ด้วยปลายนิ้ว และที่สำคัญ... ไม่ต้องเสี่ยงปีนหลังคาขึ้นไปเปิดฝาแทงก์เพื่อเช็คน้ำอีกต่อไป! จนน้องข้างบ้านมาเห็นแล้วยังต้องร้องว่า "Bro, this is genius! หมดปัญหาเปลืองน้ำแถมไม่ต้องมานั่งเครียดเลย"

ปัญหาเดิมๆ (Problem) โซลูชัน IoT (Smart IoT Solution)
น้ำล้นแทงก์ไหลทิ้งสูญเปล่า แจ้งเตือนอัตโนมัติ + สั่งปิดมอเตอร์ทันที
ต้องปีนไปเช็คระดับน้ำด้วยตัวเอง ดูข้อมูลสด (Live data) ผ่านมือถือได้ทุกที่
มอเตอร์ปั๊มน้ำไหม้เพราะทำงานหนักเกินไป มีระบบ Relay ตัดไฟให้อัตโนมัติ (Cutoff)
น้ำหมดแทงก์แบบไม่รู้ตัว ส่งแจ้งเตือนน้ำเหลือน้อยเข้ามือถือ

แจกโค้ด ESP32 ฉบับเต็ม (Source Code)

สำหรับเพื่อนๆ ที่อยากลองทำตาม สามารถใช้โค้ดภาษา C/C++ ด้านล่างนี้ ไปปรับแต่งค่า BLYNK_AUTH_TOKEN และรหัสผ่าน Wi-Fi ของตัวเอง แล้วอัปโหลดผ่านโปรแกรม Arduino IDE ได้เลยครับ

C/C++ (ESP32 + Ultrasonic + Blynk)
/************* Smart Water Level Monitoring System *************
   Hardware: ESP32, HC-SR04 Ultrasonic Sensor, Blynk App
   Features:
   - Measure water level in tank
   - Send percentage to Blynk App
   - Show water level on Serial Monitor
   - Automatically detect tank full or empty
   - Motor control can be added easily
****************************************************************/

#define BLYNK_TEMPLATE_ID "Your_Template_ID"
#define BLYNK_TEMPLATE_NAME "Water Level Monitor"
#define BLYNK_AUTH_TOKEN "Your_Blynk_Auth_Token"

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Wi-Fi Credentials
char ssid[] = "Your_WiFi_Name";
char pass[] = "Your_WiFi_Password";

// Ultrasonic Sensor Pins
#define TRIG_PIN  5
#define ECHO_PIN  18

// Tank Dimensions (in cm)
const int TANK_DEPTH = 100; // Tank height in centimeters

long duration;
float distance, waterLevel, waterPercent;

BlynkTimer timer;

/***************** Function to Measure Water Level *****************/
void measureWaterLevel() {
  // Send ultrasonic pulse
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Read echo time
  duration = pulseIn(ECHO_PIN, HIGH);

  // Calculate Distance (cm)
  distance = duration * 0.034 / 2;

  // Calculate water level
  waterLevel = TANK_DEPTH - distance;

  // Calculate percentage
  waterPercent = (waterLevel / TANK_DEPTH) * 100.0;

  if (waterPercent < 0) waterPercent = 0;
  if (waterPercent > 100) waterPercent = 100;

  // Send data to Blynk
  Blynk.virtualWrite(V0, waterPercent);  // Water Level in %
  Blynk.virtualWrite(V1, waterLevel);    // Water Level in cm

  // Print on Serial Monitor
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print(" cm | Water Level: ");
  Serial.print(waterLevel);
  Serial.print(" cm | Tank Filled: ");
  Serial.print(waterPercent);
  Serial.println(" %");
}

/***************** Setup Function *****************/
void setup() {
  Serial.begin(115200);

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // Connect to Blynk
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  // Timer runs every 1 second
  timer.setInterval(1000L, measureWaterLevel);
}

/***************** Main Loop *****************/
void loop() {
  Blynk.run();
  timer.run();
}

ข้อคิดทิ้งท้าย (Final Thoughts)

“เทคโนโลยีไม่ใช่แค่เรื่องของการสร้างสิ่งประดิษฐ์ยิ่งใหญ่ระดับโลก แต่มันคือการนำมาใช้แก้ปัญหาเล็กๆ ในชีวิตประจำวันของเรา ระบบวัดระดับน้ำอัจฉริยะนี้ ถือเป็นก้าวเล็กๆ ที่จะพาเราไปสู่อนาคตที่สมาร์ทขึ้น มีประสิทธิภาพมากขึ้น และช่วยประหยัดน้ำได้อย่างยั่งยืน” — Yarana IoT Guru

อ้างอิงข้อมูลจาก: Globalbyteshop Blog

ต้นฉบับโปรเจกต์โดย: Yarana IoT Guru | Original Link

ดาวน์โหลดซอร์สโค้ด: ไฟล์โปรเจกต์ (.ino)

*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงประสบการณ์จากบทความโปรเจกต์ต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยและบริบทบางส่วนอาจถูกปรับแต่งเพื่อให้เข้าใจง่ายและนำไปใช้จริงได้สนุกขึ้น โปรดตรวจสอบรายละเอียดเชิงเทคนิคและการต่อวงจรไฟฟ้าอย่างรัดกุมก่อนใช้งานจริงได้ที่ เว็บไซต์ต้นฉบับ

 

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี