Πίνακας περιεχομένων:

Ταχύμετρο εργασίας RC αυτοκινήτου: 4 βήματα (με εικόνες)
Ταχύμετρο εργασίας RC αυτοκινήτου: 4 βήματα (με εικόνες)

Βίντεο: Ταχύμετρο εργασίας RC αυτοκινήτου: 4 βήματα (με εικόνες)

Βίντεο: Ταχύμετρο εργασίας RC αυτοκινήτου: 4 βήματα (με εικόνες)
Βίντεο: Airbus A380: Πώς κατασκευάζεται το μεγαλύτερο αεροσκάφος στον κόσμο; 2024, Νοέμβριος
Anonim
Επιταχυνσιόμετρο αυτοκινήτου RC
Επιταχυνσιόμετρο αυτοκινήτου RC

Αυτό είναι ένα σύντομο έργο που δημιούργησα ως μέρος μιας μεγαλύτερης κατασκευής RC ενός ελαφρού Land Rover. Αποφάσισα ότι μου άρεσε να έχω ένα ταχύμετρο στο ταμπλό, αλλά ήξερα ότι ένα σερβο δεν θα το έκοβε. Υπήρχε μόνο μία λογική επιλογή: να αναπτύξετε το arduino!

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

ΛΙΣΤΑ ΜΕΡΩΝ:

Μικροελεγκτής: Χρησιμοποίησα ένα τσιπ ATTiny85, το οποίο κόστισε περίπου 1 £ το καθένα.

Προγραμματιστής μικροελεγκτών: Για να μεταφέρετε τον κωδικό στο τσιπ, χρειάζεστε έναν τρόπο προγραμματισμού του. Με κανονικό arduino αυτό είναι απλά ένα καλώδιο USB, αλλά για το τσιπ ATTiny, χρειάζεστε κάτι επιπλέον. Μπορείτε να χρησιμοποιήσετε ένα άλλο arduino για να το κάνετε αυτό ή, όπως εγώ, μπορείτε να χρησιμοποιήσετε έναν προγραμματιστή Tiny AVR από το Sparkfun.

learn.sparkfun.com/tutorials/tiny-avr-prog…

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

8 Pin Chip Socket: Αν βάλετε το τσιπ σε πρίζα αντί να το κολλήσετε απευθείας, μπορείτε να αντέξετε οικονομικά κάποια λάθη στη συναρμολόγηση. Μιλώντας από την εμπειρία - κανείς δεν θέλει να ξεκολλήσει τα τσιπ για να τα επαναπρογραμματίσει.

Πυκνωτής: Χρησιμοποιείται ένας πυκνωτής αποσύνδεσης 100nF (κωδικός 104). Δεν καταλαβαίνω ακριβώς γιατί, αλλά διάβασα ότι οι πυκνωτές αποσύνδεσης είναι σημαντικοί στο διαδίκτυο, οπότε πρέπει να είναι αλήθεια…

Αντίσταση: Μια αντίσταση 10kΩ χρησιμοποιείται για να κατεβάσει τη γραμμή στο arduino. Και πάλι, ένα ακόμη μυστήριο των ηλεκτρονικών.

Perfboard/Stripboard: Κάποιο baseboard πάνω στο οποίο μπορείτε να συναρμολογήσετε το κύκλωμά σας.

Καλώδιο περιέλιξης: Το συνηθισμένο καλώδιο με επένδυση είναι πολύ παχύ για να κολληθεί στον κινητήρα. Η χρήση λεπτού σμάλτου σύρματος θα μειώσει την πίεση στους ακροδέκτες του κινητήρα και θα κάνει τη ζωή σας πολύ πιο εύκολη.

Servo Wire: Κορδέλα τριών καλωδίων που καταλήγει σε θηλυκό βύσμα JR 3 ακίδων. Πήρα το δικό μου από ένα καμένο σερβο που 'τροποποιούσα'.

Stepper Motor: Χρησιμοποίησα ένα διπολικό βηματικό μοτέρ Nidec 6mm. Οποιοδήποτε μικρό stepper πρέπει να λειτουργεί, αν και το διατηρείτε μικρό, καθώς το stepper οδηγείται απευθείας από το Arduino.

Καρφίτσες κεφαλίδας: Δεν είναι απαραίτητες, αλλά αν συνδέσετε το βηματικό σας σε 4 ακίδες και τοποθετήσετε μια πρίζα στο κύκλωμά σας, μπορείτε εύκολα να αποσυνδέσετε τον πίνακα ελέγχου για ευκολία εγκατάστασης.

Υπολογιστής: Για να προγραμματίσετε τον πίνακα, θα χρειαστείτε έναν υπολογιστή. Ενδεχομένως με το Arduino IDE. Και ίσως ένα καλώδιο USB. Αν έχει και καλώδιο τροφοδοσίας, τότε ακόμα καλύτερα.

Βήμα 1: Το σύστημα

Το βασικό περίγραμμα του συστήματος που δημιούργησα ήταν μια μέθοδος με την οποία το σήμα Pulse Width Modulation (PWM) που προέρχεται από τον δέκτη RC μετατρέπεται σε βηματικό κινητήρα μέσω ενός μικροελεγκτή ATTiny 85 (uC).

Εδώ είναι ένας πόρος για σήματα PWM και RC, αλλά για να το αναπαραγάγετε δεν χρειάζεται να το κατανοήσετε.

en.wikipedia.org/wiki/Servo_control

Το ATTiny είναι η αγαπημένη μου γεύση του Arduino επειδή είναι μικρό με αρκετές ακίδες εισόδου/εξόδου για να κάνει βασικά πράγματα, έτσι ταιριάζει απόλυτα σε μικρά μοντέλα και έργα RC. Το κύριο μειονέκτημα του ATTiny είναι ότι απαιτεί λίγο περισσότερη ρύθμιση για να προγραμματίσετε ένα, αλλά μόλις το ρυθμίσετε είναι τόσο φθηνά που μπορείτε να αγοράσετε στοίβες από αυτά για κάθε είδους έργα.

Το μέγεθος του επιλογέα ταχύμετρου είναι πολύ μικρό για να έχει έναν κινητήρα με γρανάζι με ανάδραση, οπότε για να έχει μια αναλογική απόκριση έπρεπε να χρησιμοποιηθεί ένα βηματικό μοτέρ. Ο βηματικός κινητήρας είναι ένας κινητήρας που κινείται σε διακριτές ποσότητες (ή βήματα…!), Κάτι που το καθιστά ιδανικό για ένα σύστημα χωρίς ανάδραση όπως αυτό. Η μόνη προειδοποίηση είναι ότι τα «βήματα» θα κάνουν την κίνηση που προκύπτει να είναι σπασμωδική σε αντίθεση με την ομαλή. Εάν έχετε ένα βήμα με αρκετά βήματα ανά περιστροφή, αυτό δεν είναι αισθητό, αλλά με το βήμα που χρησιμοποίησα σε αυτό το έργο να έχει μόνο 20 περίπου βήματα σε πλήρη περιστροφή, το άλμα γωνίας είναι αρκετά κακό.

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

Βήμα 2: Το Λογισμικό

Αποποίηση ευθυνών: Δεν είμαι προγραμματιστής. Για αυτό το έργο είμαι το ψηφιακό ισοδύναμο του Δρ Frankenstein, που συναρμολογεί κάτι που λειτουργεί από διάφορα ευρήματα κώδικα.

Έτσι, οι πιο θερμές μου ευχαριστίες πηγαίνουν στον Duane B, ο οποίος έκανε τον κωδικό για την ερμηνεία των σημάτων RC:

rcarduino.blogspot.com/

Και στον Ardunaut, ο οποίος έκανε τον κωδικό για τη λειτουργία ενός stepper ως αναλογικού μετρητή:

arduining.com/2012/04/22/arduino-driving-a…

Και στους δύο, τις πιο ειλικρινείς συγγνώμες για αυτό που έκανα στον κώδικά σας.

Τώρα αυτό είναι εκτός δρόμου, εδώ είναι τι να ανεβάσετε στο ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - χρησιμοποιήστε τον αριθμό διακοπής στο attachInterrupt #define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - χρησιμοποιήστε τον αριθμό PIN σε ψηφιακή ανάγνωση μύρου ουδέτερου γκαζιού σε ηλεκτρικό RC Car #define UPPER_THROTTLE 2000 // αυτή είναι η διάρκεια σε μικρά δευτερόλεπτα του μέγιστου γκαζιού σε ένα ηλεκτρικό RC Car #define LOWER_THROTTLE 1000 // αυτή είναι η διάρκεια σε μικροδευτερόλεπτα του ελάχιστου γκαζιού σε ένα ηλεκτρικό RC Car #define DEADZONE 50 // αυτή είναι η ζώνη γκαζιού. Η συνολική ζώνη είναι διπλάσια. #include #define STEPS 21 // βήματα ανά περιστροφή (περιορίζεται σε 315 °) Αλλάξτε αυτό για να ρυθμίσετε τη μέγιστη διαδρομή του ταχύμετρου. #define COIL1 3 // Πείροι πηνίου. Το ATTiny χρησιμοποιεί τις καρφίτσες 0, 1, 3, 4 για το stepper. Το pin 2 είναι το μόνο pin που μπορεί να χειριστεί διακοπές, οπότε πρέπει να είναι η είσοδος. #define COIL2 4 // Δοκιμάστε να τα αλλάξετε αν ο βηματικός κινητήρας δεν λειτουργεί σωστά. #define COIL3 0 #define COIL4 1 // δημιουργήστε ένα παράδειγμα της κατηγορίας stepper: Stepper stepper (ΒΗΜΑΤΑ, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Θέση σε βήματα (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // χρόνος επαναφοράς ενώ βρίσκεστε στο ρελαντί int Resetval = 0; πτητικό int ThrottleIn = LOWER_THROTTLE; πτητικό ανυπόγραφο μακρύ StartPeriod = 0; // ορίστε στη διακοπή // θα μπορούσαμε να χρησιμοποιήσουμε το nThrottleIn = 0 στον βρόχο αντί για ξεχωριστή μεταβλητή, αλλά η χρήση του bNewThrottleSignal για να υποδείξει ότι έχουμε νέο σήμα // είναι σαφέστερη για αυτό το πρώτο παράδειγμα κενής ρύθμισης () {// πείτε στο Arduino Θέλουμε η συνάρτηση calcInput να καλείται κάθε φορά που το INT0 (ψηφιακός ακροδέκτης 2) αλλάζει από HIGH σε LOW ή LOW σε HIGH // η σύλληψη αυτών των αλλαγών θα μας επιτρέψει να υπολογίσουμε πόσο καιρό ο παλμός εισόδου συνδέεταιInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE) stepper.setSpeed (50); // ρυθμίστε την ταχύτητα του κινητήρα στις 30 σ.α.λ. (360 PPS περίπου). stepper.step (ΒΗΜΑΤΑ * 2); // Επαναφορά θέσης (Χ βήματα αριστερόστροφα). } void loop () {Resetval = millis; για (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTLET, Επαναφορά = 0; } // Αντίστροφη χαρτογράφηση αλλιώς εάν (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Επαναφορά = 0; } // Εκτός εμβέλειας επάνω αλλού εάν (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Επαναφορά = 0; } // Εκτός εμβέλειας χαμηλότερα αλλού εάν (ThrottleInAvg Resetcounter) {stepper.step (4); // Προσπαθώ να πω στο stepper να επαναρυθμιστεί εάν το σήμα RC βρίσκεται στη ζώνη για μεγάλο χρονικό διάστημα. Δεν είμαι σίγουρος αν αυτό το μέρος του κώδικα λειτουργεί πραγματικά. }} int val = SPEED; // λάβετε την τιμή του ποτενσιόμετρου (εύρος 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // εύρος δοχείων χάρτη στην περιοχή stepper. εάν (abs (val - pos)> 2) {// εάν η διαφορά είναι μεγαλύτερη από 2 βήματα. if ((val - pos)> 0) {stepper.step (-1); // μετακινήστε ένα βήμα προς τα αριστερά. pos ++; } if ((val - pos) <0) {stepper.step (1); // μετακινήστε ένα βήμα προς τα δεξιά. pos--; }} // καθυστέρηση (10); } void calcInput () {// εάν η καρφίτσα είναι υψηλή, είναι η έναρξη μιας διακοπής εάν (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// λάβετε χρόνο χρησιμοποιώντας τα μικρόφωνα - όταν ο κώδικάς μας είναι πραγματικά απασχολημένος, αυτό θα γίνει ανακριβές, αλλά για την τρέχουσα εφαρμογή είναι // εύκολο στην κατανόηση και λειτουργεί πολύ καλά StartPeriod = micros (); } else {// εάν ο πείρος είναι χαμηλός, είναι η πτώση του άκρου του παλμού, έτσι τώρα μπορούμε να υπολογίσουμε τη διάρκεια του παλμού αφαιρώντας την // ώρα έναρξης ulStartPeriod από την τρέχουσα ώρα που επιστρέφεται από micros () if (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); Περίοδος έναρξης = 0; }}}

Ανατρέξτε σε αυτό για περισσότερες πληροφορίες σχετικά με τον προγραμματισμό ενός ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

Βήμα 3: Το υλικό

Το Υλικό
Το Υλικό
Το Υλικό
Το Υλικό
Το Υλικό
Το Υλικό

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

C1 = 100nF

R1 = 10kΩ

Ο πυκνωτής πρέπει να τοποθετηθεί όσο το δυνατόν πιο κοντά στο τσιπ για να είναι πιο αποτελεσματικός.

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

Εάν φτιάξετε τη σύνδεση πείρου κεφαλίδας και ρυθμίσετε τους πείρους ως εξής: [Ca1, Cb1, Ca2, Cb2] με Ca1 να σημαίνει Coil A, καλώδιο 1 κ.λπ. Αυτό σας επιτρέπει να αλλάξετε την κατεύθυνση περιστροφής του μετρητή αλλάζοντας το βύσμα περίπου.

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

Βήμα 4: Επίλογος

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

Καλή τύχη!

Συνιστάται: