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

Απλός και έξυπνος ρομποτικός βραχίονας χρησιμοποιώντας Arduino !!!: 5 βήματα (με εικόνες)
Απλός και έξυπνος ρομποτικός βραχίονας χρησιμοποιώντας Arduino !!!: 5 βήματα (με εικόνες)

Βίντεο: Απλός και έξυπνος ρομποτικός βραχίονας χρησιμοποιώντας Arduino !!!: 5 βήματα (με εικόνες)

Βίντεο: Απλός και έξυπνος ρομποτικός βραχίονας χρησιμοποιώντας Arduino !!!: 5 βήματα (με εικόνες)
Βίντεο: Lesson 18: Using Servo Motor with Arduino | SunFounder Robojax 2024, Ιούνιος
Anonim
Image
Image
Πράγματα που θα χρειαστείτε
Πράγματα που θα χρειαστείτε

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

Ας ξεκινήσουμε λοιπόν….

Βήμα 1: Πράγματα που θα χρειαστείτε:-

Πράγματα που θα χρειαστείτε
Πράγματα που θα χρειαστείτε
Πράγματα που θα χρειαστείτε
Πράγματα που θα χρειαστείτε

Ακολουθεί μια λίστα με τα πράγματα που θα χρειαστείτε:-

1. Servo motors x 5 Link for US:- https://amzn.to/2OxbSH7Link for Europe:-

2. Ποτενσιόμετρα x 5 (έχω χρησιμοποιήσει 100k.) Σύνδεσμος για ΗΠΑ:- https://amzn.to/2ROjhDMLink for Europe:-

3. Arduino UNO. (Μπορείτε να χρησιμοποιήσετε και το Arduino Nano) Σύνδεσμος για ΗΠΑ:- https://amzn.to/2DBbENWLink for Europe:-

4. Breadboard. (Προτείνω αυτό το κιτ) Σύνδεσμος για ΗΠΑ:- https://amzn.to/2Dy86w4Σύνδεσμος για την Ευρώπη:-

5. Μπαταρία. (προαιρετικά, χρησιμοποιώ προσαρμογέα 5v)

6. Χαρτόνι/Ξύλο/Ηλιοροφή/ακρυλικό ό, τι είναι διαθέσιμο ή εύκολο να βρεθεί.

Και θα χρειαστείτε επίσης εγκατεστημένο το Arduino IDE.

Βήμα 2: Κάνοντας το χέρι:-

Κάνοντας το χέρι
Κάνοντας το χέρι
Κάνοντας το χέρι
Κάνοντας το χέρι

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

Μόλις χρησιμοποίησα ταινία διπλής όψης για να κολλήσω τα servos στο Popsicle stick και να τα στερεώσω χρησιμοποιώντας βίδες.

Για τον κύριο βραχίονα κόλλησα ποτενσιόμετρα σε ξυλάκια και έκανα βραχίονα.

Η αναφορά στις εικόνες θα σας δώσει μια καλύτερη ιδέα.

Έχω τοποθετήσει τα πάντα σε έναν πίνακα καμβά μεγέθους Α4 που χρησιμοποιείται ως βάση.

Βήμα 3: Δημιουργία συνδέσεων:-

Δημιουργία συνδέσεων
Δημιουργία συνδέσεων
Δημιουργία συνδέσεων
Δημιουργία συνδέσεων
Δημιουργία συνδέσεων
Δημιουργία συνδέσεων

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

  • Συνδέστε πρώτα όλα τα σερβίς παράλληλα με το τροφοδοτικό (Το κόκκινο καλώδιο στο +ve και το μαύρο ή καφέ καλώδιο στο Gnd)
  • Στη συνέχεια, συνδέστε τα καλώδια σήματος, δηλαδή κίτρινο ή πορτοκαλί σύρμα, με τον πείρο PWM του arduino.
  • Τώρα συνδέστε τα ποτενσιόμετρα σε +5v και Gnd του arduino παράλληλα.
  • Συνδέστε το μεσαίο τερματικό στο Analog pin του ardunio.

Εδώ χρησιμοποιούνται ψηφιακοί ακροδέκτες 3, 5, 6, 9 και 10 για τον έλεγχο των servos

Οι αναλογικοί πείροι A0 έως A4 χρησιμοποιούνται για είσοδο από ποτενσιόμετρα.

Το σερβο που συνδέεται με τον πείρο 3 θα ελέγχεται με ποτενσιόμετρο συνδεδεμένο στο Α0

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

Σημείωση:- Παρόλο που τα Servos δεν τροφοδοτούνται από arduino, Βεβαιωθείτε ότι έχετε συνδέσει το Gnd των σερβο σε arduino, αλλιώς ο βραχίονας δεν λειτουργεί.

Βήμα 4: Κωδικοποίηση:-

Κωδικοποίηση
Κωδικοποίηση

Η λογική αυτού του κώδικα είναι αρκετά απλή, οι τιμές των ποτενσιόμετρων αποθηκεύονται σε έναν πίνακα και οι εγγραφές διασχίζονται στη συνέχεια χρησιμοποιώντας έναν βρόχο for και τα servos κάνουν τα βήματα σύμφωνα με τις τιμές. Μπορείτε να δείτε αυτό το σεμινάριο που χρησιμοποίησα για αναφορά "Arduino Potentiometer Servo Control & Memory"

Κωδικός:- (Επισυνάπτεται αρχείο παρακάτω).

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

#περιλαμβάνω

// Servo Objects Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Αντικείμενα ποτενσιόμετρου int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Μεταβλητή για αποθήκευση Servo Position int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Μεταβλητή για αποθήκευση Τιμές προηγούμενης θέσης int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Μεταβλητή για αποθήκευση τιμών τρέχουσας θέσης int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Αποθηκεύει τη γωνία int Servo_Number. // Αποθηκεύει αριθ. Servo int Storage [600]. // Πίνακας για αποθήκευση δεδομένων (Η αύξηση του μεγέθους του πίνακα θα καταναλώσει περισσότερη μνήμη) int Index = 0; // Ο δείκτης συστοιχίας ξεκινά από 0η θέση δεδομένα δεδομένων = 0; // μεταβλητή για αποθήκευση δεδομένων από σειριακή είσοδο.

Τώρα θα γράψουμε μια συνάρτηση εγκατάστασης, όπου ορίζουμε τις ακίδες και τις συναρτήσεις τους. Αυτή είναι η κύρια λειτουργία που εκτελείται πρώτα

void setup ()

{Serial.begin (9600); // Για σειριακή επικοινωνία μεταξύ arduino και IDE. // Τα σερβο αντικείμενα είναι προσαρτημένα σε ακίδες PWM. Servo_0.attach (3); Servo_1.attach (5); Servo_2.attach (6); Servo_3.attach (9); Servo_4.attach (10); // Τα Servos έχουν οριστεί σε 100 θέση κατά την αρχικοποίηση. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Πατήστε 'R' για εγγραφή και 'P' για αναπαραγωγή"); }

Τώρα πρέπει να διαβάσουμε τις τιμές των ποτενσιόμετρων χρησιμοποιώντας ακίδες Analog Input και να τις χαρτογραφήσουμε για τον έλεγχο των servos. Για αυτό θα ορίσουμε μια συνάρτηση και θα την ονομάσουμε Map_Pot ();, μπορείτε να το ονομάσετε ό, τι θέλετε είναι μια συνάρτηση που ορίζεται από το χρήστη

άκυρο Map_Pot ()

{ / * Τα servos περιστρέφονται σε 180 μοίρες, αλλά η χρήση τους στα όρια δεν είναι καλή ιδέα, καθώς κάνει τα servos να βουίζουν συνεχώς, κάτι που είναι ενοχλητικό, οπότε περιορίζουμε το σερβο να κινείται μεταξύ: 1-179 * / Pot_0 = analogRead (A0) ? // Διαβάστε την είσοδο από το δοχείο και αποθηκεύστε την στο Variable Pot_0. Servo_0_Pos = χάρτης (Pot_0, 0, 1023, 1, 179); // Χάρτης servos σύμφωνα με την τιμή μεταξύ 0 και 1023 Servo_0.write (Servo_0_Pos); // Μετακινήστε το σερβο σε αυτήν τη θέση. Pot_1 = analogRead (A1); Servo_1_Pos = χάρτης (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = χάρτης (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = χάρτης (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = χάρτης (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Τώρα θα γράψουμε τη συνάρτηση βρόχου:

κενός βρόχος ()

{Map_Pot (); // Λειτουργία κλήσης για ανάγνωση τιμών δοχείου ενώ (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Εγγραφή κινήσεων …"); if (data == 'P') Serial.println ("Αναπαραγωγή εγγραφών κινήσεων …"); } if (data == 'R') // Εάν έχει εισαχθεί 'R', ξεκινήστε την εγγραφή. {// Αποθηκεύστε τις τιμές σε μια μεταβλητή Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Η λειτουργία χάρτη ανακαλείται για σύγκριση εάν (abs (Prev_0_Pos == Servo_0_Pos)) // η απόλυτη τιμή λαμβάνεται συγκρίνοντας το {Servo_0.write (Servo_0_Pos); // Εάν οι τιμές ταιριάζουν με το σερβο, επανατοποθετείται εάν (Current_0_Pos! = Servo_0_Pos) // Εάν οι τιμές δεν ταιριάζουν με {Storage [Index] = Servo_0_Pos + 0; // Προστίθεται τιμή στον πίνακα Index ++; // Τιμή ευρετηρίου αυξημένη κατά 1} Current_0_Pos = Servo_0_Pos; } /* Ομοίως, η σύγκριση τιμών γίνεται για όλα τα servos, +100 προστίθεται κάθε για καταχώριση ως διαφορική τιμή. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); εάν (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Ευρετήριο ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); εάν (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Ευρετήριο ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Ευρετήριο ++; } Current_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); εάν (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Ευρετήριο ++; } Current_4_Pos = Servo_4_Pos; } / * Οι τιμές εκτυπώνονται σε σειριακή οθόνη, '\ t' είναι για την εμφάνιση τιμών σε μορφή πίνακα * / Serial.print (Servo_0_Pos). Serial.print ("\ t"); Serial.print (Servo_1_Pos); Serial.print ("\ t"); Serial.print (Servo_2_Pos); Serial.print ("\ t"); Serial.print (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("Ευρετήριο ="); Serial.println (Ευρετήριο); καθυστέρηση (50)? } if (data == 'P') // IF 'P', εισαγάγετε τις ηχογραφημένες κινήσεις. {for (int i = 0; i <Index; i ++) // Διασχίστε τον πίνακα χρησιμοποιώντας το βρόχο {Servo_Number = Storage /100; // Βρίσκει αριθμό σερβο Servo_Position = Αποθήκευση % 100; // Βρίσκει τη θέση του σερβοδιακόπτη (Servo_Number) {περίπτωση 0: Servo_0.write (Servo_Position); Διακοπή; περίπτωση 1: Servo_1.write (Servo_Position); Διακοπή; περίπτωση 2: Servo_2.write (Servo_Position); Διακοπή; περίπτωση 3: Servo_3.write (Servo_Position); Διακοπή; περίπτωση 4: Servo_4.write (Servo_Position); Διακοπή; } καθυστέρηση (50); }}}

Μόλις ο κώδικας είναι έτοιμος, τώρα ανεβάστε τον στον πίνακα arduino

Ο έξυπνος βραχίονας είναι έτοιμος να λειτουργήσει. Η λειτουργία δεν είναι ακόμη τόσο ομαλή όσο αυτή που έκανε ο Stoerpeak.

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

Με αυτά που ειπώθηκαν, ας προχωρήσουμε στις δοκιμές….

Βήμα 5: Δοκιμή:-

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

Για να ξεκινήσετε την εγγραφή, πληκτρολογήστε 'R' στην οθόνη τώρα μπορείτε να εκτελέσετε τις κινήσεις που θέλετε να ηχογραφήσετε.

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

Συνιστάται: