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, Juli
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, rukom možete upravljati pomoću nekih džojstika na pametnom telefonu.

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

Budi kreativan !

Korak 1: Materijali

Materijali
Materijali

Ovdje možete vidjeti materijal koji vam je potreban.

Izgradnja ove robotske ruke koštat će vas oko 50 €. Softver i alati se mogu 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 štampana (s našim prusa i3).

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

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

Korak 3: Elektronska montaža

Electronic Montage
Electronic Montage

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).

Napajanje, gdje se servo pogoni napajaju sa 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 App inventor -u 2. Koristimo 2 joystick za kontrolu 4 servo -a i još 2 tastera 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 da spremi do 9 pozicija 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 kontroliran robotskom rukom

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

word rep; // glavni predstavnik modula Arduino na pametnom telefonu

int chiffre_final = 0; int cmd = 3; // varijabla naredba du servo motor (troisieme fil (narančasta, žuta)) 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; // na definitivnom notre servomotoru Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; int angle, angle1, angle3, angle5, angle2; // ugao int pas; int r, r1, r2, r3; int enregistrer; boolean fin = FALSE; boolean fin1 = FALSE; boolean fin2 = FALSE; boolean fin3 = FALSE; boolean fin4 = FALSE; reč w; // varijabilni 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 angle; // 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.attach (cmd); // na reljefu je postavljen pin za naredbu moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); ugao = 6; moteur1.write (100); ugao1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); ugao = 6; ugao1 = 100; ugao2 = 90; ugao3 = 90; ugao5 = 90; Serial.begin (9600); // komunikacija sa modulom 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 = recevoir (); // na vašem prijemniku informacije 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: Third_Arm_Rotation (); break; slučaj 8: Third_Arm_AntiRotation (); break; slučaj 9: Fourth_Arm_Rotation (); break; slučaj 10: Fourth_Arm_AntiRotation (); break; // slučaj 11: Fifth_Arm_Rotation (); break; // slučaj 12: Fifth_Arm_AntiRotation (); break; slučaj 21: Serial.print ("dugme slučaja 1"); chiffre_final = 1; sauvegarde_positions1 [0] = kut; sauvegarde_positions1 [1] = kut1; sauvegarde_pozicija1 [2] = kut2; sauvegarde_pozicija1 [3] = kut3; sauvegarde_pozicija1 [4] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); break; slučaj 22: chiffre_final = 2; sauvegarde_positions2 [0] = kut; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; break; slučaj 23: chiffre_final = 3; sauvegarde_positions3 [0] = kut; sauvegarde_positions3 [1] = angle1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = angle5; 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; break; 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; break; slučaj 26: chiffre_final = 6; sauvegarde_positions6 [0] = kut; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; break; slučaj 27: chiffre_final = 7; sauvegarde_positions7 [0] = kut; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; break; slučaj 28: chiffre_final = 8; sauvegarde_positions8 [0] = kut; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; break; 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; break;

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

slučaj 33: Serial.print ("33"); enable_saving = 0; break; // TASTER SAVE default: break; } if (w == 32) {Serial.print ("\ nReproduciraj / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde pozicija 1: / n"); za (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 / nLoop:"); 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); break; 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); break; slučaj 3: goto_moteur (*(sauvegarde_positions3)); delay (200); goto_moteur1 (*(sauvegarde_positions3+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions3+2)); delay (200); goto_moteur3 (*(sauvegarde_positions3+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions3+4)); kašnjenje (200); break; slučaj 4: goto_moteur (*(sauvegarde_positions4)); delay (200); goto_moteur1 (*(sauvegarde_positions4+1)); kašnjenje (200); goto_moteur2 (*(sauvegarde_positions4+2)); delay (200); goto_moteur3 (*(sauvegarde_positions4+3)); kašnjenje (200); goto_moteur5 (*(sauvegarde_positions4+4)); kašnjenje (200); break; 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)); delay (200); break; 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); break; 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)); delay (200); break; 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); break; 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); break; } 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 ****************** ******************

word recevoir () {// fonction permettant de Recevoir l'informacija za pametni telefon

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

Serial.flush ();

return w; }}

void goto_moteur (int angle_destination)

{while (ugao odredišnog ugla+stepenišni ugao) {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);} kašnjenje (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 kut2 = / t"); Serial.print (kut1); if (ugao_odredišta angle1 +step_angle) {angle1 += step_angle; moteur1.write (angle1);;} kašnjenje (100); } moteur1.write (angle_destination); } 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 (ugaoni_destinacijski ugao2 +korak_ugao) {ugao2 += stepeni_ugao; moteur2.write (angle2);} kašnjenje (100); } moteur2.write (angle_destination); } void goto_moteur3 (int angle_destination) {

while (ugao_odredišni ugao3+stepenički_ugao)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (ugao_odredjivanja3 moteur3.write (angle3);} kašnjenje (100); } moteur3.write (angle_destination); } void goto_moteur5 (int angle_destination) {

while (ugao_odredišta5+ugao_stupnja)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (ugao_odredišta angle5 +step_angle) {angle5 += step_angle; moteur5.write (angle5);} kašnjenje (100); } moteur5.write (angle_destination); }

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 (angle); } 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); }

Korak 6: To je to

Hvala na gledanju, nadam se da ste cijenili!

Ako vam se svidio ovaj Instructable, svakako nas posjetite za više! =)

Preporučuje se: