กลับไปหน้ารวมไฟล์
smart-shower-control-a9b937.md

ระบบจัดการฝักบัวอัจฉริยะ ([Arduino](https://s.shopee.co.th/7fUgFAWSki) Smart Shower) ฉบับพี่สอนน้อง

เฮ้ยน้อง! เคยเจอปัญหาอาบน้ำเพลินจนน้ำหมดแทงค์ หรือคนข้างหลังไม่ได้ใช้น้ำอุ่นไหม? โปรเจกต์ Smart Shower นี้พี่จัดให้ เอาไว้คุมการใช้น้ำและประหยัดค่าไฟ/ค่าแก๊สไปในตัว หลักการคือมันจะตัดน้ำอุ่นทิ้งถ้าเราอาบน้ำนานเกินเวลาที่ตั้งไว้ จะได้แบ่งคนอื่นอาบมั่งนะวัยรุ่น ส่วนเรื่องความปลอดภัยไม่ต้องห่วง ถ้าไฟดับขึ้นมา ทั้งน้ำร้อนน้ำเย็นยังไหลได้ปกติ เพราะเราเลือกใช้ Solenoid Valve แบบ Normally-open (N.O.) คือถ้าไม่มีไฟจ่ายมันจะเปิดค้างไว้ อาบน้ำต่อได้สบายใจหายห่วง!

1 - อุปกรณ์ที่ต้องใช้ (Components)

ลิสต์ของที่ต้องเตรียมก็ตามนี้เลย (ในวงเล็บคือรุ่นที่พี่ใช้จริงนะน้อง):

  1. บอร์ด Arduino (รุ่นยอดนิยม Arduino UNO)
  2. Breadboard กับสายไฟระโยงระยาง
  3. [Relay](https://s.shopee.co.th/3fyXTmWPbL): 1-channel แบบ low level trigger (TZT KY-019 5V)
  4. LED 2 ดวง (สีเขียว 1, สีแดง 1)
  5. Resistors (ตัวต้านทานขนาด 330Ω สองตัว)
  6. [Buzzer](https://s.shopee.co.th/6pvZFdZdRf) (แบบ Active Buzzer รุ่น TMB09A03)
  7. Flow [Sensor](https://s.shopee.co.th/7VBG2rX65j) วัดการไหลของน้ำ (YF-B7 5VDC)
  8. Solenoid valve แบบ Normally-open (12VDC)
  9. Dual Output Power Supply (จ่ายไฟ 5VDC และ 12VDC)

โน้ตไว้นิดนะน้อง Flow Sensor กับ Solenoid Valve ต้องเลือกขนาดให้แมตช์กับท่อน้ำที่บ้านเราด้วยล่ะ

2 - การติดตั้งและการต่อสาย (Installation & Connections)

ภาพรวมการติดตั้งระบบ Smart Shower แบบหล่อเท่ดูได้ตามรูปนี้เลย:

มาดูการต่อสายเข้ากับบอร์ด Arduino กันบ้าง จัดไปตามนี้:

  1. Flow Sensor ต่อเข้าที่ Digital Input Pin 2 (ใช้สำหรับ External Interrupt จะได้แม่นๆ)
  2. LED สีแดง ต่อเข้า Digital Output Pin 7
  3. LED สีเขียว ต่อเข้า Digital Output Pin 5
  4. Buzzer ต่อเข้า Digital Output Pin 6
  5. Relay ต่อเข้า Digital Output Pin 11

ส่วนแผนผังการต่อวงจร (Schematic) จัดไปตามรูปนี้ ห้ามต่อผิดนะ เดี๋ยวบอร์ดบิน!

3 - อธิบายการทำงานของโปรแกรม

โค้ดใน Arduino ตัวนี้พี่เขียนโดยใช้หลักการ State Machine คอยวัดค่าการไหลของน้ำทุกๆ วินาทีและจับเวลาเพื่อคุมสถานะต่างๆ ทำให้ระบบเราฉลาดพอที่จะเช็กเงื่อนไขการเลิกอาบน้ำได้ 2 แบบ (เดี๋ยวพี่เหลาให้ฟังข้างล่าง)

สถานะ (States) ที่พี่ตั้งไว้มีดังนี้:

  1. State::IDLE (จอดนิ่งรอคนมาอาบ)
  2. State::BATH (กำลังอาบน้ำเพลินๆ)
  3. State::RECOVERY (ช่วงพักเครื่องหลังอาบเสร็จ)

ส่วนค่าเวลาที่ต้องตั้งค่า (Definitions):

  1. MAX_WATER_TIME - เวลารวมที่น้ำไหลได้สูงสุดในหนึ่งรอบ (หน่วยเป็นวินาที)
  2. MAX_BATH_LENGTH - เวลาที่ยอมให้ยืนแช่ในห้องน้ำได้นานสุด (หน่วยเป็นวินาที)
  3. WARN_TIME - เวลาเตือนก่อนจะตัดน้ำ (หน่วยเป็นวินาที)
  4. RECOVERY_TIME - เวลาพักเครื่องห้ามใครอาบต่อทันที (หน่วยเป็นนาที)
  5. TRANSITION_TIME - ช่วงเวลาหน่วงก่อนเปลี่ยนจาก IDLE เป็น BATH (หน่วยเป็นวินาที)

นอกจากนี้ยังมี FLOW_THRESHOLD เอาไว้ตั้งค่าความแรงน้ำขั้นต่ำที่จะให้ระบบเริ่มนับว่ามีคนอาบน้ำจริงๆ (ป้องกันกรณีน้ำหยดหรือ residual flow แล้วระบบทำงานมั่ว)

ค่าพวกนี้วัยรุ่นไปปรับแต่ง (Tune) ในบอร์ด Arduino เองได้ง่ายๆ เลยนะ

3.1 - ขั้นตอนการทำงาน (Program Flow)

ตอนแรกเครื่องจะอยู่ที่สถานะ IDLE คอยวัดการไหลน้ำด้วยความถี่ 1Hz ถ้า Flow Sensor จับได้ว่าน้ำไหลแรงกว่าค่า FLOW_THRESHOLD มันจะเริ่มนับเวลา ถ้าผ่านไปจนครบ TRANSITION_TIME แล้วน้ำยังไหลอยู่ มันถึงจะเข้าสู่สถานะ BATH ที่ทำแบบนี้เพราะป้องกันกรณีเราแค่เปิดน้ำล้างหน้าหรือล้างห้องน้ำแป๊บเดียว ระบบจะได้ไม่รันมั่วซั่วไงล่ะ

พอเข้าสู่สถานะ BATH แล้ว มันจะโดดไปสถานะ RECOVERY (ตัดน้ำ) ก็ต่อเมื่อเจอเงื่อนไขอย่างใดอย่างหนึ่งดังนี้:

  1. ยืนแช่ในห้องน้ำนานเกินค่า MAX_BATH_LENGTH
  2. เปิดน้ำทิ้งไว้นานเกินค่า MAX_WATER_TIME (นับเฉพาะตอนน้ำไหล)

อย่าลืมนะน้อง เวลาที่น้ำไหลจริงๆ จะรวมช่วง TRANSITION_TIME เข้าไปด้วยนะ

และก่อนจะโดดไปตัดน้ำ ระบบจะมีการเตือนก่อนเสมอ! ในช่วงท้ายของสถานะ BATH (ตามเวลา WARN_TIME) เจ้า Buzzer จะดัง "ติ๊ดๆ" และ LED สีเขียวจะกะพริบรัวๆ เป็นสัญญาณบอกว่า "เฮ้ย! ใกล้หมดเวลาสนุกแล้วนะน้อง!"

3.2 - ผังงาน (Flowchart)

สรุปการทำงานของโค้ดให้ดูง่ายๆ ตาม Flowchart นี้เลย:

4 - การตั้งค่าสำหรับผู้ใช้งาน

พารามิเตอร์ที่พี่บอกไปข้างบน น้องเข้าไปแก้ได้ง่ายๆ ในไฟล์ `main.ino` ตรงส่วนที่เขียนว่า `USER DEFINITIONS` ที่อยู่ต้นๆ ไฟล์เลย

แก้เสร็จแล้วก็อย่าลืม Re-upload ลงบอร์ด Arduino ด้วยล่ะ ไม่งั้นค่าไม่เปลี่ยนนะวัยรุ่น

5 - ผลงานของพี่ (My implementation)

มาดูรูปงานที่พี่ประกอบเสร็จแล้วเป็นแนวทางนะ

พี่จับเอา Arduino, Breadboard, Power Supply และสายไฟทั้งหมด ยัดลงกล่องกันน้ำให้เรียบร้อย เจาะรูเล็กๆ 2 รูไว้โชว์ LED และอีกรูให้เสียง Buzzer มันลอดออกมาได้ ส่วน Solenoid Valve กับ Flow Sensor ก็เอาไปต่อเข้ากับระบบท่อน้ำอุ่นตามรูปข้างล่างนี้เลย หล่อเท่ไหมล่ะ!

6 - ช่องทางการติดต่อ

ถ้ามีคำถาม สงสัยตรงไหน หรืออยากให้พี่ช่วยดูโปรเจกต์ Arduino ตัวนี้เพิ่มเติม ทักมาคุยกันได้ (แต่อย่ารัวนะ พี่ทำงานอยู่):

Rodrigo Oliveira

- GitHub: [https://github.com/rodrigo-moliveira]

- LinkedIn [https://www.linkedin.com/in/rodrigo-moroliveira/]

พี่พยายามจะเข้ามาตอบให้ไวที่สุดนะน้อง ถ้าเจอ Bug หรือมีไอเดียเจ๋งๆ อยากพัฒนาต่อ ก็ไปเปิด Issue ใน GitHub ไว้ได้เลย เดี๋ยวพี่ตามไปดู

ขอบใจที่สนใจโปรเจกต์นี้ จัดไปวัยรุ่น!

รายละเอียดทางเทคนิคเพิ่มเติม (ฉบับเจาะลึก)

ตรรกะการจัดการน้ำ (Water Management Logic)

ระบบ Smart Shower Control ตัวนี้ออกแบบมาเพื่อลดการสิ้นเปลืองน้ำและคุมประสบการณ์การอาบน้ำให้เป๊ะที่สุด

  • Sensors: ใช้ Flow Sensor (YF-S201) วัดอัตราการไหลแบบ Real-time และมีเซนเซอร์อุณหภูมิ DS18B20 ไว้คอยเช็กความร้อนของน้ำด้วย
  • Automation: ใช้ Electromagnetic Solenoid Valve ทำหน้าที่เป็นมือมืดคอยสั่งตัดน้ำอัตโนมัติ ถ้าปริมาณน้ำรวมถึงเกณฑ์ (เช่น 50 ลิตร) หรือใช้เวลาเกินกำหนด

ส่วนแสดงผล (User Interface)

  • การตอบสนอง (Feedback): มีหน้าจอ 16x2 I2C LCD คอยบอกว่าตอนนี้อุณหภูมิกี่องศา และใช้น้ำไปกี่ลิตรแล้ว
  • ความปลอดภัย: ตัว Arduino จะคอยเฝ้าระวังไม่ให้อุณหภูมิน้ำสูงเกินไปจนลวกผิว ถ้ามันร้อนเกินไป Buzzer จะแผดเสียงเตือนทันที เหมาะมากสำหรับเอาไปทำบ้านอัจฉริยะ (Smart Home) สายรักษ์โลกนะน้อง!

ข้อมูล Frontmatter ดั้งเดิม

title: "Smart Shower Control"
description: "The Smart Shower Management System is an Arduino control system designed for reducing water use and energy costs during showers."
author: "rodrigo-moliveira"
category: "Home & Automation"
tags:
  - "Smart appliances"
  - "Environmental Sensing"
views: 569
likes: 1
price: 699
difficulty: "Intermediate"
components:
  - "1x Solenoid Valve"
  - "1x Power Supply 5V"
  - "1x Green LEDs"
  - "1x Hall effect flow sensor"
  - "2x Resistor 330 ohm"
  - "1x 5V 1 Channel Relay Module"
  - "1x Active Buzzer 5V (HXD)"
  - "1x Power Supply 12V"
  - "1x Red LEDs"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://github.com/rodrigo-moliveira/SmartShowerArduino"
documentationLinks: []
passwordHash: "55eb9a01afb414ae898d6a032b443a44d272615e9ee1e63429472778352fcc17"
encryptedPayload: "U2FsdGVkX19T4bwAaUZL1nkEOnJLIQ51xxVqGETu7RFfeTy8zwtTUcrKIDG9h9q3SFJb/PrtpCuZkl72N5oA7wEf34BzgbWVyKPq27e+xJY="
seoDescription: "Arduino-based Smart Shower Control system designed to reduce water usage and energy costs."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/smart-shower-control-a9b937_cover.jpg"
lang: "th"