หลังจากเห็นโปรเจคยากๆ ที่เกี่ยวกับการทำระบบอัตโนมัติในเกมมาสองสามอันแล้ว ฉันเลยคิดว่า... มาลองทำเวอร์ชันที่ง่ายกว่าและไม่ต้องยุ่งยากมากกันดีกว่า โดยใช้ Arduino และของที่หาได้รอบตัว!
เจ้าเครื่องนี้ใช้ มอเตอร์สเตปเปอร์ (Stepper Motor), ไดรเวอร์มอเตอร์, สวิตช์ลิมิต (Limit Switch), โรตารีเอ็นโค้ดเดอร์ (Rotary Encoder) และจอ OLED เปลี่ยนเกมปาร์ตี้ธรรมดาๆ ให้กลายเป็นตู้เกมอาร์เคดสุดโหดที่ขยับได้แบบคาดเดาไม่ได้เลย!
ตอนเปิดเครื่อง ถ้วยจะทำการ "โฮมมิ่ง" (Homing) เพื่อหาขอบเขตของราง AL2020 ที่มันเลื่อนอยู่ ซึ่งแก้ปัญหาใหญ่เรื่อง "การหาตำแหน่งเริ่มต้น" ได้เลย เพราะถ้า Arduino ไฟดับระหว่างเล่น มันจะลืมตำแหน่ง Step 0 ทางคณิตศาสตร์ไปสนิท พอรีบูตใหม่มันอาจคิดว่าตัวเองอยู่ตรงกลาง แล้วพยายามขับไปซ้าย ชนกำแพงจริงๆ จนพังได้
- การทำงานของสวิตช์ลิมิต: ติดตั้ง ไมโครสวิตช์ (Microswitches) แบบกลไกไว้ที่ขอบซ้ายของรางพอดี
- เมื่อ Uno เปิดเครื่อง มันจะรัน
Homing Sequence - มันจะสั่งให้สเตปเปอร์ขับไปทางซ้ายแบบมืดบอด ด้วยความเร็วที่ช้าและปลอดภัยสุดๆ (
Speed = 50) จนกว่าdigitalRead(LimitSwitch) == LOW - ทันทีที่สวิตช์ถูกกด Uno จะหยุดมอเตอร์ทันที:
stepper.setCurrentPosition(0);(ได้ตำแหน่งศูนย์ที่แม่นยำเป๊ะเวอร์!)
หลังจากนั้น คุณก็สามารถเลือกความยากระดับ 1 - 10 และสั่งสตาร์ทมอเตอร์ผ่านเมนูที่แสดงบนหน้าจอ OLED ได้เลย Arduino จะไม่รันแพทเทิร์นตายตัว แต่จะสุ่มตัวเลขความเร็วและระยะทางแบบสมบูรณ์แบบแบบเรียลไทม์
The NEMA Randomization Matrix (AccelStepper.h)
ห้ามใช้มอเตอร์ DC ราคาถูก $2 เป็นอันขาด! มันจะกระแทกแท่นไม้หนักๆ เข้ากับขอบรางจนระบบรางพังทันที
- โปรเจคนี้ต้องใช้ไลบรารีสุดเจ๋ง
<AccelStepper.h>ขับโมดูลA4988และมอเตอร์NEMA 17 Stepper Motorแบบจริงจัง - ตัวเลขยักษ์พวกนี้คือความเร่งที่ลื่นไหลทางกลไก!
stepper.setAcceleration(200); stepper.setMaxSpeed(400); - การทำงานของซอฟต์แวร์: ฟังก์ชัน
loop()มีเครื่องสุ่มตัวเลขยักษ์อยู่
if (stepper.distanceToGo() == 0) { // แท่นเพิ่งมาถึงจุดหมาย!
// สุ่มตำแหน่งใหม่แบบคาดเดาไม่ได้ทันที!
// รางนี้กว้าง 3000 สเตปพอดี!
long nextRandomPosition = random(0, 3000);
// สุ่มความเร็วใหม่แบบมั่วสุดๆ ทันที!
long nextRandomSpeed = random(100, 600);
stepper.setMaxSpeed(nextRandomSpeed); // เปลี่ยนโปรไฟล์ความเร็วแบบสุดเหวี่ยง!
stepper.moveTo(nextRandomPosition); // ยิงพลศาสตร์เครื่องยนต์ใหม่!
}
stepper.run(); // คำสั่งสำคัญที่ไม่บล็อกการทำงานของฮาร์ดแวร์!
การสร้างแท่นเคลื่อนที่ต้องใช้
- Arduino Uno/Nano (ความเร็วมาตรฐาน)
- ไดรเวอร์สเตปเปอร์ A4988 หรือ TMC2208 (TMC2208 เป็นที่ต้องการมากเพราะมันกำจัดเสียงแหลมสุดน่ากลัวที่มอเตอร์สเตปเปอร์ชอบทำได้!)
- มอเตอร์สเตปเปอร์ NEMA 17 (ขับด้วยพาวเวอร์ซัพพลายภายนอก 12V 2-Amp)
- ชุดประกอบกลไกรางเส้นตรงและสายพานไทม์มิ่งเบลท์ (มักได้มาจากชิ้นส่วนโครงเครื่องพิมพ์ 3D มือสอง!)
- ไมโครสวิตช์ลิมิตแบบกลไกมาตรฐาน
โต๊ะทำจากแผ่นไม้อัดหนา 3/4 นิ้ว และไม้ขนาด 2"x2" ใช้ทำขา รวมถึงใช้อะคริลิคหนา 1/4 นิ้วที่ปลายรางเพื่อโชว์กลไกด้านล่างโต๊ะ ในขณะที่ผิวโต๊ะด้านบนยังเรียบเสมอกันหมด คุณจึงใช้โต๊ะนี้เป็นโต๊ะเบียร์ปองปกติ หรือเป็นเวอร์ชันอัตโนมัติเมื่อเสียบไฟได้เลย! จัดไปวัยรุ่น! สู้งานนะน้อง ห้ามช็อตนะตัวนี้