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

Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick: 3 Βήματα
Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick: 3 Βήματα

Βίντεο: Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick: 3 Βήματα

Βίντεο: Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick: 3 Βήματα
Βίντεο: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, Ιούλιος
Anonim
Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick
Angular Positional Control of 28BYJ-48 Stepper Motor With Arduino & Analogue Joystick

Αυτό είναι ένα σχέδιο ελέγχου για το βηματικό μοτέρ 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 σας και να τον εκτελέσετε! Δείτε το παραπάνω βίντεο για μια καλή ιδέα για το πώς λειτουργεί το έργο. Αυτό θα ήταν χρήσιμο για τα άκρα της κάμερας, τα ρομποτικά χέρια και πολλές άλλες εφαρμογές!

Εάν χρησιμοποιείτε τον κώδικα, ενημερώστε με και αν δείτε κάποιο σημείο όπου μπορεί να βελτιωθεί ο κώδικας, θα ήθελα πολύ να ακούσω τα σχόλιά σας.

Συνιστάται: