Σε αυτό το σεμινάριο πρόκειται να αναπτύξουμε ένα κύκλωμα χρησιμοποιώντας τον αισθητήρα FLEX, το Arduino Uno και έναν κινητήρα Servo. Αυτό το έργο είναι ένα σύστημα ελέγχου σερβο όπου το σέρβο άξονα καθορίζεται από την κάμψη ή κάμψη ή απόκλιση του αισθητήρα FLEX
Ας μιλήσουμε πρώτα για τους σερβοκινητήρες. Τα Servo Motors χρησιμοποιούνται όταν υπάρχει ανάγκη για ακριβή κίνηση ή θέση άξονα. Αυτά δεν προτείνονται για εφαρμογές υψηλής ταχύτητας. Αυτά προτείνονται για χαμηλή ταχύτητα, μέση ροπή και ακριβή εφαρμογή θέσης. Αυτοί οι κινητήρες χρησιμοποιούνται σε ρομποτικούς βραχίονες, χειριστήρια πτήσης και συστήματα ελέγχου. Οι σερβοκινητήρες χρησιμοποιούνται σε ενσωματωμένα συστήματα όπως μηχανήματα αυτόματης πώλησης κ.λπ.
Οι σερβοκινητήρες διατίθενται σε διάφορα σχήματα και μεγέθη. Ένας σερβοκινητήρας θα έχει κυρίως καλώδια, το ένα είναι για θετική τάση και το άλλο για γείωση και το τελευταίο για ρύθμιση θέσης. Το καλώδιο ΚΟΚΚΙΝΟ συνδέεται στην τροφοδοσία, το μαύρο καλώδιο συνδέεται στη γείωση και το ΚΙΤΡΙΝΟ καλώδιο συνδέεται στο σήμα.
Ένας σερβοκινητήρας είναι ένας συνδυασμός κινητήρα DC, συστήματος ελέγχου θέσης, γραναζιών. Η θέση του άξονα του κινητήρα DC ρυθμίζεται από τα ηλεκτρονικά στοιχεία ελέγχου στο σερβο, με βάση την αναλογία λειτουργίας του σήματος PWM του πείρου SIGNAL.
Με απλά λόγια, τα ηλεκτρονικά χειριστήρια ρυθμίζουν τη θέση του άξονα ελέγχοντας τον κινητήρα DC. Αυτά τα δεδομένα σχετικά με τη θέση του άξονα αποστέλλονται μέσω του πείρου SIGNAL. Τα δεδομένα θέσης στο χειριστήριο πρέπει να αποστέλλονται με τη μορφή σήματος PWM μέσω του πείρου σήματος του σερβοκινητήρα.
Η συχνότητα του σήματος PWM (Pulse Width Modulated) μπορεί να διαφέρει ανάλογα με τον τύπο του σερβοκινητήρα. Το σημαντικό πράγμα εδώ είναι το DUTY RATIO του σήματος PWM. Με βάση αυτό το DUTY RATION τα ηλεκτρονικά χειριστήρια ρυθμίζουν τον άξονα. Για να μετακινηθεί ο άξονας στο ρολόι 9o, το ΣΤΡΟΦΟΛΟ ΤΡΟΝΟ πρέπει να είναι 1 / 18. 1 milli δευτερόλεπτο του "ON time" και 17 milli δευτερόλεπτο του "OFF time" σε σήμα 18 ms.
Για να μετακινηθεί ο άξονας σε ρολόι 12o, ο χρόνος ON του σήματος πρέπει να είναι 1,5ms και ο χρόνος OFF πρέπει να είναι 16,5ms. Αυτός ο λόγος αποκωδικοποιείται από το σύστημα ελέγχου σε σερβο και προσαρμόζει τη θέση βάσει αυτού.
Αυτό το PWM εδώ δημιουργείται χρησιμοποιώντας το ARDUINO UNO. Έτσι, προς το παρόν το γνωρίζουμε, μπορούμε να ελέγξουμε τον άξονα του σερβοκινητήρα μεταβάλλοντας την αναλογία λειτουργίας του σήματος PWM που παράγεται από το Arduino Uno. Το UNO έχει μια ειδική λειτουργία που μας επιτρέπει να παρέχουμε τη θέση του SERVO χωρίς να ενοχλούμε το σήμα PWM. Ωστόσο, είναι σημαντικό να γνωρίζετε τη σχέση καθήκοντος PWM - servo position. Θα μιλήσουμε περισσότερα για αυτό στην περιγραφή.
Ας μιλήσουμε τώρα για το FLEX SENSOR. Για τη διασύνδεση ενός αισθητήρα FLEX με το ARDUINO UNO, θα χρησιμοποιήσουμε τη λειτουργία ADC 8 bit (Αναλογική σε ψηφιακή μετατροπή) για να κάνουμε τη δουλειά. Ένας αισθητήρας FLEX είναι ένας μορφοτροπέας που αλλάζει την αντίστασή του όταν αλλάζει το σχήμα του. Ένας αισθητήρας FLEX έχει μήκος 2,2 ίντσες ή μήκος δακτύλου. Εμφανίζεται στο σχήμα.
Ο αισθητήρας Flex είναι ένας μορφοτροπέας που αλλάζει την αντίστασή του όταν η γραμμική επιφάνεια κάμπτεται. Εξ ου και το όνομα flex sensor. Με απλά λόγια, η αντίσταση του ακροδέκτη του αισθητήρα αυξάνεται όταν κάμπτεται. Αυτό φαίνεται στο παρακάτω σχήμα.
Αυτή η αλλαγή στην αντίσταση δεν μπορεί να κάνει τίποτα εκτός αν μπορούμε να τις διαβάσουμε. Ο ελεγκτής στο χέρι μπορεί να διαβάσει μόνο τις πιθανότητες τάσης και τίποτα λιγότερο, γι 'αυτό θα χρησιμοποιήσουμε το κύκλωμα διαχωριστή τάσης, με αυτό μπορούμε να αντλήσουμε την αλλαγή αντίστασης καθώς αλλάζει τάση.
Το διαχωριστικό τάσης είναι ένα κύκλωμα αντίστασης και φαίνεται στο σχήμα. Σε αυτό το δίκτυο αντίστασης έχουμε μία σταθερή αντίσταση και άλλη μεταβλητή αντίσταση. Όπως φαίνεται στο σχήμα, το R1 εδώ είναι μια σταθερή αντίσταση και το R2 είναι ένας αισθητήρας FLEX που λειτουργεί ως αντίσταση.
Το μεσαίο σημείο του κλάδου μεταφέρεται στη μέτρηση. Με την αλλαγή R2, έχουμε αλλαγή στο Vout. Έτσι με αυτό έχουμε μια τάση που αλλάζει με το βάρος.
Τώρα σημαντικό που πρέπει να σημειωθεί εδώ είναι ότι η είσοδος που έχει ληφθεί από τον ελεγκτή για μετατροπή ADC είναι τόσο χαμηλή όσο 50 μAmp. Αυτό το φαινόμενο φόρτωσης του διαχωριστή τάσης με βάση την αντίσταση είναι σημαντικό καθώς το ρεύμα που αντλείται από το Vout του διαχωριστή τάσης αυξάνει το ποσοστό σφάλματος αυξάνεται, προς το παρόν δεν χρειάζεται να ανησυχούμε για το φαινόμενο φόρτωσης.
FLEX SENSOR όταν λυγίζει η αντίσταση του αλλάζει. Με αυτόν τον μορφοτροπέα συνδεδεμένο σε κύκλωμα διαχωριστή τάσης, θα έχουμε μια μεταβαλλόμενη τάση με το FLEX στον μορφοτροπέα. Αυτή η μεταβλητή τάση είναι FED σε ένα από τα κανάλια ADC, θα έχουμε μια ψηφιακή τιμή που σχετίζεται με το FLEX.
Θα αντιστοιχίσουμε αυτήν την ψηφιακή τιμή με τη θέση του σερβο, με αυτό θα έχουμε τον έλεγχο του σερβο με το flex.
Συστατικά
Υλικό: Arduino Uno , Τροφοδοσία (5v), 1000 uF πυκνωτής, 100nF πυκνωτής (3 τεμάχια), 100KΩ αντίσταση, SERVO MOTOR (SG 90), 220Ω αντίσταση, αισθητήρας FLEX.
Λογισμικό: Atmel studio 6.2 ή Aurdino κάθε βράδυ.
Διάγραμμα κυκλώματος και επεξήγηση
Το διάγραμμα κυκλώματος για έλεγχο του σερβοκινητήρα από τον αισθητήρα FLEX φαίνεται στο παρακάτω σχήμα.
Η τάση στον αισθητήρα δεν είναι εντελώς γραμμική. θα είναι θορυβώδες. Για να φιλτράρετε τον θόρυβο, οι πυκνωτές τοποθετούνται σε κάθε αντίσταση στο κύκλωμα διαχωριστή όπως φαίνεται στο σχήμα.
Εδώ πρόκειται να πάρουμε την τάση που παρέχεται από το διαχωριστικό (τάση που αντιπροσωπεύει το βάρος γραμμικά) και να την τροφοδοτήσουμε σε ένα από τα κανάλια ADC του Arduino UNO. Θα χρησιμοποιήσουμε το A0 για αυτό. Μετά την αρχικοποίηση του ADC, θα έχουμε ψηφιακή τιμή που αντιπροσωπεύει τον αισθητήρα με κλίση. Θα πάρουμε αυτήν την τιμή και θα την ταιριάξουμε με τη σερβο θέση.
Για να συμβεί αυτό πρέπει να καθορίσουμε λίγες οδηγίες στο πρόγραμμα και θα μιλήσουμε για αυτές λεπτομερώς παρακάτω.
Το ARDUINO διαθέτει έξι κανάλια ADC, όπως φαίνεται στο σχήμα. Σε αυτά μπορεί να χρησιμοποιηθεί ένα ή όλα αυτά ως είσοδοι για αναλογική τάση. Το UNO ADC έχει ανάλυση 10 bit (έτσι οι ακέραιες τιμές από (0- (2 ^ 10) 1023)). Αυτό σημαίνει ότι θα αντιστοιχίσει τις τάσεις εισόδου μεταξύ 0 και 5 volt σε ακέραιες τιμές μεταξύ 0 και 1023. Έτσι για κάθε (5/1024 = 4,9mV) ανά μονάδα.
Εδώ πρόκειται να χρησιμοποιήσουμε το A0 του UNO.
Πρέπει να γνωρίζουμε μερικά πράγματα.
|
Πρώτα απ 'όλα, τα κανάλια UNO ADC έχουν μια προεπιλεγμένη τιμή αναφοράς 5V. Αυτό σημαίνει ότι μπορούμε να δώσουμε μια μέγιστη τάση εισόδου 5V για μετατροπή ADC σε οποιοδήποτε κανάλι εισόδου. Δεδομένου ότι ορισμένοι αισθητήρες παρέχουν τάσεις από 0-2.5V, με αναφορά 5V έχουμε μικρότερη ακρίβεια, επομένως έχουμε μια οδηγία που μας επιτρέπει να αλλάξουμε αυτήν την τιμή αναφοράς. Έτσι, για να αλλάξουμε την τιμή αναφοράς που έχουμε ("analogReference ();") Προς το παρόν το αφήνουμε ως.
Ως προεπιλογή, έχουμε τη μέγιστη ανάλυση ADC πλακέτας που είναι 10 bits, αυτή η ανάλυση μπορεί να αλλάξει χρησιμοποιώντας οδηγίες ("analogReadResolution (bits);"). Αυτή η αλλαγή ανάλυσης μπορεί να είναι χρήσιμη για ορισμένες περιπτώσεις. Προς το παρόν το αφήνουμε ως.
Τώρα, εάν οι παραπάνω συνθήκες έχουν οριστεί ως προεπιλεγμένες, μπορούμε να διαβάσουμε την τιμή από το ADC του καναλιού '0' καλώντας απευθείας τη λειτουργία "analogRead (pin);", εδώ "pin" αντιπροσωπεύει pin όπου συνδέσαμε το αναλογικό σήμα, σε αυτήν την περίπτωση θα ήταν "A0".
Η τιμή από το ADC μπορεί να ληφθεί σε ακέραιο ως "int SENSORVALUE = analogRead (A0). ", Με αυτήν την οδηγία η τιμή μετά την αποθήκευση του ADC στον ακέραιο" SENSORVALUE ".
Ας μιλήσουμε τώρα για το SERVO, το UNO διαθέτει ένα χαρακτηριστικό που μας επιτρέπει να ελέγξουμε τη θέση του σερβο δίνοντας απλώς την τιμή του βαθμού. Πείτε αν θέλουμε το σερβο να είναι στα 30, μπορούμε άμεσα να αντιπροσωπεύσουμε την αξία στο πρόγραμμα. Το αρχείο κεφαλίδας SERVO φροντίζει εσωτερικά όλους τους υπολογισμούς του λόγου λειτουργίας.
#περιλαμβάνω
Σερβο σερβο; servo.attach (3); servo.write (βαθμοί); |
Η πρώτη δήλωση αντιπροσωπεύει το αρχείο κεφαλίδας για τον έλεγχο του SERVO MOTOR.
Η δεύτερη δήλωση ονομάζει το servo. το αφήνουμε ως σέρβο.
Η τρίτη δήλωση δηλώνει πού είναι συνδεδεμένος ο σερβο σήμα pin αυτό πρέπει να είναι ένας ακροδέκτης PWM. Εδώ χρησιμοποιούμε το PIN3.
Η τέταρτη δήλωση δίνει εντολές για την τοποθέτηση σερβο κινητήρα και είναι σε μοίρες. Εάν δοθεί 30, ο σερβοκινητήρας περιστρέφεται 30 μοίρες.
Τώρα το sg90 μπορεί να κινηθεί από 0-180 μοίρες, έχουμε το αποτέλεσμα ADC 0-1024
Έτσι, το ADC είναι περίπου έξι φορές η ΘΕΣΗ SERVO. Έτσι, διαιρώντας το αποτέλεσμα ADC με 6 θα πάρουμε την κατά προσέγγιση θέση SERVO στο χέρι.
Με αυτό θα έχουμε τιμή servo position που τροφοδοτείται σε servo motor, η οποία είναι ανάλογη προς την κάμψη ή την καμπή. Όταν αυτός ο ευέλικτος αισθητήρας είναι τοποθετημένος στο γάντι, μπορούμε να ελέγξουμε τη σερβο θέση με κίνηση του χεριού.