Sadržaj:

Robotic Arm Game - Kontroler za pametni telefon: 6 koraka
Robotic Arm Game - Kontroler za pametni telefon: 6 koraka

Video: Robotic Arm Game - Kontroler za pametni telefon: 6 koraka

Video: Robotic Arm Game - Kontroler za pametni telefon: 6 koraka
Video: Z flip 4 Part 1 2024, Srpanj
Anonim
Robotic Arm Game - Kontroler za pametni telefon
Robotic Arm Game - Kontroler za pametni telefon

Zdravo !

Evo zabavne ljetne igre: Robotska ruka koju kontrolira pametni telefon !!

Kao što možete vidjeti na videu, možete kontrolirati ruku s nekim džojstikom na pametnom telefonu.

Također možete spremiti uzorak koji će se robot reproducirati u petlji, kako bi napravio neke ponavljajuće zadatke kao primjer. Ali ovaj uzorak se može modulirati kako želite !!!!

Budi kreativan !

Korak 1: Materijali

Materijali
Materijali

Ovdje možete vidjeti potrebne materijale.

Izgradnja ove robotske ruke koštat će vas oko 50 €. Softver i alati mogu se zamijeniti, ali ja sam ih koristio za ovaj projekt.

Korak 2: 3D ispis robotske ruke

3D ispis robotske ruke
3D ispis robotske ruke
3D ispis robotske ruke
3D ispis robotske ruke
3D ispis robotske ruke
3D ispis robotske ruke

Robotska ruka je 3D ispisana (s našom prusom i3).

Zahvaljujući web stranici "HowtoMechatronics.com", njegove STL datoteke sjajne su za izradu 3D ruke.

Za ispis svih komada bit će potrebno oko 20 sati.

Korak 3: Elektronička montaža

Elektronička montaža
Elektronička montaža

Montaža je odvojena u 2 dijela:

Elektronički dio, gdje je arduino povezan sa servo upravljačima digitalnim pinovima i Bluetooth uređajem (Rx, Tx).

Dio za napajanje, gdje se servo pogoni napajaju s 2 punjača za telefon (5V, 2A max).

Korak 4: Aplikacija za pametni telefon

Aplikacija za pametni telefon
Aplikacija za pametni telefon

Aplikacija je napravljena na izumitelju aplikacije 2. Koristimo 2 joystick za upravljanje 4 servomotora i još 2 gumba za kontrolu konačnog zahvata.

Ruku i pametni telefon povezujemo zajedno pomoću Bluetooth modula (HC-06).

Konačno, način spremanja omogućuje korisniku spremanje do 9 položaja za ruku.

Ruka će tada preći u automatski način rada, gdje će reproducirati spremljene položaje.

Korak 5: Arduino kod

Arduino kod
Arduino kod
Arduino kod
Arduino kod

// 08/19 - Pametni telefon s robotskom rukom kontroliran

#include #define TRUE true #define FALSE false // ******************** IZJAVE ***************** ***********

riječ rep; // mot envoyé du module Arduino au smartphone

int chiffre_final = 0; int cmd = 3; // varijabla commande du servo moteur (troisième fil (narančasta, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int enable_saving = 0; Servo motor; // on définit notre servomoteur Servo moteur1; Servo motor2; Servo motor3; // Servo moteur4; Servo motor5; int step_angle_mini = 4; int step_angle = 3; int kut, kut1, kut3, kut5, kut2; // kut int pas; int r, r1, r2, r3; int prijavitelj; boolean fin = FALSE; boolean fin1 = FALSE; boolean fin2 = FALSE; boolean fin3 = FALSE; boolean fin4 = FALSE; riječ w; // promjenjivi izaslanik za pametni telefon ili modul 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 kut; // kut zakretanja (0 do 180)

//********************POSTAVITI*************************** ******** 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.prilog (cmd); // na reljefu l'objet au pin de commande moteur1.attach (cmd1); moteur2.priključak (cmd2); moteur3.priključak (cmd3); // moteur4.attach (cmd4); moteur5.priključak (cmd5); moteur.pisati (6); kut = 6; moteur1.write (100); kut1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); kut = 6; kut1 = 100; kut2 = 90; kut3 = 90; kut5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************** BOUCLE ****************** ***************** void loop () {

// Serial.print ("kut");

//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 = recepvoir (); // na vašem prijemniku nema informacija o pametnom telefonu, varijabla w prekidač (w) {slučaj 1: TouchDown_Release (); break; slučaj 2: TouchDown_Grab (); break; slučaj 3: Base_Rotation (); break; slučaj 4: Base_AntiRotation (); break; slučaj 5: Waist_Rotation (); break; slučaj 6: Waist_AntiRotation (); break; slučaj 7: Treća_Rotacija_okretke (); prekid; slučaj 8: Treći_Arm_AntiRotation (); break; slučaj 9: Četvrta_Rotacija_okretanja (); break; slučaj 10: Četvrti_Arm_AntiRotation (); break; // slučaj 11: Fifth_Arm_Rotation (); break; // slučaj 12: Fifth_Arm_AntiRotation (); break; slučaj 21: Serial.print ("gumb slučaja 1"); chiffre_final = 1; sauvegarde_positions1 [0] = kut; sauvegarde_positions1 [1] = kut1; sauvegarde_pozitions1 [2] = kut2; sauvegarde_pozitions1 [3] = kut3; sauvegarde_positions1 [4] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); pauza; slučaj 22: chiffre_final = 2; sauvegarde_positions2 [0] = kut; sauvegarde_pozitions2 [1] = kut1; sauvegarde_pozitions2 [2] = kut2; sauvegarde_pozitions2 [3] = kut3; sauvegarde_positions2 [4] = kut5; pauza; slučaj 23: chiffre_final = 3; sauvegarde_positions3 [0] = kut; sauvegarde_pozitions3 [1] = kut1; sauvegarde_pozitions3 [2] = kut2; sauvegarde_pozitions3 [3] = kut3; sauvegarde_positions3 [4] = kut5; break; slučaj 24: chiffre_final = 4; sauvegarde_positions4 [0] = kut; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; pauza; slučaj 25: chiffre_final = 5; sauvegarde_positions5 [0] = kut; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; pauza; slučaj 26: chiffre_final = 6; sauvegarde_positions6 [0] = kut; sauvegarde_pozitions6 [1] = kut1; sauvegarde_pozitions6 [2] = kut2; sauvegarde_pozitions6 [3] = kut3; sauvegarde_pozitions6 [4] = kut5; pauza; slučaj 27: chiffre_final = 7; sauvegarde_positions7 [0] = kut; sauvegarde_pozitions7 [1] = kut1; sauvegarde_pozitions7 [2] = kut2; sauvegarde_pozitions7 [3] = kut3; sauvegarde_positions7 [4] = kut5; pauza; slučaj 28: chiffre_final = 8; sauvegarde_positions8 [0] = kut; sauvegarde_pozitions8 [1] = kut1; sauvegarde_pozitions8 [2] = kut2; sauvegarde_pozitions8 [3] = kut3; sauvegarde_pozitions8 [4] = kut5; pauza; slučaj 29: chiffre_final = 9; sauvegarde_positions9 [0] = kut; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; pauza;

slučaj 31: Serial.print ("31"); enable_saving = 1; chiffre_final = 0; break; // POČNITE

slučaj 33: Serial.print ("33"); enable_saving = 0; break; // TIPKA SAVE default: break; } if (w == 32) {Serial.print ("\ nReproduciraj / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde položaj 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde položaj 2: / n"); za (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde položaj 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Serial. print ("\ n / n BEGIN / nPetla:"); Serial.print (i); Serial.print ("\ n"); switch (i) {slučaj 1: goto_moteur (*(sauvegarde_positions1)); delay (200); goto_moteur1 (*(sauvegarde_positions1+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions1+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions1+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions1+4)); kašnjenje (200); pauza; slučaj 2: goto_moteur (*(sauvegarde_positions2)); delay (200); goto_moteur1 (*(sauvegarde_positions2+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions2+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions2+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions2+4)); kašnjenje (200); pauza; slučaj 3: goto_moteur (*(sauvegarde_positions3)); delay (200); goto_moteur1 (*(sauvegarde_positions3+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions3+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions3+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions3+4)); kašnjenje (200); pauza; slučaj 4: goto_moteur (*(sauvegarde_positions4)); delay (200); goto_moteur1 (*(sauvegarde_positions4+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions4+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions4+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions4+4)); kašnjenje (200); pauza; slučaj 5: goto_moteur (*(sauvegarde_positions5)); delay (200); goto_moteur1 (*(sauvegarde_positions5+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions5+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions5+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions5+4)); kašnjenje (200); pauza; slučaj 6: goto_moteur (*(sauvegarde_positions6)); delay (200); goto_moteur1 (*(sauvegarde_positions6+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions6+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions6+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions6+4)); kašnjenje (200); pauza; slučaj 7: goto_moteur (*(sauvegarde_positions7)); delay (200); goto_moteur1 (*(sauvegarde_positions7+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions7+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions7+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions7+4)); kašnjenje (200); pauza; slučaj 8: goto_moteur (*(sauvegarde_positions8)); delay (200); goto_moteur1 (*(sauvegarde_positions8+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions8+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions8+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions8+4)); kašnjenje (200); pauza; slučaj 9: goto_moteur (*(sauvegarde_positions9)); delay (200); goto_moteur1 (*(sauvegarde_positions9+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions9+2)); kašnjenje (200); goto_moteur3 (*(sauvegarde_positions9+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions9+4)); kašnjenje (200); pauza; } Serial.print ("\ n *********************** FIN REPRODUCE ***************** / n "); kašnjenje (500); }} /*Serial.print ("debi / 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");*/

kašnjenje (100); } // **************************** FONKCIJE ****************** ******************

riječ recevoir () {// fonction permettant de recevoir l'informacija za pametni telefon

if (Serial.available ()) {w = Serial.read ();

Serial.flush ();

povratak w; }}

void goto_moteur (int angle_destination)

{while (kut_odredišnog kuta+step_angle) {Serial.print ("\ n -------------- * * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n kut1 = / t"); Serial.print (kut); if (kut_odredišta kut + korak_kut) {kut = kut + korak_kut; moteur.write (kut);} kašnjenje (100); } moteur.write (kutno_odredište); } 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 kut2 = / t"); Serial.print (kut1); if (kut odredišta kut1 +kut_koraka) {kut1 += kut_koraka; moteur1.write (angle1);;} kašnjenje (100); } moteur1.write (kutno_odredište); } void goto_moteur2 (int angle_destination) {

while (kut_odredišta kut2+korak_kut)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); if (kut_odredišta kut2 +korak_kut) {kut2 += korak_kut; moteur2.write (kut2);} kašnjenje (100); } moteur2.write (kutno_odredište); } void goto_moteur3 (int angle_destination) {

while (kut_odredišta kut3+korak_kut)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (kut_odredišta kut3 +korak_kut) {kut3 += korak_kut; moteur3.write (angle3);} kašnjenje (100); } moteur3.write (kutno_odredište); } void goto_moteur5 (int angle_destination) {

while (kut_odredišta kut5+kut_koraka)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (kut_odredišta kut5 +korak_kut) {kut5 += korak_kut; moteur5.write (angle5);} kašnjenje (100); } moteur5.write (kutno_odredište); }

void TouchDown_Release () // Otpuštanje tipke TouchDown

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

void TouchDown_Grab () // TouchDown tipka Grab

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Base_Rotation () {if (angle 0) {angle = angle-step_angle; } else kut = 0; moteur.write (kut); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else angle1 = 20; moteur1.write (kut1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (kut2); } void Četvrta_arma_rotacija () {if (kut3 = 0) {kut3 = kut3-stupanj_kut_mini; } moteur3.write (kut3); }

Korak 6: To je to

Hvala na gledanju, nadam se da ste cijenili!

Ako vam se svidio ovaj Instructable, svakako nas možete posjetiti za više! =)

Preporučeni: