ช่วงนี้เป็นช่วงที่ต้องระวังตัวกันหน่อย เราเลยต้องลดการสัมผัสจากภายนอกให้ได้มากที่สุด แม้จะใช้เจลล้างมือหรือสเปรย์แอลกอฮอล์บ่อยแค่ไหน แต่การกดปุ่มหรือสัมผัสตัวเครื่องก็ยังถือเป็นการสัมผัสอยู่ดี เลยคิดว่า... ทำเครื่องจ่ายเจลอัตโนมัติขึ้นมาเองดีกว่า!
มุมมองของโปรเจกต์
เครื่องจ่ายเจลล้างมือแบบไม่ต้องสัมผัสอัตโนมัติ ตัวนี้ เป็นโครงงานพื้นฐานที่เข้าใจง่าย เหมาะมากสำหรับน้องๆ ที่เพิ่งเริ่มต้นเล่นเซนเซอร์และระบบอัตโนมัติ ด้วยการใช้ เซนเซอร์วัดระยะอัลตราโซนิค HC-SR04 และ เซอร์โวมอเตอร์ขนาดเล็ก น้องจะได้เรียนรู้วิธีสร้างเครื่องจ่ายเจลแบบไม่ต้องสัมผัส ประสิทธิภาพสูง ไว้ใช้ที่บ้านหรือที่ออฟฟิศ
วิธีทำงาน: ตรวจจับและจ่ายเจล
โปรเจกต์นี้เน้นสร้างระบบอัตโนมัติที่ใช้ง่ายและเสถียร:
- ชั้นตรวจจับ: ใช้ เซนเซอร์วัดระยะอัลตราโซนิค (HC-SR04) โดย Arduino จะส่งสัญญาณ "ปิง" ออกไปและรอรับเสียงสะท้อน เพื่อตรวจจับเมื่อมีมือเข้ามาในระยะ 15 ซม. จากหัวจ่าย
- ชั้นทำงาน: ใช้ เซอร์โวมอเตอร์ขนาดเล็ก (SG90) ทำหน้าที่เป็นคนดันคันโยกจริงๆ เมื่อตรวจจับมือได้ เซอร์โวจะหมุนไปยังมุมที่ตั้งไว้เพื่อดันคันโยกจ่ายเจล
- ชั้นแจ้งเตือนด้วยเสียง: ใช้ Piezo Buzzer เพื่อส่งเสียงสั้นๆ เป็นจังหวะทุกครั้งที่จ่ายเจลสำเร็จ
- ชั้นควบคุมเวลา: โค้ดใน Arduino จะตั้งเวลาหยุดทำงานสักพักหลังจ่ายเจลแต่ละครั้ง เพื่อป้องกันการจ่ายซ้ำจากมือที่ขยับอยู่
อุปกรณ์ที่ต้องใช้
- Arduino Uno: เป็น "สมอง" ของโปรเจกต์ คอยจัดการการตรวจจับและสั่งงานเซอร์โวกับบัซเซอร์
- เซนเซอร์วัดระยะอัลตราโซนิค (HC-SR04): ใช้ตรวจจับมือแบบไม่สัมผัส ให้การทำงานน่าเชื่อถือในทุกครั้งที่ใช้
- เซอร์โวมอเตอร์ขนาดเล็ก (SG90): ให้การเคลื่อนไหวทางกายภาพเพื่อดันคันโยกจ่ายเจลในแต่ละครั้ง
- ขวดเจลล้างมือ: แหล่งเก็บเจลล้างมือสำหรับทุกคน
- เบรดบอร์ด: ช่วยให้ต่อวงจรแบบชั่วคราวได้ง่าย โดยไม่ต้องบัดกรี
- แบตเตอรี่ 9V: สำคัญมากสำหรับให้พลังงาน ทำให้โปรเจกต์พกพาได้และทำงานได้เอง
- สาย Micro-USB: ใช้สำหรับอัปโหลดโค้ดจากคอมพิวเตอร์ไปยัง Arduino และจ่ายไฟขณะโปรแกรม
วงจร:
Arduino
- ต่อขา 5V ของ Arduino เข้ากับสายไฟบวก (+) บนเบรดบอร์ด
- ต่อขา GND ของ Arduino เข้ากับสายไฟลบ (-) บนเบรดบอร์ด
หมายเหตุ: ถ้าอยากให้โปรเจกต์พกพาได้จริง ให้ต่อขา VIN ของ Arduino เข้ากับสายบวกแทนขา 5V แล้วค่อยต่อแบตเตอรี่ 9V เข้ากับสายไฟบนเบรดบอร์ดเพื่อจ่ายไฟ
เซนเซอร์วัดระยะอัลตราโซนิค HC-SR04
- ต่อขา VCC ของเซนเซอร์เข้ากับสายบวกบนเบรดบอร์ด
- ต่อขา GND ของเซนเซอร์เข้ากับสายลบบนเบรดบอร์ด
- ต่อขา Trig ของเซนเซอร์เข้ากับขา 9 บน Arduino
- ต่อขา Echo ของเซนเซอร์เข้ากับขา 10 บน Arduino
หมายเหตุ: โปรเจกต์นี้ใช้เซนเซอร์วัดระยะแบบอื่นแทนได้ เช่น เซนเซอร์อินฟราเรด (IR)
เซอร์โวมอเตอร์
- ต่อสายไฟกลาง (สีแดง, +5V) ของเซอร์โวเข้ากับสายบวกบนเบรดบอร์ด
- ต่อสายไฟกราวด์ (สีน้ำตาล/ดำ) ของเซอร์โวเข้ากับสายลบบนเบรดบอร์ด
- ต่อสายสัญญาณ (สีส้ม/เหลือง) ของเซอร์โวเข้ากับขา 2 บน Arduino
แค่นี้แหละ! การเดินสายไม่ได้ซับซ้อนเลย ง่ายๆ หน่อย
วิธีทำงาน
เริ่มต้นด้วยการเรียกใช้ไลบรารี่ New Ping และ Servo กันก่อน
#include <Servo.h>
#include<NewPing.h>
ต่อไปก็ประกาศตัวแปรทั้งหมดที่ต้องใช้
int trigPin = 9;
int echoPin = 10;
float v = 343;
float d = 0;
float pingTime = 0;
int servoPin = 2;
int servoPos = 0;
int buzzPin = 5;
สร้างออบเจ็กต์ชื่อ myServo จากไลบรารี่ servo และสร้างออบเจ็กต์ชื่อ sonar จากไลบรารี่ New Ping
Servo myServo;
NewPing sonar(trigPin,echoPin);
จากนั้นก็เซ็ตอัพออบเจ็กต์ต่างๆ กำหนดโหมดของพิน และเปิด Serial Monitor ในฟังก์ชัน void setup
void setup(){
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
myServo.attach(servoPin);
myServo.write(servoPos);
pinMode(buzzPin,OUTPUT);
}
ใน void loop เราจะอ่านค่าความห่างเป็นเซนติเมตร และตรวจสอบว่าความห่างนั้นน้อยกว่าหรือมากกว่า 15 ซม.
d = sonar.ping_cm();
เราจะสั่งให้เซอร์โวหมุนไป 120 องศาถ้าความห่างน้อยกว่า 15 ซม. โดยใช้ if-else ง่ายๆ สุดท้ายก็เขียนค่าตำแหน่งไปที่มอเตอร์
if(d < 15){
servoPos = 120;
digitalWrite(buzzPin,HIGH);
delay(100);
digitalWrite(buzzPin,LOW);
}
else{
servoPos = 0;
}
digitalWrite(buzzPin,LOW);
myServo.write(servoPos);
หมายเหตุ: การวัดระยะด้วยเซ็นเซอร์อัลตราโซนิก ไม่จำเป็นต้องใช้ไลบรารี่ New Ping เสมอไป น้องสามารถสร้างพัลส์ที่พิน trigger และ echo แล้วคำนวณระยะห่างถึงเป้าหมาย (ในที่นี้คือมือเรา) เองก็ได้ ใช้โค้ดส่วนนี้เพื่อสร้างพัลส์และรับค่ากลับมาได้เลย
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
delayMicroseconds(10);
pingTime = pulseIn(echoPin,HIGH);
pingTime /= 10000;
d = pingTime*343/2;
ทฤษฎีเบื้องหลัง
เซ็นเซอร์วัดระยะอัลตราโซนิก: เซ็นเซอร์นี้จะส่งพัลส์เสียงความถี่สูง (อัลตราโซนิก) ออกไปจากตัวส่ง เราเรียกการส่งนี้ว่า "ping" ตัวรับจะ "ฟัง" สัญญาณนี้และคำนวณเวลาที่ใช้ตั้งแต่ส่งออกไปจนถึงรับกลับมา เราสามารถคำนวณระยะทางได้จากสูตรนี้ (สมมติความเร็วเสียงในอากาศที่อุณหภูมิ 25⁰C = 343 m/s)
v = 2d/t
เมื่อ
- v - ความเร็วเสียงในอากาศ
- d - ระยะจากเซ็นเซอร์ถึงวัตถุ
- t - เวลาที่ใช้ตั้งแต่ส่ง ping จนถึงรับกลับ
จัดรูปสมการใหม่ จะได้
d = v*t/2
ระยะทางที่ได้จะมีหน่วยเป็นเมตร [m] ดังนั้นคูณด้วย 100 ก็จะได้หน่วยเป็นเซนติเมตร [cm] จัดไปวัยรุ่น!

มอเตอร์เซอร์โว: มอเตอร์เซอร์โวเป็นมอเตอร์พิเศษที่สามารถหมุนไปหยุดที่มุมที่เราสั่งได้ ต่อวงจรและเขียนโค้ดง่ายมาก ในโปรเจคนี้เราจะใช้ไลบรารี่ Servo.h มาช่วย เราจะใช้เซอร์โวในการดึงคันโยกของเจลล้างมือ สู้งานนะน้อง ห้ามช็อตนะตัวนี้
ขั้นตอนการประกอบและเชื่อมต่อแบบ Step-by-Step
เจ้าเครื่องจ่ายเจลล้างมือตัวนี้ ออกแบบมาให้เวิร์คสุดๆ:
- ตั้งค่าฮาร์ดแวร์: วางเซ็นเซอร์วัดระยะ (Ultrasonic Sensor) และเซอร์โว (Servo) ให้ลงตัวบนเบรดบอร์ดหรือกล่องที่พิมพ์จากเครื่อง 3D Printer
- ตั้งค่าการเชื่อมต่อแบบแรงสูง: ต้องแน่ใจว่าเซอร์โวติดกับคันโยกของขวดเจลแน่นหนา โดยใช้ลวดแข็งแรงหรือชิ้นส่วนที่พิมพ์จาก 3D Printer
- ลูปการทำงาน: Arduino จะคอยอ่านค่าจากเซ็นเซอร์ตลอดเวลา และสั่งให้เซอร์โวทำงานทันทีเมื่อมีมือเข้ามาใกล้ในระยะ 15 ซม.
- การตอบสนองแบบเห็นภาพและเสียง: ดูสถานะการทำงานแบบเรียลไทม์ได้เลย เซอร์โวจะดึงคันโยกอัตโนมัติเมื่อมีมือเข้าใกล้
การทำกล่อง (Casing)
- ใช้กระดาษแข็งตัดและพับให้เป็นกล่องสี่เหลี่ยม ขนาดพอดีที่จะใส่เบรดบอร์ดลงไปได้
- เจาะรูบนกล่องเพื่อติดสวิตช์
- เจาะรูอีก 2 รูสำหรับเซ็นเซอร์วัดระยะ แล้วติดเซ็นเซอร์เข้ากับกล่อง อย่าลืมตัดกระดาษแข็งให้กว้างกว่ากล่องเดิมนิดนึง จะได้มีปีกสำหรับพับติดกับกล่องได้

วิธีทำให้เซอร์โวจ่ายเจลได้
- เจาะรู 2 รูบนคันโยกของขวดเจล
- สอดลวดทองแดงแข็งแรงผ่านรูทั้งสอง
- ปลายลวดด้านหนึ่งให้ยึดกับรูบนแขน (Horn) ของเซอร์โว ส่วนปลายอีกด้านยึดให้แน่นกับอีกฝั่งของขวดเจล
- ติดโฟมชิ้นหนึ่งไว้ข้างขวดเจล แล้วสอดปลายลวดทองแดงที่ว่างผ่านโฟมนั้น
- ดัดลวดให้ขนานกับลวดอีกด้านหนึ่ง
หมายเหตุ: เวลายึดลวดเข้ากับเซอร์โวและขวดเจล ต้องรักษาความตึงของลวดไว้ให้ดีนะตัวนี้ อย่าให้หย่อน!

ไอเดียอัพเกรดในอนาคต (จัดไปวัยรุ่น!)
- เพิ่ม OLED Status Dashboard: ใส่จอ OLED ขนาดเล็กเพื่อแสดง "ระดับน้ำยาเหลือ" (%) และ "จำนวนครั้งที่จ่ายไปแล้ว"
- เพิ่ม Cloud Interface: ใส่โมดูล WiFi (ESP8266/ESP32) แล้วเชื่อมต่อกับแดชบอร์ดบนคลาวด์ เพื่อติดตามและบันทึกพฤติกรรมการใช้เจลจากมือถือได้แบบเป๊ะๆ
- เพิ่ม Multi-sensor Bio-Security: ต่อเซ็นเซอร์หลายๆ ตัว (เช่น เซ็นเซอร์วัดอุณหภูมิ) เพื่อสร้างจุดตรวจสุขภาพ "ล้างมือและสแกน" ที่สมบูรณ์แบบขึ้น
- ปรับแต่ง Advanced Velocity Profile: เพิ่มสไลด์หรือโพเทนชิออมิเตอร์เล็กๆ สำหรับปรับ "ปริมาณการจ่าย" จากขวดด้วยมือได้
เครื่องจ่ายเจลล้างมืออัตโนมัติแบบไม่ต้องสัมผัสนี้ เป็นโปรเจกต์ที่เพอร์เฟกต์มากสำหรับสายอิเล็กทรอนิกส์ที่อยากได้เครื่องมือเพื่อสุขภาพที่โต้ตอบได้และน่าสนุก! สู้งานนะน้อง
Libraries:
- ดึงไลบรารีเซอร์โว (Servo) ได้ที่นี่
- ดึงไลบรารีนิวพิง (NewPing) ได้ที่นี่
จะดาวน์โหลดจากเว็บก็ได้ หรือจะลงผ่าน Arduino IDE เลยก็ง่ายกว่าแค่คลิก Tools -> Manage Libraries... รอหน้าต่างเด้งขึ้นมา แล้วก็เสิร์ชหาไลบรารีที่ต้องการได้เลย ง่ายๆ
