เคยสงสัยหรือไม่ว่า ตู้น้ำหยอดเหรียญที่ตั้งอยู่ในสถานที่ต่าง ๆ เช่น หอพัก ร้านค้า และสถานที่อื่น ๆ มีหลักการทำงานอย่างไร ตู้วัดประมาณน้ำอย่างไร ในบทความนี้เราจะมาเรียนรู้หลักการวัดและควบคุมปริมาณการจ่ายน้ำ และทดลองทำเครื่องจ่ายน้ำด้วยบอร์ด KidBright กัน
หลักการวัดและควบคุมปริมาณการจ่ายน้ำ
แบ่งออกได้ 2 วิธี
1.การวัดโดยตรง
คือ การวัดปริมาณน้ำที่ไหลผ่านท่อ หรือวัดน้ำหนักของน้ำในภาชนะโดยตรง โดยใช้เซ็นเซอร์ต่าง ๆ เข้าไปวัดโดยตรง
- ข้อดี คือ ปริมาณน้ำที่จ่ายมีความเที่ยงตรงสูง และเชื่อถือได้
- ข้อเสีย คือ ค่าใช้จ่ายในการจัดทำและบำรุงรักษาสูงกว่าวิธีจับเวลา
2.การจับเวลา
คือ การวัดว่าใน 1 วินาทีจ่ายน้ำได้กี่ลิตร จากนั้นจึงเทียบบัญญัติไตรยางค์เพื่อควบคุมปริมาณน้ำที่จ่าย เช่น วัดแล้วว่าใน 1 วินาทีจ่ายน้ำได้ 5 ลิตร หากต้องการให้จ่ายน้ำ 15 ลิตร ให้จ่ายน้ำเป็นเวลา 3 วินาที เป็นต้น
- ข้อดี คือ บำรุงรักษาง่าย ใช้อุปกรณ์น้อย
- ข้อเสีย คือ มีความน่าเชื่อถือต่ำ ไม่สามารถจ่ายน้ำได้ละเอียดมากนัก ปริมาณน้ำที่จ่ายได้ขึ้นอยู่กับหลายปัจจัย เช่น ปริมาณน้ำในถังเก็บ แรงดันน้ำ เป็นต้น
การใช้บอร์ด KidBright ร่วมกับปั้มน้ำ
การเชื่อมต่อปั้มน้ำเข้ากับบอร์ด KidBright แนะนำให้ใช้งานปั้มน้ำ USB ซึ่งมีลักษณะดังรูปด้านล่างนี้
ปั้มน้ำแบบ USB สามารถเชื่อมต่อกับบอร์ด KidBright ได้โดยตรงผ่านช่อง USB โดยปั้มน้ำที่นำมาต่อจะต้องใช้กระแสไฟฟ้าไม่เกิน 300mA สำหรับปั้มน้ำ USB ในรูปที่ 1 ใช้กระแสไฟฟ้าประมาณ 200mA ดังนั้นจึงต่อเข้ากับบอร์ด KidBright ได้โดยตรง ดังรูปที่ 2
ทดสอบเขียนโปรแกรมสั่งงานปั้มน้ำ
ในการเขียนโปรแกรมสั่งงานปั้มน้ำ บทความนี้ใช้ microBlock IDE ในการเขียนโปรแกรม โดยเลือกใช้การเขียนโปแกรมแบบภาษา Python ในการสั่งงาน
1) เปิดโปรแกรม microBlock IDE ขึ้นมา กดปุ่มสร้างโปรเจคใหม่
2) ตั้งชื่อโปรเจค (1) เลือกบอร์ดที่ใช้งาน ตัวอย่างใช้บอร์ด KidBright32 V1.3 (2) กดปุ่ม Create
3) กดปุ่มเปลี่ยนเป็นโหมด Code จะเห็นว่าสามารถพิมพ์โค้ดโปรแกรม Python ได้แล้ว
4) กดปุ่มใด ๆ บนคีย์บอร์ด โปรแกรมจะแจ้งเตือนเปลี่ยนเป็นโหมดเขียนโค้ด ให้กด Yes เพื่อยืนยันการเปลี่ยนโหมดการเขียนโปรแกรม
5) เขียนโปรแกรมทดสอบสั่งงานปั้มน้ำดังนี้
import usb # นำเข้าโมดูล usb เพื่อให้เขียนคำสั่งสั่งงาน USB ได้
from time import sleep # นำเข้าคำสั่ง sleep จากโมดูล time
usb.on() # สั่งให้อุปกรณ์ที่ต่อช่อง USB ทำงาน
sleep(1) # หน่วงเวลาเป็นเวลา 1 วินาที
usb.off() # สั่งให้อุปกรณ์ที่ต่อช่อง USB หยุดทำงาน
6) กดปุ่มอัพโหลดโปรแกรมลงบอร์ด KidBright
ผลการทำงาน คือ ปั้มน้ำทำงาน 1 วินาที แล้วหยุดทำงาน สามารถกดปุ่ม Reset เพื่อดูผลการทำงานซ้ำได้
**ปั้มน้ำต้องทำงานได้ในขั้นตอนนี้ จึงจะไปในขั้นตอนถัดไปได้**
การควบคุมการจ่ายน้ำด้วยวิธีจับเวลา
ข้อมูลจากผู้ขายปั้มน้ำได้ระบุไว้ว่า ปั้มน้ำ USB ตามรูปที่ 1 สามารถปั้มน้ำได้ปริมาณ 1.2 – 1.6 ลิตร/นาที ค่ากลางคือ 1.4 ลิตร/นาที สร้างเป็นสูตรหาค่าเวลาที่ปั้มน้ำต้องทำงานเมื่อกำหนดปริมาณน้ำที่กำหนด ได้ดังนี้
1.4 ลิตร / 60 วินาที = 23.33 มิลลิลิตร/วินาที
1 มิลลิลิตร = 1 / 23.33 มิลลิลิตร/วินาที = 0.042 วินาที
ดังนั้น
ปริมาณน้ำที่ต้องการในหน่วยมิลลิลิตร * 0.042 = ระยะเวลาที่ปั้มน้ำต้องทำงานในหน่วยวินาที
จากสูตรด้านบน ทดสอบหาค่ากลับ หากต้องการปริมาณน้ำ 1.4 ลิตร หรือ 1400 มิลลิลิตร ระยะเวลาที่ปั้มน้ำทำงานควรจะประมาณ 60 วินาที
1400 มิลลิลิตร * 0.042 = 58.8 วินาที
ค่าที่ได้ใกล้เคียง 60 วินาที แสดงว่าสูตรคำนวณถูกต้องแล้ว
ทดสอบเขียนโปรแกรมให้ปั้มน้ำจ่ายน้ำออกมา 100 มิลลิลิตร ดังนี้
import usb # นำเข้าโมดูล usb เพื่อให้เขียนคำสั่งสั่งงาน USB ได้
from time import sleep # นำเข้าคำสั่ง sleep จากโมดูล time
waterWant = 100 # สร้างตัวแปร กำหนดปริมาณน้ำที่ต้องการ 100 มิลลิลิตร
timeOn = waterWant * 0.042 # คำนวณหาค่าเวลาที่ปั้มน้ำต้องทำงานในหน่วยวินาที เก็บผลการคำนวณลงตัวแปร timeOn
usb.on() # สั่งให้ปั้มน้ำทำงาน
sleep(timeOn) # หน่วงเวลาตามค่าที่อยู่ในตัวแปร timeOn
usb.off() # สั่งให้ปั้มน้ำหยุดทำงาน
อัพโหลดโปรแกรมเพื่อทดสอบการทำงาน ผลที่ได้ ปั้มน้ำควรจ่ายน้ำออกมา 100 มิลลิลิตร
จากการทดสอบด้วยเครื่องมือที่มีจำนวน 10 ครั้ง พบว่าใส่น้ำลงภาชนะปริมาณ 600 มิลลิลิตร หลังปั้มน้ำออก พบว่าน้ำเหลือประมาณ 360 มิลลิลิตร แสดงว่าปั้มน้ำจ่ายน้ำออกไป 600 – 360 = 240 มิลลิลิตร ซึ่งผิดจากที่คำนวณไว้ถึง 140 มิลลิลิตร แสดงว่าสูตรคำนวณด้านบนนั้น ไม่สามารถนำมาใช้จริงได้
แก้ไขสูตรคำนวณใหม่ โดยเทียบบัญญัติไตรยางค์เช่นเดิม จากโค้ดโปรแกรม 100 * 0.042 = 4.2 แสดงว่า ปั้มน้ำทำงาน 4.2 วินาที ได้ 240 มิลลิลิตร เทียบบัญญัติไตรยางค์ใหม่ได้ 4.2 / 240 = 0.0175 วินาที/มิลลิลิตร
จากโค้ดโปรแกรมด้านบน แก้ไขโค้ดโปรแกรมบรรทัดที่ 5 เป็น * 0.0175 แทน แล้วอัพโหลดโปรแกรมทดสอบการทำงานอีกครั้ง
ทดสอบการทำงาน 10 ครั้ง พบว่า * 0.0175 ปริมาณน้ำที่ปั้มออกยังขาดอีกเล็กน้อย
จึงปรับค่า 0.0175 แบบสุ่ม โดยปริมาณน้ำที่ต้องการ 100 มิลลิลิตร แต่จ่ายน้ำได้ไม่ถึง 100 มิลลิลิตร แสดงว่าต้องเพิ่มค่า 0.0175 ขึ้น เพื่อให้ปั้มทำงานนานขึ้น
จากการทดสอบสุ่มค่าไปเรื่อย ๆ พบว่าค่า 0.02 ทำให้จ่ายน้ำได้ใกล้เคียง 100 มิลลิลิตรมากที่สุด
ทำเครื่องจ่ายน้ำ
รูปแบบของเครื่องจ่ายน้ำที่ทำในบทความนี้ แสดงดังรูปที่ 7
โครงสร้างของเครื่องทำจากกระดาษลังตัดแบ่งเป็น 5 ส่วน แต่ละส่วนมีขนาดดังรูปที่ 8
ประกอบแต่ละส่วนตามแบบรูปที่ 1 ได้ผลดังรูปที่ 9
เขียนโปรแกรมใหม่ให้จ่ายน้ำ 300 มิลลิลิตรต่อเมื่อปล่อยปุ่ม S1 ได้โค้ดโปรแกรมดังนี้
import usb # นำเข้าโมดูล usb เพื่อให้เขียนคำสั่งสั่งงาน USB ได้
from time import sleep # นำเข้าคำสั่ง sleep จากโมดูล time
import switch # นำเข้าโมดูล switch เพื่อให้เขียนโปรแกรมรับคำสั่งจากสวิตช์ S1 & S2 ได้
import display # นำเข้าโมดูล display เพื่อให้เขียนโปรแกรมควบคุมแอลอีดี 16x8 ได้
waterWant = 200 # สร้างตัวแปร กำหนดปริมาณน้ำที่ต้องการ 200 มิลลิลิตร
timeOn = waterWant * 0.02 # คำนวณหาค่าเวลาที่ปั้มน้ำต้องทำงานในหน่วยวินาที เก็บผลการคำนวณลงตัวแปร timeOn
while True: # วนรอบทำคำสั่งต่อไปนี้
display.raw(b"\x00\x00\x00\x00\x38\x44\x42\x21\x42\x44\x38\x00\x00\x00\x00\x00") # แสดงรูปหัวใจ
if switch.value(switch.S1) == 1: # ถ้ากดปุ่ม S1
display.raw(b"\x00\x00\x00\x00\x08\x04\x02\xff\x02\x04\x08\x00\x00\x00\x00\x00") # แสดงรูปลูกศร
usb.on() # สั่งให้ปั้มน้ำทำงาน
sleep(timeOn) # หน่วงเวลาตามค่าที่อยู่ในตัวแปร timeOn
usb.off() # สั่งให้ปั้มน้ำหยุดทำงาน
sleep(0.05) # หน่วงเวลาทำงาน 0.05 วินาที
ผลที่ได้ เป็นดังวีดีโอด้านล่าง