ในยุคที่คนไทยหันมาเลี้ยงต้นไม้หายาก (อย่างพวกมอนสเตอร่า เฟิร์น) หรือสัตว์แปลกๆ (Exotic pets) กันมากขึ้น ปัญหาคลาสสิกที่หลายคนเจอคือ "สภาพอากาศบ้านเราที่เอาแน่เอานอนไม่ได้" บางวันร้อนจัด บางวันเปิดแอร์จนอากาศแห้งเกินไป ตอนแรกผมก็คิดว่าแค่รดน้ำ เปิดไฟก็จบแล้ว แต่จริงๆ ต้นไม้และสัตว์เลื้อยคลานต้องการการคุมสภาพแวดล้อมที่เป๊ะกว่านั้นครับ ทั้งอุณหภูมิ ความชื้นในอากาศ วงจรกลางวัน/กลางคืน และความชื้นในดิน
แทนที่จะต้องมานั่งวัดค่าและคอยรดน้ำเองทุกวัน ผมเลยตัดสินใจสร้าง ตู้ Terrarium อัจฉริยะ (Smart Terrarium System) โดยใช้บอร์ด ESP32 เป็นสมองกลหลัก มันสามารถจัดการเรื่องรดน้ำ สร้างหมอก ระบายอากาศ และเปิดปิดไฟให้เราแบบอัตโนมัติ 100% แถมยังมี Web Dashboard เท่ๆ ให้เราดูสถานะผ่านมือถือได้ด้วย!
อุปกรณ์ที่ต้องใช้ (Supplies)
โปรเจกต์นี้พยายามใช้อุปกรณ์พื้นฐานที่หาได้ง่ายครับ (ถ้าใครกำลังหาบอร์ด ESP32, เซนเซอร์, โมดูลรีเลย์ หรือเส้นพลาสติก 3D Print ทนความชื้นอย่าง PETG เพื่อเอามาทำตู้ Terrarium แวะไปช้อปอุปกรณ์สาย IoT ได้ที่ Globalbyte เลยครับ ของครบจบในที่เดียว!)
-
ESP32 Development Board (รุ่นที่มีหน้าจอ OLED ในตัว หรือจะใช้จอแยกก็ได้)
- โมดูลแปลงไฟ Hi-Link AC to DC
- เซนเซอร์วัดอุณหภูมิและความชื้น DHT11
- เซนเซอร์วัดความชื้นในดิน (Soil Moisture Sensor)
- เครื่องทำหมอก (Mist maker module) และ พัดลม 5V
- ปั๊มน้ำขนาดเล็ก (Water Pump)
- ไฟ Adafruit NeoPixel Ring: WS2812 5050 RGB LED
- โมดูลรีเลย์ 3 ช่อง (Seeed Studio Grove - Relay)
- Breadboard หรือแผ่น PCB เปล่า, ปุ่มกด (Push Button), สายจัมเปอร์
- ตู้ปลาเก่าๆ (ขนาดไหนก็ได้) และชิ้นส่วน 3D Print สำหรับยึดเครื่องทำหมอก
แนะนำบริการ 3D Printing จาก Justway
สำหรับชิ้นส่วนเคสและกลไกในโปรเจกต์นี้ ผมได้รับความร่วมมือจาก Justway ผู้ให้บริการ 3D Print และผลิตชิ้นส่วนระดับโลกที่ Maker หลายคนไว้วางใจ เขามีบริการปริ้นท์หลายแบบ (FDM, SLA, SLS) วัสดุให้เลือกเป็นร้อยแบบ และผลิตไวใน 3 วันทำการ ใครอยากทำเคสโปรเจกต์เนี๊ยบๆ ลองไปใช้บริการได้ที่ Justway.com ครับ
Step 1: หลักการทำงานของระบบ (How It Works)
ระบบควบคุม (Control logic) ถูกออกแบบมาให้คิดแทนเราแบบนี้ครับ:
- ความชื้นในดินต่ำกว่า 30% → ปั๊มน้ำ เปิด (ON)
- ความชื้นในดินสูงกว่า 50% → ปั๊มน้ำ ปิด (OFF)
- ความชื้นในอากาศต่ำกว่าเกณฑ์ → เครื่องพ่นหมอก เปิด (ON)
- อุณหภูมิสูงกว่าเกณฑ์ → พัดลม เปิด (ON)
- เซนเซอร์พังหรืออ่านค่าไม่ได้ → ปิดทุกอย่างทันที (Fail-safe)
เพื่อให้ระบบเสถียร เราจะใช้หลักการ Hysteresis คือไม่ให้สวิตช์เปิด/ปิดรัวๆ ตามค่าที่แกว่งไปมา แต่จะรอให้ข้ามเส้นค่าที่ตั้งไว้แบบชัดเจนก่อนถึงจะสั่งงาน ช่วยถนอมรีเลย์ไม่ให้พังไวครับ
หน้าจอ OLED จะบอกสถานะทั้งหมด และไฟวงแหวน LED จะแสดงสีให้รู้ทันที เช่น สีเขียว (ปกติ), สีฟ้า (กำลังรดน้ำ), สีม่วง (พ่นหมอก), สีแดง (เซนเซอร์พัง) ระบบ Dashboard ทำงานตรงจาก ESP32 เลย ไม่ต้องผ่าน Cloud แค่เข้าพิมพ์ IP Address (เช่น http://10.112.43.248/) ในเบราว์เซอร์ก็ควบคุมได้แล้ว ทั้งโหมด AUTO และ MANUAL
Step 2: ผังการต่อวงจร (Wiring Diagram)
การต่อวงจรเป็นแบบตรงไปตรงมาครับ โดยอิงตามพินของ ESP32 (Wemos Lolin32) ดังนี้:
-
OLED Display: SDA → GPIO 5, SCL → GPIO 4 (ถ้าใช้จอแยกให้ใช้ GPIO 21, 22)
-
DHT11 Sensor: DATA → GPIO 12
-
Soil Moisture Sensor: AO (Analog) → GPIO 13
-
Push Button: ขาหนึ่งต่อ GPIO 14, อีกขาต่อ GND
-
WS2812 LED: DIN → GPIO 15
-
Relay Module: Relay 1 (พัดลม) → GPIO 25, Relay 2 (ปั๊มน้ำ) → GPIO 26, Relay 3 (พ่นหมอก) → GPIO 16
ข้อควรระวัง: อย่าลืมต่อสาย GND (Ground) ของทุกอุปกรณ์เข้าด้วยกัน (Common Ground) นะครับ ไม่งั้นระบบจะรวนได้
Step 3: เตรียมบอร์ดหลัก (Preparing the Main Board)
ก่อนจะลงตะกั่วบัดกรี ให้จัดวาง Layout บน Perfboard ก่อนครับ วางโมดูลแปลงไฟ Hi-Link ไว้ก่อน เพราะตัวใหญ่และต้องเว้นระยะห่างจากฝั่งไฟ AC ให้ปลอดภัย วาง Header สำหรับเสียบ ESP32 และ Relay ให้เรียบร้อย
เมื่อบัดกรีเสร็จ ให้ใช้มัลติมิเตอร์เช็ค Continuity ดูว่าขา 5V กับ GND ช็อตกันหรือเปล่า ก่อนที่จะเสียบไฟจริงครับ!
Step 4: ติดตั้งเซนเซอร์และเครื่องพ่นหมอก (Sensors & Mist System)
เครื่องพ่นหมอกและเซนเซอร์ DHT11 จะถูกยึดไว้ในชิ้นส่วน 3D Print ทรงหยดน้ำที่อยู่ก้นตู้ การวางมันไว้ด้วยกันจะทำให้เซนเซอร์จับความชื้นของหมอกได้แม่นยำที่สุดครับ (เครดิตไฟล์ 3D จาก jkr115) แนะนำให้ใช้พลาสติก PETG ในการปริ้นท์เพราะทนความชื้นได้ดีกว่า PLA ครับ ไม่ต้องใช้ Support ตอนปริ้นท์
Step 5: การต่อพัดลม ไฟ และรีเลย์ (Connecting Relays)
ในการต่ออุปกรณ์กินไฟเยอะอย่าง พัดลม, ปั๊มน้ำ, และพ่นหมอก เราจะนำสายไปต่อผ่านขั้ว NO (Normally Open) และ COM ของรีเลย์ครับ เพื่อให้ค่าเริ่มต้นของอุปกรณ์ทุกตัวคือ "ปิด" (ปลอดภัยไว้ก่อน) และจะทำงานก็ต่อเมื่อ ESP32 สั่งทริกเกอร์เท่านั้น ส่วนไฟ LED WS2812B ต่อตรงเข้าบอร์ด ESP32 ได้เลยไม่ต้องผ่านรีเลย์ครับ
Step 6: ประกอบทุกอย่างลงตู้ปลา (Installing Everything in Aquarium)
เจาะรูด้านข้างตู้ปลาเพื่อติดพัดลมเป่าอากาศ ติดตั้งไฟ LED วงแหวนไว้ด้านบน (จะห้อยหรือแปะฝาก็ได้) ส่วนเซนเซอร์วัดดินก็ปักลงดินไปเลยครับ ข้อควรระวัง: เอาวงจรและบอร์ดควบคุมหลักไว้ "นอกตู้" นะครับ อุปกรณ์อิเล็กทรอนิกส์กับความชื้นไม่ถูกกันอย่างแรง ลอง Test รันระบบแห้งดูก่อนจะยิงซิลิโคนปิดผนึกนะครับ
Step 7: อัปโหลดโค้ดลง ESP32 (Programming)
โหลดโค้ดโปรเจกต์ทั้งหมดได้จาก Github Repository แตกไฟล์ .zip แล้วเปิดไฟล์ .ino ด้วย Arduino IDE ครับ
การตั้งค่า Arduino IDE:
ไปที่ File → Preferences ใส่ลิงก์ https://dl.espressif.com/dl/package_esp32_index.json แล้วไปโหลดบอร์ด ESP32 มาลง จากนั้นลง Library ที่จำเป็น (Adafruit GFX, SSD1306, NeoPixel, DHT)
// ก่อนกด Upload ให้แก้ชื่อ WiFi และรหัสผ่านในโค้ดก่อนนะครับ
const char* WIFI_SSID = "YourWiFiName";
const char* WIFI_PASS = "YourWiFiPassword";
const char* NTP_SERVER = "pool.ntp.org";
const long GMT_OFFSET = 19800; // ตั้งค่า Timezone ของไทยคือ UTC+7 (25200) นะครับ
const int DST_OFFSET = 0;
Step 8: เจาะลึก Web Dashboard
เมื่อ ESP32 ต่อเน็ตติด มันจะโชว์ IP Address ขึ้นมาบนจอ OLED (เช่น http://10.112.43.248) เอาเลขนี้ไปพิมพ์ในเบราว์เซอร์มือถือหรือคอมพิวเตอร์ที่ต่อ Wi-Fi วงเดียวกันได้เลยครับ ในหน้าเว็บจะมีเมนู:
-
Overview: ดูค่าเรียลไทม์ และมี Banner แจ้งเตือนฉุกเฉิน
-
Controls: ปุ่มสลับโหมด AUTO/MANUAL และปุ่มเปิด/ปิด อุปกรณ์รายตัว
-
Thresholds: ไว้ตั้งค่าตัวเลขจุดทริกเกอร์ต่างๆ (ตั้งอุณหภูมิ, ความชื้น, ดิน)
-
Schedule: ตั้งเวลาพ่นหมอกแบบ Fix เวลา (เหมาะกับพืชที่ชอบหมอกเป็นช่วงเวลา)
-
Graphs: กราฟย้อนหลัง ช่วยให้เราวิเคราะห์เทรนด์และตั้งค่า Threshold ได้แม่นยำขึ้น
Step 9: ทดสอบระบบ (Testing) & ดาวน์โหลดไฟล์
หลังจากประกอบเสร็จและรันระบบมาสักพัก บอกเลยว่าเวิร์กมากครับ! ผมแทบไม่ต้องคอยมาเช็คหรือพ่นน้ำให้ต้นไม้เลย ระบบมันจัดการตัวเองได้หมด แค่เปิดดู Dashboard เป็นครั้งคราวเพื่อความชัวร์ก็พอ
ดาวน์โหลดไฟล์โปรเจกต์ทั้งหมด:
อ้างอิงข้อมูลจาก: Globalbyteshop Blog
ต้นฉบับโปรเจกต์โดย: rau7han | Original Link
*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากโปรเจกต์ต้นฉบับภาษาอังกฤษ ข้อมูลและโค้ดฉบับภาษาไทยอาจมีการปรับคำอธิบายเพื่อให้เข้าใจง่าย สามารถตรวจสอบข้อมูลเชิงเทคนิคและไฟล์ต้นฉบับอย่างละเอียดได้ที่
ต้นฉบับภาษาอังกฤษ