เจ้าเครื่องนี้ หลักการง่ายๆ คือให้ผู้ใช้ปัดบัตร RFID ผ่านตัวอ่าน RFID (ระยะประมาณ 4 ซม.) หลังจากนั้น 5 วินาที เครื่องก็จะปล่อยของเหลวออกมาตามปริมาณที่ตั้งค่าไว้ในโค้ด Arduino ทุกขั้นตอนการทำงานจะแสดงผลบนจอ LCD แบบตัวอักษร-ตัวเลข ช่วยให้ผู้ใช้ทำตามขั้นตอนได้ง่ายขึ้นตอนรับของเหลว เอาไปใช้ในที่ต่างๆ เช่น โรงพยาบาล มหาวิทยาลัย (คณะแพทย์, วิศวะ ฯลฯ) เพื่อสร้างระบบบริการอัตโนมัติที่ไม่ต้องพึ่งพาคนก็ได้
ประโยชน์ของมันมีเพียบเลยจ้า ช่วยแก้ปัญหาในหลายๆ สถานการณ์แบบนี้:
- ในโรงพยาบาล คนไข้ต้องการนม ก็กดรับได้เลย ไม่ต้องออกไปซื้อข้างนอกที่ไกลแสนไกล
- ในสถาบันการศึกษา ที่ร้านค้าเปิดเป็นเวลา (เช่น 9 โมง-3 ทุ่ม / 10 โมง-1 ทุ่ม)
- ในงานอีเวนต์ต่างๆ ที่ต้องแจกน้ำผลไม้หรือเครื่องดื่มรสชาติต่างๆ
- ในการเกษตรปลูกผัก ที่ต้องการให้น้ำในปริมาณที่แน่นอนตามชนิดพืช ช่วยเพิ่มทั้งผลผลิตและคุณภาพ
ดังนั้น จากคอนเซปต์นี้ เด็กช่างหรือนักเล่นของทั้งหลายก็สามารถออกแบบเครื่องจำหน่ายของเหลวแบบเรียลไทม์ได้ โดยต้องออกแบบโครงสร้างให้แข็งแรงทนทานพอ ในบทความ DIY นี้เราจะมาคุยกันเรื่องการโปรแกรมและวิธีการต่อวงจรตามต้นแบบที่ทำงานได้จริง
วงจรและหลักการทำงาน: -
โปรเจคนี้ประกอบด้วยเซ็นเซอร์และโมดูลต่างๆ เช่น เซ็นเซอร์วัดการไหลแบบอนาล็อก, ตัวอ่าน RFID, จอ LCD, โซลินอยด์วาล์ว, Arduino Uno หน้าที่ของแต่ละส่วนมีดังนี้:
1. Analog water flow sensor: -
เซ็นเซอร์ตัวนี้ใช้วัดอัตราการไหลของของเหลว มันมีช่องเปิดสองช่อง ช่องนึงสำหรับให้ของเหลวเข้า อีกช่องสำหรับออก เรียกได้ว่าเป็นแบบสองทาง (bi-directional)
มันทำงานบนหลักการของ Hall effect โดยใช้โรเตอร์รูปพัดหรือใบพัดเล็กๆ วางไว้ในทางเดินของของเหลว
2. RFID reader: -
ใช้โมดูล EM018 RFID ในการอ่านแท็ก RFID มันจะถอดรหัสและส่งข้อมูลไปยังตัวควบคุมผ่านโปรโตคอลการสื่อสารแบบอนุกรม โปรเจคนี้สาธิตระบบการจ่ายเงินแบบไม่ใช้เงินสดและระบบจ่ายของโดยใช้เทคโนโลยี RFID โดยใช้ **โมดูล MFRC522 RFID** บัตรของแต่ละผู้ใช้จะมี ID ที่ไม่ซ้ำกัน Arduino จะตรวจสอบ ID นั้นกับรายการ "ยอดเงิน" (Balance) ที่เก็บไว้ หากผู้ใช้มี "เครดิต" เพียงพอ มันก็จะเริ่มกระบวนการจ่ายของเหลว
3. Liquid crystal display: -
LCD จะแสดงข้อมูลที่ได้รับจากตัวควบคุม (ซึ่งอยู่บนบอร์ด Arduino) การตั้งค่าจอ LCD เป็นแบบอักษร-ตัวเลข (16*2) โดยใช้ **16x2 I2C LCD** ที่สามารถแสดงคำทักทายด้วยชื่อผู้ใช้ (ถ้าโปรแกรมไว้) และแสดงยอดเครดิตที่เหลือหลังจากการจ่ายของเหลวแต่ละครั้งสำเร็จ ทำหน้าที่เหมือนแดชบอร์ดแสดงยอดเงินผู้ใช้
4. Solenoid(12v): -
โซลินอยด์วาล์วเป็นตัวปล่อยให้ของเหลวไหลผ่านได้ เมื่อได้รับพลังงาน (energized) มันจะเปิดและปล่อยให้ของเหลวไหล มิฉะนั้นมันจะปิดและไม่ยอมให้ของเหลวไหลผ่าน วาล์วน้ำ DC 12V ตัวนี้ถูกควบคุมผ่าน MOSFET ที่ทนกระแสสูง เฟิร์มแวร์ใช้วิธี "จับเวลาในการจ่าย" (Timed Pour) หรือใช้ข้อมูลจาก "เซ็นเซอร์วัดการไหล" เพื่อให้แน่ใจว่าของเหลวที่จ่ายออกมาทุกรายการมีปริมาณที่แม่นยำ
การทำงานโดยรวม: -
ระบบทั้งหมดสร้างขึ้นรอบๆ บอร์ดพัฒนา Arduino Uno, เซ็นเซอร์วัดการไหลแบบอนาล็อก, LCD แบบอักษร-ตัวเลข 16*2, และสวิตช์ preset 10k โดย Arduino Nano ในที่นี้ทำหน้าที่เป็นสมองประมวลผลทั้งหมด
1. Analog flow sensor มีสายไฟ 3 เส้น จาก 3 เส้นนี้ เส้นหนึ่งให้สัญญาณเอาต์พุต ส่วนอีกสองเส้นเป็นสายจ่ายไฟ (5V และกราวด์ ตามสีที่กำหนด โดยทั่วไปสีแดงคือไฟบวก สีดำคือกราวด์)
ของเหลวจะดันเข้าที่ครีบของโรเตอร์ ทำให้มันหมุน แกนของโรเตอร์เชื่อมต่อกับเซ็นเซอร์ Hall effect ซึ่งเป็นการจัดวางขดลวดที่มีกระแสไหลและแม่เหล็กที่ติดกับแกนโรเตอร์ ดังนั้นจึงเกิดแรงดันไฟฟ้า/พัลส์ขึ้นเมื่อโรเตอร์หมุน ในฟลโวมิเตอร์ตัวนี้ ทุกๆ 1 ลิตรของของเหลวที่ไหลผ่านต่อนาที มันจะส่งพัลส์ออกมาประมาณ 4.5 พัลส์
ขาออก (Output pin) ของเซ็นเซอร์ตัวนี้ต่อเข้ากับขา Digital Pin หมายเลข 2 ของ Arduino พอมีของเหลวไหลผ่าน มันจะส่งพัลส์ออกมาให้เราไปนับหรือวัดด้วยไมโครคอนโทรลเลอร์ จากนั้นก็แปลงจำนวนพัลส์ทั้งหมดที่ได้รับเป็นหน่วยที่เราต้องการ เช่น มิลลิลิตร/วินาที หรือ ลิตร/นาที หลักการทำงานมันเกิดจากการเปลี่ยนแปลงของสนามแม่เหล็กจากแม่เหล็กที่ติดอยู่บนแกนโรเตอร์นั่นแหละ เราก็นับพัลส์ด้วย Arduino แล้วก็คำนวณอัตราการไหลเป็นลิตรต่อชั่วโมง (L/hr.) ด้วยสูตรแปลงหน่วยง่ายๆ
2. ขา Tx ของตัวอ่าน EM018 ต่อเข้ากับขา Rx (ขารับสัญญาณ) ของ Arduino ซึ่งก็คือขา Digital Pin 0 พอเราเอาแท็ก RFID แตะผ่านตัวอ่าน EM018 มันจะส่งข้อมูลมาให้ MCU ถ้าข้อมูลตรงกับที่โปรแกรมไว้ มันก็จะส่งสัญญาณไปที่ขาอินพุตของรีเลย์ ทำให้รีเลย์ทำงานและส่งไฟ 12V ไปให้โซลินอยด์วาล์วผ่านขา N/O ของรีเลย์ พร้อมกันนั้น LCD บรรทัดแรกก็จะแสดงข้อความ "put your vessel"
ขณะที่โซลินอยด์วาล์วได้ไฟจากรีเลย์ มันจะเปิดให้ของเหลวจากแหล่งจ่ายไหลผ่านได้ โซลินอยด์วาล์วนี้ต่อเข้ากับโฟลว์เซ็นเซอร์ ของเหลวจากวาล์วจะไหลเข้าเซ็นเซอร์และผลักให้พัดลมเล็กๆ ด้านในหมุน พร้อมกันนั้น LCD บรรทัดที่สองก็จะแสดงปริมาณของเหลวที่ไหลผ่านแล้ว
เมื่อของเหลวไหลผ่านโฟลว์เซ็นเซอร์ครบตามปริมาณที่ตั้งไว้ในสเก็ตช์ (sketch) รีเลย์จะหยุดทำงาน โซลินอยด์วาล์วก็จะปิดกั้นไม่ให้ของเหลวไหลต่อ พร้อมกันนั้น LCD บรรทัดแรกก็จะแสดงข้อความ "remove your vessel"
ถ้าผู้ใช้ต้องการของเหลวปริมาณเดิมอีกครั้ง ก็แค่เอาแท็ก RFID ไปแตะที่ตัวอ่านอีกรอบ
ส่วนซอฟต์แวร์
โค้ดโปรแกรมเขียนด้วยภาษา Arduino ใช้ Arduino IDE ในการคอมไพล์และอัปโหลดสเก็ตช์ลงไปในไมโครคอนโทรลเลอร์ ATmega328 บนบอร์ด Arduino แต่ละแท็ก RFID มีหมายเลขเฉพาะของตัวเอง หมายเลขนี้แหละที่เราต้องนำมาใส่ในโค้ด/สเก็ตช์ของ Arduino ด้วย
โค้ด Arduino ใช้เฮดเดอร์ไฟล์ LiquidCrystal.h สำหรับควบคุม LCD และใช้การสื่อสารแบบอนุกรม (serial communication) ในการอ่านข้อมูลจากตัวอ่าน RFID เราใช้ฟังก์ชัน built-in สองตัวคือ Serial.available( ) เพื่อตรวจว่ามีข้อมูลหมายเลขแท็ก RFID มาถึงบัฟเฟอร์อนุกรมหรือยัง และ Serial.readString( ) เพื่ออ่านสตริงของหมายเลขแท็ก RFID
ในโค้ด/สเก็ตช์นี้ เราใช้ตัวแปรเป็น ‘int amount=1000’ ซึ่งตั้งค่าปริมาณของเหลวเริ่มต้นไว้ที่ 1000 มิลลิลิตร หรือ 1 ลิตร ต่อการแตะแท็กหนึ่งครั้ง จะเปลี่ยนค่า amount เป็นเท่าไหร่ก็ตามใจเลยน้อง
การประกอบและทดสอบระบบ
1. ต่ออุปกรณ์และโมดูลทั้งหมดตามแผนภาพ schematic diagram ให้เรียบร้อย
2. ต่อแหล่งจ่ายไฟ 12V จากอะแดปเตอร์หรือแบตเตอรี่ 12V เข้ากับขา Vin ของ Arduino, ตัวขับรีเลย์ (relay driver) และขา NO ของรีเลย์
3. ต่อขา common ของรีเลย์เข้ากับโซลินอยด์วาล์ว ตามที่แสดงในวงจร
4. ตรวจสอบค่าปริมาณของเหลวตั้งต้น (default amount) ในโค้ดที่ตั้งไว้สำหรับจ่ายต่อนาที
5. เอาแท็ก RFID ไปแตะที่ตัวอ่าน EM18 ถ้าหมายเลขตรงกับที่โปรแกรมไว้ รีเลย์และโซลินอยด์วาล์วจะทำงาน น้ำจากแหล่งจ่าย (เช่น ก๊อกน้ำ) จะไหลผ่านโฟลว์เซ็นเซอร์
6. ข้อมูลที่เกี่ยวข้องทั้งหมดจะแสดงบน LCD ตามที่อธิบายไปแล้ว อย่าลืมตรวจสอบว่าแหล่งจ่ายของเหลว (เช่น ก๊อกน้ำหรือถัง) มีของเหลวเพียงพอ ถ้ามีน้อยเกินไป ความดันในท่อจะต่ำ ทำให้การวัดอัตราการไหลไม่แม่นยำ จัดการให้ดีนะน้อง!