สารบัญ:

Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 ขั้นตอน
Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 ขั้นตอน

วีดีโอ: Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 ขั้นตอน

วีดีโอ: Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 ขั้นตอน
วีดีโอ: Steam Controller Mod - Softer Bumper & Touchpad Clicks 2024, พฤศจิกายน
Anonim
มาตรความเร่ง/ไจโรพวงมาลัยควบคุม Xbox 360
มาตรความเร่ง/ไจโรพวงมาลัยควบคุม Xbox 360

ฉันเล่น Assetto Corsa ด้วยคอนโทรลเลอร์ Xbox 360 ของฉัน น่าเสียดายที่การบังคับเลี้ยวด้วยแท่งอนาล็อกนั้นเทอะทะมาก และฉันไม่มีที่ว่างสำหรับตั้งล้อ ฉันพยายามคิดถึงวิธีที่ฉันสามารถใส่กลไกการบังคับเลี้ยวที่ดีขึ้นในตัวควบคุม เมื่อฉันคิดว่าฉันสามารถใช้ตัวควบคุมทั้งหมดเป็นพวงมาลัยได้

แท่งอนาล็อกมีโพเทนชิโอมิเตอร์สองตัว หนึ่งวัดการเคลื่อนไหวในแนวตั้ง และหนึ่งวัดการเคลื่อนไหวในแนวนอน มันใส่ 1.6V ผ่านแต่ละอันและวัดแรงดันไฟฟ้าที่ผลิตที่ที่ปัดน้ำฝนเพื่อกำหนดว่าแท่งไม้เคลื่อนที่ไปมากแค่ไหน ซึ่งหมายความว่าสามารถควบคุมการเคลื่อนที่ของแท่งไม้ได้โดยการป้อนแรงดันไฟฟ้าเฉพาะไปยังพินที่ปัดน้ำฝน (ข้อมูลเพิ่มเติมที่นี่:

ตัวดัดแปลงนี้ใช้ Arduino เพื่อคำนวณมุมจากการอ่านค่าความเร่งและแปลงเป็นการเคลื่อนที่แบบแท่งอนาล็อกผ่าน DAC ดังนั้นจึงควรทำงานร่วมกับเกมใดๆ ก็ตามที่ใช้อนาล็อกสติ๊กเป็นอินพุต

ขั้นตอนที่ 1: คุณจะต้องการ:

เครื่องมือ:

  • หัวแร้ง
  • ประสาน
  • บัดกรีดูด/ถักเปีย
  • เครื่องปอกสายไฟ
  • ไขควงอาจเป็น Torx ขึ้นอยู่กับสกรูในคอนโทรลเลอร์ของคุณ (ของฉันคือครอสเฮด)
  • กาว (ควรเป็นกาวที่ไม่แรงมาก จึงสามารถแยกออกได้ในภายหลัง)
  • อะแดปเตอร์ USB เป็นซีเรียลเพื่อตั้งโปรแกรม Arduino

วัสดุ:

  • ตัวควบคุม Xbox 360 (อุ๊ย!)
  • Arduino Pro Mini (หรือโคลน) (ควรเป็น 3.3V หากคุณใช้เวอร์ชัน 5V คุณอาจต้องใช้ตัวแปลงแรงดันไฟฟ้าแบบ step-up)
  • ไจโรสโคป/มาตรความเร่ง MPU-6050
  • MCP4725 DAC (สองอันถ้าคุณต้องการควบคุมทั้งสองแกน)
  • ลวดบางๆ
  • เขียงหั่นขนมเพื่อให้คุณสามารถทดสอบทุกอย่างก่อนที่จะบัดกรี (ไม่บังคับ แต่แนะนำ)

ขั้นตอนที่ 2: แยกส่วนคอนโทรลเลอร์

แยกส่วนคอนโทรลเลอร์
แยกส่วนคอนโทรลเลอร์
แยกส่วนคอนโทรลเลอร์
แยกส่วนคอนโทรลเลอร์
แยกส่วนคอนโทรลเลอร์
แยกส่วนคอนโทรลเลอร์

มีสกรูเจ็ดตัวที่คุณต้องถอดออก หกคนชัดเจน แต่คนที่เจ็ดอยู่หลังสติกเกอร์ ฉันถือว่าการนำออกจะทำให้การรับประกันของคุณเป็นโมฆะ ดังนั้นคุณต้องยอมรับความเสี่ยงเอง ไกด์หลายคนบอกว่าคุณต้องการไขควง Torx แต่ของฉันเป็นแบบครอสเฮด ดังนั้นให้ตรวจสอบคอนโทรลเลอร์ของคุณ

หลังจากนั้น ค่อยๆ แงะฝาหลังออก หากคุณแงะปุ่มออกด้านหน้าปุ่มจะหกออกมาและอาจไปทั่วทั้งห้อง ยกจากด้านล่าง จากนั้นถอดปลั๊กมอเตอร์สั่นสะเทือนสองตัว (อันที่มีน้ำหนักน้อยควรอยู่ทางซ้าย และอันที่มีน้ำหนักมากอยู่ทางขวา) นำ PCB ออกแล้วถอดฝายางบนแท่งอนาล็อกออก พวกเขาเพียงแค่ดึงออก

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

ถัดไป ถอดหมุด 14 ตัวที่ยึดแท่งอนาล็อกด้านซ้ายออก แล้วดึงก้านออก

ขั้นตอนที่ 3: ติดส่วนประกอบเข้าที่

ติดส่วนประกอบในสถานที่
ติดส่วนประกอบในสถานที่
ติดส่วนประกอบในสถานที่
ติดส่วนประกอบในสถานที่

คุณจะสังเกตเห็นช่องว่างระหว่างด้านหลังของ PCB กับเคสค่อนข้างมาก ทำให้สามารถใส่ฮาร์ดแวร์ทั้งหมดลงในเคสได้โดยไม่ต้องถอดอะไรเลย

ฉันเพิ่งรู้ทีหลัง แต่นี่คงเป็นเวลาที่ดีที่จะเลิกใช้ปุ่มรีเซ็ตบน Arduino หากคุณไม่ทำเช่นนั้น มันจะกดที่ด้านหลังของเคสและทำให้โปรเจ็กต์หยุดทำงานหากคุณขันสกรูตัวใดตัวหนึ่งแน่นเกินไปเมื่อประกอบกลับ

ฉันติดการ์ดแผ่นบาง ๆ ที่ด้านหลังของ PCB แต่ละอันเพื่อหุ้มฉนวน จากนั้นจึงติดกาวนั้นกับ PCB ของคอนโทรลเลอร์ ฉันลังเลที่จะใช้กาว แต่ไม่สามารถคิดหาวิธีที่ดีกว่านี้ได้

ตำแหน่งในภาพเป็นชุดค่าผสมที่ดีที่สุดที่ฉันหาได้ Arduino อยู่ทางด้านซ้าย โดยมีขอบที่มีปุ่มรีเซ็ตอยู่ชิดกับชิ้นส่วนพลาสติกจากกลไกทริกเกอร์ด้านขวา โดยให้อีกด้านหนึ่งอยู่ใต้สายไฟและให้มุมใกล้กับขั้วต่อสีขาวมากที่สุด มีส่วนที่นูนเล็กน้อยในกรณีนี้ แต่ฉันไม่สามารถหาที่วางที่ดีกว่านี้ได้

มาตรความเร่งอยู่ทางด้านขวาของเส้นลวด มันควรจะแบนและตรงที่สุดเท่าที่จะทำได้ ไม่เช่นนั้นคุณอาจต้องเขียนโค้ดในภายหลังเพื่อชดเชยออฟเซ็ต โปรดทราบว่ามีชิ้นส่วนพลาสติกยื่นออกมาที่ด้านหลังของเคสซึ่งคุณต้องระมัดระวังเพื่อหลีกเลี่ยง ฉันพบว่าคุณสามารถใส่สิ่งที่เหนียวและมีสีสัน เช่น ลิปสติก ลงบนชิ้นส่วนพลาสติกที่ยื่นออกมา แล้วใส่ฝาหลังเพื่อดูว่ามันทิ้งรอยไว้ตรงไหน

DAC อยู่ที่มุมล่างซ้ายมือ มีพื้นที่ว่างเพียงพอสำหรับวาง DAC สองชุด กองหนึ่งวางทับกัน หากคุณต้องการควบคุมทั้งสองแกน คุณไม่จำเป็นต้องทากาว พวกเขาจะอยู่ในที่ที่พวกเขาอยู่ด้วยการเชื่อมต่อแบบบัดกรี หากคุณกำลังติดการ์ดระหว่างการ์ด อย่าลืมตัดการ์ดเพื่อให้สามารถเข้าถึง SCL, SDA, VCC และ GND ได้ เพราะคุณจะเข้าถึงได้จากทั้งสองฝ่าย

หากคุณใช้ DAC สองตัว อย่าลืมเปลี่ยนจัมเปอร์ที่อยู่และปิดใช้งานตัวต้านทานแบบดึงขึ้นบนตัวใดตัวหนึ่ง ตามที่อธิบายไว้ที่นี่: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -converter-hookup-guide

ขั้นตอนที่ 4: บัดกรีสายไฟ

บัดกรีสายไฟบน
บัดกรีสายไฟบน
บัดกรีสายไฟบน
บัดกรีสายไฟบน
บัดกรีสายไฟบน
บัดกรีสายไฟบน

ตอนนี้คุณต้องเชื่อมต่อทุกอย่าง VCC, GND, SDA และ SCL จากอุปกรณ์ 2/3 ทั้งหมดควรเชื่อมต่อกับ VCC, GND, A4 และ A5 บน Arduino ตามลำดับ DAC เป็นส่วนที่ยากที่สุด หากคุณมีสองอัน คุณต้องเชื่อมต่อเข้าด้วยกัน ในขณะที่ออกจากที่ใดที่หนึ่ง คุณสามารถเชื่อมต่อสายไฟและสายไฟเข้ากับมาตรความเร่ง ขณะที่แยกสาย OUT ออกจากกัน

พิน OUT บน DAC ควรเชื่อมต่อกับพินบน PCB ของคอนโทรลเลอร์ที่เคยใช้สำหรับพินโพเทนชิออมิเตอร์แนวนอนตรงกลางสำหรับแท่งอนาล็อก นั่นคือที่ที่แท่งอนาล็อกอยู่ มีหมุดสามแถวอยู่ด้านบน เชื่อมต่อกับอันกลาง หากคุณมี DAC อื่นให้เชื่อมต่อกับพินโพเทนชิออมิเตอร์แนวตั้ง (แถวทางซ้าย) ในลักษณะเดียวกัน คุณจะไม่สามารถเข้าถึงหมุดจากด้านหลังได้เมื่อเปลี่ยนทริกเกอร์ ดังนั้นคุณต้องเดินสายไฟไปที่ด้านหน้าของบอร์ด มี "ผนัง" พลาสติกทรงกลมอยู่รอบๆ บริเวณแท่งอนาล็อก แต่โชคดีที่มีช่องว่างที่สะดวกสำหรับใส่สายไฟ ตรวจสอบให้แน่ใจว่าสายไฟไม่ไปกีดขวางเสาสกรูที่ส่วนหน้าของเคส

แผนเดิมของฉันคือการจ่ายไฟให้ Arduino ด้วย 5V จากสาย USB ที่เชื่อมต่อกับพิน RAW แต่เมื่อฉันลองใช้งาน มันไม่ทำงาน Arduino ไม่ทำงานอะไรเลย และทั้ง Arduino และคอนโทรลเลอร์ก็ปิดลงหลังจากผ่านไปไม่กี่วินาที อย่างไรก็ตาม ฉันพบว่ามีเอาต์พุต 3.3V คงที่จากพินสองตัวที่ด้านหน้าของบอร์ดใกล้กับซ็อกเก็ตอุปกรณ์ต่อพ่วงสีดำ ซึ่งน่าจะเป็นสำหรับการจ่ายไฟให้กับอุปกรณ์ต่อพ่วง มันใช้งานได้กับทั้ง VCC และ RAW แต่ฉันเลือก VCC เพราะมันมีแรงดันไฟที่เหมาะสมอยู่แล้ว และเพราะมันช่วยให้ฉันบัดกรีมันกับสาย VCC บน DAC ที่อยู่ใกล้กับด้านล่างของบอร์ดแล้วและประหยัดสายไฟ

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

ทั้งหมดนี้อธิบายด้วยคำพูดได้ยาก ดังนั้นฉันจึงรวมรูปภาพและแผนภาพคร่าวๆ

ขั้นตอนที่ 5: ตั้งโปรแกรม Arduino

ตอนนี้คุณต้องตั้งโปรแกรม Arduino สิ่งนี้ต้องย้ายสาย USB บนคอนโทรลเลอร์เพื่อให้คุณสามารถเข้าถึงพินอนุกรมบน Arduino ได้ ฉันได้รวมรหัสที่ฉันใช้แล้ว ต้องใช้ไลบรารี Adafruit MCP4725 ซึ่งสามารถพบได้ที่นี่:

โค้ดนี้ช่วยให้คุณเคลื่อนที่ตลอดช่วงการเคลื่อนที่ของแท่งอนาล็อกได้เท่าๆ กัน โดยเลื่อนคอนโทรลเลอร์ 90 องศาไปทางซ้ายเป็น 90 องศาไปทางขวา และเก็บไว้ตรงกลางโดยถือให้แบน

ได้มุมของตัวควบคุมโดยการคำนวณแทนเจนต์ผกผันของแรง g ของแกน X หารด้วยแรง g ของแกน Z ซึ่งหมายความว่าจะทำงานได้หากคอนโทรลเลอร์อยู่ในแนวตั้ง แบนราบ หรือมุมใดๆ ระหว่างนั้น (ข้อมูลเพิ่มเติมที่นี่:

มันใช้งานได้กับคอนโทรลเลอร์ของฉัน แต่คอนโทรลเลอร์อื่นๆ อาจต้องใช้แรงดันไฟฟ้าที่แตกต่างกัน ซึ่งทำให้ไม่อยู่ในแนวเดียวกัน ฉันคิดว่าวิธีที่ดีที่สุดในการค้นหาช่วงแรงดันไฟฟ้าคือการลองผิดลองถูก หลายเกมจะแสดงแถบเลื่อนสำหรับการเคลื่อนไหวของแท่งอนาล็อก แต่วิธีที่แม่นยำที่สุดที่ฉันพบในการพิจารณาการเคลื่อนไหวคือ jstest บน Linux (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) โดยจะให้ตัวเลขระหว่าง -32, 767 และ 32, 767 แทนที่จะเป็นกราฟิก คุณจึงรู้ว่าแท่งไม้อยู่ที่ไหน เสียบทั้งคอนโทรลเลอร์และ Arduino USB เข้ากับอะแดปเตอร์อนุกรม โหลด jstest และลองใช้ค่า DAC ที่แตกต่างกันจนกว่าคุณจะไปถึงด้านบนและด้านล่างของช่วง แล้วจดบันทึกแต่ละรายการ สำหรับฉันมันคือ 1, 593 - 382

สิ่งที่น่าสนใจเป็นพิเศษคือบรรทัดที่ 36:

dacvalue = (มุมควบคุม + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;

ไม่ชัดเจนในทันทีว่ามันทำอะไร พูดง่ายๆ คือ ใช้มุมของตัวควบคุม (วัดเป็นเรเดียนและระหว่าง ~1.57 ถึง ~-1.57) แล้วแปลงเป็นค่าระหว่าง 1, 593 และ 382 สำหรับ DAC หากคุณมีช่วง DAC อื่น คุณจะต้องเปลี่ยนบรรทัดนั้น

บรรทัดสามารถเขียนได้ดังนี้:

dacvalue = (มุมควบคุม +) / + 0.5;

ด้วยและเป็นตัวเลขที่คุณต้องเปลี่ยน เท่ากับช่วงของมุมควบคุม (pi) หารด้วยช่วงรวมของค่า DAC (ด้านบนสุดของช่วงลบด้วยด้านล่างของช่วง) วิธีนี้ทำให้คุณได้เท่าการเปลี่ยนแรงดันไฟฟ้า แม้ว่าผลลัพธ์จะอยู่นอกช่วงที่คุณต้องการก็ตาม นั่นเป็นเหตุผลที่คุณต้องการ เท่ากับคูณด้วยด้านล่างของช่วงบวกครึ่งหนึ่งของช่วงการเคลื่อนที่ของตัวควบคุม (pi / 2) การเพิ่มช่วงของการเคลื่อนไหวครึ่งหนึ่งทำให้แน่ใจได้ว่าไม่ใช่จำนวนลบ และการคูณด้วยด้านล่างของช่วงจะทำให้แน่ใจได้ว่ามีการซิงโครไนซ์กับช่วงที่คุณต้องการ

เมื่อแปลงทศนิยมเป็นจำนวนเต็ม C++ จะไม่ปัดเศษ มันตัดทศนิยมออกแทน ดังนั้น 9.9 กลายเป็น 9 การบวก 0.5 ที่ตอนท้ายทำให้แน่ใจว่าสิ่งใดที่อยู่เหนือครึ่งจะเป็นจำนวนเต็มถัดไป ดังนั้นมันจึงปัดเศษ

เมื่อคุณอัปโหลดโปรแกรมแล้ว ตรวจสอบให้แน่ใจว่าโปรแกรมใช้งานได้กับ jstest

ขั้นตอนที่ 6: ประกอบคอนโทรลเลอร์อีกครั้ง

ใส่คอนโทรลเลอร์กลับเข้าที่ในแบบเดียวกับที่คุณแยกชิ้นส่วน ลบด้วยแท่งอนาล็อกด้านซ้าย มันควรจะทำงานในขณะนี้ ฉันพบว่าไม่มีความล่าช้าที่เห็นได้ชัดเจนและดีกว่าการใช้แท่งอนาล็อกเป็นอย่างมาก เนื่องจากมันใช้มาตรความเร่ง จึงได้รับผลกระทบจากการเคลื่อนไหวอย่างกะทันหัน แต่คุณต้องพยายามสังเกตให้ดี

ขั้นตอนที่ 7: การปรับปรุงที่เป็นไปได้

มีการปรับปรุงบางอย่างที่สามารถทำได้ ซึ่งรวมถึง:

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

แนะนำ: