ที่มา
ฤดูกาลที่แล้วอะโวคาโดของเราประสบปัญหาขาดแคลนน้ำ ซึ่งเกิดจากหัวจ่ายน้ำ (dippers) อุดตัน หลังจากตรวจสอบหัวจ่ายน้ำ (dipper autopsies) จำนวนหนึ่ง ก็พบว่ามี "สิ่งอินทรีย์" เจริญเติบโตอยู่ภายในท่อ วิธีเดียวที่จะแก้ไขปัญหานี้คือการฉีดสารเคมีเพื่อกำจัดและละลายคราบสกปรกดังกล่าวออกจากภายในท่อ ไม่ว่าจะเป็นสารเคมีชนิดใดก็ตาม คุณจำเป็นต้องฉีดสารเคมีในอัตราที่ถูกต้องในระหว่างการให้น้ำ (irrigation)
ในกรณีนี้ เราเลือกที่จะฉีด Hydrogen Peroxide ซึ่งถูกเลือกเนื่องจากไม่มีผลิตภัณฑ์พลอยได้หลงเหลืออยู่หลังจากสลายตัว ปัญหาของสารเคมีชนิดนี้คือมันใช้งานไม่ง่ายนัก หากเราสามารถสูบมันได้โดยตรงจากภาชนะบรรจุ จะช่วยลดความเสี่ยงส่วนบุคคลลงอย่างมากในการจัดการกับสารเคมีเข้มข้น นอกจากนี้ยังมีการทำความสะอาดเชิงกลจากปฏิกิริยาการสลายตัวของ peroxide ซึ่งจะแสดงผลได้ดีขึ้นที่ความเข้มข้นสูง
ขั้นตอนที่ 1 - การพิสูจน์แนวคิด (Proof of Concept)
หลังจากที่ได้สร้างปั๊มจ่ายสารสำหรับระบบ fertigation ไปแล้วสองตัวโดยใช้ "dot net" ผมก็อยากลองดูว่ากล่องอุปกรณ์ Arduino ของผมจะสามารถนำมาสร้างปั๊มแบบพกพาได้หรือไม่ ผมจึงสร้างชุดทดสอบขึ้นจาก UNO และ relay shield นี่เป็นพื้นฐานที่สุดเท่าที่จะทำได้ ส่วนประกอบภายนอกเพียงอย่างเดียวคือ automotive relay สำหรับขับเคลื่อนปั๊ม และ pre-regulator เพื่อรักษาอุณหภูมิของ Arduino ให้เย็นในขณะที่ทำงานด้วยแบตเตอรี่ 12V โค้ดถูกลดทอนให้เหลือเพียง delays และ digital writes ซึ่งต่อมาจะนำไปสู่ข้อสังเกตที่น่าสนใจเกี่ยวกับระบบ
การสอบเทียบ
หลังจากเชื่อมต่อปั๊มเข้ากับถังน้ำ ผมก็เริ่มตรวจสอบการสอบเทียบ (calibration) ของปั๊ม ปั๊มควรจะมีอัตรา 5L/min ตามโฆษณาใน eBay แต่เช่นเดียวกับสินค้าส่วนใหญ่ ข้อมูลจำเพาะมักจะ "เกินจริง" ไปบ้าง ปรากฏว่าปั๊มมีอัตราประมาณ 3L/min ซึ่งหมายความว่าการเปิดปั๊ม 2 วินาทีจะให้น้ำได้ประมาณ 100ml ในขั้นตอนนี้ ผมยังตรวจสอบระบบท่อเพื่อหารอยรั่วและสวิตช์นิรภัยสำหรับการทำงานเมื่อมีแรงดันสูง (closed head) ตอนนี้ผมเลือกวงจร 30 วินาทีเนื่องจากไม่ต้องการให้ฟองออกซิเจนก่อตัวในปั๊มหรือท่อ อัตราการไหลในสาย irrigation เป้าหมายอยู่ที่ประมาณ 1.5 ลิตร/วินาที ซึ่งน่าจะให้ความเข้มข้นเฉลี่ยสุดท้ายที่ 0.1-1% เพื่อความปลอดภัย ผมตั้งโปรแกรม shield relays ให้ทำงานที่ 2, 4, 8 และ 16 วินาที ซึ่งหมายความว่ามีการคลิกเป็นจังหวะ ซึ่งเป็นตัววัดความมั่นใจที่ดีในการใช้งานจริง
ของจริง - การฉีดสารเคมีลงในน้ำชลประทาน
ตอนนี้ถึงเวลาลองใช้งานจริงในพื้นที่ หลังจากติดตั้งทุกอย่าง ถ่ายรูป และสวมถุงมือกับแว่นตาป้องกัน (ในกรณีที่ท่อชำรุด) ก็เริ่มเดินเครื่องปั๊ม ผลลัพธ์เป็นไปในทางบวก แต่มีปัญหากับสัญญาณรบกวนจากปั๊มหรือรีเลย์ที่ทำให้ CPU ค้างเป็นระยะๆ ภรรยาของผมให้ความเห็นว่าปั๊มกระตุกเมื่อเริ่มและหยุดทำงาน ซึ่งทำให้ผมคิดว่านี่คืองานสำหรับ soft start PWM ไม่ใช่ on/off relay อย่างไรก็ตาม ผลลัพธ์จากการทดลองใช้งานจริงและตัวควบคุมปั๊มดูดี ดังนั้นจึงก้าวไปสู่ขั้นตอนต่อไป
ขั้นตอนที่ 2 - โปรโตไทป์ที่ใช้งานได้จริง
ผมไม่ต้องการ UI แบบกายภาพบนตัวควบคุมนี้ เนื่องจากมันอยู่ใกล้สารเคมีและต้องการอยู่ในกล่อง IP65 เป็นต้น ผมจึงคิดว่ามันควรจะทำงานจากระยะไกลผ่าน WiFi ผมคันไม้คันมืออยากลองใช้ WeMos D1 R2 มานานแล้ว ซึ่งมีเลย์เอาต์เหมือนกับ UNO แต่เป็น 3.3 โวลต์ ผมจึงออกแบบ user interface แบบ HTML และนำไปใช้งานผ่าน web server ของ WeMos และ WiFi access point

เอาต์พุต PWM จาก D1 เชื่อมต่อกับบอร์ด FET ซึ่งขับเคลื่อนมอเตอร์โดยตรง ส่วนที่เหลือทั้งหมดดำเนินการในซอฟต์แวร์บน WeMos จริงๆ แล้ว ผมคิดว่าภาพนี้อาจเป็น "self-fritzing" เพราะคุณสามารถเห็นการเชื่อมต่อต่างๆ ได้ เห็นได้ชัดว่าต้องต่อแหล่งจ่ายไฟเข้ากับ D1 แต่มันสามารถรับไฟ DC ได้ตั้งแต่ 9 ถึง 24V ดังนั้นแบตเตอรี่ 12V จึงอยู่ในช่วงที่เหมาะสม
HTML Headers เป็นสิ่งสำคัญ
ใช่แล้ว เรื่องนี้ทำให้ผมปวดหัวพอสมควร หน้าเว็บที่ทำงานบน Android ได้แต่ไม่ทำงานบนเบราว์เซอร์ iOS - WTF ผมเขียนโค้ดเว็บเพจที่ใช้ข้อมูลมานานหลายปี แต่ไม่เคยต้องสร้างหรือส่ง header เลย เป็นเรื่องที่ทำให้ตาเบิกโพลงเลยทีเดียว สิ่งเหล่านี้ที่คุณมักจะมองข้ามไป ต้องบอกว่า Google Chrome นั้นยอดเยี่ยมมาก คุณสามารถคลิกและดู source ของ header ได้หลังจากกด F12 ผมได้ทำหน้าเว็บง่ายๆ บน web server ที่ทำงานของผม และเปรียบเทียบผลลัพธ์กับเวอร์ชัน Arduino ของผม หลังจากศึกษาไฟล์ไลบรารีที่รวมอยู่ (.h และ .cpp) เล็กน้อยเพื่อดูว่าพวกมันทำอะไร ทำอย่างไร ปัญหาของผมก็ได้รับการแก้ไข
การใช้งานอื่น ๆ
ผมกับเพื่อนบ้านคุยกันเรื่องการควบคุมแมลงวันผลไม้ เครื่องพ่นยาใหม่ของเขาขาดการควบคุมแบบ pulse เพื่อส่งเหยื่อในปริมาณที่เหมาะสมไปยังต้นไม้ หลังจากที่เห็นว่าเครื่องฉีดของผมทำอะไรได้ เขาก็ขอให้ทำเครื่องฉีดให้เขาโดยมีการปรับเปลี่ยนเล็กน้อย หลังจากสร้างเสร็จอย่างรวดเร็ว เขาก็มีความสุขมาก ดังนั้นคุณสมบัติใหม่ในซอฟต์แวร์คือการตั้งค่า max quantity และ max cycles ทั้งสองเป็นศูนย์ ซึ่งจะทำให้ปั๊มทำงานต่อเนื่องตาม duty cycle ที่เลือกไว้ ผมยังตั้งค่าให้มันจดจำสถานะการทำงานของปั๊มที่บันทึกไว้ก่อนหน้านี้ แทนที่จะเป็นค่าเริ่มต้นที่ปิดเมื่อเปิดเครื่อง คุณยังสามารถปรับ PWM ramp หรือปิดการใช้งาน (0) ได้ เพื่อให้ ESP สามารถขับ relay แทน FET board ได้
ข้อมูล Frontmatter ดั้งเดิม
title: "Controller for Chemical Dosing Pump" description: "A portable WiFi / smart phone based pump system for dosing drip irrigation systems with chemicals." author: "dougal" category: "" tags: - "dosing" - "pump" - "horticulture" - "esp" views: 7505 likes: 1 price: 12 difficulty: "Easy" components: - "1x Buzzer" - "1x 30A Relay Modual" - "2x Switches Automotive 10A" - "1x Generic ESP8266 IC" - "1x Single Channel FET trigger board" - "1x ESP8266 WeMos D1 R2 Uno Compatible" - "1x Soldering iron (generic)" - "1x ESP8266 ESP-12E" - "1x Fuse and Holder 10A" tools: [] apps: - "1x Arduino IDE" - "1x Chrome Web Browser" downloadableFiles: - "https://projects.arduinocontent.cc/1daa1ec0-907b-4e47-aa2a-3afa79805a30.ino" - "https://projects.arduinocontent.cc/d53fe57d-56a6-4d7f-b144-a7e99a3e81da.ino" - "https://projects.arduinocontent.cc/d53fe57d-56a6-4d7f-b144-a7e99a3e81da.ino" documentationLinks: [] passwordHash: "ce7632e0006a43997f5c2f11d270069f2e15b4922f4be4c082fdd3a3b45db9de" encryptedPayload: "U2FsdGVkX19J6UEzNMgCg3PbV372woWy0sWPXtxljFL8tfPyGLtdJNpEKeHRjFXt3KTy0ILWX0VEe8FThYF7BlMHiT+DfvktEKt5rPYVEIGjBSNhx9GwEg+0Irx8JVEf" seoDescription: "Portable WiFi and smart phone based Controller for Chemical Dosing Pump in drip irrigation systems. Efficient dosing solution." videoLinks: [] heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/controller-for-chemical-dosing-pump-70f29b_cover.JPG" lang: "th"