Πίνακας περιεχομένων:
Βίντεο: Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick: 3 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Αυτό είναι ένα σχέδιο ελέγχου για το βηματικό μοτέρ 28BYJ-48 που έχω αναπτύξει για να το χρησιμοποιήσω ως μέρος του τελευταίου έτους της διατριβής μου. Δεν το έχω ξαναδεί αυτό και σκέφτηκα να ανεβάσω αυτό που ανακάλυψα. Ας ελπίσουμε ότι αυτό θα βοηθήσει κάποιον άλλο εκεί έξω!
Ο κώδικας βασικά επιτρέπει σε ένα βηματικό μοτέρ να "αντιγράψει" τη γωνιακή θέση ενός αναλογικού joystick, δηλαδή αν σπρώξετε το joystick προς τα εμπρός, ο κινητήρας δείχνει προς "βορρά". ωθήστε το χειριστήριο προς τα δυτικά, ο κινητήρας περιστρέφεται προς το σημείο προς την ίδια κατεύθυνση.
Για την εφαρμογή μου, απαιτούσα ότι εάν το χειριστήριο αφήνεται, δηλαδή δεν έχει γωνιακή θέση, ο κινητήρας επιστρέφει στην κατεύθυνση "σπίτι". Η κατεύθυνση του σπιτιού είναι στραμμένη προς τα ανατολικά και ο κινητήρας (ή μισθωμένος όποιος δείκτης / συσκευή έχετε συνδέσει στον άξονα εξόδου!) Πρέπει επίσης να βλέπει προς αυτή την κατεύθυνση όταν είναι ενεργοποιημένος.
Προμήθειες
Arduino Uno ή παρόμοιο
breadboard & επιλογή καλωδίων άλματος (αρσενικό σε αρσενικό, αρσενικό σε θηλυκό)
Τροφοδοσία 5V
Αναλογική μονάδα χειριστηρίου (ιδανικά με μια στιγμιαία λειτουργία κουμπιού, αυτό διευκολύνει την ανάπαυση της θέσης "στο σπίτι"
Βηματικό μοτέρ 28BYJ-48 και βηματικό πρόγραμμα οδήγησης ULN2003
Στυλό, χαρτί και blu-tac (ή οποιαδήποτε άλλη συσκευή δείκτη για σύνδεση με τον κινητήρα!)
Βήμα 1: Βήμα 1: Ρύθμιση
Συνδέστε το βηματικό μοτέρ με το βήμα οδήγησης και συνδέστε τους πείρους ως εξής:
IN1 - καρφίτσα Arduino 8
IN2 - Καρφίτσα Arduino 9
IN3 - καρφίτσα Arduino 10
IN4 - καρφίτσα Arduino 11
Συνδέστε το τροφοδοτικό 5v στις ράγες τροφοδοσίας στο ψωμί σας και συνδέστε τις εισόδους 5V ULN2003 στις ράγες τροφοδοσίας. συνδέστε τη ράγα εδάφους στο έδαφος στο Arduino σας.
για το χειριστήριο, συνδέστε ως εξής:
Διακόπτης καρφίτσα - Arduino pin 2
Άξονας Χ - Arduino A0 (Αναλογικό σε 0)
Άξονας Υ - Arduino A1
+5V - έξοδος Arduino 5V
GND - Arduino GND
Τέλος, συνδέστε τη γείωση του ψωμιού σας με την άλλη καρφίτσα Arduino GND
Βήμα 2: Βήμα 2: Εξηγώντας τον κώδικα
Έχω συμπεριλάβει τον πλήρη κώδικα Arduino για λήψη και χρήση. Αλλά θα κάνω ό, τι μπορώ για να εξηγήσω τα σχετικά μέρη εδώ.
Η θεωρία πίσω από αυτόν τον κώδικα είναι ότι ο χώρος που καταλαμβάνεται από το χειριστήριο χωρίζεται σε ένα γράφημα, με 0, 0 στο κέντρο. Ωστόσο, οι είσοδοι του χειριστηρίου βρίσκονται στο (περίπου) 512 στο κέντρο, οπότε για να ξεπεραστεί αυτό οι δύο συναρτήσεις χρησιμοποιούνται για να "μηδενίσουν" την τιμή που διαβάζεται από τον άξονα Χ και Υ. ανάλογα με το τροφοδοτικό που χρησιμοποιείτε, μπορεί να χρειαστεί να αλλάξετε τις τιμές στις λειτουργίες ZeroX και ZeroY, έτσι ώστε το joystick να δίνει μια αξιόπιστη ένδειξη 0 όταν ξεκουράζεστε.
Όταν διαβάζονται οι τιμές Χ, Υ, μετατρέπονται πρώτα σε ακτίνια χρησιμοποιώντας τη συνάρτηση atan2 () στη βιβλιοθήκη math.h. Η εξήγηση αυτής της συνάρτησης είναι έξω από το πεδίο αυτού του διδακτέου, αλλά παρακαλώ κοιτάξτε το - είναι ένα μάλλον απλό κόλπο γεωμετρίας!
Τέλος, για να διευκολυνθεί η ζωή για εμάς που εργαζόμασταν σε μοίρες και όχι σε rad, η τιμή rad που υπολογίζεται με το atan2 () μετατρέπεται σε μοίρες.
Στο επάνω μέρος του βρόχου υπάρχει ένα μικρό απόσπασμα κώδικα που σας επιτρέπει να κάνετε κλικ στο στιγμιαίο κουμπί στο χειριστήριο για να μετακινήσετε τη θέση "σπίτι". Αυτό ήταν απίστευτα χρήσιμο κατά τη δοκιμή του κώδικα, αλλά τον άφησα, καθώς βλέπω πώς θα μπορούσε να είναι χρήσιμος σε ορισμένες περιπτώσεις.
Τώρα στον κύριο όγκο του κώδικα! ξεκινάμε διαβάζοντας το joystick X, Y συντεταγμένες Y δύο φορές χωρισμένες με καθυστέρηση 10ms και στη συνέχεια ελέγχοντας αν είναι ίδιες - διαπίστωσα ότι το joystick περιστασιακά θα έβγαζε σποραδικές ενδείξεις και αυτή η μικρή καθυστέρηση ήταν αρκετή για να σταματήσει η περιστροφή του κινητήρα βάσει αυτών Το Είναι επίσης μια αρκετά σύντομη καθυστέρηση που δεν φαίνεται να παρεμβαίνει στις σκόπιμες εισόδους.
Ο υπόλοιπος κώδικας είναι μάλλον αυτονόητος και έχω κάνει ό, τι μπορώ για να τον τεκμηριώσω. Μια σειρά δηλώσεων IF συγκρίνει την τρέχουσα γωνία χειριστηρίου με τη γωνία κινητήρα και μετακινεί τον κινητήρα σε αυτήν τη γωνία. Το 28BYJ-48 έχει 5,689 βήματα ανά βαθμό, γι 'αυτό και πολλαπλασιάζουμε την απαιτούμενη κίνηση με αυτόν τον φαινομενικά περίεργο αριθμό!
Το ένα μέρος του κώδικα που απαιτεί την μεγαλύτερη εξήγηση είναι αυτό που έχω ονομάσει "περιτυλιγμένη υπόθεση". Στο ζυγό που το joystick & μοτέρ ήταν π.χ. +175 °, και το χειριστήριο στη συνέχεια μετακινήθηκε στους -175 ° (κίνηση μόνο 10 ° στο χειριστήριο, από βορειοδυτικά προς νότια δυτικά), ο κινητήρας θα κινήθηκε κατά λάθος κατεύθυνση κατά 350 °! για να εξηγηθεί αυτό γράφτηκε η ειδική περίπτωση.
Η θήκη περιτυλίγματος ξεκινά με τον έλεγχο ότι ο κινητήρας και το χειριστήριο έχουν αντίθετα σημάδια, δηλαδή ο κινητήρας είναι θετικός και το χειριστήριο αρνητικό ή αντίστροφα. Ελέγχει επίσης ότι το άθροισμα των απόλυτων (δηλαδή θετικών τιμών) του χειριστηρίου και του κινητήρα είναι πάνω από 180 °.
Εάν και οι δύο αυτές δηλώσεις είναι αληθείς, η συνάρτηση ελέγχει αν ο κινητήρας πρέπει να κινηθεί δεξιόστροφα (η τιμή του κινητήρα είναι αρνητική) ή αριστερόστροφα (εάν η τιμή του κινητήρα είναι θετική).
Οι απόλυτες τιμές της γωνίας κινητήρα και της γωνίας χειριστηρίου αθροίζονται και αφαιρούνται από 360 ° για να καθοριστεί η απόσταση που πρέπει να κινηθεί. Τέλος, η γωνία του κινητήρα (η οποία τώρα αντανακλά τη γωνία του χειριστηρίου) ενημερώνεται ως τέτοια.
Βήμα 3: ΤΕΛΕΙΩΣΕ
Έτσι, το μόνο που μένει να κάνετε είναι να ανεβάσετε τον κώδικα στο Arduino σας και να τον εκτελέσετε! Δείτε το παραπάνω βίντεο για μια καλή ιδέα για το πώς λειτουργεί το έργο. Αυτό θα ήταν χρήσιμο για τα άκρα της κάμερας, τα ρομποτικά χέρια και πολλές άλλες εφαρμογές!
Εάν χρησιμοποιείτε τον κώδικα, ενημερώστε με και αν δείτε κάποιο σημείο όπου μπορεί να βελτιωθεί ο κώδικας, θα ήθελα πολύ να ακούσω τα σχόλιά σας.
Συνιστάται:
28BYJ-48 5V Stepper Motor και A4988 Πρόγραμμα οδήγησης: 4 βήματα
28BYJ-48 5V Stepper Motor και A4988 Driver: Θέλατε ποτέ να πιέσετε ένα ρομπότ να γυρίζει με ακριβή γωνία, χρησιμοποιώντας μόνο μερικές εξόδους του Arduino ή του micro: bit σας; Όλα αυτά για φθηνά; Αυτό είναι το διδακτικό για εσάς! Σε αυτό το διδακτικό θα δούμε πώς να οδηγείτε ένα πολύ φτηνό stepper μοτέρ χρησιμοποιώντας μόνο
Stepper Motor ελεγχόμενος Stepper Motor χωρίς μικροελεγκτή !: 6 βήματα
Stepper Motor Controlled Stepper Motor Without Microcontroller !: Σε αυτό το γρήγορο Instructable, θα φτιάξουμε ένα απλό stepper μοτέρ χειριστηρίου χρησιμοποιώντας βηματικό μοτέρ. Αυτό το έργο δεν απαιτεί περίπλοκα κυκλώματα ή μικροελεγκτή. Οπότε, χωρίς άλλη παραμύθι, ας ξεκινήσουμε
Stepper Motor ελεγχόμενη Stepper Motor χωρίς μικροελεγκτή (V2): 9 βήματα (με εικόνες)
Stepper Motor Controlled Stepper Motor Without Microcontroller (V2): Σε μία από τις προηγούμενες οδηγίες μου, σας έδειξα πώς να ελέγχετε ένα βηματικό μοτέρ χρησιμοποιώντας ένα βηματικό μοτέρ χωρίς μικροελεγκτή. Ταν ένα γρήγορο και διασκεδαστικό έργο αλλά ήρθε με δύο προβλήματα που θα λυθούν σε αυτό το Instructable. Έτσι, εξυπνάδα
Μοντέλο ατμομηχανής ελεγχόμενης από Stepper Motor - Stepper Motor As a Rotary Encoder: 11 βήματα (με εικόνες)
Μοντέλο ατμομηχανής ελεγχόμενου από Stepper Motor | Stepper Motor As a Rotary Encoder: Σε ένα από τα προηγούμενα Instructables, μάθαμε πώς να χρησιμοποιούμε ένα βηματικό μοτέρ ως περιστροφικό κωδικοποιητή. Σε αυτό το έργο, θα χρησιμοποιήσουμε τώρα αυτόν τον περιστροφικό κωδικοποιητή βηματικού κινητήρα για τον έλεγχο μιας ατμομηχανής μοντέλου χρησιμοποιώντας έναν μικροελεγκτή Arduino. Έτσι, χωρίς fu
Stepper Motor ελεγχόμενη Stepper Motor - Stepper Motor As a Rotary Encoder: 11 βήματα (με εικόνες)
Stepper Motor ελεγχόμενη Stepper Motor | Stepper Motor As a Rotary Encoder: Έχετε μερικά stepper motors ξαπλωμένα και θέλετε να κάνετε κάτι; Σε αυτό το Instructable, ας χρησιμοποιήσουμε έναν βηματικό κινητήρα ως περιστροφικό κωδικοποιητή για να ελέγξουμε τη θέση ενός άλλου βηματικού κινητήρα χρησιμοποιώντας έναν μικροελεγκτή Arduino. Οπότε, χωρίς άλλη παρατήρηση, ας