- MPU6050 Γυροσκοπικός αισθητήρας και επιταχυνσιόμετρο
- Αισθητήρας Flex
- Προετοιμασία του 3D τυπωμένου ρομποτικού ARM:
- Απαιτούμενα στοιχεία:
- Διάγραμμα κυκλώματος:
- Συναρμολόγηση MPU6050 & Flex Sensor σε γάντια
- Προγραμματισμός του Arduino Nano για Robotic Arm
- Εργασία ελεγχόμενου Gesture Robotic Arm χρησιμοποιώντας Arduino
Τα Robotic Arms είναι μία από τις συναρπαστικές δημιουργικές μηχανικές και είναι πάντα συναρπαστικό να βλέπεις αυτά τα πράγματα να γέρνουν και να μετακινούνται για να γίνονται περίπλοκα πράγματα όπως θα έκανε ένας ανθρώπινος βραχίονας. Αυτοί οι ρομποτικοί βραχίονες βρίσκονται συνήθως σε βιομηχανίες της γραμμής συναρμολόγησης που εκτελούν έντονες μηχανικές εργασίες όπως συγκόλληση, διάτρηση, βαφή κ.λπ., πρόσφατα προηγμένοι ρομποτικοί βραχίονες με υψηλή ακρίβεια αναπτύσσονται επίσης για την εκτέλεση πολύπλοκων χειρουργικών επεμβάσεων. Προηγουμένως, έχουμε εκτυπώσει τρισδιάστατο ένα ρομποτικό βραχίονα και φτιάξαμε ένα ρομποτικό βραχίονα Pick and Place DIY χρησιμοποιώντας τον μικροελεγκτή ARM7 Θα χρησιμοποιήσουμε ξανά το ίδιο τρισδιάστατο τυπωμένο ρομποτικό βραχίονα για να φτιάξουμε ένα ρομποτικό ARM ελεγχόμενο με χειρονομία με το Arduino Nano, το γυροσκόπιο MPU6050 και τον αισθητήρα flex.
Αυτή η τρισδιάστατη τυπωμένη ρομποτική θέση βραχίονα ελέγχεται μέσω ενός γαντιού χειρός που είναι συνδεδεμένο με ένα γυροσκόπιο MPU6050 και έναν αισθητήρα flex. Ο αισθητήρας Flex χρησιμοποιείται για τον έλεγχο του σερβο μανδάλου του Robotic Arm και το MPU6050 χρησιμοποιείται για την κίνηση του ρομποτικού στον άξονα Χ και Υ. Εάν δεν διαθέτετε εκτυπωτή, μπορείτε επίσης να χτίσετε το χέρι σας με απλό χαρτόνι όπως δημιουργήσαμε για το Arduino Robotic Arm Project. Για έμπνευση, μπορείτε επίσης να ανατρέξετε στο Record and Play Robotic Arm που δημιουργήσαμε νωρίτερα χρησιμοποιώντας το Arduino.
Πριν πάμε στη λεπτομέρεια, πρώτα, ας μάθουμε για τον αισθητήρα MPU6050 και τον αισθητήρα flex.
MPU6050 Γυροσκοπικός αισθητήρας και επιταχυνσιόμετρο
Το MPU6050 βασίζεται σε τεχνολογία Micro-Mechanical Systems (MEMS). Αυτός ο αισθητήρας διαθέτει επιταχυνσιόμετρο 3 αξόνων, γυροσκόπιο 3 αξόνων και ενσωματωμένο αισθητήρα θερμοκρασίας. Μπορεί να χρησιμοποιηθεί για τη μέτρηση παραμέτρων όπως Επιτάχυνση, Ταχύτητα, Προσανατολισμός, Μετατόπιση κ.λπ. Έχουμε προηγουμένως διασυνδέσει το MPU6050 με Arduino και Raspberry pi και έχουμε επίσης κατασκευάσει μερικά έργα που το χρησιμοποιούν όπως: Self Balancing robot, Arduino Digital Protractor και Arduino Inclinometer.
Χαρακτηριστικά στον αισθητήρα MPU6050:
- Επικοινωνία: Πρωτόκολλο I2C με ρυθμιζόμενη διεύθυνση I2C
- Τροφοδοσία εισόδου: 3-5V
- Το ενσωματωμένο 16-bit ADC παρέχει υψηλή ακρίβεια
- Το ενσωματωμένο DMP παρέχει υψηλή υπολογιστική ισχύ
- Μπορεί να χρησιμοποιηθεί για διασύνδεση με άλλες συσκευές I2C, όπως μαγνητόμετρο
- Ενσωματωμένος αισθητήρας θερμοκρασίας
Λεπτομέρειες Pin-Out του MPU6050:
Καρφίτσα | Χρήση |
Vcc | Παρέχει ισχύ για τη μονάδα, μπορεί να είναι + 3V έως + 5V. Συνήθως χρησιμοποιείται το + 5V |
Εδαφος | Συνδέθηκε στο έδαφος του συστήματος |
Σειριακό ρολόι (SCL) | Χρησιμοποιείται για την παροχή παλμού ρολογιού για την επικοινωνία I2C |
Σειριακά δεδομένα (SDA) | Χρησιμοποιείται για τη μεταφορά δεδομένων μέσω επικοινωνίας I2C |
Βοηθητικά σειριακά δεδομένα (XDA) | Μπορεί να χρησιμοποιηθεί για διασύνδεση άλλων μονάδων I2C με MPU6050 |
Βοηθητικό σειριακό ρολόι (XCL) | Μπορεί να χρησιμοποιηθεί για διασύνδεση άλλων μονάδων I2C με MPU6050 |
AD0 | Εάν χρησιμοποιούνται περισσότερα από ένα MPU6050 ένα μόνο MCU, τότε αυτός ο πείρος μπορεί να χρησιμοποιηθεί για να αλλάξει τη διεύθυνση |
Διακοπή (INT) | Καρφίτσα διακοπής για να δείξει ότι τα δεδομένα είναι διαθέσιμα για ανάγνωση MCU |
Αισθητήρας Flex
Οι αισθητήρες Flex δεν είναι παρά μια μεταβλητή αντίσταση. Η αντίσταση του εύκαμπτου αισθητήρα αλλάζει όταν ο αισθητήρας κάμπτεται. Αυτά είναι συνήθως διαθέσιμα σε δύο μεγέθη 2,2 ίντσες και 4,5 ίντσες.
Γιατί χρησιμοποιούμε ευέλικτους αισθητήρες στο έργο μας;
Σε αυτό το ελεγχόμενο με χειρονομία ρομποτικό βραχίονα, ένας αισθητήρας flex χρησιμοποιείται για τον έλεγχο της λαβής του ρομποτικού βραχίονα. Όταν ο εύκαμπτος αισθητήρας στο γάντι χειρός είναι λυγισμένος, ο σερβοκινητήρας που είναι προσαρτημένος στη λαβή περιστρέφεται και η λαβή ανοίγει.
Οι αισθητήρες Flex μπορούν να είναι χρήσιμοι σε πολλές εφαρμογές και έχουμε δημιουργήσει λίγα έργα χρησιμοποιώντας τον αισθητήρα Flex όπως έναν ελεγκτή παιχνιδιών, μια γεννήτρια τόνων κ.λπ.
Προετοιμασία του 3D τυπωμένου ρομποτικού ARM:
Το τρισδιάστατο τυπωμένο ρομποτικό βραχίονα που χρησιμοποιήθηκε σε αυτό το σεμινάριο δημιουργήθηκε ακολουθώντας το σχέδιο που δόθηκε από το EEZYbotARM το οποίο είναι διαθέσιμο στο Thingiverse. Η πλήρης διαδικασία για την κατασκευή του τρισδιάστατου ρομποτικού βραχίονα και η λεπτομέρεια συναρμολόγησης με βίντεο υπάρχει στον σύνδεσμο Thingiverse, ο οποίος κοινοποιείται παραπάνω.
Πάνω είναι η εικόνα του τρισδιάστατου τυπωμένου ρομποτικού βραχίονα μετά τη συναρμολόγηση με 4 Servo Motors.
Απαιτούμενα στοιχεία:
- Arduino Nano
- Αισθητήρας Flex
- Αντίσταση 10k
- MPU6050
- Γάντια
- Σύνδεση καλωδίων
- Ψωμί
Διάγραμμα κυκλώματος:
Η ακόλουθη εικόνα δείχνει τις συνδέσεις κυκλώματος για ρομποτικό βραχίονα ελεγχόμενο με κίνηση βάσει Arduino .
Σύνδεση κυκλώματος μεταξύ MPU6050 & Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
Α4 |
SCL |
Α5 |
Σύνδεση κυκλώματος μεταξύ Servo Motors & Arduino Nano:
Arduino Nano |
ΒΟΗΘΗΤΙΚΟ ΜΟΤΕΡ |
Τροφοδοτικό |
Δ2 |
Servo 1 Πορτοκαλί (Pin PWM) |
- |
Δ3 |
Σερβο 2 Πορτοκαλί (Καρφίτσα PWM) |
- |
Δ4 |
Σερβο 3 Πορτοκαλί (Καρφίτσα PWM) |
- |
Δ5 |
Σέρβο 4 Πορτοκαλί (Καρφίτσα PWM) |
- |
GND |
Σερβο 1,2,3,4 Καφέ (GND Pin) |
GND |
- |
Σέρβο 1,2,3,4 Κόκκινο (+ 5V Pin) |
+ 5V |
Ένας αισθητήρας flex περιέχει δύο ακίδες. Δεν περιέχει πόλους πόλους. Έτσι, ο ακροδέκτης P1 συνδέεται με τον αναλογικό ακροδέκτη A0 του Arduino Nano με μια αντίσταση pull-up 10k και η ακίδα δύο P2 είναι γειωμένη στο Arduino.
Συναρμολόγηση MPU6050 & Flex Sensor σε γάντια
Έχουμε τοποθετήσει τον αισθητήρα MPU6050 και Flex σε ένα γάντι χειρός. Εδώ χρησιμοποιείται ενσύρματη σύνδεση για τη σύνδεση του γαντιού και του ρομποτικού βραχίονα, αλλά μπορεί να γίνει ασύρματο χρησιμοποιώντας μια σύνδεση RF ή μια σύνδεση Bluetooth.
Μετά από κάθε σύνδεση, η τελική ρύθμιση για το Robotic Arm που ελέγχεται με χειρονομία μοιάζει με την παρακάτω εικόνα:
Προγραμματισμός του Arduino Nano για Robotic Arm
Ως συνήθως, παρέχεται πλήρης κωδικός μαζί με ένα βίντεο εργασίας στο τέλος αυτού του σεμιναρίου. Εδώ εξηγούνται μερικές σημαντικές γραμμές κώδικα.
1. Πρώτα, συμπεριλάβετε τα απαραίτητα αρχεία βιβλιοθήκης. Η βιβλιοθήκη Wire.h χρησιμοποιείται για επικοινωνία I2C μεταξύ Arduino Nano & MPU6050 και servo.h για έλεγχο σερβο κινητήρα.
#περιλαμβάνω
2. Στη συνέχεια, δηλώνονται τα αντικείμενα για το σερβο κλάσης. Καθώς χρησιμοποιούμε τέσσερις σερβοκινητήρες, δημιουργούνται τέσσερα αντικείμενα όπως servo_1, servo_2, servo_3, servo_4.
Σερβο σερβο_1; Σέρβο σέρβο_2; Σερβο σερβο_3; Σερβο σερβο_4;
3. Στη συνέχεια, δηλώνεται η διεύθυνση I2C του MPU6050 και οι μεταβλητές που θα χρησιμοποιηθούν.
const int MPU_addr = 0x68; // MPU6050 I2C Διεύθυνση int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; διπλό x; διπλό y; διπλή z?
4. Στη συνέχεια, στην κενή ρύθμιση , ορίζεται ρυθμός baud 9600 για σειριακή επικοινωνία.
Serial.begin (9600);
Και η επικοινωνία I2C μεταξύ του Arduino Nano & MPU6050 έχει δημιουργηθεί:
Wire.begin (); // Initilize I2C Communication Wire.beginTransmission (MPU_addr); // Ξεκινήστε την επικοινωνία με το MPU6050 Wire.write (0x6B); // Γράφει για εγγραφή 6B Wire.write (0); // Γράφει 0 σε 6B Εγγραφή για επαναφορά του Wire.endTransmission (true); // Τερματίζει τη μετάδοση I2C
Επίσης, ορίζονται τέσσερις ακίδες PWM για συνδέσεις σερβοκινητήρα.
servo_1. Attach (2); // Forward / Reverse_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Left / Right_Motor
5. Στη συνέχεια, στη λειτουργία κενού βρόχου , δημιουργήστε ξανά σύνδεση I2C μεταξύ του MPU6050 και του Arduino Nano και, στη συνέχεια, ξεκινήστε να διαβάζετε τα δεδομένα X, Y, Z-Axis από το μητρώο του MPU6050 και αποθηκεύστε τα σε αντίστοιχες μεταβλητές.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Ξεκινήστε με το regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Διαβάστε 14 Μητρώα axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Μετά από αυτό, αντιστοιχίστε την ελάχιστη και τη μέγιστη τιμή των δεδομένων άξονα από τον αισθητήρα MPU6050 στην περιοχή από -90 έως 90.
int xAng = χάρτης (axis_X, minVal, maxVal, -90,90); int yAng = χάρτης (axis_Y, minVal, maxVal, -90,90); int zAng = χάρτης (axis_Z, minVal, maxVal, -90,90);
Στη συνέχεια, χρησιμοποιήστε τον ακόλουθο τύπο για να υπολογίσετε τις τιμές x, y, z σε όρους 0 έως 360.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
Στη συνέχεια, διαβάστε τα αναλογικά δεδομένα εξόδου εύκαμπτου αισθητήρα στον ακροδέκτη A0 του Arduino Nano και σύμφωνα με την ψηφιακή τιμή του αισθητήρα flex ρυθμίστε τη γωνία σερβο της λαβής. Έτσι, εάν τα δεδομένα του αισθητήρα flex είναι μεγαλύτερα από 750, η γωνία σερβοκινητήρα της λαβής είναι 0 μοίρας και αν είναι μικρότερη από 750 είναι 180 μοίρες.
int gripper; int flex_sensorip = analogRead (A0); αν (flex_sensorip> 750) { gripper = 0; } αλλιώς { gripper = 180; } servo_3.write (gripper);
Στη συνέχεια, η κίνηση του MPU6050 στον άξονα Χ από 0 έως 60 χαρτογραφείται σε όρους 0 έως 90 μοίρες για την κίνηση εμπρός / αντίστροφη κίνηση του ρομποτικού βραχίονα του σερβο κινητήρα.
εάν (x> = 0 && x <= 60) { int mov1 = χάρτης (x, 0,60,0,90); Serial.print ("Κίνηση σε F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Και η κίνηση του MPU6050 στον άξονα Χ από 250 έως 360 χαρτογραφείται σε όρους 0 έως 90 μοίρες για το ρομποτικό βραχίονα κίνησης UP / DOWN του σερβοκινητήρα.
αλλιώς εάν (x> = 300 && x <= 360) { int mov2 = χάρτης (x, 360,250,0,90); Serial.print ("Κίνηση προς τα πάνω / κάτω ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Η κίνηση του MPU6050 στον άξονα Υ από 0 έως 60 αντιστοιχεί σε 90 έως 180 μοίρες για την αριστερή κίνηση του ρομποτικού βραχίονα του σερβο κινητήρα
αν (y> = 0 && y <= 60) { int mov3 = χάρτης (y, 0,60,90,180); Serial.print ("Κίνηση στα αριστερά ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Η κίνηση του MPU6050 στον άξονα Υ από 300 έως 360 χαρτογραφείται σε όρους 0 έως 90 μοίρες για τη δεξιά κίνηση του σερβο κινητήρα του ρομποτικού βραχίονα.
αλλιώς εάν (y> = 300 && y <= 360) { int mov3 = χάρτης (y, 360,300,90,0); Serial.print ("Κίνηση προς τα δεξιά ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Εργασία ελεγχόμενου Gesture Robotic Arm χρησιμοποιώντας Arduino
Τέλος, ανεβάστε τον κωδικό στο Arduino Nano και φορέστε το γάντι χειρός με τον αισθητήρα MPU6050 & Flex.
1. Τώρα μετακινήστε το χέρι προς τα κάτω για να μετακινήσετε το ρομποτικό βραχίονα προς τα εμπρός και προς τα πάνω για να μετακινήσετε το ρομποτικό βραχίονα προς τα πάνω.
2. Στη συνέχεια, γείρετε το χέρι αριστερά ή δεξιά για να περιστρέψετε το ρομποτικό χέρι αριστερά ή δεξιά.
3. Λυγίστε το εύκαμπτο καλώδιο που είναι συνδεδεμένο με το δάχτυλο του γαντιού του χεριού για να ανοίξετε τη λαβή και στη συνέχεια αφήστε το για να το κλείσετε.
Η πλήρης εργασία παρουσιάζεται στο παρακάτω βίντεο.