Obsah:

Hra s robotickým ramenom - ovládač pre smartfón: 6 krokov
Hra s robotickým ramenom - ovládač pre smartfón: 6 krokov

Video: Hra s robotickým ramenom - ovládač pre smartfón: 6 krokov

Video: Hra s robotickým ramenom - ovládač pre smartfón: 6 krokov
Video: [Одиночный автомобильный кемпинг] в сильный дождь. Отдых в лесу.Сольный лагерь.АСМР.VanLife 2024, Júl
Anonim
Hra s robotickým ramenom - ovládač pre smartfón
Hra s robotickým ramenom - ovládač pre smartfón

Ahoj !

Tu je zábavná letná hra: Robotické rameno ovládané smartfónom !!

Ako vidíte na videu, rameno môžete ovládať pomocou niektorých joystickov na svojom smartfóne.

Môžete tiež uložiť vzor, ktorý robot bude reprodukovať v slučke, aby mohol napríklad vykonávať niektoré opakujúce sa úlohy. Ale tento vzor je modulovateľný, ako si želáte !!!!

Buď kreatívny !

Krok 1: Materiály

Materiály
Materiály

Tu vidíte materiál, ktorý potrebujete.

Postavenie tohto robotického ramena vás bude stáť približne 50 €. Softvér a nástroje je možné nahradiť, ale na tento projekt som ich použil.

Krok 2: 3D tlač robotického ramena

3D tlač robotického ramena
3D tlač robotického ramena
3D tlač robotického ramena
3D tlač robotického ramena
3D tlač robotického ramena
3D tlač robotického ramena

Robotické rameno bolo vytlačené 3D (s naším prusa i3).

Vďaka webovej stránke „HowtoMechatronics.com“sú jeho súbory STL úžasné na vybudovanie 3D ramena.

Vytlačenie všetkých dielov bude trvať približne 20 hodín.

Krok 3: Elektronická montáž

Elektronická montáž
Elektronická montáž

Montáž je rozdelená na 2 časti:

Elektronická časť, kde je arduino prepojené so servom pomocou digitálnych pinov a so zariadením Bluetooth (Rx, Tx).

Napájacia časť, kde sú serva napájané 2 telefónnymi nabíjačkami (5 V, 2 A max.).

Krok 4: Aplikácia pre smartphone

Aplikácia pre smartfóny
Aplikácia pre smartfóny

Aplikácia bola vytvorená pomocou aplikácie App Inventor 2. Na ovládanie 4 serv a 2 ďalších tlačidiel používame 2 joysticky.

Rameno a smartphone prepojíme pomocou modulu Bluetooth (HC-06).

Nakoniec, šetriaci režim umožňuje užívateľovi uložiť až 9 pozícií pre rameno.

Rameno potom prejde do automatického režimu, kde bude reprodukovať uložené polohy.

Krok 5: Kód Arduino

Arduino kód
Arduino kód
Arduino kód
Arduino kód

// 08/19 - Robotické rameno Ovládané smartfónom

#include #define TRUE true #define FALSE false // ********************* VYHLÁSENIA ***************** ***********

slovo rep; // mot envoyé du module Arduino au smartphone

int chiffre_final = 0; int cmd = 3; // premenná commande du servo moteur (troisième fil (orange, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activate_saving = 0; Servopohon; // 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 uhol, uhol1, uhol3, uhol5, uhol2; // uhol int pas; int r, r1, r2, r3; int registrátor; booleovská plutva = NEPRAVDA; booleovská fin1 = NEPRAVDA; booleovský fin2 = NEPRAVDA; booleovský fin3 = NEPRAVDA; booleovská fin4 = NEPRAVDA; slovo w; // premenná 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 uhol; // uhol natočenia (0 a 180)

//********************NASTAVIŤ*************************** ******** neplatné nastavenie () {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); uhol = 6; moteur1.write (100); uhol1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); uhol = 6; uhol1 = 100; uhol2 = 90; uhol3 = 90; uhol5 = 90; Serial.begin (9600); // modul komunikátoru Bluetooth} // ******************* BOUCLE ****************** ***************** prázdna slučka () {

// Serial.print ("uhol");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (uhol3); Serial.print (" / t "); Serial.print (uhol5); Serial.print (" / n ");

//Serial.print("angle ");

int i; w = príjemca (); // na vašom smartfóne nie sú k dispozícii žiadne informácie, premenná w prepínač (w) {prípad 1: TouchDown_Release (); break; prípad 2: TouchDown_Grab (); break; prípad 3: Base_Rotation (); break; prípad 4: Base_AntiRotation (); break; prípad 5: Waist_Rotation (); break; prípad 6: Waist_AntiRotation (); break; prípad 7: Third_Arm_Rotation (); break; prípad 8: Third_Arm_AntiRotation (); break; prípad 9: Fourth_Arm_Rotation (); break; prípad 10: Fourth_Arm_AntiRotation (); break; // prípad 11: Fifth_Arm_Rotation (); break; // prípad 12: Fifth_Arm_AntiRotation (); break; prípad 21: Serial.print ("tlačidlo prípadu 1"); chiffre_final = 1; sauvegarde_positions1 [0] = uhol; sauvegarde_positions1 [1] = uhol1; sauvegarde_positions1 [2] = uhol2; sauvegarde_positions1 [3] = uhol3; [sauvegard_ = uhol5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); prestávka; prípad 22: chiffre_final = 2; sauvegarde_positions2 [0] = uhol; sauvegarde_positions2 [1] = uhol1; sauvegarde_positions2 [2] = uhol2; sauvegarde_positions2 [3] = uhol3; sauvegarde_positions2 [4] = uhol5; prestávka; prípad 23: chiffre_final = 3; sauvegarde_positions3 [0] = uhol; sauvegarde_positions3 [1] = uhol1; sauvegarde_positions3 [2] = uhol2; sauvegarde_positions3 [3] = uhol3; sauvegarde_positions3 [4] = uhol5; prípad 24: chiffre_final = 4; sauvegarde_positions4 [0] = uhol; sauvegarde_positions4 [1] = uhol1; sauvegarde_positions4 [2] = uhol2; sauvegarde_positions4 [3] = uhol3; sauvegarde_positions4 [4] = uhol5; prestávka; prípad 25: chiffre_final = 5; sauvegarde_positions5 [0] = uhol; sauvegarde_positions5 [1] = uhol1; sauvegarde_positions5 [2] = uhol2; sauvegarde_positions5 [3] = uhol3; sauvegarde_positions5 [4] = uhol5; prestávka; prípad 26: chiffre_final = 6; sauvegarde_positions6 [0] = uhol; sauvegarde_positions6 [1] = uhol1; sauvegarde_positions6 [2] = uhol2; sauvegarde_positions6 [3] = uhol3; sauvegarde_positions6 [4] = uhol5; prestávka; prípad 27: chiffre_final = 7; sauvegarde_positions7 [0] = uhol; sauvegarde_positions7 [1] = uhol1; sauvegarde_positions7 [2] = uhol2; sauvegarde_positions7 [3] = uhol3; sauvegarde_positions7 [4] = uhol5; prestávka; prípad 28: chiffre_final = 8; sauvegarde_positions8 [0] = uhol; sauvegarde_positions8 [1] = uhol1; sauvegarde_positions8 [2] = uhol2; sauvegarde_positions8 [3] = uhol3; sauvegarde_positions8 [4] = uhol5; prestávka; prípad 29: chiffre_final = 9; sauvegarde_positions9 [0] = uhol; sauvegarde_positions9 [1] = uhol1; sauvegarde_positions9 [2] = uhol2; sauvegarde_positions9 [3] = uhol3; sauvegarde_positions9 [4] = uhol5; prestávka;

prípad 31: Serial.print ("31"); activate_saving = 1; chiffre_final = 0; break; // ZAČNITE

prípad 33: Serial.print ("33"); activate_saving = 0; break; // BUTTON SAVE default: break; } if (w == 32) {Serial.print ("\ nReproduce / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n pozícia Sauvegarde 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Serial. vytlačiť ("\ n / n ZAČAŤ / nSlučka:"); Serial.print (i); Serial.print ("\ n"); prepínač (i) {prípad 1: goto_moteur (*(sauvegarde_positions1)); oneskorenie (200); goto_moteur1 (*(sauvegarde_positions1+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions1+2)); delay (200); goto_moteur3 (*(sauvegarde_positions1+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions1+4)); delay (200); prestávka; prípad 2: goto_moteur (*(sauvegarde_positions2)); delay (200); goto_moteur1 (*(sauvegarde_positions2+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions2+2)); delay (200); goto_moteur3 (*(sauvegarde_positions2+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions2+4)); delay (200); prestávka; prípad 3: goto_moteur (*(sauvegarde_positions3)); delay (200); goto_moteur1 (*(sauvegarde_positions3+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions3+2)); delay (200); goto_moteur3 (*(sauvegarde_positions3+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions3+4)); delay (200); prestávka; prípad 4: goto_moteur (*(sauvegarde_positions4)); delay (200); goto_moteur1 (*(sauvegarde_positions4+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions4+2)); delay (200); goto_moteur3 (*(sauvegarde_positions4+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions4+4)); delay (200); prestávka; prípad 5: goto_moteur (*(sauvegarde_positions5)); oneskorenie (200); goto_moteur1 (*(sauvegarde_positions5+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions5+2)); delay (200); goto_moteur3 (*(sauvegarde_positions5+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions5+4)); delay (200); prestávka; prípad 6: goto_moteur (*(sauvegarde_positions6)); delay (200); goto_moteur1 (*(sauvegarde_positions6+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions6+2)); delay (200); goto_moteur3 (*(sauvegarde_positions6+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions6+4)); delay (200); prestávka; prípad 7: goto_moteur (*(sauvegarde_positions7)); oneskorenie (200); goto_moteur1 (*(sauvegarde_positions7+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions7+2)); delay (200); goto_moteur3 (*(sauvegarde_positions7+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions7+4)); delay (200); prestávka; prípad 8: goto_moteur (*(sauvegarde_positions8)); oneskorenie (200); goto_moteur1 (*(sauvegarde_positions8+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions8+2)); delay (200); goto_moteur3 (*(sauvegarde_positions8+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions8+4)); delay (200); prestávka; prípad 9: goto_moteur (*(sauvegarde_positions9)); oneskorenie (200); goto_moteur1 (*(sauvegarde_positions9+1)); oneskorenie (200); goto_moteur2 (*(sauvegarde_positions9+2)); delay (200); goto_moteur3 (*(sauvegarde_positions9+3)); oneskorenie (200); goto_moteur5 (*(sauvegarde_positions9+4)); delay (200); prestávka; } Serial.print ("\ n ************************ FIN REPRODUCE ***************** / n "); oneskorenie (500); }} /*Serial.print ("debut / 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");*/

oneskorenie (100); } // ********************************************************************** ******************

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

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

Serial.flush ();

návrat w; }}

neplatné goto_moteur (vnútorný uhol_cielenia)

{while (uhol_ciel uhol+krok_angle) {Serial.print ("\ n -------------- * * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (uhol_destinácie); Serial.print ("\ n angle1 = / t"); Serial.print (uhol); if (uhol_ciel uhol + krok_angle) {uhol = uhol + krok_angle; moteur.write (uhol);} oneskorenie (100); } moteur.write (uhol_cielenia); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (uhol_destinácie); Serial.print ("\ n uhol2 = / t"); Serial.print (uhol1); if (uhol_ciel uhol1 +krok_angle) {uhol1 += krok_angle; moteur1.write (uhol1);;} oneskorenie (100); } moteur1.write (uhol_cielenia); } void goto_moteur2 (int angle_destination) {

while (uhol_ciel uhol2+krok_angle)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (uhol_destinácie); Serial.print ("\ n angle3 = / t"); Serial.print (uhol2); if (uhol_cieľový uhol2 +step_angle) {angle2 += step_angle; moteur2.write (uhol2);} oneskorenie (100); } moteur2.write (uhol_cielenia); } void goto_moteur3 (int angle_destination) {

while (uhol_ciel uhol 3+krok_angle)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (uhol_destinácie); Serial.print ("\ n angle4 = / t"); Serial.print (uhol3); if (uhol_ciel uhol3 +step_angle) {angle3 += step_angle; moteur3.write (uhol3);} oneskorenie (100); } moteur3.write (uhol_cielenia); } void goto_moteur5 (int angle_destination) {

while (uhol_ciel uhol 5+krok_angle)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (uhol_destinácie); Serial.print ("\ n angle5 = / t"); Serial.print (uhol5); if (uhol_ciel uhol5 +step_angle) {angle5 += step_angle; moteur5.write (uhol5);} oneskorenie (100); } moteur5.write (uhol_cielenia); }

neplatné TouchDown_Release () // Uvoľnenie tlačidla TouchDown

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

neplatné TouchDown_Grab () // TouchDown Grab

{if (uhol5> 0) {uhol5 = uhol5-krok_angle_mini; } moteur5.write (uhol5); } neplatné Base_Rotation () {if (uhol 0) {uhol = uhol-krok_angle; } else uhol = 0; moteur.write (uhol); } neplatný Waist_Rotation () {if (uhol1 20) {uhol1 = uhol1-krok_angle; } else uhol1 = 20; moteur1.write (uhol1); } neplatné Third_Arm_Rotation () {if (uhol2 0) {uhol2 = uhol2-krok_angle; } moteur2.write (uhol2); } neplatné Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (uhol3); }

Krok 6: To je ono

Ďakujem za sledovanie, dúfam, že ste ocenili!

Ak sa vám páčil tento návod, určite nás môžete navštíviť pre viac! =)

Odporúča: