![Μετατροπέας PPM σε Joystick με βάση το Arduino (JETI) για FSX: 5 βήματα Μετατροπέας PPM σε Joystick με βάση το Arduino (JETI) για FSX: 5 βήματα](https://i.howwhatproduce.com/images/006/image-17429-j.webp)
Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-23 14:39
![Μετατροπέας PPM σε Joystick με βάση το Arduino (JETI) για FSX Μετατροπέας PPM σε Joystick με βάση το Arduino (JETI) για FSX](https://i.howwhatproduce.com/images/006/image-17429-1-j.webp)
![Μετατροπέας PPM σε Joystick με βάση το Arduino (JETI) για FSX Μετατροπέας PPM σε Joystick με βάση το Arduino (JETI) για FSX](https://i.howwhatproduce.com/images/006/image-17429-2-j.webp)
Αποφάσισα να αλλάξω τον πομπό μου JETI DC-16 από τη Λειτουργία 2 στη Λειτουργία 1, η οποία βασικά αλλάζει το γκάζι και τον ανελκυστήρα από αριστερά προς τα δεξιά και αντίστροφα. Δεδομένου ότι δεν ήθελα να συντρίψω ένα από τα μοντέλα μου λόγω κάποιας σύγχυσης αριστερά/δεξιά στον εγκέφαλό μου, αναρωτιόμουν αν είναι δυνατόν να εξασκηθώ λίγο στο FSX.
Διάβασα και δοκίμασα τους πομπούς JETI που πράγματι υποστηρίζουν μια λειτουργία Joystick έξω από το κουτί, ωστόσο ήθελα πλήρη ευελιξία για τις εκχωρήσεις αξόνων και διακοπτών και χρησιμοποιούσα το TX όπως με ένα πραγματικό μοντέλο. Χρησιμοποιώντας την έξοδο του δέκτη, είναι επίσης δυνατό να αξιοποιήσετε την επεξεργασία σήματος στο DC-16 και να χρησιμοποιήσετε μίξερ, φάσεις πτήσης, διπλούς ρυθμούς, ό, τι μπορείτε να προγραμματίσετε εκεί.
Πρόσφατα βρήκα ένα ωραίο σεμινάριο για το πώς να φτιάξετε μια συσκευή εισόδου USB HID, δηλαδή ένα Joystick, από ένα φθηνό Arduino όπως το Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Αυτό θα επέτρεπε όλα όσα χρειάζονταν για τον έλεγχο ενός αεροπλάνου / ελικοπτέρου / οτιδήποτε υπάρχει στο FSX! Άφθονοι άξονες και κουμπιά διαθέσιμα.
Δεδομένου ότι είχα μόλις ένα εφεδρικό JETI RSAT2, αποφάσισα να το συνδέσω με το Arduino και να προσπαθήσω να υλοποιήσω έναν μικρό αναλυτή PPM μαζί με τη βιβλιοθήκη Joystick.
Υποθέτω ότι κάποιος που ακολουθεί αυτά τα βήματα είναι εξοικειωμένος με τη σύνδεση και τον προγραμματισμό ενός Arduino. Δεν θα λάβω καμία εγγύηση για δυσλειτουργίες ή ζημιές!
Προμήθειες
Θα χρειαστείτε…
- οποιοδήποτε Arduino υποστηρίζεται από τη βιβλιοθήκη Joystick, χρησιμοποίησα ένα Sparkfun Pro Micro 5V / 16 MHz
- μια πρόσφατη έκδοση του Arduino IDE
- οποιοσδήποτε δέκτης RC που βγάζει σήμα PPM, όπως το JETI RSAT2
- μερικά καλώδια άλματος (ελάχιστο 3)
- τη βιβλιοθήκη Joystick που είναι εγκατεστημένη στο Arduino IDE
- η βιβλιοθήκη arduino-timer:
Βήμα 1: Συνδέστε το RX και το Arduino
![Wire Up το RX και το Arduino Wire Up το RX και το Arduino](https://i.howwhatproduce.com/images/006/image-17429-3-j.webp)
![Wire Up το RX και το Arduino Wire Up το RX και το Arduino](https://i.howwhatproduce.com/images/006/image-17429-4-j.webp)
Η καλωδίωση είναι αρκετά απλή. Αποφάσισα να τροφοδοτήσω το Arduino μόνο από USB, αφού θα μιμηθεί μια συσκευή Joystick. Αυτό θα τροφοδοτήσει το Arduino με 5V, το οποίο μπορεί να χρησιμοποιηθεί και για την τροφοδοσία του δέκτη RC.
Χρησιμοποίησα το Pin VCC, το οποίο παρέχει ρυθμιζόμενη έξοδο, και τον πλησιέστερο ακροδέκτη Gnd - απλώς συνδέστε τον με τις ακίδες σύνδεσης + και - του PPM. Όταν τροφοδοτείται το Arduino, ενεργοποιείται και ο δέκτης.
Για το σήμα PPM, αποφάσισα να χρησιμοποιήσω διακοπές για να τις αναλύσω. Διακοπές είναι διαθέσιμες π.χ. στο Pin 3, απλώς συνδέστε το εκεί - δεν υπάρχει "εγγενής ακίδα RC" στο arduino, αλλά πιθανώς περισσότεροι και διαφορετικοί τρόποι ανάγνωσης στο σήμα του δέκτη.
Έπρεπε να απενεργοποιήσω τον συναγερμό τάσης RX, καθώς η τάση VCC με τροφοδοσία USB θα είναι περίπου 4,5V μόνο - αλλά αρκετά σταθερή, οπότε κανένα πρόβλημα.
Βήμα 2: Λήψη ορισμένων σημάτων PPM
![Λήψη ορισμένων σημάτων PPM Λήψη ορισμένων σημάτων PPM](https://i.howwhatproduce.com/images/006/image-17429-5-j.webp)
![Λήψη ορισμένων σημάτων PPM Λήψη ορισμένων σημάτων PPM](https://i.howwhatproduce.com/images/006/image-17429-6-j.webp)
Όταν τροφοδοτείται ο δέκτης ΚΑΙ ο TX, έπαιρνα σήματα PPM όπως φαίνεται στην εικόνα. 16 κανάλια, επαναλαμβανόμενα για πάντα. Εάν το Failsafe στο RSAT είναι απενεργοποιημένο και ο πομπός είναι απενεργοποιημένος, η έξοδος PPM θα απενεργοποιηθεί.
Περισσότερες πληροφορίες για το PPM είναι διαθέσιμες εδώ:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Δεδομένου ότι δεν πετάω πραγματικά πράγματα σε αυτή την περίπτωση, δεν με ένοιαξαν τα θεωρητικά χρονοδιαγράμματα και απλά κατάλαβα στο παλμογράφο τι έβγαζε ο δέκτης μου όταν μετακινούσε τα ραβδιά από πλήρως προς τα αριστερά προς τα δεξιά (τυπικές ρυθμίσεις στο TX) Το Φάνηκε ότι το -100% αντιστοιχεί σε παλμούς με μήκος 600μs, και +100% έως 1600μs. Επίσης, δεν με ενδιέφερε το μήκος των παλμών παύσης (400μs) στον κώδικα Arduino, αλλά υπέθεσα ένα διάστημα πλαισίων τουλάχιστον. 3000μs
Βήμα 3: Διαμόρφωση του πομπού
![Διαμόρφωση του πομπού Διαμόρφωση του πομπού](https://i.howwhatproduce.com/images/006/image-17429-7-j.webp)
![Διαμόρφωση του πομπού Διαμόρφωση του πομπού](https://i.howwhatproduce.com/images/006/image-17429-8-j.webp)
![Διαμόρφωση του πομπού Διαμόρφωση του πομπού](https://i.howwhatproduce.com/images/006/image-17429-9-j.webp)
Δεδομένου ότι πρέπει να είναι γνωστή μόνο η πραγματική θέση των επιφανειών ελέγχου, αρκεί ένα κανάλι / "σερβο" ανά λειτουργία RC. Κατά συνέπεια, μπορεί να γίνει μια αρκετά απλή ρύθμιση πομπού - παρόμοια με ένα κανονικό μοντέλο RC. Οι κύριες λειτουργίες aileron, ανελκυστήρας, πηδάλιο και γκάζι η καθεμία απαιτεί μόνο ένα σερβο αντίστοιχα κανάλι πομπού. Πρόσθεσα επίσης πτερύγια, φρένα και γρανάζια, αφήνοντας 9 κανάλια δωρεάν μέχρι στιγμής. Λάβετε υπόψη ότι τα πτερύγια τοποθετήθηκαν σε φάση πτήσης και δεν ελέγχονται απευθείας μέσω ραβδιού, ρυθμιστικού ή κουμπιού.
Βήμα 4: Εκτέλεση του Joystick
![Τρέξιμο του Joystick Τρέξιμο του Joystick](https://i.howwhatproduce.com/images/006/image-17429-10-j.webp)
![Τρέξιμο του Joystick Τρέξιμο του Joystick](https://i.howwhatproduce.com/images/006/image-17429-11-j.webp)
Η βιβλιοθήκη Joystick είναι αρκετά εύκολη στη χρήση και παρέχει μερικά παραδείγματα και δοκιμές. Θα ήταν χρήσιμο να ελέγξετε πρώτα αν το Arduino εντοπίζεται ως σωστό Joystick, οι οδηγίες που συνδέονται στην ενότητα εισαγωγής και η ίδια η βιβλιοθήκη παρέχουν κάποιες καλές οδηγίες.
Στον πίνακα ελέγχου Συσκευές και εκτυπωτές, το Arduino εμφανιζόταν ως "Sparkfun Pro Micro" και το παράθυρο δοκιμής του joystick έδειχνε 7 άξονες και πολλά υποστηριζόμενα κουμπιά. Ακόμα και ένας διακόπτης καπέλου μπορεί να χρησιμοποιηθεί όταν είναι προγραμματισμένος στο Arduino.
Βήμα 5: Κωδικοποίηση του Arduino
![Κωδικοποίηση του Arduino Κωδικοποίηση του Arduino](https://i.howwhatproduce.com/images/006/image-17429-12-j.webp)
![Κωδικοποίηση του Arduino Κωδικοποίηση του Arduino](https://i.howwhatproduce.com/images/006/image-17429-13-j.webp)
Αυτό που εξακολουθεί να λείπει είναι η πραγματική ανάλυση του σήματος PPM και η ανάθεση σε άξονες και κουμπιά Joystick. Αποφάσισα για την ακόλουθη χαρτογράφηση:
Εκχώρηση καναλιού / λειτουργίας / Joystick:
- Γκάζι -> Άξονας γκαζιού
- Άιλερον -> άξονας Χ
- Ανελκυστήρας -> άξονας Υ
- Πηδάλιο -> άξονας περιστροφής Χ
- Πτερύγια -> άξονας περιστροφής Υ
- Φρένο -> άξονας Ζ
- Gear -> Κουμπί 0
Όταν η ταχύτητα είναι κατεβασμένη, το πρώτο κουμπί του Joystick πρέπει να πατηθεί και να απελευθερωθεί κατά την ανύψωση της ταχύτητας. Ωστόσο, αυτό θα απαιτήσει FSUIPC για FSX, εκτός κουτιού, το FSX θα δεχτεί μόνο ένα κουμπί για την εναλλαγή του γραναζιού, κάτι που δεν συμβαίνει ακριβώς με τα μοντέλα μου.
Παρέδωσα την τρέχουσα έκδοση του κώδικα με πολλά σχόλια, τα οποία λειτουργούν αρκετά καλά για μένα - μη διστάσετε να αλλάξετε την εργασία σας ή να προσθέσετε νέες λειτουργίες. Τα τελευταία 9 κανάλια RC δεν χρησιμοποιούνται προς το παρόν.
Για τη ρύθμιση, η κλάση Joystick πρέπει να προετοιμαστεί, βασικά καθορίζοντας τα εύρη των αριθμητικών αξόνων:
/ * Ορισμός εύρους αξόνων (ορίζεται στην κεφαλίδα, 0 - 1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Χρησιμοποιώντας τιμές από 0 έως 1000, είναι δυνατή η απευθείας αντιστοίχιση του μήκους του παλμού (600 - 1600μs) στις τιμές του joystick χωρίς επανατοποθέτηση.
Το DIN 3 είναι αρχικοποιημένο ως ψηφιακή είσοδος, ενεργοποιημένα τα τραβήγματα και επισυνάπτεται μια διακοπή:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
Για λόγους εντοπισμού σφαλμάτων, πρόσθεσα μερικές εκτυπώσεις μέσω της σειριακής διεπαφής σε τακτά χρονικά διαστήματα, χρησιμοποιώντας τη βιβλιοθήκη arduino-timer:
εάν (SERIAL_PRINT_INTERVAL> 0) {
scheduler.every (SERIAL_PRINT_INTERVAL, (άκυρο*) -> bool {SerialPrintChannels (); return true;}); }
Η διακοπή του πείρου θα καλείται κάθε φορά που η λογική τιμή του πείρου έχει αλλάξει, έτσι για κάθε άκρη στο σήμα PPM. Αξιολογήστε το μήκος παλμού με απλό χρονισμό χρησιμοποιώντας micros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Αξιολογώντας την τρέχουσα κατάσταση του πείρου και συνδυάζοντάς το με το μήκος του παλμού και τους παλμούς του παρελθόντος, οι νέοι παλμοί μπορούν να ταξινομηθούν. Τα ακόλουθα υπό όρους θα ανιχνεύσουν το κενό μεταξύ πλαισίων:
εάν (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
Για τους επόμενους παλμούς, το μήκος του παλμού θα χαρτογραφηθεί σε μια κατάσταση άξονα περικόπτοντας και πόνοντας το μήκος παλμού για να ταιριάζει με το εύρος του άξονα του χειριστηρίου:
uint16_t rxLength = pulseLength;
rxLength = (rxΜήκος> 1600); 1600: rxLength; rxLength = (rxLength <600); 600: rxLength; rxChannels [curChannel] = rxLength - 600;
Ο πίνακας rxChannels περιέχει τελικά 16 τιμές από 0 - 1000, υποδεικνύοντας τις θέσεις ραβδιών / ρυθμιστικών και κουμπιών.
Μετά τη λήψη 16 καναλιών, πραγματοποιείται η αντιστοίχιση στο Joystick:
/ * άξονες */
Joystick.setThrottle (κανάλια [0]); Joystick.setXAxis (κανάλια [1]); Joystick.setYAxis (1000 - κανάλια [2]); Joystick.setRxAxis (κανάλια [3]); Joystick.setRyAxis (κανάλια [4]); Joystick.setZAxis (1000 - κανάλια [5]); / * κουμπιά */ Joystick.setButton (0, (κανάλια [6] <500? 1: 0)); / * ενημέρωση δεδομένων μέσω USB */ Joystick.sendState ();
Ανέστρεψα μερικούς άξονες στον κώδικα, ο οποίος δεν είναι απολύτως απαραίτητος, αφού ο άξονας μπορεί επίσης να αναστραφεί με αναστροφή της κατεύθυνσης σερβομηχανισμού ή της αντιστοίχισης στο FSX. Ωστόσο, αποφάσισα να διατηρήσω τις οδηγίες σερβο και επίσης την αρχική ανάθεση FSX.
Το κουμπί ενεργοποιείται ή απενεργοποιείται από το κανάλι κατωφλίου 7.
Και μην ξεχάσετε να σημειώσετε τον προγραμματιστή… αλλιώς, δεν θα είναι ορατές εκτυπώσεις εντοπισμού σφαλμάτων.
void loop () {
scheduler.tick (); }
Στο στιγμιότυπο οθόνης που επισυνάπτω μπορείτε να δείτε, το κανάλι 1 μεταφέρθηκε από το 1000 (πλήρες γκάζι) στο 0 (σε αδράνεια).
Το FSX θα ανιχνεύσει το Arduino όπως κάθε άλλο Joystick, οπότε απλώς εκχωρήστε το κουμπί και τους άξονες και διασκεδάστε απογειώνοντας!
Αυτό που μου αρέσει πολύ σε αυτήν την προσέγγιση είναι ότι μπορείτε απλά να χρησιμοποιήσετε τον πομπό σας όπως με ένα πραγματικό μοντέλο, π.χ. χρησιμοποιώντας φάσεις πτήσης κλπ.
Συνιστάται:
Δημιουργήστε βάση στήριξης DSLR για λιγότερο από 6 $ χρησιμοποιώντας σωλήνες PVC (μονόποδο/τρίποδο για οποιαδήποτε κάμερα): 6 βήματα
![Δημιουργήστε βάση στήριξης DSLR για λιγότερο από 6 $ χρησιμοποιώντας σωλήνες PVC (μονόποδο/τρίποδο για οποιαδήποτε κάμερα): 6 βήματα Δημιουργήστε βάση στήριξης DSLR για λιγότερο από 6 $ χρησιμοποιώντας σωλήνες PVC (μονόποδο/τρίποδο για οποιαδήποτε κάμερα): 6 βήματα](https://i.howwhatproduce.com/images/002/image-5287-38-j.webp)
Φτιάξτε βάση στήριξης DSLR για λιγότερο από 6 $ χρησιμοποιώντας σωλήνες PVC (μονόποδο/τρίποδο για οποιαδήποτε κάμερα): Ναι …. Μπορείτε να φτιάξετε το δικό σας μόνο με κάποιο σωλήνα PVC και T's Είναι ελαφρύ … Είναι τέλεια ισορροπημένο … Είναι σταθερή … Είναι φιλική προς την προσαρμογή … Είμαι ο Sooraj Bagal και θα μοιραστώ την εμπειρία μου σχετικά με αυτό το στήριγμα κάμερας που δημιούργησα για
[DIY] Δωρεάν βάση για τρίποδο για smartphone: 5 βήματα
![[DIY] Δωρεάν βάση για τρίποδο για smartphone: 5 βήματα [DIY] Δωρεάν βάση για τρίποδο για smartphone: 5 βήματα](https://i.howwhatproduce.com/images/002/image-3594-80-j.webp)
[DIY] Δωρεάν βάση για τρίποδο για smartphone: Όποιος έχει τραβήξει περισσότερες από δύο φωτογραφίες από μια κάμερα, ξέρει πόσο σημαντικό είναι να το κρατάτε ακίνητο. Λίγη κίνηση και ο έξυπνος φακός του τηλεφώνου 12 megapixel θα σας δώσει μια θολή εικόνα. Με την εμφάνιση του ‘ αρκετά καλής ’
Μια καλύτερη βάση για φορητό υπολογιστή για κρεβάτι: 7 βήματα (με εικόνες)
![Μια καλύτερη βάση για φορητό υπολογιστή για κρεβάτι: 7 βήματα (με εικόνες) Μια καλύτερη βάση για φορητό υπολογιστή για κρεβάτι: 7 βήματα (με εικόνες)](https://i.howwhatproduce.com/images/004/image-9597-26-j.webp)
Μια καλύτερη βάση για φορητό υπολογιστή για κρεβάτι: Φτιάξτε μια απλή αλλά απίστευτα χρήσιμη βάση για φορητό υπολογιστή για περίπου $ 15 και 30-60 λεπτά! Ιδανικό για χρήση στο κρεβάτι κατά την πληκτρολόγηση, την περιήγηση και κυρίως την παρακολούθηση ταινιών. Όταν χρησιμοποιώ το φορητό υπολογιστή μου στο κρεβάτι, είναι συχνά άβολο. Πρέπει να ισορροπήσω το φορητό υπολογιστή σε m
Χάρτινη βάση για φορητό υπολογιστή, η φθηνότερη δυνατή βάση για φορητό υπολογιστή: 4 βήματα
![Χάρτινη βάση για φορητό υπολογιστή, η φθηνότερη δυνατή βάση για φορητό υπολογιστή: 4 βήματα Χάρτινη βάση για φορητό υπολογιστή, η φθηνότερη δυνατή βάση για φορητό υπολογιστή: 4 βήματα](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10967793-paper-laptop-stand-the-cheapest-laptop-stand-possible-4-steps-0.webp)
Paper Laptop Stand, the Cheapest Laptop Stand Possible .: Μου αρέσει πολύ το quake3 και μάλλον ανησυχώ για την αντοχή του MacBook μου. Δεν μου έρχεται ποτέ η ιδέα να αγοράσω αυτά τα στηρίγματα φορητών υπολογιστών με ανεμιστήρες, επειδή τα MacBooks δεν έχουν καμία τρύπα στο κάτω μέρος του. Σκεφτόμουν ότι αυτές οι μισές μπάλες θα έκαναν το λάπτοπ μου
Μετατροπέας LCD για Arduino: 7 βήματα
![Μετατροπέας LCD για Arduino: 7 βήματα Μετατροπέας LCD για Arduino: 7 βήματα](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11126205-lcd-shifter-for-arduino-7-steps-j.webp)
LCD Shifter για Arduino: Η αρχική ιδέα ήταν να δημιουργηθεί μια βιβλιοθήκη που να απλοποιεί τη χρήση του IC 74HC595 μεταξύ Arduino και άλλου υλικού. Σε αυτό το Instructable θα σας το μοιραστώ χρησιμοποιώντας ως παράδειγμα τον έλεγχο μιας οθόνης LCD 16x2. Το παράδειγμα θα δείξει στην LCD τα δευτερόλεπτα