ชื่อโปรเจกต์: Motion Sensing Lightsaber Game Controller
Description
จอยเกมดาบเลเซอร์ตรวจจับการเคลื่อนไหว สำหรับเกมเมอร์สาย "ใช้พลัง" (force sensitive) โดยเฉพาะ! เอาไว้ฟาดฟันในเกมที่ท้าทายที่สุดด้วย Lightsaber Game Controller สุดเท่ ที่มาพร้อมปุ่มกดยิง (Trigger) จากไม้หนีบผ้า และด้ามจับดีไซน์เท่ๆ จากกระป๋องเบียร์
Details
นี่คือดาบ Lightsaber ทำมือแบบดิบๆ ง่ายๆ เลยน้อง สามารถเปิด-ปิดไฟ LED ได้เองด้วยมือ มีปุ่มกดแบบ Trigger ที่ทำจากไม้หนีบผ้า และมี Analog stick ไว้ควบคุมทั่วไป จุดเด่นคือใส่ Sensor MPU6050 (Gyro/Accel) มาให้ด้วย เอาไว้ดักจับการเคลื่อนไหวแล้วเปลี่ยนเป็นปุ่มกดในเกมแบบหล่อเท่
Rudeism Lightsaber Motion Controller
Build instructions
Step 1

เริ่มที่ด้ามจับก่อนเลย ให้ตัดท่อ PVC ยาวสัก 30 ซม. ความยาวขนาดนี้กำลังจับถนัดมือเลยวัยรุ่น เสร็จแล้วก็ขัดท่อให้เนียนด้วยกระดาษทรายซะ
จากนั้นเอปากกามาร์คจุดที่เราจะวางนิ้วโป้งกับนิ้วอื่นๆ ตามธรรมชาติ เพื่อเจาะรูร้อยสายไฟสำหรับปุ่มกดและ Analog stick แล้วอย่าลืมรูสำหรับสวิตช์ไฟ LED ด้วยนะ วิธีเจาะก็ง่ายๆ เอาหัวแร้งเก่าๆ จี้นำไปเลย แต่ระวังพลาสติกละลายลวกมือนะน้อง
Step 2
มาทำใบดาบกันต่อ ขัดหลอดพลาสติกให้เนียน (พี่ใช้หลอดพลาสติกที่เค้าเอาไว้ใส่ลูกบอลคริสต์มาส)
บอกก่อนว่ามันไม่ได้ทนทานขนาดเอาไปฟาดฟันกับใครจริงๆ ได้นะ แต่มันปลอดภัยพอที่จะไม่ทำให้จอ TV หรือจอมอนิเตอร์เอ็งแตก ถ้าเผลอเหวี่ยงไปโดนเข้า
วิธีติดตั้งเข้ากับท่อ PVC คือบีบปลายหลอดพลาสติกหน่อยๆ หรือจะเอาความร้อน (เช่นหัวแร้ง) ลนใกล้ๆ ปลายหลอดให้พอนิ่มแล้วยัดลงไป สุดท้ายก็ใช้เทปพันให้แน่นหนา
Step 3

"ผลึกคริสตัล" หรือขุมพลังของดาบเราก็คือ Sensor Accelerometer / Gyroscope รุ่น MPU6050 ตัวนี้แหละที่จะทำหน้าที่ "สัมผัสถึงพลัง" เพื่อตอบสนองการเคลื่อนไหวของเราในเกม และแน่นอนว่าต้องมีแบตเตอรี่ไว้จ่ายไฟให้ LED ในใบดาบด้วย
เราจะติด Sensor ไว้ตรงกลางไม้บรรทัดที่มีความกว้างพอดีกับท่อ PVC เพื่อให้มันยัดเข้าไปข้างในได้ การวาง Sensor ไว้ตรงกลางจะช่วยให้ค่าที่อ่านได้นิ่งและแม่นยำที่สุด เพราะแรงที่กระทำกับมันจะมีแค่แรงจากการเหวี่ยงของเอ็งเพียวๆ จะขันน็อตหรือใช้เทปแปะก็ได้ แต่ต้องมั่นใจว่ามันจะไม่หลุดกระเด็นตอนเหวี่ยงดาบนะ
แบตเตอรี่ 9V มันค่อนข้างหนักและอาจทำให้สมดุลของดาบเสีย พี่เลยกาวติดมันไว้ใกล้ๆ กับจุดที่ติด Sensor เลย ถึงตอนเปลี่ยนแบตจะลำบากหน่อย (อนาคตพี่ว่าจะทำ "ช่องเปิด" ตรงกลางท่อให้เปลี่ยนง่ายขึ้น) แต่แบตพวกนี้ก้อนนึงใช้ได้นานหลายเดือนอยู่แล้ว จัดไป

บัดกรี Sensor ตาม Diagram นี้เลย คำแนะนำจากรุ่นพี่: พอท่อบัดกรีเสร็จแล้ว ให้หยอดกาวร้อน (Hot Glue) ทับที่ขั้วต่อด้วย เพื่อป้องกันสายขาดเวลาเราเหวี่ยงดาบแรงๆ หรือตอนที่สายไฟตึง
Step 4

ต่อวงจรสำหรับสวิตช์ไฟ LED ตาม Diagram เลย อย่าลืมเผื่อสายไฟของสวิตช์ให้ยาวหน่อย จะได้ไม่ต้องลำบากตอนดึงสายมาบัดกรีกับส่วนที่เหลือของวงจร
ตอนนี้เอ็งควรจะมีไม้บรรทัดที่มีทั้ง Sensor และแบตเตอรี่ติดอยู่เรียบร้อยแล้ว ให้บัดกรีสายไฟส่วน LED ให้ยาวไว้ก่อน แล้วค่อยๆ ยัดทุกอย่างลงไปในท่อ PVC

ถ้าเอ็งจะร้อยสายไฟปุ่มกดกับ Analog stick ไว้ข้างในท่อ ก็ต้องร้อยตอนนี้แหละ เอาเทปพันปลายสายไว้ก่อน แล้วรอจังหวะบัดกรีทีหลัง
แล้วอย่าลืมใช้เทปพันสายไฟที่พะรุงพะรังอยู่บนไม้บรรทัดให้เรียบร้อย เพื่อป้องกันสายตึงจนขาด จากนั้นก็ดันชุด "วงจรผลึกคริสตัล" ของเราเข้าไปข้างในซะ
เจาะรูที่ฝาปิดท่อ PVC (ใช้ความร้อนช่วยเหมือนเดิม) แล้วร้อยสายไฟทั้งหมดออกมา จากนั้นก็ปิดฝาให้แน่น

เนื่องจากเราเผื่อสายไฟ LED Strip ไว้ตั้งแตแรก การบัดกรีตอนนี้เลยไม่ใช่ปัญหา เสร็จแล้วก็หาซองพลาสติกใส่แผ่น CD มาพันรอบๆ LED Strip ซะ มันจะช่วยกระจายแสงให้สว่างและนวลขึ้นเยอะ จากนั้นก็ทากาวแล้วยัดเข้าไปในใบดาบเลย
Step 5

วิธีหา Analog stick แบบง่ายที่สุดคือ แกะมาจากจอยเก่าๆ ที่ไม่ได้ใช้แล้ว ใช้หัวแร้งดีๆ กับที่ดูดตะกั่ว บวกความอดทนอีกนิด เอ็งก็จะได้มันออกมาจาก Board จอยเดิมแล้ว พี่เลือกใช้แค่ตัวเดียวก็พอแล้วสำหรับโปรเจกต์นี้

บัดกรีตามวงจร (แกนแต่ละข้างของ Analog จะแทนด้วย Potentiometer) เสร็จแล้วก็อัดกาวร้อนกับเทปเข้าไปให้แน่น ถึงจะดูไม่ค่อยสวยแต่ถ้าติดแน่นหนา เอ็งจะเล่นเกมได้มันส์ขึ้นเยอะ
Step 6

พี่หาสวิตช์มาทำปุ่มเพิ่มไม่ได้ เลยต้องงัด "ไม้หนีบผ้า" มาทำเป็นปุ่ม Trigger แทน
ถอดชิ้นส่วนไม้หนีบผ้าออกมา (เก็บลวดสปริงไว้ด้วยนะ) แล้วมาร์คจุดที่จะตอกตะปูลงไป 2 จุด

ตอกตะปูนำร่องลงไปเพื่อให้เป็นรู (หรือจะใช้สว่านเจาะเอาก็ได้ถ้ากลัวไม้แตก) แล้วขันน็อตลงไป แต่อย่าเพิ่งขันสุดนะ ให้เหลือที่ไว้พันสายทองแดงรอบน็อตก่อนแล้วค่อยขันให้แน่น

เพื่อป้องกันนิ้วเอ็งช็อต (เผื่อไว้ก่อน) และเพื่อให้กดถนัดมือขึ้น ให้เอากาวร้อนติดฝาพลาสติกเล็กๆ (พี่เอามาจากปุ่มจอยเก่า) ไว้ที่ปลายหัวน็อตด้านบนไม้หนีบผ้า พี่ติดชุด Trigger ไม้หนีบผ้านี้ไว้ด้านล่างของดาบ ดูไปดูมาก็เหมือนปุ่มสีดำบนดาบของ Luke Skywalker เหมือนกันนะเนี่ย


Step 7
ไปโหลดโปรแกรมพวกนี้มาลงเครื่องซะ: vJoy เอาไว้สร้าง Joy Stick จำลองในคอม และ vJoySerialFeeder เอาไว้ส่งข้อมูลจาก Arduino ของเราเข้าสู่คอมพิวเตอร์

เพื่อให้ Arduino อ่านค่ามุมจาก Accel/Gyro ได้ เอ็งต้องลง Library MPU6050_tockn ด้วยนะ วิธีลงก็ง่ายๆ ไปที่ Tools > Library Manager แล้ว Search ชื่อ MPU6050_tockn กด Install แค่นี้ Arduino ก็พร้อมอ่านข้อมูลจาก Sensor แล้ว
พี่ลง Code Arduino ไว้ให้ข้างล่าง สำหรับตัว Controller ที่มี 4 ปุ่มกด, 1 ปุ่มแบบใช้การเคลื่อนไหว (Motion) และ 1 Analog stick จัดการ Compile ลง Arduino ของเอ็งซะ แล้วดูด้วยว่าใช้ COM Port อะไร
หลังจากลง vJoy เสร็จแล้ว เช็คดูใน Device Menu ของคอมด้วยว่ามันเห็นจอยจำลองหรือยัง
Step 8

อดทนหน่อยไอ้ทิศ! ใกล้จะได้ดาบเทพแล้ว พอเปิดโปรแกรม vJoySerialFeeder ขึ้นมา เราต้องตั้งค่าจอยของเราหน่อย
เสียบ Arduino เข้าคอม แล้วในโปรแกรมให้กด Refresh ตรงช่อง Port เลือก COM Port ที่เอ็งจดไว้ แล้วกด Connect (ถ้ามันฟ้อง Failsafe แสดงว่าวงจรเอ็งมีปัญหาแล้วล่ะ ส่วนใหญ่จะเกิดจากเหวี่ยงดาบแรงจนสายไฟหลุดนั่นแหละ)
เช็คที่ Channel Monitor ดูว่าทุกช่องตอบสนองไหม แกน Analog ต้องมีค่าเปลี่ยนแปลง ส่วนปุ่มกดอื่นๆ รวมถึงปุ่ม Motion ต้องเปลี่ยนแค่ 2 สถานะ (0 กับ 1)
ไปที่เมนู Add Buttons แล้วเพิ่มปุ่มให้ครบ เช็คดูว่า Channel ไหนตรงกับปุ่มไหน ในส่วน Setup ของแต่ละปุ่ม ให้ตั้ง Threshold สูงสุดเป็น 1023 และต่ำสุดเป็น 0 ถ้าค่ามันกลับด้าน ก็แค่ติ๊กช่อง Invert ซะ
ทำแบบเดียวกันกับ Analog stick โดยไปที่ Add axis แล้วแมตช์แกน X และ Y ให้ถูกต้อง จากนั้นใช้เมนู Calibrate ช่วยตั้งค่าให้เป๊ะ
ถ้ากดปุ่มแล้วมีวงกลมสีเขียวเด้งในโปรแกรมแสดงว่าใช้ได้ ให้ดูที่ปุ่ม Motion Sensing ด้วยว่าทำงานโอเคไหม ถ้ามีปัญหาเอ็งอาจจะต้องไปแก้ค่ามุม (Angle) ใน Code เองนิดหน่อย ลองใช้ตัวอย่าง "get angle" ใน Library MPU6050_tockn มาทดสอบดูว่ามุมไหนเหมาะกับสไตล์การเล่นของเอ็งที่สุด
Step 9

ตอนนี้เอ็งมีจอยเกมแล้ว แต่ยังไม่เป็น Lightsaber ว่ะ! จัดการแต่งด้ามจับตามใจชอบเลย จะเป็นด้านสว่างหรือด้านมืดก็จัดไป ส่วนพี่สายเบียร์ พี่เลยเอากระป๋องเบียร์มาตัดด้วยกรรไกร (ระวังมือด้วยนะน้อง) เอาหนังสือทับให้มันเรียบๆ หน่อย แล้วเอามาพันรอบด้ามท่อ PVC จะพันฟอยล์ก่อนก็ได้เผื่อเก็บงานจุดที่กระป๋องคลุมไม่มิด

สำคัญมาก! ถ้ามีสายไฟโผล่ออกมาข้างนอก หรือมีขั้วปุ่มกดที่อยู่ใกล้ด้ามอลูมิเนียม (ยกเว้น Trigger ที่อยู่ห่างและมีกาวร้อนกั้น) ให้เอาเทปพันสายไฟ (Isolating tape) พันปิดให้มิด กันไฟช็อตนะวัยรุ่น
ใช้เทปพันสายไฟหรือเทปใสแปะชิ้นส่วนอลูมิเนียมเข้ากับท่อ ส่วนตัว Analog stick พี่ก็เอาเศษกระป๋องมาทำเคสครอบให้ดูเท่ขึ้นด้วย

Step 10


พี่มีแต่ LED Strip สีขาว เลยใช้วิธีเอา "กระดาษแก้วสีเขียว" มาพันรอบใบดาบแทน เป็นทางเลือกที่ประหยัดและเท่ไม่แพ้ LED สีแพงๆ เลย

จำไว้! ห้ามทาสีที่ใบดาบเด็ดขาด อย่าหาทำ แสงมันจะไม่รอดออกมานะน้อง
Step 11
จุดอ่อนของจอยตัวนี้คือ "สายไฟ" เพราะเราต้องเหวี่ยงดาบเยอะมาก สายมักจะขาดหรือหลุดบ่อย ดังนั้นอย่าไปงกสาย เผื่อสายยาวๆ ไว้เลย หรือถ้ามีสายไฟสีเดียวเยอะๆ ก็เอาเทปสีมาร์คไว้ด้วยจะได้ไม่งงตอนไล่ Pin จะช่วยประหยัดเวลาชีวิตได้เยอะ

ท่าเล่นปกติของพี่คือ มือขวาคุม Analog กับปุ่มหลัง ส่วนอีกมือคุมตรง Trigger

Step12
และแล้วการฝึกของเจ้าก็จบลง Padawan น้อย! เอ็งสร้าง Lightsaber Game Controller เสร็จแล้ว ไปโชว์ให้พวกในเกมเห็นหน่อยว่าเอ็งน่ะของจริง!
ฝึกใช้บ่อยๆ เดี๋ยวก็จับจังหวะเหวี่ยงดาบเข้ากับเกมได้เอง
หวังว่าน้องๆ จะสนุกกับการ "ใช้พลัง" ผ่านปุ่มไม้หนีบผ้าและดาบกระป๋องเบียร์อันนี้นะ!
ขอให้พลังจงสถิตอยู่กับเจ้าทุกคน!
Files
ibus.cpp : เอาไปวางคู่กับ ibus.h และไฟล์ .ino ใน Folder เดียวกัน
Lightsaber_Game_Controller.ino : โค้ดสำหรับ Arduino
ibus.h
EXPANDED TECHNICAL DETAILS
Biometric Kinetic Interaction
โปรเจกต์นี้เป็นการแปลงดาบ Props ธรรมดาๆ ให้กลายเป็น 3D Game Controller ที่ใช้งานได้จริง เหมาะมากสำหรับพวกเกม VR แนวเจได หรือจะเล่นบน PC ทั่วไปก็หล่อเท่
- IMU Orientation Fusion: ใช้ Sensor MPU-6050 6-axis accelerometer/gyroscope โดย Arduino จะคอยดักจับความเร็วเชิงมุม (Angular velocity) และความเอียงของดาบ แล้วส่งค่าไปจำลองเป็นเหตุการณ์กด Mouse หรือ Keyboard บนคอมพิวเตอร์ผ่านระบบ HID emulation (ATmega32U4 / Pro Micro)
- Swing-Speed Detection: ตัว Firmware จะคำนวณค่า G-force จากจังหวะที่เรา "เหวี่ยง" ถ้าแรงเหวี่ยงทะลุ Threshold ที่ตั้งไว้ Arduino ก็จะสั่ง Trigger เสียง "ฟิ้ววว" และสั่งให้ไฟ RGB LED กระพริบวาบเหมือนตอนฟันดาบในหนังเลย
Interactive Feedback
- Haptic Collision Response: (ฉบับอัปเกรด) มีการใส่ Motor สั่นกำลังสูงไว้ที่ด้ามจับ เพื่อให้มันสั่นสู้มือเวลา G-force กระชากแรงๆ เลียนแบบจังหวะที่ดาบไปปะทะ (Clash) กับศัตรูในเกมจริงๆ คูลสุดๆ!