เกริ่นนำ
ว่าไงน้อง! ตอนเดือนมกราคมปีนี้ พี่เปิดชมรม Arduino ที่โรงเรียนพี่น่ะ พี่อยากมีอะไรโชว์ในงานชมรมสักอย่าง เลยคิดว่า "ต้องทำอะไรที่มันไม่เหมือนใครหน่อย... อะไรแบบว่า... ฟองสบู่ไง!"
ปรากฏว่าเวิร์คสุดๆ ไปเลยวัยรุ่น! เด็กๆ เข้ามาดูเป็นกลุ่มๆ ล้อมวงจับจ้องที่เซนเซอร์ อาจารย์ที่เคยได้ยินแต่ชื่อ Arduino ก็เริ่มสนใจ เดินมาถามนู่นถามนี่ ความสำเร็จที่เจ๋งสุดของโปรเจกต์นี้คือ ทั้งนักเรียนและครูที่เคยแค่ได้ยินคำว่า Arduino เริ่มเข้าใจแล้วว่า "อิเล็กทรอนิกส์เนี่ย มันทำให้ชีวิตประจำวันสนุกและหลากหลายขึ้นได้นะ" บางทีความเรียบง่ายของมันนี่แหละ ที่พังกำแพงระหว่างเด็กช่างกับวงจรไฟฟ้า ทำให้ Arduino เข้าถึงได้ง่ายขึ้น
ภาพรวมโปรเจกต์
"Bubble-Pulse" เนี่ยคือการสำรวจโลกแห่ง Social Mechatronics และ Acoustic Proximity Diagnostics แบบสนุกๆ นะน้อง โดยเราประยุกต์ปืนเป่าฟองสบู่ธรรมดาๆ ให้มีเซนเซอร์วัดระยะแบบอัลตราโซนิก ตอนนี้มันกลายเป็นประสบการณ์แบบ "Touch-Free" หรือไม่ต้องสัมผัสแล้ว! ระบบนี้ใช้หลัก Time-of-Flight (ToF) Forensics ตรวจจับว่ามีใครเข้ามาในรัศมี 30cm มั้ย พอเจอเป้าหมาย มอเตอร์เซอร์โวก็จะขยับแบบแม่นยำเพื่อกดไกปืนให้อัตโนมัติ เป็นการเชื่อมโยงระหว่างการตรวจจับแบบดิจิทัลกับการเล่นแบบมีปฏิสัมพันธ์ได้อย่างเนียนๆ
ระบบจะอ่านคลื่นอัลตราโซนิกที่ส่งออกไปและรับกลับมาผ่านเซนเซอร์วัดระยะ แล้วคำนวณหาระยะห่างจากวัตถุที่ใกล้ที่สุด เมื่อระยะห่างน้อยกว่า 30cm ตัวไมโครคอนโทรลเลอร์ก็จะสั่งให้มอเตอร์เซอร์โวหมุน เพื่อดึงไกปืนฟองสบู่นั่นเอง
พี่ใช้วงจรเดียวกันกับในรูปเลยนะ ดังนั้นขาและวิธีการต่อสายก็เหมือนกันเป๊ะ
วงจร

ลงลึกเรื่องเทคนิค: การวัดระยะ
ในโค้ดนะ trigPin จะต่อกับส่วนส่งสัญญาณของเซนเซอร์อัลตราโซนิก ส่วน echoPin ต่อกับส่วนรับ trigPin จะส่งคลื่นไปยังวัตถุที่เราต้องการวัดระยะ จากนั้นคลื่นจะสะท้อนกลับมายัง echoPin เราก็วัดเวลา (หน่วยไมโครวินาที) ที่คลื่นใช้เดินทางไป-กลับ นำมาคูณกับความเร็วของคลื่น (0.0343 เซนติเมตรต่อไมโครวินาที) แล้วหารสอง (เพราะคลื่นเดินทางไป-กลับ) เราก็จะได้ระยะห่างระหว่างวัตถุกับเซนเซอร์แล้วล่ะ
- Ultrasonic Proximity Forensics:
- The Acoustic Handshake: ระบบใช้ HC-SR04 สร้างขอบเขตโซนาร์ความถี่ 40kHz Arduino จะส่งพัลส์ความยาว 10µs ออกทางขา
TRIGแล้วใช้ช่วงเวลาที่ขาECHOรับสัญญาณสูงอยู่มาคำนวณหาระยะ - Proximity Edge Detection: ระบบตั้งเกณฑ์ตรรกะ ($d < 30 \text{cm}$) ไว้เป็นตัวตัดสินใจแบบ binary หลักการ forensic แบบนี้ช่วยให้ระบบแยกแยะระหว่างสัญญาณรบกวนทั่วไป กับการมีผู้ใช้เข้ามาใกล้จริงๆ ("Hand Hovering") ได้ ทำให้มีกลไกการทริกเกอร์ที่เชื่อถือได้สำหรับการควบคุมระบบเมคคาทรอนิกส์ต่อไป
- The Acoustic Handshake: ระบบใช้ HC-SR04 สร้างขอบเขตโซนาร์ความถี่ 40kHz Arduino จะส่งพัลส์ความยาว 10µs ออกทางขา
โค้ดส่วนนี้เป็นแบบนี้นะ:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.0343) / 2;
Serial.print(distance, 3);
Serial.println("cm");
ตรงนี้ pulseIn(echoPin, HIGH) จะคืนค่ามาเป็นระยะเวลาระหว่างการส่งและรับสัญญาณ
ในโค้ด หลังจากคำนวณระยะได้แล้ว เราทำการปัดเศษให้เหลือทศนิยมสามตำแหน่ง แล้วพิมพ์ผลลัพธ์ออกทาง Serial Monitor พี่ลองทำเพื่อเช็คดูว่าเซนเซอร์อัลตราโซนิกทำงานได้แม่นยำมั้ย สู้งานนะน้อง!
วิศวกรรมและการลงมือทำ: Visual Telemetry Bridge
ตอนปรับแต่งระบบ มันจะพ่นข้อมูลระยะทางดิบ (ละเอียดถึงทศนิยมตำแหน่งที่สาม) ออกมาให้ดูที่ Serial Monitor เลย ฟีเจอร์นี้ช่วยให้เราปรับรัศมีตรวจจับ (engagement radius) ให้เหมาะกับสภาพแวดล้อมได้ เช่น ใช้ในบูธงานแฟร์ที่คนเยอะๆ กับใช้ในสนามเด็กเล่นหน้าบ้านคนละ setting กันเลย จัดไปวัยรุ่น! นี่คือภาพตัวอย่างจาก Serial Monitor ของพี่:

ลงลึกเรื่องเทคนิค: การหมุนเซอร์โว

พี่ลองมุมหมุนของมอเตอร์เซอร์โวหลายแบบ สุดท้ายมุมที่เวิร์คสำหรับปืนพี่คือ:
- ลากไกปืน: 120 องศา
- ปล่อยไกปืน: 30 องศา
- Servo-Kinetic Actuation Harmonics (พูดง่ายๆคือกลไกการขับเคลื่อน):
- Linear-to-Rotary Translation (การแปลงการเคลื่อนที่จากแนวตรงเป็นหมุน): เราเอาไม้อัดมาต่อระหว่างเซอร์โว SG90 กับไกปืนจริงๆ ระบบมันทำงานเป็น 2 สถานะ:
- สถานะ 1 (Idle/พัก): เซอร์โวค้างไว้ที่ $30^\circ$ (ปล่อยไก)
- สถานะ 2 (Active/ทำงาน): เซอร์โวหมุนไปที่ $120^\circ$ (ลากไก)
- PWM Duty-Cycle Diagnostics: เราใช้ไลบรารี่
Servo.hทำให้ Arduino ส่งสัญญาณ PWM ความถี่ 50Hz ออกไป ตัวเซอร์โวมีโพเทนชิโอมิเตอร์ในตัวคอยปรับให้มันหมุนไปหยุดที่ $120^\circ$ พอดี แรงพอจะกดไกปืนให้ชนสปริงได้โดยที่มอเตอร์ไม่ติดขัดหรือทำงานหนักเกินไป
- Linear-to-Rotary Translation (การแปลงการเคลื่อนที่จากแนวตรงเป็นหมุน): เราเอาไม้อัดมาต่อระหว่างเซอร์โว SG90 กับไกปืนจริงๆ ระบบมันทำงานเป็น 2 สถานะ:
- HMI Engagement Loop (ลูปตรวจจับและสั่งงาน):
- Non-Blocking Logic: เฟิร์มแวร์ใช้การตรวจสอบสถานะ (
if distance < 30 && currentPos != 120) เพื่อป้องกันไม่ให้ส่งคำสั่งซ้ำๆไปหาเซอร์โวโดยไม่จำเป็น วิธีนี้ทำให้มอเตอร์ขยับเฉพาะตอนที่สถานะเปลี่ยนจริงๆ ลดการสึกหรอของชิ้นส่วนและประหยัดพลังงานด้วย สู้งานนะน้อง!
- Non-Blocking Logic: เฟิร์มแวร์ใช้การตรวจสอบสถานะ (
สรุปง่ายๆตาม Flow Chart ก็คือ: ถ้าระยะทางระหว่างเซนเซอร์กับวัตถุน้อยกว่า 30 เซนติเมตร และ มอเตอร์ไม่ได้ชี้ที่ 120 องศา เราจะสั่งให้มันหมุนไปที่ 120 องศา ถ้าระยะทางมากกว่าหรือเท่ากับ 30 เซนติเมตร และ มอเตอร์ไม่ได้ชี้ที่ 30 องศา เราก็จะสั่งให้มันหมุนกลับมาที่ 30 องศา
วิศวกรรมและการลงมือทำ: การติดตั้งและกลไก
- Adhesive Calibration (การติดกาวให้มั่นใจ): ความมั่นคงของระบบขึ้นอยู่กับ "การยึด耦合 (Rigid Coupling)" ระหว่างตัวเซอร์โวกับตัวปืนเป่าฟอง เราใช้กาวสองหน้าความแข็งแรงสูงร่วมกับไม้เสริมเพื่อกระจายแรงบิด (torque) ที่เกิดจากเซอร์โว SG90 ห้ามช็อตนะตัวนี้!
- Transducer Orientation (การจัดวางเซนเซอร์): ต้องติดตั้ง HC-SR04 ให้มี "มุมมอง (Field of View - FoV)" กว้างประมาณ 15-20 องศาโดยไม่มีอะไรมาบัง เพื่อป้องกันการตรวจจับผิดพลาดจากพื้นหรือผิวโต๊ะ
สรุป
โปรเจค Bubble-Pulse นี้แสดงให้เห็นพลังของ Interactive Mechatronics (แมคคาทรอนิกส์เชิงโต้ตอบ) ในฮาร์ดแวร์ที่ใช้งานกับคนทั่วไป เมื่อเราเข้าใจ Ultrasonic ToF Forensics (การวิเคราะห์ข้อมูลจากเซนเซอร์วัดระยะ) และ Servo-Actuated Mechanical Bridging (การใช้เซอร์โวขับเคลื่อนกลไก) แล้ว เราก็สามารถเปลี่ยนของเล่นธรรมดาๆ ให้กลายเป็น IoT Agent ที่ทั้งสนุกและให้ความรู้ได้ ผ่านลอจิกฝังตัว (embedded logic) และการแสดงออกผ่านการเคลื่อนไหว (kinetic expression) ที่ออกแบบมาอย่างดี
Kinetic Bubbles: Mastering engagement through sonar forensics. (ฟองฟิสิกส์: คว้าความสนใจด้วยศาสตร์แห่งโซนาร์)