Επιταχυνσιόμετρο ελεγκτή Xbox 360/γυροσκοπικό σύστημα διεύθυνσης: 7 βήματα
Επιταχυνσιόμετρο ελεγκτή Xbox 360/γυροσκοπικό σύστημα διεύθυνσης: 7 βήματα
Anonim
Επιταχυνσιόμετρο Xbox 360 Controller/gyro Steering Mod
Επιταχυνσιόμετρο Xbox 360 Controller/gyro Steering Mod

Έπαιζα Assetto Corsa με το χειριστήριο Xbox 360. Δυστυχώς, το τιμόνι με το αναλογικό ραβδί είναι πολύ δυσκίνητο και δεν έχω χώρο για ρύθμιση τροχού. Προσπάθησα να σκεφτώ τρόπους με τους οποίους θα μπορούσα να πατήσω έναν καλύτερο μηχανισμό διεύθυνσης στο χειριστήριο, όταν μου πέρασε από το μυαλό ότι μπορούσα να χρησιμοποιήσω ολόκληρο το χειριστήριο ως τιμόνι.

Το αναλογικό ραβδί έχει δύο ποτενσιόμετρα. Ένα μετρά την κάθετη κίνηση και ένα μετρά την οριζόντια κίνηση. Βάζει 1,6V σε κάθε ένα και μετρά την τάση που παράγεται στον υαλοκαθαριστήρα για να καθορίσει πόσο έχει μετακινηθεί το ραβδί. Αυτό σημαίνει ότι είναι δυνατό να ελέγξετε την κίνηση του ραβδιού τροφοδοτώντας μια συγκεκριμένη τάση στον πείρο του υαλοκαθαριστήρα. (περισσότερες πληροφορίες εδώ:

Αυτό το mod χρησιμοποιεί ένα Arduino για να υπολογίσει τη γωνία από τις ενδείξεις του επιταχυνσιόμετρου και να το μετατρέψει σε αναλογική κίνηση ραβδιών μέσω DAC. Επομένως, θα πρέπει να λειτουργεί με οποιοδήποτε παιχνίδι που χρησιμοποιεί το αναλογικό ραβδί ως είσοδο.

Βήμα 1: Θα χρειαστείτε:

Εργαλεία:

  • Συγκολλητικό σίδερο
  • Κόλλα μετάλλων
  • Συγκολλητικό κορόιδο/πλεξούδα
  • Απογυμνωτής καλωδίων
  • Ένα κατσαβίδι, ίσως ένα Torx ανάλογα με τις βίδες του ελεγκτή σας (τα δικά μου είναι σταυρωτά)
  • Κόλλα (κατά προτίμηση όχι πολύ ισχυρή κόλλα, ώστε να μπορεί να διαχωριστεί αργότερα)
  • Ένας προσαρμογέας USB σε σειριακό για τον προγραμματισμό του Arduino

Υλικά:

  • Xbox 360 Controller (duh!)
  • Arduino Pro Mini (ή κλώνος) (κατά προτίμηση 3.3V. Εάν χρησιμοποιείτε την έκδοση 5V, πιθανότατα θα χρειαστείτε έναν μετατροπέα τάσης αύξησης)
  • Γυροσκόπιο/επιταχυνσιόμετρο MPU-6050
  • Ένα MCP4725 DAC (δύο αν θέλετε να ελέγχετε και τους δύο άξονες)
  • Λίγο λεπτό σύρμα
  • Ένα breadboard για να μπορείτε να δοκιμάσετε τα πάντα πριν κολλήσετε (προαιρετικό, αλλά συνιστάται)

Βήμα 2: Διαχωρίστε τον ελεγκτή

Take Apart the Controller
Take Apart the Controller
Take Apart the Controller
Take Apart the Controller
Take Apart the Controller
Take Apart the Controller

Υπάρχουν επτά βίδες που πρέπει να αφαιρέσετε. Έξι από αυτά είναι προφανή, αλλά το έβδομο βρίσκεται πίσω από ένα αυτοκόλλητο. Υποθέτω ότι η κατάργησή του ακυρώνει την εγγύησή σας, οπότε προχωρήστε με δική σας ευθύνη. Πολλοί οδηγοί λένε ότι χρειάζεστε ένα κατσαβίδι Torx, αλλά τα δικά μου είναι σταυρωτά, οπότε ελέγξτε το χειριστήριο σας.

Μετά από αυτό, αφαιρέστε προσεκτικά το πίσω κάλυμμα. Εάν βγείτε από μπροστά, τα κουμπιά θα χυθούν και πιθανότατα θα πάνε σε όλο το δωμάτιο. Σηκώστε το από κάτω. Στη συνέχεια, αποσυνδέστε τους δύο κινητήρες δόνησης. (αυτό με το μικρό βάρος πρέπει να είναι στα αριστερά και αυτό με το μεγάλο βάρος στα δεξιά) Βγάλτε το PCB και αφαιρέστε τα ελαστικά καλύμματα στα αναλογικά μπαστούνια. Απλώς απομακρύνονται.

Το επόμενο πράγμα είναι να αφαιρέσουμε το αριστερό αναλογικό ραβδί έτσι ώστε να μην παρεμβαίνει στην είσοδό μας, αλλά ο αριστερός μηχανισμός σκανδάλης είναι εμπόδιο. Για να το αφαιρέσετε, πρέπει να ξεκολλήσετε τους τρεις πείρους από το ποτενσιόμετρο από το μπροστινό μέρος του πίνακα και, στη συνέχεια, να αποσυνδέσετε τον μηχανισμό από το PCB.

Στη συνέχεια, ξεκολλήστε τις 14 ακίδες που κρατούν το αριστερό αναλογικό ραβδί. Στη συνέχεια, τραβήξτε το ραβδί.

Βήμα 3: Κολλήστε τα εξαρτήματα στη θέση τους

Κολλήστε τα εξαρτήματα στη θέση τους
Κολλήστε τα εξαρτήματα στη θέση τους
Κολλήστε τα εξαρτήματα στη θέση τους
Κολλήστε τα εξαρτήματα στη θέση τους

Θα παρατηρήσετε ότι υπάρχει αρκετός χώρος μεταξύ του πίσω μέρους του PCB και της θήκης. Αυτό καθιστά δυνατή την τοποθέτηση όλου του υλικού στη θήκη χωρίς να αφαιρέσετε τίποτα.

Συνειδητοποίησα μόνο αργότερα, αλλά αυτό θα ήταν μια καλή στιγμή για να ξεκολλήσουμε το κουμπί επαναφοράς στο Arduino. Εάν δεν το κάνετε, θα πιέσει στο πίσω μέρος της θήκης και θα προκαλέσει τη διακοπή της λειτουργίας του έργου εάν σφίξετε πολύ μία από τις βίδες κατά την επανασυναρμολόγηση.

Κόλλησα ένα λεπτό κομμάτι κάρτας στο πίσω μέρος κάθε PCB για να το μονώσω, και το κόλλησα στη συνέχεια στο PCB του ελεγκτή. Iμουν απρόθυμος να χρησιμοποιήσω κόλλα, αλλά δεν μπορούσα να σκεφτώ έναν καλύτερο τρόπο για να το κάνω.

Οι θέσεις στην εικόνα είναι ο καλύτερος συνδυασμός που θα μπορούσα να βρω. Το Arduino βρίσκεται στα αριστερά, με την άκρη με το κουμπί επαναφοράς να ακουμπά στο κομμάτι του πλαστικού από το δεξί μηχανισμό σκανδάλης, με την άλλη πλευρά κάτω από το καλώδιο και με τη γωνία όσο το δυνατόν πιο κοντά στο λευκό βύσμα. Υπάρχει μια μικρή διόγκωση στη θήκη, αλλά δεν βρήκα καλύτερο μέρος για να το βάλω.

Το επιταχυνσιόμετρο βρίσκεται στα δεξιά του σύρματος. Θα πρέπει να είναι όσο το δυνατόν πιο επίπεδη και ευθεία, διαφορετικά μπορεί να χρειαστεί να γράψετε κάποιο κώδικα αργότερα για να αντισταθμίσετε την αντιστάθμιση. Σημειώστε ότι υπάρχουν μερικά πλαστικά κομμάτια που προεξέχουν στο πίσω μέρος της θήκης που πρέπει να προσέξετε για να αποφύγετε. Έχω διαπιστώσει ότι μπορείτε να βάλετε κάτι κολλώδες και πολύχρωμο, όπως το κραγιόν, στα προεξέχοντα κομμάτια πλαστικού και στη συνέχεια να βάλετε το πίσω κάλυμμα για να δείτε πού αφήνει σημάδια.

Τα DAC (ες) βρίσκονται στην κάτω αριστερή γωνία. Υπάρχει αρκετός χώρος για να στοιβάζετε δύο DAC, το ένα πάνω στο άλλο, εάν θέλετε να ελέγχετε και τους δύο άξονες. Δεν χρειάζεται να τα κολλήσετε. Θα μείνουν εκεί που είναι μόνο με τις συγκολλημένες συνδέσεις. Εάν κολλάτε κάρτα μεταξύ τους, βεβαιωθείτε ότι έχετε κόψει την κάρτα έτσι ώστε να αφήσετε τα SCL, SDA, VCC και GND προσβάσιμα, επειδή θα έχετε πρόσβαση και από τις δύο πλευρές.

Εάν χρησιμοποιείτε δύο DAC, μην ξεχάσετε να αλλάξετε το jumper διεύθυνσης και να απενεργοποιήσετε τις αντιστάσεις έλξης σε μία από αυτές, όπως περιγράφεται εδώ: 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 του άξονα Χ διαιρούμενη με τη δύναμη g του άξονα Ζ. Αυτό σημαίνει ότι λειτουργεί εάν ο ελεγκτής είναι κάθετος, επίπεδος ή οποιαδήποτε γωνία ενδιάμεσα. (περισσότερες πληροφορίες εδώ:

Λειτουργεί στον ελεγκτή μου, αλλά άλλοι ελεγκτές ενδέχεται να απαιτούν διαφορετικές τάσεις, καθιστώντας τον εκτός ευθυγράμμισης. Νομίζω ότι ο καλύτερος τρόπος για να βρείτε το εύρος τάσης είναι με δοκιμή και λάθος. Πολλά παιχνίδια θα σας δείξουν ένα ρυθμιστικό για την κίνηση του αναλογικού ραβδιού, αλλά ο πιο ακριβής τρόπος που βρήκα για να προσδιορίσω την κίνηση είναι με το jstest στο Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Σας δίνει έναν αριθμό μεταξύ -32, 767 και 32, 767 και όχι ένα γραφικό, ώστε να γνωρίζετε ακριβώς πού βρίσκεται το ραβδί. Συνδέστε το χειριστήριο και το Arduino USB στον σειριακό προσαρμογέα, φορτώστε το jstest και δοκιμάστε διαφορετικές τιμές DAC μέχρι να φτάσετε στο επάνω και στο κάτω μέρος της περιοχής και σημειώστε το καθένα. Για μένα ήταν 1, 593 - 382.

Ιδιαίτερο ενδιαφέρον παρουσιάζει η γραμμή 36:

dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;

Δεν είναι αμέσως προφανές τι κάνει. Απλώς, παίρνει τη γωνία του ελεγκτή (μετρημένη σε ακτίνια και μεταξύ ~ 1,57 και ~ -1,57) και τη μετατρέπει σε μια τιμή μεταξύ 1, 593 και 382 για το DAC. Εάν έχετε διαφορετικό εύρος DAC, θα πρέπει να αλλάξετε αυτήν τη γραμμή.

Η γραμμή μπορεί να γραφτεί ως:

dacvalue = (controllerangle +) / + 0,5;

Με και τους αριθμούς που πρέπει να αλλάξετε. είναι ίσο με το εύρος της γωνίας του ελεγκτή (pi) διαιρούμενο με το συνολικό εύρος των τιμών DAC. (στην κορυφή του εύρους μείον το κάτω μέρος του εύρους) Αυτό σας οδηγεί στο να αλλάξετε την τάση, αν και τα αποτελέσματα θα είναι εκτός του εύρους που θέλετε. Γι 'αυτό χρειάζεστε. ισούται με πολλαπλασιασμένο με το κάτω μέρος του εύρους συν το μισό εύρος κίνησης του ελεγκτή. (pi / 2) Η προσθήκη του μισού εύρους κίνησης βεβαιώνεται ότι δεν είναι αρνητικός αριθμός και η προσθήκη πολλαπλασιασμένη με το κάτω μέρος του εύρους βεβαιώνεται ότι είναι συγχρονισμένος με το εύρος που θέλετε.

Κατά τη μετατροπή των δεκαδικών σε ακέραιο, το C ++ δεν στρογγυλοποιείται. Αντιθέτως, κόβει το δεκαδικό, οπότε το 9,9 γίνεται 9. Προσθέτοντας 0,5 στο τέλος, βεβαιώνεστε ότι οτιδήποτε πάνω από το μισό πηγαίνει στον επόμενο ακέραιο, έτσι γίνεται στρογγυλό.

Αφού ανεβάσετε το πρόγραμμά σας, βεβαιωθείτε ότι λειτουργεί με το jstest.

Βήμα 6: Συναρμολογήστε ξανά τον ελεγκτή

Τοποθετήστε ξανά το χειριστήριο με τον ίδιο τρόπο που το χωρίσατε, μείον το αριστερό αναλογικό ραβδί. Θα πρέπει να λειτουργήσει τώρα. Βρίσκω ότι δεν υπάρχει αξιοσημείωτη καθυστέρηση και είναι πολύ καλύτερο από τη χρήση του αναλογικού ραβδιού. Επειδή χρησιμοποιεί επιταχυνσιόμετρο, επηρεάζεται από ξαφνικές κινήσεις, αλλά πρέπει να βγείτε από το δρόμο σας για να το παρατηρήσετε.

Βήμα 7: Πιθανές βελτιώσεις

Υπάρχουν κάποιες βελτιώσεις που θα μπορούσαν να γίνουν. Αυτά περιλαμβάνουν:

  • Χρησιμοποιώντας λιγότερο επαχθές καλώδιο μαγνήτη
  • Χαράζοντας τα πάντα σε ένα PCB που έχει σχεδιαστεί για να ταιριάζει στη θήκη του ελεγκτή
  • Επανασύνδεση του αριστερού αναλογικού ραβδιού και σύνδεση των ποδιών με τις αναλογικές εισόδους στο Arduino, ώστε να μπορούν να χρησιμοποιηθούν για τη ρύθμιση του Arduino
  • Πάρτε το πίσω κομμάτι της θήκης για έναν ασύρματο ελεγκτή και τοποθετήστε το έργο στο διαμέρισμα της μπαταρίας (αυτό θα απαιτούσε να κόψετε μια τρύπα για το καλώδιο USB)