Kazalo:

Robotska igra z roko - krmilnik za pametni telefon: 6 korakov
Robotska igra z roko - krmilnik za pametni telefon: 6 korakov

Video: Robotska igra z roko - krmilnik za pametni telefon: 6 korakov

Video: Robotska igra z roko - krmilnik za pametni telefon: 6 korakov
Video: CS50 2013 - Week 9 2024, Junij
Anonim
Robotska igra z roko - krmilnik za pametni telefon
Robotska igra z roko - krmilnik za pametni telefon

Zdravo !

Tukaj je zabavna poletna igra: Robotska roka, ki jo upravlja pametni telefon !!

Kot lahko vidite na videoposnetku, lahko roko upravljate z nekaj igralnimi palicami na pametnem telefonu.

Shranite lahko tudi vzorec, ki ga bo robot reproduciral v zanki, da bo lahko na primer opravil nekaj ponavljajočih se nalog. Toda ta vzorec je po želji moduliran !!!!

Bodi ustvarjalen !

1. korak: Materiali

Materiali
Materiali

Tu si lahko ogledate material, ki ga potrebujete.

Za izdelavo te robotske roke boste stali približno 50 €. Programsko opremo in orodja je mogoče zamenjati, vendar sem jih uporabil za ta projekt.

Korak: 3D natisnite robotsko roko

3D natisnite robotsko roko
3D natisnite robotsko roko
3D natisnite robotsko roko
3D natisnite robotsko roko
3D natisnite robotsko roko
3D natisnite robotsko roko

Robotska roka je bila 3D natisnjena (z našo pruso i3).

Zahvaljujoč spletni strani "HowtoMechatronics.com" so njegove datoteke STL odlične za izdelavo 3D roke.

Tiskanje vseh kosov bo trajalo približno 20 ur.

3. korak: Elektronska montaža

Elektronska montaža
Elektronska montaža

Montaža je ločena na 2 dela:

Elektronski del, kjer je arduino povezan s servomotorji z digitalnimi zatiči in z napravo Bluetooth (Rx, Tx).

Napajalni del, kjer se servomotorji napajajo z 2 polnilniki za telefon (5V, 2A max).

4. korak: aplikacija za pametni telefon

Aplikacija za pametni telefon
Aplikacija za pametni telefon

Aplikacija je bila izdelana na izumitelju aplikacije 2. Uporabljamo 2 igralno palico za nadzor 4 servomotorjev in še 2 gumba za nadzor zadnjega oprijema.

Roko in pametni telefon povežemo skupaj z modulom Bluetooth (HC-06).

Nazadnje, način shranjevanja omogoča uporabniku, da shrani do 9 položajev za roko.

Roka bo nato prešla v samodejni način, kjer bo reproduciral shranjene položaje.

5. korak: Koda Arduino

Koda Arduino
Koda Arduino
Koda Arduino
Koda Arduino

// 08/19 - Pametni telefon z robotsko roko

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

besedni zastopnik; // odposlanec modula Arduino ali pametni telefon

int chiffre_final = 0; int cmd = 3; // spremenljivka commandnde du servo moteur (troisième fil (oranžna, 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; // na définit notre servomotor Servo moteur1; Servo motor 2; Servo motor3; // Servo motor 4; Servo motor 5; int step_angle_mini = 4; int step_angle = 3; int kot, kot1, kot3, kot5, kot2; // kot int pas; int r, r1, r2, r3; int vpisnik; logična plavut = FALSE; logična fin1 = FALSE; logična fin2 = FALSE; logična fin3 = FALSE; logična fin4 = FALSE; beseda w; // spremenljivka odposlanca za pametni telefon ali 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 kot; // kot vrtenja (0 do 180)

//********************NASTAVITI*************************** ******** 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 relief l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); kot = 6; moteur1.write (100); kot1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); kot = 6; kot1 = 100; kot2 = 90; kot3 = 90; kot5 = 90; Serial.begin (9600); // sporočilo sporočila v modulu Bluetooth} // ******************** BOUCLE ****************** ***************** void loop () {

// Serial.print ("kot");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (kot1); Serial.print ("\ t"); Serial.print (kot2); Serial.print ("\ t "); Serial.print (kot 3); Serial.print (" / t "); Serial.print (kot 5); Serial.print (" / n ");

//Serial.print("angle ");

int i; w = sprejemnik (); // na vašem sprejemniku informacije o pametnem telefonu, spremenljivka w switch (w) {primer 1: TouchDown_Release (); break; 2. primer: TouchDown_Grab (); break; primer 3: Base_Rotation (); prelom; primer 4: Base_AntiRotation (); prelom; primer 5: Waist_Rotation (); prelom; primer 6: Waist_AntiRotation (); prelom; primer 7: Third_Arm_Rotation (); break; primer 8: Third_Arm_AntiRotation (); break; primer 9: Fourth_Arm_Rotation (); break; primer 10: Fourth_Arm_AntiRotation (); break; // primer 11: Fifth_Arm_Rotation (); break; // primer 12: Fifth_Arm_AntiRotation (); break; primer 21: Serial.print ("gumb za zadevo 1"); chiffre_final = 1; sauvegarde_positions1 [0] = kot; sauvegarde_positions1 [1] = kot1; sauvegarde_pozitions1 [2] = kot2; sauvegarde_pozitions1 [3] = kot3; sauvegarde_pozitions1 [4] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); zlom; primer 22: chiffre_final = 2; sauvegarde_positions2 [0] = kot; sauvegarde_positions2 [1] = kot1; sauvegarde_pozitions2 [2] = kot2; sauvegarde_positions2 [3] = kot3; sauvegarde_positions2 [4] = kot5; zlom; primer 23: chiffre_final = 3; sauvegarde_positions3 [0] = kot; sauvegarde_positions3 [1] = kot1; sauvegarde_pozitions3 [2] = kot2; sauvegarde_positions3 [3] = kot3; sauvegarde_positions3 [4] = kot5; prelom; primer 24: chiffre_final = 4; sauvegarde_positions4 [0] = kot; sauvegarde_positions4 [1] = kot1; sauvegarde_pozitions4 [2] = kot2; sauvegarde_positions4 [3] = kot3; sauvegarde_positions4 [4] = kot5; zlom; primer 25: chiffre_final = 5; sauvegarde_positions5 [0] = kot; sauvegarde_positions5 [1] = kot1; sauvegarde_pozitions5 [2] = kot2; sauvegarde_positions5 [3] = kot3; sauvegarde_positions5 [4] = kot5; zlom; primer 26: chiffre_final = 6; sauvegarde_positions6 [0] = kot; sauvegarde_positions6 [1] = kot1; sauvegarde_pozitions6 [2] = kot2; sauvegarde_positions6 [3] = kot3; sauvegarde_positions6 [4] = kot5; zlom; primer 27: chiffre_final = 7; sauvegarde_positions7 [0] = kot; sauvegarde_positions7 [1] = kot1; sauvegarde_pozitions7 [2] = kot2; sauvegarde_positions7 [3] = kot3; sauvegarde_positions7 [4] = kot5; zlom; primer 28: chiffre_final = 8; sauvegarde_positions8 [0] = kot; sauvegarde_positions8 [1] = kot1; sauvegarde_pozitions8 [2] = kot2; sauvegarde_positions8 [3] = kot3; sauvegarde_positions8 [4] = kot5; zlom; primer 29: chiffre_final = 9; sauvegarde_positions9 [0] = kot; sauvegarde_positions9 [1] = kot1; sauvegarde_pozitions9 [2] = kot2; sauvegarde_positions9 [3] = kot3; sauvegarde_positions9 [4] = kot5; zlom;

primer 31: Serial.print ("31"); enable_saving = 1; chiffre_final = 0; break; // ZAČNI

primer 33: Serial.print ("33"); enable_saving = 0; break; // BUTTON SAVE privzeto: break; } if (w == 32) {Serial.print ("\ nReproduciraj / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Položaj Sauvegarde 1: / n"); za (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Položaj Sauvegarde 2: / n"); za (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Položaj Sauvegarde 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 / nZank:"); Serial.print (i); Serial.print ("\ n"); stikalo (i) {primer 1: goto_moteur (*(sauvegarde_positions1)); zamuda (200); goto_moteur1 (*(sauvegarde_positions1+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions1+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions1+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions1+4)); zamuda (200); zlom; primer 2: goto_moteur (*(sauvegarde_positions2)); zamuda (200); goto_moteur1 (*(sauvegarde_positions2+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions2+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions2+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions2+4)); zamuda (200); zlom; primer 3: goto_moteur (*(sauvegarde_positions3)); zamuda (200); goto_moteur1 (*(sauvegarde_positions3+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions3+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions3+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions3+4)); zamuda (200); zlom; primer 4: goto_moteur (*(sauvegarde_positions4)); zamuda (200); goto_moteur1 (*(sauvegarde_positions4+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions4+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions4+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions4+4)); zamuda (200); zlom; primer 5: goto_moteur (*(sauvegarde_positions5)); zamuda (200); goto_moteur1 (*(sauvegarde_positions5+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions5+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions5+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions5+4)); zamuda (200); zlom; primer 6: goto_moteur (*(sauvegarde_positions6)); zamuda (200); goto_moteur1 (*(sauvegarde_positions6+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions6+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions6+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions6+4)); zamuda (200); zlom; primer 7: goto_moteur (*(sauvegarde_positions7)); zamuda (200); goto_moteur1 (*(sauvegarde_positions7+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions7+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions7+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions7+4)); zamuda (200); zlom; primer 8: goto_moteur (*(sauvegarde_positions8)); zamuda (200); goto_moteur1 (*(sauvegarde_positions8+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions8+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions8+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions8+4)); zamuda (200); zlom; primer 9: goto_moteur (*(sauvegarde_positions9)); zamuda (200); goto_moteur1 (*(sauvegarde_positions9+1)); zamuda (200); goto_moteur2 (*(sauvegarde_positions9+2)); zamuda (200); goto_moteur3 (*(sauvegarde_positions9+3)); zamuda (200); goto_moteur5 (*(sauvegarde_positions9+4)); zamuda (200); zlom; } Serial.print ("\ n *********************** FIN REPRODUCE ***************** / n "); zamuda (500); }} /*Serial.print ("prvenec / 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");*/

zamuda (100); } // **************************** FUNKCIJE ****************** ******************

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

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

Serial.flush ();

vrnitev w; }}

void goto_moteur (int angle_destination)

{while (kot_destinacijskega kota+step_angle) {Serial.print ("\ n -------------- * * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (kotni_destinacija); Serial.print ("\ n angle1 = / t"); Serial.print (kot); if (kot_odreditvenega kota + korak_kota) {kot = kot + kot_kota_koraka; moteur.write (kot);} zakasnitev (100); } moteur.write (kotni_destinacija); } void goto_moteur1 (int angle_destination) {while (kot_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (kotni_odstavek); Serial.print ("\ n angle2 = / t"); Serial.print (kot1); if (kot_destinacijskega kota1 +koraka_kota) {kota1 += koraka_kota; moteur1.write (kot 1);;} zakasnitev (100); } moteur1.write (kot_destinacija); } void goto_moteur2 (int angle_destination) {

medtem ko (kot_destinacijski kot2+korak_kota)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (kotni_destinacija); Serial.print ("\ n angle3 = / t"); Serial.print (kot2); if (kotni_destinacijski kot2 +korak_kota) {kot2 += kot_koraka; moteur2.write (kot 2);} zakasnitev (100); } moteur2.write (kot_destinacija); } void goto_moteur3 (int angle_destination) {

medtem ko (kot_destinacijski kot3+korak_kota)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (kotni_destinacija); Serial.print ("\ n angle4 = / t"); Serial.print (kot3); if (kotni_destinacijski kot3 +korak_kota) {kot3 += kot_koraka; moteur3.write (kot 3);} zamuda (100); } moteur3.write (kot_destinacija); } void goto_moteur5 (int angle_destination) {

medtem ko (kot_odločnega kota5+kotiček_koraka)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (kotni_destinacija); Serial.print ("\ n angle5 = / t"); Serial.print (kot5); if (kot_destinacijskega kota5 +korak_kota) {kot5 += korak_kota; moteur5.write (kot5);} zakasnitev (100); } moteur5.write (kot_destinacija); }

void TouchDown_Release () // Sprostitev gumba TouchDown

{if (kot5 <180) {kot5 = kot5+korak_kotni_mini; } moteur5.write (kot5); }

void TouchDown_Grab () // Zgrabi gumb TouchDown

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (kot5); } void Base_Rotation () {if (kot 0) {kot = kot-kot_kota_kota; } else kot = 0; moteur.write (kot); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else kot1 = 20; moteur1.write (kot 1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (kot 2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (kot3); }

Korak 6: To je to

Hvala za ogled, upam, da ste cenili!

Če vam je bil ta Instructable všeč, nas lahko obiščete za več! =)

Priporočena: