หน้าแรก ดูโปรเจกต์ทั้งหมด
Easy

โปรเจกต์ Irrigation System

Irrigation System ที่ค่อนข้างเรียบง่ายนี้จะคอยติดตาม Moisture ใน Soil และสั่งการ Valve ได้สูงสุด 8 ตัวเพื่อรดน้ำต้นไม้เมื่อจำเป็น

โปรเจกต์ Irrigation System

รายการอุปกรณ์และเครื่องมือ

1x Soldering iron (generic)
-
1x BTF-LIGHTING 5 Pin Electrical Connector 24AWG IP65 Male Female Connector 7.87in/20cm Extension Cable for Car
-
1x 3D Printer (generic)
-
1x 1/4" DC 12V Solenoid Valve N/C Normally Closed Water Inlet Flow Switch
-
1x 12V Power Supply - RXZ12V2A-A
🛒 สั่งซื้อ
1x URATOT 60 Pieces 360 Degree Adjustable Irrigation Drippers with Barbed Connector
-
1x Kalolary irrigation fittings
-
1x Raindrip 016010T 1/4-Inch by 100-Feet Black Tubing
-
1x Favordrory 6 Pieces 304 Stainless Steel 3mm x 300mm Model Straight Metal Round Shaft Rods
-
1x 3D Printer Heatsink Kit + Thermal Conductive Adhesive Tape, Cooler Heat Sink Cooling TMC2130 TMC2100 A4988 DRV8825 TMC2208 Stepper Motor Driver Module (22pcs)
-
1x 22AWG 2 Conductor Wire, 20M/65.6ft Flexible Black PVC Jacketed Hookup Wire
🛒 สั่งซื้อ
1x 22 Gauge 2 Conductor Electrical Wire, 20M/65.6ft Flexible Black PVC Jacketed Hookup Wire, 22 AWG Tinned Copper Extension Cord
🛒 สั่งซื้อ
1x Irwin Hanson 6-32NC Self-Aligning Die
-
1x Ogrmar ABS Plastic Dustproof Waterproof IP65 Junction Box Universal Durable Electrical Project Enclosure With Lock (8.6"x6.7"x4.3")
🛒 สั่งซื้อ
1x DZS Elec 2-Pack 5V 4-Channel Relay Module with Optocoupler Active Low Level Amplifier Trigger JD-VCC Relay Power VCC Power
🛒 สั่งซื้อ
1x Raindrip R325C 3/4-Inch Hose Thread Swivel to 1/4-Inch Tubing Adaptor
-
1x 10pcs NRF24L01+ 2.4GHz Wireless RF Transceiver Module
🛒 สั่งซื้อ
1x Arduino Mega 2560
🛒 สั่งซื้อ
1x HiLetgo ILI9341 2.8" SPI TFT LCD Display Touch Panel 240X320 with PCB 5V/3.3V STM32
🛒 สั่งซื้อ
4x Lantee PG 9 Cable Gland
-
1x MAKERELE waterproof outdoor enclosure
-
}

รายละเอียดและวิธีทำ

Introduction

โปรเจกต์นี้มีการนำเสนอสองรูปแบบที่แตกต่างกันสำหรับระบบพื้นฐานเดียวกัน รูปแบบแรกและเรียบง่ายที่สุดจะใช้ Arduino Nano และควบคุม Valve ได้สูงสุดแปดตัว โดยใช้ Moisture Sensor แบบทำเองเป็น Input การเชื่อมต่อกับระบบนี้ทำผ่านระบบ Home Automation ซึ่งในที่นี้เลือกใช้ Home Assistant โดยสื่อสารผ่านเครือข่าย MySensors RF mesh จากนั้นระบบจะสามารถควบคุมได้จากอุปกรณ์พกพาที่เชื่อมต่ออินเทอร์เน็ต ผมได้พยายามรวบรวมทุกสิ่งที่คุณต้องการเพื่อทำขั้นตอนแรกนี้ให้สำเร็จ

ขั้นตอนที่สองจะใช้โครงสร้างพื้นฐานเดิมแต่เปลี่ยน Arduino Nano เป็น Arduino Mega ด้วยความสามารถในการประมวลผลที่เพิ่มขึ้น ระบบที่สองนี้จึงมีการชดเชยอุณหภูมิ (Temperature Compensation) สำหรับการวัดความชื้น และมีรูทีนการตรวจสอบข้อผิดพลาดมากมาย ขั้นตอนนี้ยังเพิ่มหน้าจอสัมผัส (Touch Screen) สำหรับการควบคุมระบบโดยตรงในพื้นที่ ซอฟต์แวร์สามารถกำหนดค่าให้ควบคุมผ่านหน้าจอสัมผัสเพียงอย่างเดียว หรือจะใช้ทั้งหน้าจอสัมผัสและ Home Assistant ร่วมกันก็ได้ ระบบนี้เหมาะอย่างยิ่งสำหรับผู้ที่ไม่สนใจเรื่อง Home Automation แต่ยังต้องการฟังก์ชันการทำงานที่ครบถ้วน

Project Layout Details

ระบบในเฟสแรกออกแบบมาเพื่อรดน้ำตั้งแต่ 1 ถึง 8 กระถางหรือพื้นที่ในสวน กลยุทธ์ที่ใช้คือการวัดความชื้นของดินโดยใช้ Soil Resistance Sensor และหากค่าต่ำเกินไปก็จะสั่งให้ Valve ทำงาน ดังนั้นสำหรับ 8 กระถาง จึงจำเป็นต้องมี Soil Sensor 8 ตัว และ Valve 8 ตัว โดยใช้ Arduino Nano (Controller) ในการสั่งเปิด-ปิด Valve และสื่อสารข้อมูลกับระบบ Home Automation

Block Diagram ใน Figure 1 แสดงการเชื่อมต่อของส่วนประกอบต่างๆ ในระบบ ระบบมีส่วนประกอบหลักสามส่วน คือ ระบบอิเล็กทรอนิกส์, กล่องครอบ Valve และส่วนประกอบระบบท่อ ส่วนประกอบอิเล็กทรอนิกส์ประกอบด้วย Arduino ที่ติดตั้งบน PCB เฉพาะของโปรเจกต์, Relay Board แบบ 4 ช่องจำนวนสองบอร์ด, Terminal Strip และ Power Supply 12V 2A สำหรับระบบที่สร้างและอธิบายไว้นี้ จะมีกล่องครอบ Valve สองกล่อง แต่ละกล่องบรรจุ Valve 4 ตัว ความจำเป็นที่ต้องมีกล่องครอบเนื่องจาก Valve พร้อมขั้วต่อไฟฟ้าถูกติดตั้งไว้กลางแจ้ง กล่องนี้มีไว้เพื่อป้องกันจุดต่อของ Valve จากสภาพอากาศ สำหรับการใช้งานในร่มไม่จำเป็นต้องมีกล่องครอบ และสามารถติดตั้ง Valve บนโครงสร้างรองรับได้เลย ส่วนประกอบสุดท้ายคือระบบท่อ สำหรับการใช้งานนี้ใช้สายไมโครพีอี (Drip Tubing) ขนาด ¼ นิ้ว ซึ่งเพียงพอสำหรับกระถางขนาด 7” x 36” แต่อาจไม่เพียงพอสำหรับพื้นที่ที่ใหญ่กว่าหรือกระถางที่ใหญ่กว่า อย่างไรก็ตาม ด้วยการปรับเปลี่ยนเพียงเล็กน้อย ระบบนี้สามารถแก้ไขให้รองรับ Valve ที่ใหญ่ขึ้นได้มาก (จะกล่าวถึงเพิ่มเติมในภายหลัง) ชุดหัวพ่นน้ำ 5 หัวเชื่อมต่อกับท่อขนาด 7 นิ้ว 4 ส่วน หัวพ่นน้ำตัวกลางเชื่อมต่อกับข้อต่อสามทางที่เป็นทางเข้าน้ำ หัวพ่นน้ำเหล่านี้มีความสามารถในการปรับอัตราการไหล ซึ่งมีประโยชน์ในการทำให้ปริมาณน้ำที่ออกจากแต่ละหัวเท่ากัน

Figure 1. Block Diagram of Irrigation System.

เนื่องจากระบบรดน้ำนี้ถูกติดตั้งไว้กลางแจ้ง อุปกรณ์อิเล็กทรอนิกส์จึงต้องอยู่ในกล่องกันน้ำ ใน Figure 2 และ 3 แสดงส่วนฝาและตัวกล่องแยกกัน โดยที่ฝาบรรจุ Relay และ Terminal Strip ส่วนตัวกล่องบรรจุ Arduino, Power Supply และวงจรควบคุม Relay เป็นแบบ 4 ตัวต่อบอร์ด จำนวนสองบอร์ด รวมเป็น Relay 8 ตัว แม้ว่าจะมี Relay Board แบบ 8 ตัวจำหน่าย แต่ขนาดมันไม่พอดีกับกล่อง ทว่า Relay Board แบบ 4 ตัวสองบอร์ดใส่ได้พอดี Terminal Strip ใช้เพื่อช่วยให้การเชื่อมต่อสายไฟไปยัง Valve ทำได้ง่ายขึ้น

Figure 2. The lid of the waterproof enclosure housing the relays and the terminal strip.

Figure 3. The base of the waterproof enclosure enclosure with Arduino and Supply.

Valve ถูกจัดเก็บไว้ในกล่องครอบสองชุด ชุดละ 4 ตัว (ดู Figure 4)

มีการเพิ่ม Flow Meter เพื่อให้ข้อมูลการไหลและช่วยติดตามว่าพืชได้รับน้ำเมื่อใดและบ่อยแค่ไหน ข้อมูลจะถูกเก็บไว้ใน Database ของ Home Assistant (ถ้ามีการใช้งาน) ข้อมูลนี้รวมถึงสถานะของ Entity ทั้งหมดตามเวลา โดยการดูข้อมูลสถานะ เราจะบอกได้ว่า Valve ตัวไหนถูกเปิด และนำไปหาความสัมพันธ์กับข้อมูลจาก Flow Meter ได้ SQL_lite เป็นซอฟต์แวร์ฟรีที่ยอดเยี่ยมซึ่งช่วยในการตรวจสอบ Database ของ Home Assistant

Figure 4. Valve enclosure hosing four valves. Water in on top, out bottom.

ระบบที่แสดงในรูปหน้าปกติดตั้งไว้ใต้ระเบียงบนผนังอาคาร ท่อน้ำเดินจากระบบผ่านใต้ระเบียงไปยังตำแหน่งของแต่ละกระถางทั้ง 6 ใบที่วางอยู่บนราวระเบียงหรือบนพื้นระเบียง Figure 5 เป็นภาพของกระถางใบหนึ่งบนราวระเบียง ท่อจ่ายน้ำและสายไฟไปยัง Sensor ถูกจัดวางไว้หลังเสาราวระเบียงจึงมองไม่เห็น

Figure 5. Planter with five drip heads, only three are visible.

Arduino Nano System

ผมรันระบบที่มี Valve 6 ตัวโดยใช้ Arduino Nano มาได้สองเดือนแล้วอย่างประสบความสำเร็จ แต่ในการติดตั้งระบบนี้ เห็นได้ชัดว่า Nano มีข้อจำกัดเนื่องจากพื้นที่โปรแกรมและ Memory เมื่อเขียนซอฟต์แวร์เพื่อวัดทั้งอุณหภูมิและความชื้น จึงไม่สามารถ Compile ซอฟต์แวร์สำหรับ Valve 6 ตัวได้โดยไม่เกินขีดจำกัดของ Memory แม้จะน่าผิดหวังเล็กน้อย แต่ก็ยังสามารถควบคุมการรดน้ำตามค่าความชื้นที่ไม่มีการชดเชยได้

Arduino Nano ยังมีข้อจำกัดเรื่อง Digital Output แต่สามารถแก้ไขได้โดยใช้ Port Expander ในการ実装นี้ ใช้ MCP23008 8-bit i2c Port Expander เพื่อควบคุม Valve ทั้งแปดตัว ในโค้ดคุณจะเห็นว่า Port Expander ถูกจัดการเป็น Port และ Output ถูกควบคุมด้วยฟังก์ชันที่จัดการแต่ละ Bit อินเทอร์เฟซ i2c ถูกควบคุมโดย Bit Bang Library ที่สร้างโดย Larry Bank สิ่งนี้จำเป็นเพราะอินเทอร์เฟซ i2c ในตัวของ Arduino ใช้ Pins Analog สองขา แต่ระบบนี้ต้องการใช้ Pins Analog ที่มีอยู่ทั้งหมด

วงจรนี้ยังรวมเอา Switched 5 Volt Output Driver มาด้วย Output นี้ใช้สำหรับ Moisture Sensor ในส่วนถัดไปจะมีรายละเอียดของ Moisture Sensor และคุณลักษณะต่างๆ แต่เพื่อเป็นการบอกใบ้ก่อน Moisture Sensor จะเสื่อมสภาพตามเวลาเนื่องจากกระบวนการ Electrolysis และ/หรือผลจากการกัดกร่อนอื่นๆ วิธีหนึ่งในการหลีกเลี่ยงการเสื่อมสภาพที่มากเกินไปคือการจำกัดเวลาที่จ่ายไฟให้ Sensor ดังนั้นจึงต้องมี Output Driver ในโค้ดคุณจะเห็นว่า Moisture Sensor จะได้รับไฟเพียงประมาณ 10 มิลลิวินาทีทุกๆ 15 นาทีเมื่อไม่ได้รดน้ำ หรือทุกๆ 6 วินาทีเมื่อกำลังรดน้ำ ในวงจรมี Header ที่ให้เลือกว่าจะใช้แหล่งจ่ายไฟแบบ Driver หรือใช้ Output จาก Arduino โดยตรง ปรากฏว่า Arduino สามารถจ่ายกระแสได้เพียงพอที่จะขับ Moisture Sensor ได้อย่างมีประสิทธิภาพ ปัญหาบางอย่างอาจหลีกเลี่ยงได้โดยการจ่ายไฟให้ Aref ด้วยแหล่งจ่ายเดียวกับที่ใช้ขับ Sensor

เนื่องจากผู้เขียนใช้ Home Automation อย่างแพร่หลายในที่พักอาศัย ระบบรดน้ำนี้จึงพึ่งพาระบบ Home Automation เพื่อแสดงค่าความชื้นและควบคุมฟังก์ชันทั้งหมด มีการใช้ Home Assistant และมีไฟล์คอนฟิกให้พร้อม แน่นอนว่าต้องมี Radio สำหรับการสื่อสาร (NRF24) และ Library จากทีม MySensors สิ่งนี้เพิ่มภาระงาน (Overhead) ให้กับ Arduino ซึ่งปกติอาจนำไปใช้เชื่อมต่อกับหน้าจอแสดงผลได้ แต่ในเวอร์ชันนี้ไม่ได้ทำไว้ (ดูระบบ MEGA Irrigation System ด้านล่าง) โค้ดสำหรับระบบ MEGA อาจถูกพอร์ตมายังระบบ Nano ได้ แต่ผู้เขียนยังไม่ได้ทำการทดสอบ

คุณสมบัติสุดท้ายของวงจรนี้คือ รองรับการเชื่อมต่อสำหรับ Dallas Semiconductor Temperature Sensor 8 ตัว โค้ดที่ให้มาไม่ได้รวมการวัดอุณหภูมิไว้ แต่ผู้สร้างที่กระตือรือร้นสามารถนำโค้ดจากระบบ MEGA สำหรับการวัดอุณหภูมิมาพอร์ตลง Nano ได้หากต้องการ โดยต้องคำนึงว่าทรัพยากรของ Nano อาจไม่รองรับโค้ดจำนวนมากขนาดนั้น

Figure 6. Arduino Nano circuit board.

Board วงจรสำหรับระบบ Nano ผลิตในประเทศจีน (JLCPCB) โดยใช้ไฟล์ Fritzing ที่รวมอยู่ในรายงานโปรเจกต์นี้ Board ประกอบด้วยอุปกรณ์แบบ Surface Mount (SMD) สำหรับหลายคน นี่อาจเป็นอุปสรรคในการใช้งาน แต่ขอให้มั่นใจว่ามันไม่ใช่เรื่องยากสำหรับใครก็ตามที่มีหัวแร้ง เริ่มต้นด้วยการเคลือบตะกั่วที่หนึ่งในสอง SMD Pads (หรือจะใช้ Flux ทาก็ได้) ใช้ปากคีบ (Tweezers) จับอุปกรณ์ให้อยู่กับที่ และใช้หัวแร้งปลายแบนที่เคลือบตะกั่วและจุ่ม Flux แตะเบาๆ ที่ Pad และตัวอุปกรณ์ SMD ตะกั่วจะไหลและยึดอุปกรณ์เข้ากับ Board เมื่อด้านหนึ่งยึดแน่นแล้ว ให้ใช้หัวแร้งที่เคลือบตะกั่วและจุ่ม Flux ยึด Pad ที่สอง ง่ายมาก! และเร็วกว่าการใช้อุปกรณ์แบบมีขา (Leaded Devices) เสียอีก!

ฮาร์ดแวร์ส่วนที่เหลือของระบบนั้นตรงไปตรงมา MCP23008 ควบคุม Relay Board และ Relay Board ควบคุม Valve โปรดสังเกตการใช้ Terminal Strip ที่เชื่อมต่อกับ Valve พร้อมกับ Shunting Diodes เพื่อต้านแรงดันย้อนกลับ (Back EMF) (Figure 7 ด้านล่าง)

Figure 7. Relay, terminal strip, diode and valve connections.

Moisture Sensors

คุณจะเชื่อใครไม่ได้เลย การวัดความชื้นอาจไม่เลง่ายอย่างที่คิด การ実装ครั้งแรกของระบบนี้ใช้ Sensor ที่มีจำหน่ายทั่วไป พวกมันใช้งานได้เพียงสัปดาห์เดียว ซึ่งในช่วงนั้นสังเกตเห็นว่าประสิทธิภาพของระบบลดลงเรื่อยๆ หลังจากที่ผมแทบจะทึ้งผมออกจากหัวที่เริ่มล้านแล้ว ผมก็ได้ข้อสรุปว่าสาเหตุของความล้มเหลวคือ Moisture Sensor มันเป็นไปได้อย่างไร?

หลังจากการตรวจสอบเล็กน้อย ก็เห็นได้ชัดว่า Sensor ที่มีขายทั่วไปเสื่อมสภาพเนื่องจากการกัดกร่อนและ/หรือ Electrolysis (เป็นการกัดกร่อนมากกว่าอย่างอื่น) หลังจากใช้งานไปหนึ่งสัปดาห์ พื้นผิวโลหะที่เคลือบไว้ของ Sensor ถูกกัดกินไปจนหมด ทำให้อุปกรณ์ใช้งานไม่ได้ มีสองสิ่งที่เห็นได้ชัดทันทีคือ โลหะที่หนากว่าน่าจะใช้งานได้นานกว่า และการจ่ายแรงดันไฟฟ้าให้ Sensor ตลอดเวลาแม้จะไม่มีการวัดค่าก็เป็นการกระทำที่โง่เขลา จากการตรวจสอบวงจรควบคุมของ Sensor ที่มีขายทั่วไปเพิ่มเติม พบว่าองค์ประกอบเดียวที่ใช้สำหรับ Output แบบ "Analog" คือ Shunt Capacitor และ Series Resistor (10 kOhm) ส่วนประกอบที่เหลือบน Board มีไว้เพื่อสร้าง Digital Output ซึ่ง Digital Output นั้นไม่มีประโยชน์เป็นพิเศษในการใช้งานนี้ ดังนั้นจึงสรุปได้ว่าวงจรที่ให้มาพร้อมกับอุปกรณ์ที่มีขายทั่วไปนั้นไม่มีประโยชน์เลย สรุปคือ ไม่มีชิ้นส่วนใดจากผลิตภัณฑ์ที่มีขายทั่วไปที่มีประโยชน์แม้แต่น้อยสำหรับระบบรดน้ำ หืมมม

สิ่งที่น่าประหลาดใจอีกอย่างคือ การออกแบบ Moisture Sensor จริงๆ แล้วไม่มีความซับซ้อนอะไรเลย เอกสารต่างๆ แสดงให้เห็นว่าในการวัดดินหลายๆ แบบ จะใช้เหล็กแหลมปักลงในดินและใช้เครื่องมือวัดค่าความต้านทาน (การไหลของกระแส) ระหว่างเหล็กเหล่านั้น ในหลายกรณีจะใช้การวัดแบบ Four-point probe

ด้วยความที่เป็นคนมัธยัสถ์โดยพื้นฐาน ผมจึงตัดสินใจสร้าง Sensor ขึ้นมาเองโดยใช้ตะกั่วขนาด 3.5 นิ้ว (16D) สองตัว รองรับด้วยโครงพลาสติกที่พิมพ์จาก 3D Print และปิดทับด้วยฝาพลาสติก 3D Print สายไฟเชื่อมต่อถูกบัดกรีเข้ากับหัวตะปูโดยตรง (ด้านบนสุด ไม่ใช่ด้านข้าง) แล้วเสริมความแข็งแรงด้วยท่อหด (Shrink Tubing) จากนั้นจึงย้ำหัวต่อแบบ Dupont เข้ากับสายไฟเพื่อให้เสร็จสมบูรณ์ มีการสร้างเครื่องมืออย่างง่าย (จาก 3D Print เช่นกัน) เพื่อให้สามารถตอกตะปูผ่านโครงรองรับได้โดยไม่ทำให้สายไฟเสียหาย ไฟล์ 3D Print ที่จำเป็นทั้งหมดมีให้ในรายงานโปรเจกต์นี้

ใน Figure 8a ด้านล่างเป็นการเปรียบเทียบระหว่าง Sensor ที่มีขายทั่วไปกับ Moisture Sensor แบบทำเอง

Figure 8a. Revised moisture sensor next to commercially available sensor.

ข่าวดีมากเกี่ยวกับการออกแบบด้วยตะปู 16D คือมันใช้งานได้นานกว่าเวอร์ชันที่มีขายทั่วไปมาก อย่างไรก็ตาม การกัดกร่อนในดินยังคงเป็นปัญหา ใน Figure 8b แสดงภาพถ่ายของ Sensor หลังจากใช้งานไปประมาณ 2 เดือน Sensor ยังคงทำงานได้และน่าจะอยู่ได้จนจบฤดูกาล อย่างไรก็ตาม จากการทดลองออกแบบ Sensor พบว่าเพื่ออายุการใช้งานที่ยาวนานขึ้น แท่งสแตนเลส 304 ขนาด 3 มม. อาจเป็นวัสดุที่ดีที่สุดสำหรับการวัดความชื้น สิ่งเหล่านี้สามารถแทนที่ตะปู 16D ที่ใช้ก่อนหน้านี้ได้โดยตรง (โดยใช้โครงสร้างรองรับ 3D Print แบบเดิม)

Figure 8b. 6D Nail type moisture sensor after months of use. Significant corrosion is visible.

การกำหนดค่าขั้นสุดท้ายแสดงใน Figure 8c ด้านล่าง แท่งสแตนเลส 304 ขนาด 3 มิลลิเมตรถูกสั่งซื้อจาก Amazon จากนั้นนำแท่งสแตนเลสมาตัดและทำเกลียวขนาด 6-32 ที่ปลายด้านหนึ่งโดยใช้ไดสต๊าป (Die) ขั้นตอนการทำเกลียวทำได้ง่ายมาก โครงสร้างรองรับ 3D Print ถูกขยายรูให้พอดีกับทั้ง Temperature Sensor และแท่งสแตนเลส สำหรับ Temperature Sensor ใช้สว่านขนาด 1/4 นิ้วเจาะ ซึ่งจะได้รูที่ใหญ่กว่าความต้องการเล็กน้อย แต่สกรูยึดจะช่วยล็อคให้อยู่กับที่อย่างแน่นหนา รูสำหรับแท่งสแตนเลสถูกขยายเป็น 7/64 นิ้ว แล้วจึงอัดแท่งสแตนเลสเข้าไปในตัวยึดพลาสติก สายเคเบิลสองเส้นถูกตัดให้ยาวเท่ากับสายของ Dallas Sensor และยึดเข้ากับแท่งสแตนเลสโดยใช้ Nut 6-32 ดังที่แสดงในรูป ปลายสายอีกด้านเชื่อมต่อกับสายเคเบิลแบบ 5 เส้นที่กันน้ำได้ (ดูรายการอะไหล่) นอกจากนี้ ผมใช้สาย Cat 5 เดินจาก Sensor มายังตู้ควบคุม ซึ่งสาย Cat 5 ราคาค่อนข้างถูกและดูเหมือนจะทนทานดี สายเคเบิลถูกเดินไว้ใต้ระเบียงจึงโดนแสงแดดน้อยมาก

Figure 8c. Final moisture sensor design in assembly with Dallas Temperature Sensor.

Sensor Assembly

ในการผลิต Sensor ผมพบว่าขั้นตอนต่อไปนี้ให้ผลลัพธ์ที่ดี

  • ผลิต Sensor Support โดยใช้ไฟล์ออกแบบ FreeCAD ที่แนบมา ใช้ค่า Fill 100% เพราะคุณจะต้องเจาะรูและทำเกลียวในชิ้นส่วนเหล่านี้ในภายหลัง
  • แท่งสแตนเลส 304 มาในความยาว 30 มม. ให้ตัดเป็นแท่งยาว 7.5 มม. (4 อัน)
  • ติดตั้งไดสต๊าป (Die) ที่กำหนดไว้ลงในปากกาจับชิ้นงาน (Vise) ไดสต๊าปของ Irwin รุ่นนี้เหมาะมากเพราะมีรูนำร่องที่ช่วยในการตั้งศูนย์ซึ่งสำคัญมากเมื่อเริ่มตัดเกลียว แน่นอนว่าต้องให้รูนำร่องอยู่ด้านบนเมื่อวางในปากกาจับชิ้นงาน
  • ชโลมน้ำมันต๊าป (Cutting Oil) ให้ทั่วไดสต๊าป ถ้าไม่มีน้ำมันต๊าป ใช้น้ำมันเอนกประสงค์ (3 in 1) ก็ได้ แต่ไม่ว่าจะอย่างไร ต้องใช้น้ำมัน!
  • ใส่แท่งแรกในสว่านไฟฟ้าแบบปรับความเร็วได้ที่มีแรงบิดสูง เล็งแท่งสแตนเลสและสว่านให้ตรงกับรูนำร่องของไดสต๊าป แล้วเสียบเข้าไปจนแตะฟันตัด
  • เริ่มเดินสว่านช้าๆ พร้อมกดลงเบาๆ
  • เจาะลงไปในไดสต๊าปประมาณ 1/2 นิ้ว
  • ถอยสว่านออกช้าๆ พร้อมดึงขึ้นเบาๆ
  • ทดสอบเกลียวโดยการขัน Nut 6-32 เข้าไป
  • ทำขั้นตอนนี้ซ้ำจนกว่าแท่งสแตนเลสทั้งหมดจะถูกทำเกลียว
  • วาง Sensor Support อันแรกในปากกาจับชิ้นงานโดยให้ด้านบนหงายขึ้น ใช้สว่าน 7/64 นิ้วเจาะรูสองรูสำหรับแท่งสแตนเลส และใช้สว่าน 1/4 นิ้วเจาะรูสำหรับ Temperature Sensor
  • วาง Sensor Support บนพื้นราบและใส่ปลายที่ไม่ได้ทำเกลียวลงในรูแท่งสแตนเลสอันหนึ่ง ใช้ค้อนเคาะเบาๆ จนแท่งทะลุรู ทำซ้ำกับแท่งที่สอง
  • ใช้ปากกาจับชิ้นงานรอง Sensor Support เพื่อให้แท่งสแตนเลสผ่านช่องว่างของปากกาได้ แต่ Sensor Support ผ่านไม่ได้ เคาะแท่งเข้าไปใน Sensor Support จนเหลือให้เห็นเฉพาะส่วนที่เป็นเกลียว
  • ทำกระบวนการนี้สำหรับ Sensor Support ทั้งหมดที่มี
  • ใช้ต๊าป 6-32 ทำเกลียวในรูของ Sensor Support ที่มีไว้สำหรับล็อค Temperature Sensor ให้อยู่กับที่
  • ใส่ Nut สองตัวบนแท่งเกลียวแต่ละแท่ง และใส่สกรูตัวหนอน (Set Screw) ลงในรูที่ทำเกลียวไว้
  • ย้ำหางปลา (Lugs) เข้ากับปลายสายไฟ 2 เส้น และวางลงบนปลายเกลียวที่โผล่มาของแท่งสแตนเลส จากนั้นเพิ่ม Nut 6-32 อีกสองตัวแล้วขันให้แน่น
  • ตัดความยาวของสายไฟ 2 เส้นให้เท่ากับความยาวของสาย Dallas Temperature Sensor และใช้สายรัด (Tie Wrap) รัดเข้าด้วยกันประมาณ 4 หรือ 5 จุด
  • ตัดท่อหดเพื่อป้องกันจุดต่อและครอบคลุมพื้นที่เชื่อมต่อทั้งหมด บัดกรีสายเข้ากับขั้วต่อที่กำหนด จากนั้นใช้ความร้อนเป่าท่อหดให้หดตัว เริ่มจากแต่ละเส้นก่อนแล้วค่อยหุ้มรวม ผลลัพธ์สุดท้ายควรเป็นดัง Figure 8d ด้านล่าง

Moisture Temperature/Moisture Response

ในการทดสอบเบื้องต้น พบว่า Sensor มีความอ่อนไหวต่ออุณหภูมิ (Temperature Sensitivity) อย่างมาก ในช่วงเช้ามืด กระถางจะวัดค่าได้ค่อนข้างสูง (แสดงถึงความชื้นต่ำ) เมื่อเวลาผ่านไปและอุณหภูมิสภาพแวดล้อมเพิ่มขึ้น ค่าความชื้นที่อ่านได้ก็จะเพิ่มขึ้น (ความต้านทานลดลง) แน่นอนว่าในความเป็นจริง ความชื้นในกระถางไม่ได้เปลี่ยน หรือถ้าเปลี่ยน มันควรจะเปลี่ยนไปในทางตรงกันข้ามเพราะแสงแดดและพืชจะทำใหดินแห้งลง ดังนั้น จึงเห็นได้ชัดทันทีว่าความอ่อนไหวต่ออุณหภูมิของการวัดนี้อาจเป็นปัญหา

ไม่น่าแปลกใจที่ Sensor ง่ายๆ แบบนี้จะมีความอ่อนไหวต่ออุณหภูมิ ในกรณีนี้ความอ่อนไหวค่อนข้างสูงและควรได้รับการแก้ไข แต่ก่อนจะทำเช่นนั้น ต้องศึกษาลักษณะความอ่อนไหวต่ออุณหภูมิและความชื้นก่อน ชุดทดลองอย่างง่ายถูกจัดเตรียมขึ้นประกอบด้วย เตาอบแห้ง, Dallas Semiconductor Temperature Sensor, Moisture Sensor ที่เพิ่งอธิบายไป และภาชนะที่มีฝาปิดซึ่งใส่ดินและ Sensor ไว้ภายใน สำหรับภาชนะใช้กระปุกพลาสติกขนาด 16 ออนซ์พร้อมฝาปิด มีการเจาะช่องที่ฝาเพื่อให้สายไฟของ Temperature และ Moisture Sensor ลอดผ่านได้ จากนั้นใช้เทปพันสายไฟปิดรอยต่อที่ฝา มีการออกแบบโครงสร้างรองรับ Sensor เพื่อยึดทั้ง Moisture Sensor และ Dallas Temperature Sensor ดังแสดงใน Figure 9 โดยตะปูสองตัวของ Moisture Sensor และ Dallas Semiconductor Temperature Sensor ใส่เข้ากับรูในโครงสร้างรองรับได้อย่างพอดี สิ่งนี้ทำให้ส่วนที่ยื่นออกมาของ Moisture Sensor เหลือ 30 มม. ภายในภาชนะมีการใส่ดินและฝัง Sensor ลงไปให้โครงสร้างรองรับอยู่ที่ระดับผิวดิน

Figure 9. Support structure holding the Dallas Semiconductor Temperature Sensor and the two prongs.

Experimental Procedure

การทดลองเริ่มจากการทำให้ดิน (MiracleGro Potting Soil) แห้งสนิท เตาอบถูกตั้งไว้ที่ 160 องศาฟาเรนไฮต์ และรันเป็นเวลาประมาณสี่ชั่วโมง เพื่อให้แน่ใจว่าแห้งสนิท ได้มีการวางซองซิลิก้าไว้บนดิน เมื่อสีของซองเปลี่ยนเป็นสีม่วง จึงถือว่าดินแห้งสนิท ภาชนะถูกเติมดินจนถึงประมาณครึ่งหนึ่งและกดลงให้แน่น ระดับดินถูกทำเครื่องหมายไว้ที่ภาชนะด้วยปากกา Moisture Sensor ที่วางในดินแห้งวัดค่าได้เป็นวงจรเปิด (Open Circuit) ต้องเติมน้ำทีละช้อนชาถึงสามช้อนชาก่อนที่ค่าจาก Moisture Sensor จะปรากฏขึ้น

เริ่มจากน้ำ 3 ช้อนชา ภาชนะถูกใส่เข้าเตาอบและตั้งอุณหภูมิไว้ที่ 130 องศาฟาเรนไฮต์ ปล่อยให้อุณหภูมิสูงขึ้นจนถึงจุดสูงสุด จากนั้นทิ้งไว้ที่อุณหภูมินั้นต่ออีก 30 นาทีเพื่อให้แน่ใจว่าอุณหภูมิคงที่ ณ จุดนั้น เตาอบจะถูกปิดเพื่อกำจัดสัญญาณรบกวนทางแม่เหล็กไฟฟ้าและเก็บข้อมูลขณะระบบเย็นตัวลง ในช่วงการเย็นตัว Arduino จะทำการวัดค่า กระบวนการนี้ถูกทำซ้ำโดยการเพิ่มปริมาณน้ำในแต่ละครั้งจนกระทั่งมีน้ำ 20 ช้อนชาในดินและทำการวัดค่าเสร็จสิ้น ที่น้ำ 7 ช้อนชา ได้มีการทดสอบความแม่นยำซ้ำ (Repeatability Test) ซึ่งให้ค่าที่เกือบจะเหมือนกันทุกประการ ก่อนที่จะวัดการตอบสนองต่อน้ำ 8 ช้อนชา ดินจะถูกทำให้แห้งสนิทอีกครั้งแล้วจึงเติมน้ำ 8 ช้อนชา ดินถูกผสมอย่างทั่วถึง และมีการทำเครื่องหมายระดับดินก่อนและหลังเติมน้ำไว้บนภาชนะ

Arduino ถูกโปรแกรมให้อ่านค่าจาก Sensor ทั้งสอง และส่งข้อมูลไปยัง Serial Port ทุกๆ สองสามวินาที ก่อนที่จะเริ่มจริงๆ สังเกตเห็นว่าค่าที่อ่านได้เปลี่ยนไปตามเวลาแม้ปัจจัยอื่นๆ จะคงที่ จากค่าแรกที่อ่านได้จนถึงค่าที่คงที่ (Asymptotic Reading) ใช้เวลาประมาณ 35 วินาที ดังนั้น Arduino จึงถูกโปรแกรมให้อ่านค่าเริ่มต้น รอ 35 วินาทีแล้วค่อยอ่านค่าที่สอง นอกจากนี้ Arduino ยังถูกกำหนดค่าให้สามารถจ่ายไฟให้ Moisture Sensor ผ่าน Digital I/O Pin ได้ ดังนั้นลำดับขั้นตอนที่กำหนดคือ จ่ายไฟให้ Moisture Sensor และอ่านค่าทันที รอ 35 วินาทีและอ่านค่าที่สอง ตัดไฟ และรอ 35 วินาทีสำหรับรอบการวัดถัดไป

ชุดข้อมูลแรกที่ประกอบด้วยปริมาณน้ำตั้งแต่ 3 ถึง 16 ช้อนชาถูกพล็อตใน Figure 10 ด้านล่าง ค่าความต้านทานดิน (Rsoil) คำนวณจาก Aout (Sensor Analog Output) ผ่านสมการต่อไปนี้:

Rsoil = Rseries / (1024/Aout - 1), Eq. 1

โดยที่: Rseries = 10,000 Ohms.

Figure 10. Dependence of Output Voltage on Moisture level and Temperature.

Figure 11. The percentage change in soil resistance over a temperature range from 25C to 45C.

Soil Moisture Definition

ในงานนี้ ความชื้นในดินถูกกำหนดให้เป็นอัตราส่วนของน้ำหนักน้ำที่เติมต่อหนักรวมของส่วนผสม ดังนั้นถ้าน้ำหนักของดินแห้งคือ wsoil และน้ำหนักของน้ำคือ wwater ค่าร้อยละความชื้นในดิน (M%) จะคำนวณได้จาก:

M% = wt. water / (wt. water+ wt. soil). Eq. 2

น้ำหนักของดินแห้งที่ใช้ในการทดลองนี้คือ 2.2 ออนซ์ และน้ำ 1 ช้อนชามีน้ำหนัก 0.1733625 ออนซ์

Data Analysis

ข้อมูลดิบที่แสดงใน Figure 11 ด้านบนถูกนำมาพล็อตใหม่ใน Figure 12 โดยเปลี่ยนแรงดัน Output เป็นความต้านทานโดยใช้สมการที่ 1 และปริมาณน้ำแสดงเป็นเปอร์เซ็นต์โดยปริมาตรพร้อมค่า Offset ในช่วงการเก็บข้อมูล สังเกตเห็นว่าต้องใช้น้ำ 3 ช้อนชาก่อนที่จะวัดค่าความต้านทานได้ในชุดทดลอง เมื่อสังเกตพล็อตแบบ Log-log ที่ไม่มี Offset เห็นได้ชัดว่าข้อมูลมีความใกล้เคียงกับ Power series ที่มีเลขชี้กำลังเป็นลบ แต่เนื่องจากต้องใช้ปริมาณน้ำจำนวนมากก่อนจะสังเกตเห็นผล จึงสรุปได้ว่าความสัมพันธ์ทางคณิตศาสตร์อาจรวมค่า Offset ด้วย การใช้ Spreadsheet ปรับค่า Offset ไปเรื่อยๆ เพื่อสังเกตผลใน Log-log พล็อต พบว่าค่า R2 จะเหมาะสมที่สุดเมื่อตั้งค่า Offset ไว้ที่ประมาณ 16%

Figure 12. The resistance as a function of moisture at five temperatures. This data compares well with similar data collected by Csanyii.

ชุดข้อมูลบางส่วนแสดงใน Figure 13 ด้านล่าง โดยพล็อตความต้านทานดินเทียบกับอุณหภูมิที่ระดับความชื้น 8 ระดับที่แตกต่างกัน ข้อมูลถูกพล็อตบน Log-log พล็อต ปรากฏการณ์ทางฟิสิกส์ที่ขับเคลื่อนด้วยพลังงานความร้อนมักถูกพล็อตเป็นฟังก์ชันของ Log ของอุณหภูมิ เมื่อเปลี่ยนเป็นนิพจน์ทางคณิตศาสตร์ ข้อมูลดังกล่าวจะสัมพันธ์กับค่า Exponential ของอุณหภูมิ (ekT)

Figure 13. Soil Resistance vs temperature at eight moisture levels.

สิ่งแรกที่สังเกตได้จากข้อมูลนี้คือ ข้อมูลที่ 3 ช้อนชามีความเบี่ยงเบนจากเส้นฟิตมากที่สุด โดยมีค่า R2 เพียง 0.772 สาเหตุเป็นเพราะข้อมูลทั้งหมดที่พล็อตนั้นอยู่ที่ช่วงบนสุดของ Analog Input Range ทำให้การวัดมีความแม่นยำต่ำ เมื่อค่าความต้านทานลดลง ความแม่นยำจะเพิ่มขึ้น แต่เมื่อถึงกึ่งกลางช่วงและต่ำลงไป ความแม่นยำก็จะลดลงอีกครั้ง และคุณภาพของข้อมูลที่ระดับความชื้นต่ำก็จะลดลง

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

จากข้อมูลใน Figure 13 สมการที่แสดงความสัมพันธ์ระหว่างความต้านทานดินกับระดับความชื้นดินสามารถเขียนได้ดังนี้:

Rsoil = A(T)(M%)^B(T), Eq. 3

โดยที่พารามิเตอร์ A และ B เป็นฟังก์ชันของอุณหภูมิ ในการสร้างแบบจำลองทางคณิตศาสตร์สำหรับระบบที่เราสามารถทำนายความต้านทานดินโดยใช้อุณหภูมิและความชื้น เราจำเป็นต้องตรวจสอบการพึ่งพาอุณหภูมิของพารามิเตอร์ใน Eq. 3 ตารางที่ 1 ด้านล่างแสดงรายการพารามิเตอร์ที่เป็นฟังก์ชันของอุณหภูมิ ซึ่งพล็อตไว้ใน Figure 14

Table 1. Temperature dependence of parameters in Eq. 3.

Figure 14. The temperature dependence of the parameters in Eq. 3.

จากข้อมูลข้างต้น การพึ่งพาอุณหภูมิของพารามิเตอร์ใน Eq. 3 สามารถเขียนได้เป็น:

A(T)= -0.0112T+2.52 Eq. 4

และ,

B(T)=-3.610-3T-3.6. Eq. 5

สุดท้าย สมการที่ 3 สามารถถอดกลับเพื่อทำนายระดับความชื้นดินจากความต้านทานที่วัดได้และอุณหภูมิดิน:

M% = {Rsoil/10^A(T)}^(1/B(T)). Eq. 6

Sensitivity Considerations

การอภิปรายเรื่องความแม่นยำด้านบนยังสัมพันธ์กับความไว (Sensitivity) ของ Sensor ซึ่งจะเป็นฟังก์ชันของ Series Resistance และช่วงความชื้นของดินที่กำลังวิเคราะห์ เราอาจสงสัยว่าค่า Series Resistance ที่ดีที่สุดควรเป็นเท่าใดสำหรับดินและความชื้นประเภทต่างๆ สิ่งแรกที่ต้องทำคือการกำหนดนิยามของความไวในการใช้งานนี้ เนื่องจาก Sensor ถูกใช้ในวงจรแบ่งแรงดัน (Voltage Divider) เราสามารถกำหนดความไวได้ดังนี้:

S = ΔV/ΔM%, Eq. 7

โดยที่;

M% คือระดับความชื้นในดิน และ

V คือแรงดัน Output

เพื่อให้ง่ายขึ้น เราสามารถมองหาค่า V/R ที่เหมาะสมที่สุด โดยเลือกค่า R ที่จุดกึ่งกลางของช่วงความชื้นดินที่อุณหภูมิที่เราสมมติว่าเป็นจุดกึ่งกลางของช่วงอุณหภูมิที่น่าจะเจอ ตัวอย่างเช่น จากตารางของ AccuRite สมมติว่าเราจะทำงานในช่วงสีเขียว (40% ถึง 60%) จากรูป ความต้านทานของ Sensor จะอยู่ระหว่างประมาณ 1.1 kΩ และ 0.9 kΩ โดยมีค่ากลางที่ 1 kΩ แรงดัน Output จะเป็น:

Vout = 5v * (Rsensor)/(Rseries + Rsensor). Eq. 8

ดังนั้นเรากำลังมองหาการทำให้ Vout/Rseries|Rsensor มีค่าสูงสุด ซึ่งทำได้ง่ายขึ้นโดยการแทนที่ด้วย:

x = Rsensor/Rseries และ dRsensor = Rseries dx. . Eq. 9

จากนั้นสามารถเขียนสมการใหม่ในรูปของหน่วยที่ไม่มีมิติเพื่อเลี่ยงความผิดพลาดดังนี้;

Vout = 5v * x / (1 + x) . Eq. 10

หลังจากทำการหาอนุพันธ์ (Derivative) และแทนค่า

x = Rsensor/Rseries,

เราจะได้:

S = δVout/δRsensor = -5V/Rseries/(1 + Rsensor/Rseries)^2; Eq. 11

เราต้องการทราบว่า S มีค่าสูงสุดเมื่อใด ดังนั้นเราต้องหาอนุพันธ์อีกครั้ง แต่ครั้งนี้เทียบกับ Rseries จะได้::

δS/δRseries = (5v/Rsensor)/( Rseries/Rsensor)*(1 + Rsensor/Rseries); Eq. 12

ทำการแทนค่าเหมือนด้านบน เราสามารถเขียนสมการใหม่ได้เป็น:

δS/δRseries = (5v/Rsensor)d/dx [1/( x (1 + 1/x)^2]; Eq. 13

คำตอบคือ:

δS/δRseries = (5v/Rsensor)(1-x)/(1+x)^3, Eq. 14

ซึ่งจะตัดแกน x เมื่อ x = 1 ดังนั้น ค่า Rseries ที่เหมาะสมที่สุดคือ Rsensor ดังนั้น ขึ้นอยู่กับความชื้นดินที่ต้องการ Rseries ควรถูกเลือกตามค่าความต้านทานที่จุดศูนย์กลางของช่วงความต้านทานที่คาดหวัง ในงานนี้ใช้ค่า 10K ซึ่งกลายเป็นค่าที่ดีในการครอบคลุมช่วงค่าที่วัดได้กว้างขวางในการศึกษานี้ แต่สำหรับการใช้กับสวนเครื่องเทศ ค่ากลางที่คาดไว้ของ Rsensor คือประมาณ 1000Ω ซึ่งเป็นค่าความต้านทานที่ใช้ในวงจรปรับสภาพ Sensor ขั้นสุดท้าย หากสมมติว่าค่า Rsensor ต่ำสุดคือ 600Ω กระแสสูงสุดที่ดึงจาก Transistor ที่สลับไฟให้ Sensor คือ 5v/(1600/8) หรือประมาณ 25 mA

Sensor ที่มีขายทั่วไปใช้ Series Resistor ขนาด 10K ซึ่งใหญ่กว่าที่งานวิจัยนี้แนะนำถึงสิบเท่า ของพวกเขาน่าจะเลือกมาเพื่อลดผลกระทบทางไฟฟ้าเคมี (Galvanic Action) แต่ในการ実装นี้ Sensor จะได้รับไฟเพียงเสี้ยวเวลาสั้นๆ เท่านั้น แล้วเสี้ยวเวลานั้นคือเท่าไหร่? มันต้องขึ้นอยู่กับระดับความชื้นในดินที่เปลี่ยนไปอย่างช้าๆ ในเวลาหลายชั่วโมง ดังนั้นความจำเป็นในการวัดอาจเป็นเพียงทุกๆ 15 นาที (7500 วินาที) หรือ 30 นาที (15000 วินาที) วงจรปรับสภาพสัญญาณมี Capacitor 100 nF ต่อคร่อม Sensor พร้อมกับ Series Resistance 1K ค่าคงที่เวลา (Time Constant) ของมันคือ 10^(-7)F * 10^3Ω = 10^-4 วินาที ดังที่ได้ระบุไว้ก่อนหน้า การเลือก Power Pulse 10 มิลลิวินาทีจึงถือว่ามี Safety Margin ที่มากพอ

Dallas Temperature Sensors

ระบบ MEGA Irrigation System ใช้ Dallas Temperature Sensor เพื่อรับอุณหภูมิดินและชดเชยค่าความชื้นที่อ่านได้ โดยใช้สูตรที่พัฒนาขึ้นด้านบน อุปกรณ์ที่น่าทึ่งเหล่านี้ใช้ Input Pin เพียงขาเดียวบน Arduino ในโปรเจกต์นี้ อุปกรณ์ "One Wire" เหล่านี้แชร์สายข้อมูลร่วมกัน Library ที่ต้องใช้อาจดาวน์โหลดจาก Github พร้อมกับ Library ที่สองสำหรับ Temperature Sensor เมื่อติดตั้งแล้ว คุณจะสามารถ Compile โค้ดของระบบ MEGA Irrigation System ได้

ในโปรโตคอลการสื่อสาร OneWire Sensor แต่ละตัวจะมี Address และสามารถระบุตัวตนรวมถึงสอบถามข้อมูลได้โดยใช้ Address นี้ โค้ดต้องการ Address ของ Dallas Temperature Sensor แต่ละตัวที่ใช้ในการ実装ของคุณ เพื่อให้ได้ Address นี้มา ผมได้แก้ไขโค้ดตัวอย่างจาก Github เล็กน้อย ผมเรียกโค้ดนี้ว่า "Dallas Sensor Address Display Routine" มันทำหน้าที่ตามชื่อเลย คือแสดง Address ของ Sensor เพียงตัวเดียว และยังพิมพ์ค่าอุณหภูมิออกมาด้วย ดังนั้นในขณะที่รับ Address ของ Sensor คุณยังสามารถตรวจสอบว่ามันตอบสนองหรือไม่โดยการใช้นิ้วอุ่นๆ แตะที่ตัวมัน

เพื่อให้ได้ Address ของอุปกรณ์ทั้งหมด ผมใช้โปรแกรมนี้และบอร์ดระบบรดน้ำร่วมกับ Arduino Uno บอร์ดระบบรดน้ำจะเสียบลงบน Uno ซึ่งสามารถเข้าถึง Pins ที่จำเป็นทั้งหมดได้ Pins บนบอร์ดมีการติดลาเบลไว้ และอย่างที่คุณเห็น Pin 13 ใช้สำหรับสายข้อมูล OneWire มีพอร์ต Input สำหรับ Temperature Sensor 8 พอร์ตบนบอร์ด Sensor ตัวใดก็สามารถเสียบเข้าพอร์ตใดก็ได้เพราะใช้สายข้อมูลร่วมกัน ดังนั้นพอร์ตไหนก็ทำงานได้เหมือนกัน ให้เสียบ Sensor ของคุณในพอร์ตใดก็ได้แล้วรันโปรแกรม โปรแกรมจะพิมพ์ Address และอุณหภูมิทั้งหน่วยฟาเรนไฮต์และเซนติเกรด ติดลาเบลที่ Sensor ของคุณเพื่อให้รู้ว่าเป็นตัวไหน ผมติดลาเบลของผมเป็น 0 ถึง 5 (6 ตัว) และติดลาเบล Address ไว้ที่ Sensor แต่ละตัวด้วย

การติดลาเบลจะช่วยในการติดตั้งระบบ ซึ่งอาจสับสนได้เมื่อ Temperature Sensor สามารถเสียบเข้าพอร์ตใดก็ได้ แต่สิ่งนี้ไม่เป็นจริงสำหรับ Moisture Sensor ซึ่งแต่ละตัวจะมีพอร์ตของตัวเอง ดังนั้น Moisture Sensor ที่เสียบเข้าพอร์ต 0 จะตรงกับ Valve ที่สัมพันธ์กับ Bit 0 ของ PORTA ส่วน Valve จะเชื่อมต่อกับท่อน้ำหยดที่ไปยังกระถางเฉพาะใบ ดังนั้นในท้ายที่สุด Sensor ที่ใส่ในกระถาง (หรือพื้นที่) หนึ่งๆ จะต้องตรงกับ Valve ที่รดน้ำกระถางนั้น ในการ実装ของผม ผมติดลาเบลที่ปลายสายทั้งสองด้านและท่อน้ำที่ไปยังคู่ Sensor/กระถาง กระถาง 0 จะมี Sensor 0 เชื่อมต่อกับสาย 0 และรดน้ำโดยท่อ 0 ที่เชื่อมต่อกับ Valve 0

สุดท้าย เมื่อจัดเรียงทุกอย่างเสร็จแล้ว คุณจะต้องจับคู่ Address ของ Temperature Sensor กับคู่ของ กระถาง/Sensor/ท่อ เมื่อใช้โปรแกรมที่อธิบายไว้ด้านบน คุณจะทราบ Address ของ Temperature Sensor 0 ในโค้ด MEGA Irrigation System ให้หาหัวข้อด้านล่าง:

//Addresses of DS18B20 sensors connected to the 1-Wire bus

byte sensor0[8] = {0x28, 0xAA, 0x5B, 0xE4, 0x52, 0x14, 0x01, 0x92};

byte sensor1[8] = {0x28, 0x51, 0x6C, 0x74, 0x54, 0x20, 0x01, 0xEB};

byte sensor2[8] = {0x28, 0xEA, 0x5A, 0x9A, 0x54, 0x20, 0x01, 0x50};

byte sensor3[8] = {0x28, 0xC0, 0x74, 0x8A, 0x54, 0x20, 0x01, 0x4B};

byte sensor4[8] = {0x28, 0x07, 0x2A, 0x88, 0x54, 0x20, 0x01, 0x61};

byte sensor5[8] = {0x28, 0x7E, 0x88, 0x78, 0x54, 0x20, 0x01, 0xAE};

แล้วใส่ Address ที่คุณได้มาลงไป เพียงเท่านี้ก็พร้อมใช้งานแล้ว

Arduino MEGA Irrigation System

การเปลี่ยนไปใช้ Arduino MEGA จะช่วยขจัดข้อจำกัดทั้งหมดของ Nano ตอนนี้มีพื้นที่ Memory มากเกินพอที่จะรองรับทั้ง MySensors Library, Dallas Semiconductor Temperature Sensor และ Library สำหรับหน้าจอแสดงผลและ Touch Screen มีหลายวิธีในการกำหนดค่าระบบนี้ วิธีที่ง่ายที่สุดคือการใช้จอแสดงผลแต่ไม่มี MySensors (ไม่มีอินเทอร์เฟซ Home Automation) ในระบบนี้ ทุกอย่างจะถูกควบคุมจาก Touch Screen วัตถุประสงค์ของหน้าจอทั้งสามหน้าจะอธิบายไว้ด้านล่าง ข้อเสียของระบบนี้คือคุณต้องอยู่ที่เครื่อง Controller เพื่อทำการเปลี่ยนแปลงค่าต่างๆ รูปแบบที่สองคือการใช้จอแสดงผลและเพิ่ม MySensors เข้าไป ในกรณีนี้ การควบคุมระบบทำได้ทั้งจาก Touch Screen หรือจากซอฟต์แวร์ Home Automation (ในที่นี้ใช้ Home Assistant) ระบบนี้สามารถควบคุมได้จากทุกที่ที่มีอินเทอร์เฟซเข้าถึงอินเทอร์เน็ต นี่คือรูปแบบสูงสุดที่ผู้เขียนเลือกใช้เพราะผมทำได้ :-) ความจริงคือเหตุผลเดียวที่ผมสร้างอินเทอร์เฟซ Touch Screen ขึ้นมาก็เพื่อให้คนที่ไม่อยากรับภาระเพิ่มในการเรียนรู้วิธีใช้ระบบ Home Automation ยังคงได้รับประโยชน์จากระบบรดน้ำที่เรียบง่ายนี้

แล้วมีส่วนประกอบอื่นใดที่เพิ่มเข้ามาในระบบ MEGA Irrigation System บ้าง?

  • ระบบ MEGA ใช้ Temperature Sensor ครบทั้งแปดตัว
  • เนื่องจากตัวประมวลผลมีความสามารถมากขึ้น การคำนวณ %M จากความต้านทานจึงทำที่เครื่องโดยตรง และแน่นอนว่ามีการเพิ่มการชดเชยอุณหภูมิเข้าไปด้วย
  • มีการ実装 Alarm ใหม่ นอกเหนือจากการรู้ว่า Sensor ไม่ทำงานหรือน้ำไม่ไหล ระบบนี้ยังเพิ่มการตรวจสอบการมีอยู่หรือขาดหายไปของ Temperature Sensor และตรวจสอบว่า Moisture Sensor เป็นวงจรเปิดหรือชอร์ตหรือไม่ Sensor ทั้ง 16 ตัว (อุณหภูมิ 8 และความชื้น 8) จะถูกตรวจสอบแยกกันและแสดงผล
  • ระบบอนุญาตให้ผู้ใช้ปรับช่วงความชื้นสำหรับแต่ละเขต (Zone) จากทั้งแปดเขตแยกกัน ตัวอย่างเช่น คุณสามารถรดน้ำกระบองเพชรไปพร้อมๆ กับมะเขือเทศได้ การตั้งค่าเหล่านี้จะถูกเก็บไว้ใน EEPROM ดังนั้นเมื่อไฟดับ การตั้งค่าจะถูกกู้คืนเมื่อเปิดเครื่องใหม่
  • มีการเพิ่ม Board แยกต่างหากที่รวมวงจรขับอิเล็กทรอนิกส์สำหรับ Valve เดิมทั้งแปดตัวและ Valve พิเศษอีกหนึ่งตัว Valve พิเศษนี้ใช้กับท่อทางเข้าน้ำเพื่อช่วยให้ระบบสามารถตัดน้ำได้ในกรณีที่เกิดการรั่ว แน่นอนว่า Board นี้ยังช่วยลดความจำเป็นในการใช้ Relay Board แยกต่างหากด้วย
  • Board ทั้งหมดสามารถวางซ้อน (Stackable) บน Arduino Mega เมื่อติดตั้งทั้งจอแสดงผล, Sensor Board และ Valve Driver Board แล้ว ความสูงของ Stack จะอยู่ที่ประมาณ 2 ½ นิ้ว

ใน Figure 15 ด้านล่าง แสดงหน้าการทำงาน (Operations Page) สำหรับระบบ MEGA หน้านี้แสดงภาพรวมของระดับอุณหภูมิและความชื้นสำหรับทั้งแปดเขต กราฟแท่งให้ข้อมูลทั้งความชื้นและอุณหภูมิ โดยความชื้นแสดงเป็นเส้นแนวนอนสีฟ้าอ่อนซึ่งระบุค่าระหว่าง 0% ถึง 100% และอุณหภูมิแสดงเป็นสีแดง (เหมือนเทอร์โมมิเตอร์) ระบุค่าระหว่าง 0C ถึง 40C

ในหน้าจอนี้ยังมีชุดปุ่มกด Manual 8 ปุ่มที่ตรงกับแปดเขตที่พล็อตกราฟไว้ด้านบน สี่เหลี่ยมสีแดงแสดงว่า Valve ยังไม่ทำงาน การแตะที่สี่เหลี่ยมนั้นจะเปลี่ยนเป็นสีเขียวและสั่งให้ Valve ที่เกี่ยวข้องทำงาน แน่นอนว่าสถานะ Alarm ของระบบยังคงถูกตรวจสอบอยู่ และเมื่อจำเป็นระบบจะปิด Valve ตัวที่จำเป็นต้องปิด โปรดจำจากการสนทนาก่อนหน้านี้ว่าสามารถสั่งงาน Valve ได้เพียงครั้งละหนึ่งตัวเท่านั้น ดังนั้นหากเลือกเขตที่สองโดยการแตะสี่เหลี่ยมสีแดง เขตที่กำลังทำงานอยู่จะปิดลงและเขตที่เพิ่งเลือกใหม่จะทำงานแทน

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

Figure 15. The Operation Page.

ใน Figure 16 ด้านล่าง แสดงหน้า Alarm หน้านี้แบ่งออกเป็นสองส่วน ส่วนบนแสดง "System Status" ซึ่งคล้ายกับที่มีในระบบ Nano โดยจะแสดงคำเตือนสามอย่างเมื่อจำเป็น คือ น้ำไหลน้อย (Low Flow), Sensor วงจรเปิด (Open Sensor) และตรวจพบการรั่ว (Leak Detected) ระบบจะแสดงหนึ่ง สอง หรือทั้งสามสภาวะ หากทุกอย่างปกติ จะแสดงผลดังในรูป สิ่งสำคัญที่ควรทราบคือ "Open Sensor" หมายถึง Sensor ใดๆ ที่ไม่ตอบสนอง Sensor นั้นอาจไม่ได้เป็นวงจรเปิดจริงๆ แต่อาจมีค่าคงที่หรือแม้แต่การชอร์ต หาก Sensor ใดเข้าเงื่อนไขเหล่านั้น Alarm นี้จะแสดงผล สภาวะเหล่านี้จะถูกประเมินเมื่อมีการสั่งให้ Valve เปิดเท่านั้น

ใต้ส่วน System Status คือส่วนที่ให้ข้อมูลเกี่ยวกับสภาพของ Sensor แต่ละตัว สำหรับแถวที่ชื่อว่า "Temp Status" หาก Temperature Sensor ใช้งานไม่ได้ สามเหลี่ยมที่เกี่ยวข้องจะเป็นสีแดง มิฉะนั้นจะเป็นสีเขียว สองแถวถัดมาสำหรับ Moisture Sensor แสดงสภาวะวงจรเปิดและชอร์ต อีกครั้ง Sensor ที่ดีจะเป็นสีเขียว ดูเหมือนว่าเรากำลังเจอปัญหาหนักในรูปด้านล่าง

Figure 16. The Alarms Page.

หน้าสุดท้ายให้ความสามารถในการควบคุมจุดตั้งค่า (Set Points) สำหรับแต่ละเขตจากทั้งแปดเขต แถวแรกของการควบคุมมีไว้สำหรับจุดตั้งค่าบน (Upper Set Point) ลูกศรขึ้นและลงทำงานตามปกติ แถวล่างตรงกับจุดตั้งค่าล่าง (Lower Set Point) แม้ว่าจะสามารถปรับการตั้งค่าให้จุดตั้งค่าล่างอยู่เหนือจุดตั้งค่าบนได้ แต่ระบบจะไม่ยอมให้ผู้ใช้กูออกจากหน้านี้ และจะไม่บันทึกการเปลี่ยนแปลงจนกว่าเขตที่ผิดพลาดจะได้รับการแก้ไข เขตที่ผิดพลาดจะแสดงสามเหลี่ยมสีแดงจนกว่าจะได้รับการแก้ไข

หมายเหตุ: ผมได้ทำการทดสอบระบบนี้เสร็จสิ้นและได้อัปโหลดซอฟต์แวร์แล้ว แต่ยังไม่ได้ทำการติดตั้งจริงในกระถางของผมในขณะนี้

ฮาร์ดแวร์ระบบขั้นสุดท้ายประกอบด้วย Arduino MEGA, Driver Board, Sensor Interface Board ที่มีความสามารถวัดทั้งความชื้นและอุณหภูมิ และหน้าจอแสดงผล ดังแสดงใน Figure 18 และ 19 ระบบนี้ค่อนข้างกะทัดรัดและสูงน้อยกว่า 3 นิ้วดังที่เห็นใน Figure 20 ซึ่งจะใส่ในกล่องที่กำหนดไว้สำหรับโปรเจกต์นี้ได้อย่างง่ายดาย นอกจากนี้ การเดินสายไฟภายในกล่องยังลดลงอย่างมาก ไม่จำเป็นต้องติดตั้งส่วนประกอบใดๆ บนฝากล่อง เพราะ Relay Board และ Terminal Strip ถูกกำจัดออกไปในเวอร์ชันนี้ Valve จะถูกเดินสายโดยตรงไปยัง Driver Board ควรสังเกตว่าระบบนี้จะทำงานได้แม้ไม่มี Temperature Sensor หากขาดหายไปหนึ่งตัวหรือมากกว่า ซอฟต์แวร์จะแทนที่ด้วยค่า 22C สำหรับอุณหภูมิของเขตนั้น

Figure 18. Completed system.

Figure 19. Side view of completed system.

Figure 20. The height of the stack is under 3 inches.

Driver Board แสดงใน Figure 21 ประกอบด้วย Driver ขนาด 1.5 แอมป์ จำนวน 9 ตัว ซึ่งใช้ BD140 Power Transistor ดังที่กล่าวไว้ก่อนหน้า Valve ต้องการกระแสประมาณ 0.5 แอมแปร์เพื่อทำงาน แม้ที่ระดับกระแสเท่านี้ Transistor ก็คายความร้อนจนอุ่นขึ้น Transistor แต่ละตัวถูกดัด 90 องศา (ราบไปกับระนาบ PCB) และมีการเพิ่มแผ่นระบายความร้อน (Heatsink) อลูมิเนียม Driver 8 ตัวถูกจัดสรรให้กับความจุ 8 Valve ของระบบ ส่วน Valve ตัวที่เก้าคือ Shutoff Valve ในการ実装ช่วงแรกตรวจพบการรั่วไหลจากการสังเกตอัตราการไหลเพียงเล็กน้อยในขณะที่ Valve ทั้งหมดปิดอยู่ จึงมีการเพิ่ม Shutoff Valve เข้าที่ท่อจ่ายน้ำ เช่นเดียวกับ Valve อื่นๆ มันเป็น Valve แบบปกติปิด (Normally Close) ซอฟต์แวร์เวอร์ชันสุดท้ายจะเปิด Shutoff Valve ทุกครั้งที่มี Valve ประจำเขตเปิด เมื่อไม่มีเขตใดรดน้ำ Shutoff Valve จะยังคงปิดอยู่ ยกเว้นการตรวจสอบการรั่วเป็นครั้งคราว (ระยะเวลาประมาณสองวินาที) หากสังเกตเห็นอัตราการไหลเกิน 1 มล./วินาที ข้อความจะถูกส่งไปยัง Home Assistant เพื่อเรียกใช้ Automation ที่ส่งอีเมลแจ้งเตือน

วงจรขับแต่ละชุดประกอบด้วย Transistor สองตัว คือ PNP BD140 ที่กล่าวถึงก่อนหน้านี้ และ NPN Transistor เป็นตัว Trigger การกำหนดค่านี้ช่วยให้สัญญาณแรงดันต่ำจาก Arduino สามารถขับ Output 12 โวลต์ที่ Valve ต้องการได้ ขดลวดของ Valve แต่ละตัวจะถูกขนานด้วย Diode ต่อกลับขั้วเพื่อดักกระแส Back EMF แรงดันขับสำหรับ Valve เชื่อมต่อกับ Header แบบสองพินซึ่งไม่ได้เชื่อมต่อกับ Vin ของ Arduino ดังนั้นแรงดันที่จ่ายให้กับ Valve สามารถมาจาก Power Supply แยกต่างหากได้ ในการทดสอบโปรเจกต์นี้ พบว่าไม่จำเป็นต้องใช้ Power Supply แยกสำหรับ Valve และ Arduino

Driver Board มีขนาดใหญ่กว่าปกติ ทำให้ขั้วต่อสายไฟ (Terminal Connectors) ของ Valve ยื่นออกไปเกินความยาวของ MEGA ดังที่เห็นใน Figure 21 ช่วยให้เข้าถึงเพื่อเชื่อมต่อกับ Valve ได้ง่ายในขณะที่บอร์ดเรียงซ้อนกันอยู่

Figure 21. Driver board controlling 9 valves.

ใน Figure 22 ด้านล่าง แสดงโครงสร้างระบบ MEGA ขั้นสุดท้าย ในชุดนี้ผมใช้ Power Supply 12 โวลต์ สองตัวที่เทียบเท่ากัน ตัวหนึ่งสำหรับ Arduino MEGA Stack และอีกตัวสำหรับขับ Valve เวอร์ชัน MEGA ต้องการกล่องกันน้ำที่มีขนาดใหญ่ขึ้นเล็กน้อย การติดตั้งดูสะอาดตากว่าเวอร์ชัน Arduino Nano ที่ต้องใช้ Relay Board มาก การติดตั้ง Relay Board บนฝาทำให้ต้องเดินสายไฟระหว่างฝากับส่วนล่างของกล่อง แต่ในเวอร์ชันนี้ไม่มีอะไรติดตั้งอยู่บนฝาเลย

Figure 22. MEGA system mounted in slightly larger box. Only 6 valves of a possible 8 are used.

อินเทอร์เฟซ Home Assistant Lovelace แสดงใน Figure 23 มันถูกปรับให้กระชับขึ้นจากอินเทอร์เฟซของ Nano โดยการนำเกจวัดความชื้นแยกชิ้นออกและรวมเข้าเป็น Glance Card ใบเดียว เกจสำหรับอัตราการไหลยังคงอยู่ Vertical Stacks ช่วยแบ่งส่วน 'Controls' ออกจาก 'Sensors' และ 'Operational Status'

ในส่วนของ Controls ยังคงเหมือนกับในการ実装ของ Nano ในโหมด Manual สามารถสั่งให้แต่ละ Valve ทำงานได้ แต่จะเปิดได้เพียงครั้งละหนึ่งตัวเท่านั้น แต่ละเขตสามารถกำหนดค่าแยกกันเป็นโหมดอัตโนมัติหรือ Manual หากเขตที่ตั้งค่าเป็นอัตโนมัติสั่งงาน Valve อยู่ จะไม่อนุญาตให้สั่งงาน Valve แบบ Manual ได้ นอกจากนี้ใน Stack เดียวกันยังมีแผง 'Alarm' ซึ่งแสดงตัวระบุกลางวัน/กลางคืน ระบบจะอนุญาตให้รดน้ำในเวลากลางคืนเท่านั้น อาจจะน่าสนใจถ้าจะเพิ่ม Light Sensor เพื่อหาความสว่างของแสงแดดเทียบกับตอนมีเมฆหรือตอนกลางคืน เพื่ออนุญาตให้ทำงานได้ในสภาพอากาศที่มีเมฆมาก เช่นเดียวกับ Nano สวิตช์รีสตาร์ทระบบช่วยให้รีเซ็ตสถานะ Alarm ได้ เมื่อระบบตรวจพบสภาวะน้ำไหลน้อยหรือ Moisture Sensor วงจรเปิด มันจะปิดการทำงานโดยอัตโนมัติเพื่อป้องกันการรดน้ำมากเกินไป เมื่อปัญหาได้รับการแก้ไขแล้ว ผู้ใช้สามารถกดสวิตช์ 'Reset' ซึ่งจะทำให้ระบบรีเซ็ตตัวบ่งชี้ Alarm ภายในซอฟต์แวร์และอนุญาตให้กลับมาทำงานต่อได้

แผง 'Sensors' แสดงเกจ Flow Sensor พร้อมกับ Moisture Sensor และ Temperature Sensor ในรูปแบบ Glance ส่วน Stack 'Operational Status' ให้ข้อมูลเกี่ยวกับ Sensor ของแต่ละเขต สำหรับ Moisture Sensor จะระบุสภาวะวงจรเปิดและชอร์ต ในกรณีของ Temperature Sensor จะระบุการมีอยู่หรือขาดหายไป

Figure 23. Home Assistant Lovelace interface. Only 6 valves implemented here.

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: irrigation-system-8cc69e
8 บาท
PromptPay QR Code