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

Ασύρματο ρομπότ βραχίονα: 31 βήματα
Ασύρματο ρομπότ βραχίονα: 31 βήματα

Βίντεο: Ασύρματο ρομπότ βραχίονα: 31 βήματα

Βίντεο: Ασύρματο ρομπότ βραχίονα: 31 βήματα
Βίντεο: Καθαρισμός του πλενόμενου κάδου σκόνης - Ρομποτική σκούπα Roomba iSeries / eSeries 2024, Νοέμβριος
Anonim
Βραχίονας ρομπότ με ελεγχόμενο σύρμα
Βραχίονας ρομπότ με ελεγχόμενο σύρμα

Αυτό είναι ένα σεμινάριο για το πώς να φτιάξετε έναν βραχίονα ρομπότ που ελέγχεται από καλώδια. Το πλεονέκτημα της χρήσης καλωδίων είναι ότι ο βραχίονας σας είναι ελαφρύτερος και μπορείτε να έχετε όλους τους κινητήρες σας στο κάτω μέρος του βραχίονα σας, διευκολύνοντας την κατασκευή και τη συντήρηση. Εδώ είναι ένα βίντεο με το χέρι σε δράση. Σκοπεύω να προσθέσω ένα νύχι στο μέλλον, ώστε να μπορεί να μαζέψει τα πράγματα και όχι απλώς να τα σπρώξει.

Τρισδιάστατα εκτυπώσιμα:

Εδώ και Εδώ

Προμήθειες

6 Servo Motors (MG995)

Arduino Uno

Περίπου 6 μέτρα χαλύβδινο καλώδιο με πλαστική επίστρωση (0,5mm)

Κουτί 23x33x10 (μπορεί να είναι πιο στενό, σίγουρα δεν πρέπει να είναι μικρότερο)

Ξύλινη σανίδα 33x10

Παξιμάδια και μπουλόνια

Σωλήνας 14 εκ. (Αυτό απαιτείται για την καθοδήγηση των χορδών)

4 αγκύλες L

Προσαρμογέας 5 βολτ

2 τερματικά μπλοκ 7 κατευθύνσεων

Σύρματα Breadboard

Τρισδιάστατα τυπωμένα εξαρτήματα (Δεν έχει σχεδιαστεί από εμένα, συνδέσεις με στοιχεία στην περιγραφή):

3 "μπουλόνια"

2 «Στοιχείο 1»

1 "Στοιχείο 2"

2 "Στοιχείο 3"

1 συνδετήρας βάσης

Βήμα 1: Εκτυπώστε όλα τα τρισδιάστατα εξαρτήματα

Μπορεί να χρειαστείτε υποστήριξη για τις οπές και τις καμάρες των μπουλονιών, αλλά φροντίστε να μην προσθέσετε υποστήριξη στο σώμα των εξαρτημάτων σας. αυτό θα κλείσει τις μικρές οπές σύρματος και θα χρειαστεί να κάνετε νέες οπές

Βήμα 2: (Προαιρετικό) Συνδέστε μια σανίδα ξύλου στο κάτω μέρος του κουτιού σας για να την ενισχύσετε

Το κουτί μου ήταν αρκετά αδύναμο, το δικό σας μπορεί να μην είναι

Βήμα 3: Μετρήστε και κόψτε μια σανίδα ξύλου για να ταιριάζει στο κουτί

Βήμα 4: Σημειώστε τις θέσεις των κινητήρων

βεβαιωθείτε ότι κανένα από τα χέρια δεν αγγίζει το ένα το άλλο

Βήμα 5: Σημειώστε τις θέσεις των αγκύλων και του σωλήνα

Σημειώστε τις θέσεις των αγκύλων και του σωλήνα
Σημειώστε τις θέσεις των αγκύλων και του σωλήνα

Ο σωλήνας πρέπει να τοποθετηθεί περίπου ένα εκατοστό μπροστά από την οπή

Βήμα 6: Τρυπήστε μια τρύπα για τα καλώδια που βγαίνουν από το κουτί σας (USB και τροφοδοσία)

Τρυπήστε μια τρύπα για τα καλώδια που βγαίνουν από το κουτί σας (USB και τροφοδοσία)
Τρυπήστε μια τρύπα για τα καλώδια που βγαίνουν από το κουτί σας (USB και τροφοδοσία)

Βήμα 7: Τρυπήστε και είδα όλες τις σημαδεμένες τρύπες

Τρυπήστε και είδα όλες τις σημαδεμένες τρύπες
Τρυπήστε και είδα όλες τις σημαδεμένες τρύπες

Βήμα 8: Συνδέστε τους κινητήρες και το σωλήνα στη σανίδα

Βήμα 9: Συνδέστε τη σανίδα στο κουτί με τους βραχίονες L

Βήμα 10: Πάρτε τα τερματικά σας μπλοκ και συγκολλήστε τα καλώδια μαζί

Πάρτε τα τερματικά σας μπλοκ και συγκολλήστε τα καλώδια μαζί
Πάρτε τα τερματικά σας μπλοκ και συγκολλήστε τα καλώδια μαζί

Βήμα 11: Κόψτε το άκρο του καλωδίου τροφοδοσίας του προσαρμογέα και απογυμνώστε τα καλώδια

Βήμα 12: Προσδιορίστε και επισημάνετε τα καλώδια συν και μείον

Βήμα 13: Συνδέστε τα καλώδια στα μπλοκ ακροδεκτών έτσι ώστε να συνδεθούν όλα τα + σερβο καλώδια και το + καλώδιο από το καλώδιο τροφοδοσίας, το ίδιο ισχύει και για τα καλώδια

Συνδέστε τα καλώδια στα μπλοκ ακροδεκτών έτσι ώστε να συνδεθούν όλα τα καλώδια + Servo και το + καλώδιο από το καλώδιο τροφοδοσίας, το ίδιο ισχύει και για τα καλώδια
Συνδέστε τα καλώδια στα μπλοκ ακροδεκτών έτσι ώστε να συνδεθούν όλα τα καλώδια + Servo και το + καλώδιο από το καλώδιο τροφοδοσίας, το ίδιο ισχύει και για τα καλώδια

Βήμα 14: Κόψτε το κεφάλι από ένα καλώδιο Breadboard

Κόψτε το κεφάλι από ένα καλώδιο Breadboard
Κόψτε το κεφάλι από ένα καλώδιο Breadboard

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

Βήμα 15: Τρυπήστε τρεις τρύπες στο κάτω μέρος του κουτιού για τα καλώδια που βγαίνουν από το χέρι σας

Οι οπές πρέπει να ταιριάζουν με τις οπές στη βάση σύνδεσης.

Βήμα 16: Συνδέστε το σύνδεσμο βάσης στο κουτί

Συνδέστε τη βάση σύνδεσης στο κουτί
Συνδέστε τη βάση σύνδεσης στο κουτί

Βήμα 17: Χρησιμοποιήστε ένα μαχαίρι ή ένα αρχείο νυχιών για να κάνετε τις συρμάτινες αυλακώσεις πιο βαθιές

Χρησιμοποιήστε ένα μαχαίρι ή ένα αρχείο νυχιών για να κάνετε τα συρμάτινα αυλάκια πιο βαθιά
Χρησιμοποιήστε ένα μαχαίρι ή ένα αρχείο νυχιών για να κάνετε τα συρμάτινα αυλάκια πιο βαθιά

Οι αυλακώσεις σύρματος για τα στοιχεία 2 και 3 είναι πολύ ρηχές.

Βήμα 18: Κατασκευάστε τον βραχίονα

Κατασκευάστε τον βραχίονα
Κατασκευάστε τον βραχίονα

Κατασκευάστε τον βραχίονα σύμφωνα με τις οδηγίες εδώ, μπορεί να χρειαστεί να αρχειοθετήσετε τα μέρη ώστε να ταιριάζουν

Βήμα 19: Εγκατάσταση επεξεργασίας και Arduino

Επεξεργασία και Arduino

Βήμα 20: Επικόλληση των προγραμμάτων κώδικα

Ο κώδικας βρίσκεται στο κάτω μέρος αυτής της σελίδας

Βήμα 21: Συνδέστε τις καρφίτσες Servo Control στο Arduino

Συνδέστε τις καρφίτσες ελέγχου Servo στο Arduino
Συνδέστε τις καρφίτσες ελέγχου Servo στο Arduino

Συνδέσα τον πρώτο κινητήρα με τον τρίτο ψηφιακό ακροδέκτη, τον δεύτερο κινητήρα με τον τέταρτο ψηφιακό ακροδέκτη κ.ο.κ. Βεβαιωθείτε ότι ο πείρος γείωσης είναι ακόμα συνδεδεμένος στο μπλοκ ακροδεκτών.

Βήμα 22: Πατήστε το κουμπί Επαναφορά στην επεξεργασία, αυτό θα ρυθμίσει όλα τα όπλα στους 90 βαθμούς

Βήμα 23: Διορθώστε τα Servo Arms στο μοτέρ οριζόντια

Βήμα 24: Περάστε τα καλώδια στα χέρια έτσι ώστε να μην υπάρχει χαλάρωση

Βεβαιωθείτε ότι περάσατε το σύρμα από όσες περισσότερες τρύπες μπορείτε, αυτό θα το κρατήσει προσωρινά και θα αφαιρεθεί εύκολα.

Βήμα 25: Δοκιμάστε το χέρι και σφίξτε ή χαλαρώστε τα καλώδια όπως απαιτείται

Βήμα 26: Κολλήστε ζεστά τα καλώδια στα μπράτσα Servo για να το κάνετε μόνιμο

Βήμα 27: Σημειώσεις

Σημειώσεις
Σημειώσεις

Χρησιμοποίησα σύρμα κοσμήματος 0,5mm αλλά 0,4mm θα έπρεπε να είναι εντάξει. Ο αρχικός σχεδιασμός χρησιμοποίησε σύρμα PVC, αλλά αυτό έσπασε πολύ εύκολα και ήταν δύσκολο να δουλέψεις.

Αν πρόκειται να μετακινήσετε το χέρι σε αυτοκίνητο ή ποδήλατο, τυλίξτε τους αρμούς του βραχίονα σε ταινία για να βεβαιωθείτε ότι δεν θα σκάσουν. Αυτό είναι ιδιαίτερα σημαντικό για το στοιχείο 1.

Όταν ξεκίνησα αυτό το έργο αναρωτιόμουν γιατί μπορούσα να βρω μόνο ένα σεμινάριο για το πώς να φτιάξω ένα χέρι που ελέγχεται από καλώδια. Τώρα καταλαβαίνω γιατί αυτός δεν είναι ο πιο συνηθισμένος τρόπος για να φτιάξετε ένα ρομπότ χόμπι. Τα καλώδια μερικές φορές πέφτουν από τις αυλακώσεις τους και το όλο θέμα είναι κάπως ακατάστατο. Δεν ξέρω αν τα προβλήματα οφείλονται στο ότι δεν έχω μεγάλη εμπειρία ή αν η όλη ιδέα είναι προβληματική αν και είμαι βέβαιος ότι θα ήταν πιο σταθερή αν ήξερα τι έκανα.

Βήμα 28: Αντιμετώπιση προβλημάτων

Οι οπές σύρματος κλείνουν στα στοιχεία 3D εκτύπωσης:

Προσθέσατε υποστήριξη για ολόκληρο το στοιχείο αντί για τις οπές των μπουλονιών. Είτε εκτυπώστε ξανά το στοιχείο είτε ανοίξτε τις τρύπες με μια πραγματικά ζεστή βελόνα.

Η θύρα COM είναι κλειστή, δεν μπορείτε να επικοινωνήσετε με το arduino:

Το arduino σας ενδέχεται να μην δέχεται θύρες USB 3 (η δική μου όχι), μπορείτε είτε να αγοράσετε ένα καλώδιο επέκτασης USB 2 είτε να χρησιμοποιήσετε έναν υπολογιστή που διαθέτει θύρες USB 2

Ο κώδικας δεν λειτουργεί:

Ακολουθήστε αυτό το σεμινάριο και τροποποιήστε το για να δημιουργήσετε τον δικό σας κώδικα

Ένα μέρος του βραχίονα δεν κινείται:

Τα καλώδια μπορεί να έχουν μπερδευτεί, για να το ελέγξετε, αφαιρέστε τον βραχίονα σερβο από το σερβο και δοκιμάστε να τραβήξετε τα καλώδια με το χέρι. Ξεμπλέξτε τα καλώδια και αν είναι ακόμα δύσκολο να τραβήξετε τα σύρματα δοκιμάστε να χρησιμοποιήσετε κάποιο WD-40 ή ένα λιπαντικό για να διευκολύνετε την κίνηση

Βήμα 29: Σύνδεσμοι

Μη ρομποτικός βραχίονας:

Arm 3D Εκτυπώσιμα:

My Arm 3D Printable:

Arduino και Επεξεργασία:

Βήμα 30: Κωδικός

Τροποποιήθηκε από αυτόν τον κωδικό

Κωδικός Arduino:

#include // Δηλώστε τους κινητήρες Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Όλοι οι κινητήρες ρυθμίζονται σε 90 μοίρες από προεπιλογή int current1 = 90; int ρεύμα2 = 90; int ρεύμα3 = 90; int ρεύμα4 = 90; int ρεύμα5 = 90; int ρεύμα6 = 90; // Ελάχιστοι και μέγιστοι βαθμοί οι κινητήρες μπορούν να φτάσουν int mini1 = 0. int maxi1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int maxi3 = 180; int mini4 = 0; int maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; // Βαθμοί που πρέπει να προστεθούν ή να αφαιρεθούν από την τρέχουσα θέση int μοίρεςFoward = 5; // Καθυστέρηση ώστε να μην συμβούν δύο συναρτήσεις με λάθος σειρά int delayBetweenSteps = 100; void setup () {// Ορισμός ακίδων ελέγχου για κάθε κινητήρα myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Ορίστε όλους τους κινητήρες στην προεπιλεγμένη ρύθμιση myservo1.write (current1); myservo2.write (current2); myservo3.write (current3); myservo4.write (current4); myservo5.write (current5); myservo6.write (current6); // έναρξη σειριακής επικοινωνίας @9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// αν υπάρχουν διαθέσιμα δεδομένα για ανάγνωση char val = Serial.read (); // βάλτε το σε αυτόν τον χαρακτήρα // Motor Controls εάν (val == 'a' && current1 + degreeFoward mini1) {myservo1.write (current1 - degreeFoward); current1 = current1 - degreeFoward; καθυστέρηση (delayBetweenSteps)? } if (val == 'c' && current2 mini2) {myservo2.write (current2 - degreeFoward); current2 = current2 - degreeFoward; καθυστέρηση (delayBetweenSteps)? } if (val == 'e' && current3 mini3) {myservo3.write (current3 - degreeFoward); current3 = current3 - degreeFoward; καθυστέρηση (delayBetweenSteps)? } if (val == 'g' && current4 mini4) {myservo4.write (current4 - degreeFoward); current4 = current4 - degreeFoward; καθυστέρηση (delayBetweenSteps)? } if (val == 'i' && current5 mini5) {myservo5.write (current5 - gradFoward); current5 = current5 - βαθμοί προς τα κάτω; καθυστέρηση (delayBetweenSteps)? } if (val == 'k' && current6 mini6) {myservo6.write (current6 - degreeFoward); current6 = current6 - μοίρεςFoward; καθυστέρηση (delayBetweenSteps)? } // Έλεγχοι ταχύτητας εάν (val == 'w') {// Εάν πατήσετε το κουμπί ταχύτητας 1, βαθμοίFoward = 1; καθυστέρηση (delayBetweenSteps)? } if (val == 'x') {// Εάν πατηθεί το κουμπί ταχύτητας 5 βαθμοίFoward = 5; καθυστέρηση (delayBetweenSteps)? } if (val == 'y') {// Εάν πατηθεί το κουμπί ταχύτητας 10 βαθμοίFoward = 10; καθυστέρηση (delayBetweenSteps)? } if (val == 'z') {// Εάν το κουμπί ταχύτητας 20 πατηθεί σε βαθμούςFoward = 20; καθυστέρηση (delayBetweenSteps)? } if (val == 'r') {// If button 20 speeded myservo1.write (90); ρεύμα1 = 90; myservo2.write (90); ρεύμα2 = 90; myservo3.write (90); ρεύμα3 = 90; myservo4.write (90); ρεύμα4 = 90; myservo5.write (90); ρεύμα5 = 90; myservo6.write (90); ρεύμα6 = 90; καθυστέρηση (delayBetweenSteps)? }}}

Κωδικός επεξεργασίας:

επεξεργασία εισαγωγής.σειρά.*; έλεγχος εισαγωγήςP5.*; // εισαγωγή σειριακής θύρας βιβλιοθήκης ControlP5. ControlP5 cp5; // δημιουργία γραμματοσειράς PFont αντικειμένου ControlP5. void setup () {// ίδιο με το μέγεθος προγράμματος arduino (300, 700). // μέγεθος παραθύρου, (πλάτος, ύψος) printArray (Serial.list ()); // εκτυπώνει όλες τις διαθέσιμες σειριακές θύρες // Αν αντιμετωπίζετε πρόβλημα πιθανότατα προέρχεται από εδώ String portName = Serial.list () [0]; port = new Serial (this, portName, 9600); // Έχω συνδέσει το arduino με το com3, θα ήταν διαφορετικό σε linux και mac os // ας προσθέσουμε ένα κουμπί στο κενό παράθυρο cp5 = νέο ControlP5 (αυτό); font = createFont ("Arial", 13); // προσαρμοσμένες γραμματοσειρές για κουμπιά και τίτλο // Κουμπιά ελέγχου ταχύτητας cp5.addButton ("One") // "One" είναι το όνομα του κουμπιού.setPosition (50, 50) // x και y συντεταγμένες της επάνω αριστερής γωνίας του κουμπιού.setSize (55, 25) // (πλάτος, ύψος).setFont (γραμματοσειρά); cp5.addButton ("Five").setPosition (110, 50).setSize (55, 25).setFont (γραμματοσειρά); cp5.addButton ("Ten").setPosition (170, 50).setSize (55, 25).setFont (γραμματοσειρά); cp5.addButton ("Είκοσι").setPosition (230, 50).setSize (55, 25).setFont (γραμματοσειρά); cp5.addButton ("Επαναφορά").setPosition (110, 2).setSize (55, 25).setFont (γραμματοσειρά); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (γραμματοσειρά); // Κουμπιά ελέγχου κινητήρα cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (πλάτος, ύψος).setFont (γραμματοσειρά); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (πλάτος, ύψος).setFont (γραμματοσειρά); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (γραμματοσειρά); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (γραμματοσειρά); } void draw () {// ίδιο με το βρόχο σε φόντο arduino (192, 215, 249). // χρώμα φόντου παραθύρου (r, g, b) ή (0 έως 255) // Προσθέστε κείμενο που λέει ότι ο έλεγχος ταχύτητας είναι πλήρωση ελέγχου ταχύτητας (0, 10, 25). // χρώμα κειμένου (r, g, b) textFont (γραμματοσειρά); κείμενο ("Έλεγχος ταχύτητας", 50, 40). // ("κείμενο", x συντεταγμένη, y συντεταγμένη)} // σας επιτρέπει να προσθέσετε μερικές λειτουργίες στα κουμπιά μας // οπότε όταν πατάτε οποιοδήποτε κουμπί, στέλνει συγκεκριμένο χαρακτήρα στη σειριακή θύρα // Είμαι βέβαιος ότι είναι δυνατή η αποστολή συμβολοσειρών αντί για χαρακτήρες, και θα ήταν πιο λογικό αλλά δεν ξέρω πώς να το κάνω // Εντολές ελέγχου ταχύτητας void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Εντολές ελέγχου μοτέρ void Servo_1_Foward () {port.write ('a'); } void Servo_1_Back () {port.write ('b'); } void Servo_2_Foward () {port.write ('c'); } void Servo_2_Back () {port.write ('d'); } void Servo_3_Foward () {port.write ('e'); } void Servo_3_Back () {port.write ('f'); } void Servo_4_Foward () {port.write ('g'); } void Servo_4_Back () {port.write ('h'); } void Servo_5_Foward () {port.write ('i'); } void Servo_5_Back () {port.write ('j'); } void Servo_6_Foward () {port.write ('k'); } void Servo_6_Back () {port.write ('l'); } void Reset () {port.write ('r'); }

Βήμα 31: Περισσότερες εικόνες

Συνιστάται: