Σε αυτό το σεμινάριο θα αναπτύξουμε ένα κύκλωμα με χρήση αισθητήρα Force, Arduino Uno και σερβο κινητήρα. Θα είναι ένα σύστημα ελέγχου σερβο όπου το σέρβο άξονα καθορίζεται από το βάρος που υπάρχει στον αισθητήρα δύναμης. Πριν προχωρήσουμε περαιτέρω, ας μιλήσουμε για το σερβο και άλλα στοιχεία.
Τα Servo Motors χρησιμοποιούνται όταν υπάρχει ανάγκη για ακριβή κίνηση ή θέση άξονα. Αυτά δεν προτείνονται για εφαρμογές υψηλής ταχύτητας. Αυτά προτείνονται για χαμηλή ταχύτητα, μέση ροπή και ακριβή εφαρμογή θέσης. Αυτοί οι κινητήρες χρησιμοποιούνται σε ρομποτικούς βραχίονες, χειριστήρια πτήσης και συστήματα ελέγχου. Οι σερβοκινητήρες χρησιμοποιούνται επίσης σε ορισμένους εκτυπωτές και φαξ.
Οι σερβοκινητήρες διατίθενται σε διάφορα σχήματα και μεγέθη. Ένας σερβοκινητήρας θα έχει κυρίως καλώδια, το ένα είναι για θετική τάση και το άλλο για γείωση και το τελευταίο για ρύθμιση θέσης. Το καλώδιο ΚΟΚΚΙΝΟ συνδέεται στην τροφοδοσία, το μαύρο καλώδιο συνδέεται στη γείωση και το ΚΙΤΡΙΝΟ καλώδιο συνδέεται στο σήμα.
Ένας σερβοκινητήρας είναι ένας συνδυασμός κινητήρα DC, συστήματος ελέγχου θέσης, γραναζιών. Η θέση του άξονα του κινητήρα DC ρυθμίζεται από τα ηλεκτρονικά στοιχεία ελέγχου στο σερβο, με βάση την αναλογία λειτουργίας του σήματος PWM του πείρου SIGNAL. Με απλά λόγια, τα ηλεκτρονικά χειριστήρια ρυθμίζουν τη θέση του άξονα ελέγχοντας τον κινητήρα DC. Αυτά τα δεδομένα σχετικά με τη θέση του άξονα αποστέλλονται μέσω του πείρου SIGNAL. Τα δεδομένα θέσης στο χειριστήριο πρέπει να αποστέλλονται με τη μορφή σήματος PWM μέσω του πείρου σήματος του σερβοκινητήρα.
Η συχνότητα του σήματος PWM (Pulse Width Modulated) μπορεί να διαφέρει ανάλογα με τον τύπο του σερβοκινητήρα. Το σημαντικό πράγμα εδώ είναι το DUTY RATIO του σήματος PWM. Με βάση αυτό το DUTY RATION τα ηλεκτρονικά χειριστήρια ρυθμίζουν τον άξονα.
Όπως φαίνεται στο παρακάτω σχήμα, για να μετακινηθεί ο άξονας σε ρολόι 9ο, το ΣΤΡΟΦΟΛΟ ΕΝΕΡΓΟΠΟΙΗΣΗΣ πρέπει να είναι 1 / 18.ie. 1 εκατομμύριο δευτερόλεπτο του «χρόνου ON» και 17 χιλιοστά δευτερόλεπτο του «χρόνος OFF» σε σήμα 18ms.
Για να μετακινηθεί ο άξονας σε ρολόι 12o, ο χρόνος ON του σήματος πρέπει να είναι 1,5ms και ο χρόνος OFF πρέπει να είναι 16,5ms.
Αυτός ο λόγος αποκωδικοποιείται από το σύστημα ελέγχου σε σερβο και προσαρμόζει τη θέση βάσει αυτού.
Αυτό το PWM εδώ δημιουργείται χρησιμοποιώντας το ARDUINO UNO.
Έτσι προς το παρόν το γνωρίζουμε, μπορούμε να ελέγξουμε τον άξονα SERVO MOTOR μεταβάλλοντας την αναλογία λειτουργίας του σήματος PWM που παράγεται από την UNO.
Ας μιλήσουμε τώρα για τον αισθητήρα δύναμης ή τον αισθητήρα βάρους.
Για τη διασύνδεση ενός αισθητήρα FORCE με το ARDUINO UNO, θα χρησιμοποιήσουμε τη λειτουργία ADC 8 bit (Αναλογική σε ψηφιακή μετατροπή) στο arduno uno.
Ένας αισθητήρας FORCE είναι ένας μορφοτροπέας που αλλάζει την αντίστασή του όταν ασκείται πίεση στην επιφάνεια. Ο αισθητήρας FORCE διατίθεται σε διάφορα μεγέθη και σχήματα.
Θα χρησιμοποιήσουμε μία από τις φθηνότερες εκδόσεις επειδή δεν χρειαζόμαστε μεγάλη ακρίβεια εδώ. Το FSR400 είναι ένας από τους φθηνότερους αισθητήρες δύναμης στην αγορά. Η εικόνα του FSR400 φαίνεται στο παρακάτω σχήμα.
Τώρα είναι σημαντικό να σημειωθεί ότι το FSR 400 είναι ευαίσθητο σε όλο το μήκος, η δύναμη ή το βάρος πρέπει να συγκεντρωθεί στο λαβύρινθο στο μέσο του ματιού του αισθητήρα, όπως φαίνεται στο σχήμα.
Εάν η δύναμη ασκηθεί σε λάθος χρόνους, η συσκευή θα μπορούσε να προκαλέσει μόνιμη ζημιά.
Ένα άλλο σημαντικό πράγμα που πρέπει να γνωρίζετε ότι, ο αισθητήρας μπορεί να οδηγήσει ρεύματα υψηλής εμβέλειας. Λάβετε λοιπόν υπόψη τα ρεύματα οδήγησης κατά την εγκατάσταση. Επίσης, ο αισθητήρας έχει ένα όριο ισχύος που είναι 10Newtons. Έτσι μπορούμε να εφαρμόσουμε μόνο 1 κιλό βάρους. Εάν εφαρμοστούν βάρη υψηλότερα από 1Kg, ο αισθητήρας ενδέχεται να εμφανίσει κάποιες αποκλίσεις. Εάν αυξηθεί περισσότερο από 3 κιλά. ο αισθητήρας μπορεί να προκαλέσει μόνιμη ζημιά.
Όπως ειπώθηκε νωρίτερα, αυτός ο αισθητήρας χρησιμοποιείται για την ανίχνευση των αλλαγών στην πίεση. Έτσι, όταν το βάρος εφαρμόζεται πάνω από τον αισθητήρα FORCE, η αντίσταση αλλάζει δραστικά. Η αντίσταση του FS400 σε βάρος φαίνεται στο παρακάτω γράφημα:
Όπως φαίνεται στο παραπάνω σχήμα, η αντίσταση μεταξύ των δύο επαφών του αισθητήρα μειώνεται με το βάρος ή η αγωγιμότητα μεταξύ των δύο επαφών του αισθητήρα αυξάνεται.
Η αντίσταση ενός καθαρού αγωγού δίνεται από:
Οπου, p- Ανθεκτικότητα του αγωγού
l = Μήκος αγωγού
A = Περιοχή αγωγού.
Τώρα σκεφτείτε έναν αγωγό με αντίσταση "R", εάν εφαρμοστεί κάποια πίεση πάνω από τον αγωγό, η περιοχή στον αγωγό μειώνεται και το μήκος του αγωγού αυξάνεται ως αποτέλεσμα της πίεσης. Έτσι με τον τύπο, η αντίσταση του αγωγού θα πρέπει να αυξηθεί, καθώς η αντίσταση R είναι αντιστρόφως ανάλογη προς την περιοχή και επίσης άμεσα ανάλογη με το μήκος l.
Έτσι με αυτό για έναν αγωγό υπό πίεση ή βάρος αυξάνεται η αντίσταση του αγωγού. Αλλά αυτή η αλλαγή είναι μικρή σε σύγκριση με τη συνολική αντίσταση. Για μια σημαντική αλλαγή πολλοί αγωγοί στοιβάζονται μεταξύ τους.
Αυτό συμβαίνει στους αισθητήρες δύναμης που φαίνονται στο παραπάνω σχήμα. Όταν κοιτάζουμε προσεκτικά μπορεί κανείς να δει πολλές γραμμές μέσα στον αισθητήρα. Κάθε μία από αυτές τις γραμμές αντιπροσωπεύει έναν αγωγό. Η ευαισθησία του αισθητήρα είναι σε αριθμούς αγωγών.
Αλλά σε αυτήν την περίπτωση η αντίσταση θα μειώνεται με πίεση, επειδή το υλικό που χρησιμοποιείται εδώ δεν είναι καθαρός αγωγός. Το FSR εδώ είναι ανθεκτικές συσκευές πολυμερούς πάχους πολυμερούς (PTF). Επομένως, αυτές δεν είναι συσκευές καθαρού αγωγού. Αυτά αποτελούνται από ένα υλικό, το οποίο εμφανίζει μείωση της αντίστασης με αύξηση της δύναμης που εφαρμόζεται στην επιφάνεια του αισθητήρα.
Αυτό το υλικό παρουσιάζει χαρακτηριστικά όπως φαίνεται στο γράφημα του FSR.
Αυτή η αλλαγή στην αντίσταση δεν μπορεί να κάνει τίποτα εκτός αν μπορούμε να τις διαβάσουμε. Ο ελεγκτής στο χέρι μπορεί να διαβάσει μόνο τις πιθανότητες τάσης και τίποτα λιγότερο, γι 'αυτό θα χρησιμοποιήσουμε το κύκλωμα διαχωριστή τάσης, με αυτό μπορούμε να αντλήσουμε την αλλαγή αντίστασης καθώς αλλάζει τάση.
Το διαχωριστικό τάσης είναι ένα κύκλωμα αντίστασης και φαίνεται στο σχήμα. Σε αυτό το δίκτυο αντίστασης έχουμε μία σταθερή αντίσταση και άλλη μεταβλητή αντίσταση. Όπως φαίνεται στο σχήμα, το R1 εδώ είναι μια σταθερή αντίσταση και το R2 είναι αισθητήρας FORCE που λειτουργεί ως αντίσταση.
Το μεσαίο σημείο του κλάδου μεταφέρεται στη μέτρηση. Με την αλλαγή R2, έχουμε αλλαγή στο Vout. Έτσι με αυτό έχουμε μια τάση που αλλάζει με το βάρος.
Τώρα σημαντικό που πρέπει να σημειωθεί εδώ είναι ότι η είσοδος που έχει ληφθεί από τον ελεγκτή για μετατροπή ADC είναι τόσο χαμηλή όσο 50 μAmp. Αυτό το φαινόμενο φόρτωσης του διαχωριστή τάσης με βάση την αντίσταση είναι σημαντικό καθώς το ρεύμα που αντλείται από το Vout του διαχωριστή τάσης αυξάνει το ποσοστό σφάλματος αυξάνεται, προς το παρόν δεν χρειάζεται να ανησυχούμε για το φαινόμενο φόρτωσης.
Τώρα, όταν η δύναμη ασκείται στο FORCE SENSOR, η τάση στο άκρο διαχωριστή αλλάζει αυτόν τον πείρο καθώς συνδέεται με το κανάλι ADC της UNO, θα λάβουμε μια διαφορετική ψηφιακή τιμή από την ADC της UNO, όποτε αλλάζει η δύναμη στον αισθητήρα.
Αυτή η ψηφιακή τιμή ADC αντιστοιχεί στην αναλογία λειτουργίας του σήματος PWM, επομένως έχουμε τον έλεγχο θέσης SERVO σε σχέση με τη δύναμη που εφαρμόζεται στον αισθητήρα.
Συστατικά
Υλικό: UNO, τροφοδοτικό (5v), 1000uF πυκνωτής, 100nF πυκνωτής (3 τεμάχια), 100KΩ αντίσταση, SERVO MOTOR (SG 90), 220Ω αντίσταση, FSR400 force sensor.
Λογισμικό: Atmel studio 6.2 ή aurdino κάθε βράδυ.
Διάγραμμα κυκλώματος και εξήγηση εργασίας
Το διάγραμμα κυκλώματος για έλεγχο του σερβοκινητήρα με αισθητήρα δύναμης φαίνεται στο παρακάτω σχήμα.
Η τάση στον αισθητήρα δεν είναι εντελώς γραμμική. θα είναι θορυβώδες. Για να φιλτράρετε τον θόρυβο τοποθετούνται πυκνωτές σε κάθε αντίσταση στο κύκλωμα διαχωριστή όπως φαίνεται στο σχήμα.
Εδώ πρόκειται να πάρουμε την τάση που παρέχεται από το διαχωριστικό (τάση που αντιπροσωπεύει το γραμμικό βάρος) και να την τροφοδοτήσουμε σε ένα από τα κανάλια ADC του Arduino Uno. Μετά τη μετατροπή πρόκειται να πάρουμε αυτήν την ψηφιακή τιμή (που αντιπροσωπεύει το βάρος) και να τη συσχετίσουμε με την τιμή PWM και να παρέχουμε αυτό το σήμα PWM στον κινητήρα SERVO.
Έτσι, με το βάρος έχουμε μια τιμή PWM που αλλάζει την αναλογία λειτουργίας ανάλογα με την ψηφιακή τιμή. Όσο υψηλότερη είναι η ψηφιακή τιμή, τόσο υψηλότερος είναι ο λόγος λειτουργίας του PWM. Έτσι, με υψηλότερη αναλογία λειτουργίας σήματος PWM, ο σερβο άξονας πρέπει να φτάσει στην άκρη δεξιά ή στην αριστερή πλευρά σύμφωνα με το σχήμα που παρέχεται στην εισαγωγή.
Εάν το βάρος είναι χαμηλότερο, θα έχουμε χαμηλότερη αναλογία λειτουργίας PWM και σύμφωνα με το σχήμα στην εισαγωγή ο σερβο πρέπει να φτάσει στην άκρα δεξιά.
Με αυτό έχουμε έναν έλεγχο θέσης SERVO από ΒΑΡΟΣ ή FORCE.
Για να συμβεί αυτό πρέπει να καθορίσουμε λίγες οδηγίες στο πρόγραμμα και θα μιλήσουμε για αυτές λεπτομερώς παρακάτω.
Το ARDUINO διαθέτει έξι κανάλια ADC, όπως φαίνεται στο σχήμα. Σε αυτά μπορεί να χρησιμοποιηθεί ένα ή όλα αυτά ως είσοδοι για αναλογική τάση. Το UNO ADC έχει ανάλυση 10 bit (έτσι οι ακέραιες τιμές από (0- (2 ^ 10) 1023)). Αυτό σημαίνει ότι θα αντιστοιχίσει τις τάσεις εισόδου μεταξύ 0 και 5 volt σε ακέραιες τιμές μεταξύ 0 και 1023. Έτσι για κάθε (5/1024 = 4,9mV) ανά μονάδα.
Εδώ πρόκειται να χρησιμοποιήσουμε το A0 του UNO. Πρέπει να γνωρίζουμε μερικά πράγματα.
|
Πρώτα απ 'όλα, τα κανάλια Arduino 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 ".
Το PWM του UNO μπορεί να επιτευχθεί σε οποιαδήποτε από τις ακίδες που συμβολίζονται ως "~" στην πλακέτα PCB. Υπάρχουν έξι κανάλια PWM στο UNO. Θα χρησιμοποιήσουμε το PIN3 για το σκοπό μας.
analogWrite (3, ΑΞΙΑ); |
Από την παραπάνω συνθήκη μπορούμε να πάρουμε απευθείας το σήμα PWM στον αντίστοιχο πείρο. Η πρώτη παράμετρος σε αγκύλες είναι για την επιλογή του αριθμού pin του σήματος PWM. Η δεύτερη παράμετρος είναι για το λόγο εργασίας γραφής.
Η τιμή PWM του Arduino Uno μπορεί να αλλάξει από 0 σε 255. Με το "0" ως το χαμηλότερο στο "255" ως το υψηλότερο. Με 255 ως αναλογία λειτουργίας θα έχουμε 5V στο PIN3. Εάν ο λόγος λειτουργίας είναι 125, θα λάβουμε 2,5V στο PIN3.
Ας μιλήσουμε τώρα για τον έλεγχο του σερβοκινητήρα, το Arduino Uno διαθέτει ένα χαρακτηριστικό που μας επιτρέπει να ελέγξουμε τη θέση του σερβο δίνοντας απλώς την τιμή βαθμού. Πείτε αν θέλουμε το σερβο να είναι στα 30, μπορούμε άμεσα να αντιπροσωπεύσουμε την αξία στο πρόγραμμα. Το αρχείο κεφαλίδας SERVO φροντίζει εσωτερικά όλους τους υπολογισμούς του λόγου λειτουργίας. Μπορείτε να μάθετε περισσότερα σχετικά με τον έλεγχο του σερβοκινητήρα με το arduino εδώ.
Τώρα το sg90 μπορεί να κινηθεί από 0-180 μοίρες, έχουμε το αποτέλεσμα ADC 0-1024.
Έτσι, το ADC είναι περίπου έξι φορές η ΘΕΣΗ SERVO. Έτσι, διαιρώντας το αποτέλεσμα ADC με 6 θα πάρουμε την κατά προσέγγιση θέση SERVO στο χέρι. Ως εκ τούτου έχουμε ένα σήμα PWM του οποίου ο λόγος λειτουργίας αλλάζει γραμμικά με ΒΑΡΟΣ ή FORCE. Αυτό δίνεται στον σερβοκινητήρα, μπορούμε να ελέγξουμε τον σερβοκινητήρα με αισθητήρα δύναμης.