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

Robotic Arm Game - Smartphone Controller: 6 Steps
Robotic Arm Game - Smartphone Controller: 6 Steps

Βίντεο: Robotic Arm Game - Smartphone Controller: 6 Steps

Βίντεο: Robotic Arm Game - Smartphone Controller: 6 Steps
Βίντεο: Build Your Own Wearable Robot 2024, Ιούλιος
Anonim
Robotic Arm Game - Smartphone Controller
Robotic Arm Game - Smartphone Controller

Γειά σου !

Εδώ ένα διασκεδαστικό καλοκαιρινό παιχνίδι: Ο ρομποτικός βραχίονας που ελέγχεται από Smartphone !!

Όπως μπορείτε να δείτε στο βίντεο, μπορείτε να ελέγξετε το βραχίονα με μερικά Joysticks στο smartphone σας.

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

Να είσαι δημιουργικός !

Βήμα 1: Υλικά

Υλικά
Υλικά

Εδώ μπορείτε να δείτε το υλικό που χρειάζεστε.

Θα σας κοστίσει περίπου 50 € για την κατασκευή αυτού του ρομποτικού βραχίονα. Το λογισμικό και τα εργαλεία μπορούν να αντικατασταθούν, αλλά τα χρησιμοποίησα για αυτό το έργο.

Βήμα 2: Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα

Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα

Το Robotic Arm εκτυπώθηκε 3D (με το prusa i3 μας).

Χάρη στον ιστότοπο "HowtoMechatronics.com", τα αρχεία του STL είναι φοβερά για να δημιουργήσουν ένα τρισδιάστατο χέρι.

Θα χρειαστούν περίπου 20 ώρες για να εκτυπωθούν όλα τα κομμάτια.

Βήμα 3: Ηλεκτρονικό μοντάζ

Ηλεκτρονική Μοντάζ
Ηλεκτρονική Μοντάζ

Το μοντάζ χωρίζεται σε 2 μέρη:

Ένα ηλεκτρονικό μέρος, όπου το arduino συνδέεται με τα servos μέσω των ψηφιακών ακίδων και με τη συσκευή Bluetooth (Rx, Tx).

Ένα τροφοδοτικό, όπου τα servos τροφοδοτούνται με 2 φορτιστές τηλεφώνου (5V, 2A max).

Βήμα 4: Εφαρμογή Smartphone

Εφαρμογή Smartphone
Εφαρμογή Smartphone

Η εφαρμογή έγινε στον εφευρέτη της εφαρμογής 2. Χρησιμοποιούμε 2 Joystick για τον έλεγχο 4 σερβο και 2 ακόμη κουμπιά για τον έλεγχο της τελικής λαβής.

Συνδέουμε το Arm και το Smartphone μαζί χρησιμοποιώντας μια μονάδα Bluetooth (HC-06).

Τέλος, μια λειτουργία αποθήκευσης επιτρέπει στον χρήστη να αποθηκεύσει έως και 9 θέσεις για τον βραχίονα.

Στη συνέχεια, ο βραχίονας θα μεταβεί σε αυτόματη λειτουργία, όπου θα αναπαράγει τις αποθηκευμένες θέσεις.

Βήμα 5: Ο κώδικας Arduino

Ο κώδικας Arduino
Ο κώδικας Arduino
Ο κώδικας Arduino
Ο κώδικας Arduino

// 08/19 - Έλεγχος ρομποτικού βραχίονα Smartphone

#include #define TRUE true #define FALSE false // ******************* ΔΗΛΩΣΕΙΣ ***************** ***********

λέξη rep? // mot envoyé du module Arduino ή smartphone

int chiffre_final = 0; int cmd = 3; // μεταβλητή commande du servo moteur (troisième fil (πορτοκαλί, κίτρινο)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activ_saving = 0; Servo moteur; // on définit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; γωνία int, γωνία1, γωνία3, γωνία5, γωνία2; // γωνία int pas; int r, r1, r2, r3; int εγγραφέας? boolean fin = FALSE? boolean fin1 = FALSE? boolean fin2 = FALSE? boolean fin3 = FALSE? boolean fin4 = FALSE? λέξη w? // μεταβλητή Envoyé du smartphone au module Arduino int sauvegarde_positions1 [5]; int sauvegarde_positions2 [5]; int sauvegarde_positions3 [5]; int sauvegarde_positions4 [5]; int sauvegarde_positions5 [5]; int sauvegarde_positions6 [5]; int sauvegarde_positions7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_positions9 [5];

// int γωνία; // γωνία περιστροφής (0 έως 180)

// ******************** ΡΥΘΜΙΣΗ ************************* ******** void setup () {sauvegarde_positions1 [0] = sauvegarde_positions1 [1] = sauvegarde_positions1 [2] = sauvegarde_positions1 [3] = sauvegarde_positions1 [4] = 0; sauvegarde_positions2 [0] = sauvegarde_positions2 [1] = sauvegarde_positions2 [2] = sauvegarde_positions2 [3] = sauvegarde_positions2 [4] = 0; sauvegarde_positions3 [0] = sauvegarde_positions3 [1] = sauvegarde_positions3 [2] = sauvegarde_positions3 [3] = sauvegarde_positions3 [4] = 0; sauvegarde_positions4 [0] = sauvegarde_positions4 [1] = sauvegarde_positions4 [2] = sauvegarde_positions4 [3] = sauvegarde_positions4 [4] = 0; sauvegarde_positions5 [0] = sauvegarde_positions5 [1] = sauvegarde_positions5 [2] = sauvegarde_positions5 [3] = sauvegarde_positions5 [4] = 0; sauvegarde_positions6 [0] = sauvegarde_positions6 [1] = sauvegarde_positions6 [2] = sauvegarde_positions6 [3] = sauvegarde_positions6 [4] = 0; sauvegarde_positions7 [0] = sauvegarde_positions7 [1] = sauvegarde_positions7 [2] = sauvegarde_positions7 [3] = sauvegarde_positions7 [4] = 0; sauvegarde_positions8 [0] = sauvegarde_positions8 [1] = sauvegarde_positions8 [2] = sauvegarde_positions8 [3] = sauvegarde_positions8 [4] = 0; sauvegarde_positions9 [0] = sauvegarde_positions9 [1] = sauvegarde_positions9 [2] = sauvegarde_positions9 [3] = sauvegarde_positions9 [4] = 0; moteur.attach (cmd); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); γωνία = 6; moteur1.write (100); γωνία1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); γωνία = 6; γωνία1 = 100; γωνία2 = 90; γωνία3 = 90; γωνία5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************* BOUCLE ****************** ***************** void loop () {

// Serial.print ("γωνία");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (angle3); Serial.print (" / t "); Serial.print (angle5); Serial.print (" / n ");

//Serial.print("angle ");

int i? w = δεξαμενή (); // on va recevoir une information du smartphone, la variable w w switch (w) {case 1: TouchDown_Release (); break; περίπτωση 2: TouchDown_Grab (); διάλειμμα; περίπτωση 3: Base_Rotation (); break; περίπτωση 4: Base_AntiRotation (); διάλειμμα; περίπτωση 5: Waist_Rotation (); break; περίπτωση 6: Waist_AntiRotation (); διάλειμμα; περίπτωση 7: Third_Arm_Rotation (); break; περίπτωση 8: Third_Arm_AntiRotation (); διάλειμμα; περίπτωση 9: Fourth_Arm_Rotation (); break; περίπτωση 10: Fourth_Arm_AntiRotation (); διάλειμμα; // περίπτωση 11: Fifth_Arm_Rotation (); break; // περίπτωση 12: Fifth_Arm_AntiRotation (); διάλειμμα; υπόθεση 21: Serial.print ("κουμπί θήκης 1"); chiffre_final = 1; sauvegarde_positions1 [0] = γωνία; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3_posu_garde_4] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); Διακοπή; περίπτωση 22: chiffre_final = 2; sauvegarde_positions2 [0] = γωνία; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; Διακοπή; περίπτωση 23: chiffre_final = 3; sauvegarde_positions3 [0] = γωνία; sauvegarde_positions3 [1] = γωνία1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = γωνία5; περίπτωση 24: chiffre_final = 4; sauvegarde_positions4 [0] = γωνία; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; Διακοπή; περίπτωση 25: chiffre_final = 5; sauvegarde_positions5 [0] = γωνία; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; Διακοπή; περίπτωση 26: chiffre_final = 6; sauvegarde_positions6 [0] = γωνία; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; Διακοπή; περίπτωση 27: chiffre_final = 7; sauvegarde_positions7 [0] = γωνία; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; Διακοπή; περίπτωση 28: chiffre_final = 8; sauvegarde_positions8 [0] = γωνία; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; Διακοπή; περίπτωση 29: chiffre_final = 9; sauvegarde_positions9 [0] = γωνία; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; Διακοπή;

περίπτωση 31: Serial.print ("31"); activ_saving = 1; chiffre_final = 0; διάλειμμα; // ΑΡΧΗ

περίπτωση 33: Serial.print ("33"); activ_saving = 0; break; // BUTTON SAVE προεπιλογή: break; } if (w == 32) {Serial.print ("\ nΑναπαραγωγή / nΤελευταίο τσίφρο:"); Serial.print (chiffre_final); Serial.print ("\ n Θέση Sauvegarde 1: / n"); για (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); για (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 3: / n"); για (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} για (i = 1; i <= chiffre_final; i ++) {Serial εκτύπωση ("\ n / n ΑΡΧΗ / nΑργύρωση:"); Serial.print (i); Serial.print ("\ n"); διακόπτης (i) {περίπτωση 1: goto_moteur (*(sauvegarde_positions1)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions1+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions1+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions1+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions1+4)); καθυστέρηση (200); Διακοπή; περίπτωση 2: goto_moteur (*(sauvegarde_positions2)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions2+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions2+2)); καθυστέρηση (200). goto_moteur3 (*(sauvegarde_positions2+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions2+4)); καθυστέρηση (200); Διακοπή; περίπτωση 3: goto_moteur (*(sauvegarde_positions3)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions3+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions3+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions3+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions3+4)); καθυστέρηση (200); Διακοπή; περίπτωση 4: goto_moteur (*(sauvegarde_positions4)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions4+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions4+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions4+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions4+4)); καθυστέρηση (200); Διακοπή; περίπτωση 5: goto_moteur (*(sauvegarde_positions5)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions5+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions5+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions5+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions5+4)); καθυστέρηση (200); Διακοπή; περίπτωση 6: goto_moteur (*(sauvegarde_positions6)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions6+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions6+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions6+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions6+4)); καθυστέρηση (200); Διακοπή; περίπτωση 7: goto_moteur (*(sauvegarde_positions7)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions7+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions7+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions7+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions7+4)); καθυστέρηση (200); Διακοπή; περίπτωση 8: goto_moteur (*(sauvegarde_positions8)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions8+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions8+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions8+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions8+4)); καθυστέρηση (200); Διακοπή; περίπτωση 9: goto_moteur (*(sauvegarde_positions9)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions9+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions9+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions9+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions9+4)); καθυστέρηση (200); Διακοπή; } Serial.print ("\ n ********************* FIN REPRODUCE ***************** / n "); καθυστέρηση (500)? }} /*Serial.print ("ντεμπούτο / n"); Serial.print (sauvegarde_positions1 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions2 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions3 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions4 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [4]); Serial.print ("\ n");

Serial.print ("\ nfin / n");*/

καθυστέρηση (100)? } // *************************** ΛΕΙΤΟΥΡΓΙΕΣ ***************** ******************

word recevoir () {// fonction permettant de recevoir l'information du smartphone

εάν (Serial.available ()) {w = Serial.read ();

Serial.flush ();

επιστροφή w? }}

void goto_moteur (int angle_destination)

{while (angle_destination angle+step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle1 = / t"); Serial.print (angle); if (angle_destination angle + step_angle) {angle = angle + step_angle; moteur.write (angle);} καθυστέρηση (100); } moteur.write (angle_destination); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); if (angle_destination angle1 +step_angle) {angle1 += step_angle? moteur1.write (angle1);;} καθυστέρηση (100); } moteur1.write (angle_destination); } void goto_moteur2 (int angle_destination) {

ενώ (γωνία_προσδιορισμού γωνίας2+γωνία βημάτων)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ? Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); if (angle_destination angle2 +step_angle) {angle2 += step_angle? moteur2.write (angle2);} καθυστέρηση (100); } moteur2.write (angle_destination); } void goto_moteur3 (int angle_destination) {

ενώ (γωνία_προορισμού γωνία3+γωνία βημάτων)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ? Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (angle_destination angle3 +step_angle) {angle3 += step_angle? moteur3.write (angle3);} καθυστέρηση (100); } moteur3.write (angle_destination); } void goto_moteur5 (int angle_destination) {

ενώ (γωνία_καθορισμού

{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ? Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (angle_destination angle5 +step_angle) {angle5 += step_angle? moteur5.write (angle5);} καθυστέρηση (100); } moteur5.write (angle_destination); }

άκυρο TouchDown_Release () // TouchDown Button Release

{if (angle5 <180) {angle5 = angle5+step_angle_mini; } moteur5.write (angle5); }

άκυρο TouchDown_Grab () // Αρπαγή κουμπιού TouchDown

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Base_Rotation () {if (angle 0) {angle = angle-step_angle; } else γωνία = 0; moteur.write (γωνία); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else angle1 = 20; moteur1.write (angle1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (angle2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (angle3); }

Βήμα 6: Αυτό είναι

Ευχαριστώ για την παρακολούθηση, ελπίζω να το εκτιμήσατε!

Αν σας άρεσε αυτό το Instructable, μπορείτε σίγουρα να μας επισκεφθείτε για περισσότερα! =)

Συνιστάται: