Sadržaj:
- Korak 1: Materijali
- Korak 2: 3D ispis robotske ruke
- Korak 3: Elektronička montaža
- Korak 4: Aplikacija za pametni telefon
- Korak 5: Arduino kod
- Korak 6: To je to
Video: Robotic Arm Game - Kontroler za pametni telefon: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
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
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
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
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 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
// 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:
Staklena kamena LED cijev (WiFi kontrolirano putem aplikacije za pametni telefon): 6 koraka (sa slikama)
Staklena kamena LED cijev (WiFi kontrolirana putem aplikacije za pametne telefone): Pozdrav kolege proizvođači! U ovom uputstvu pokazat ću vam kako izgraditi LED cijev koja kontrolira WiFi i koja je ispunjena staklenim kamenjem za lijep učinak difuzije. LED diode se mogu pojedinačno adresirati pa su stoga mogući lijepi efekti u
Verander Een Ongebruikte pametni telefon u tankom zaslonu Een: 6 koraka (sa slikama)
Verander Een Ongebruikte pametni telefon u Een tankom zaslonu: Ovaj vodič je na nizozemskom, ovdje pogledajte englesku verziju. Heb jij een (oude) ongebruikte pametni telefon? Izradite tanak zaslon s Google proračunskim tablicama i olovkom i papirnim vratima deze eenvoudige tutorial te volgen.Als je de tutorial hebt voltooid
Pretvorite neupotrebljeni pametni telefon u pametni zaslon: 6 koraka (sa slikama)
Pretvorite neupotrebljeni pametni telefon u pametni zaslon: Vodič za Deze nalazi se na engleskom jeziku, za nedjeljnu verziju kliknite ovdje. Imate li (stari) nekorišteni pametni telefon? Pretvorite ga u pametni zaslon pomoću Google tablica i neke olovke i papira slijedeći ovaj jednostavan korak-po-korak vodič. Kad završiš
Android pametni telefon kao USB (!!) web kamera: 8 koraka (sa slikama)
Android pametni telefon kao USB (!!) web kamera: U posljednjih nekoliko mjeseci svi smo bili prisiljeni komunicirati putem interneta, a ne osobno. Kao student, većina mojih predavanja pretvorila se u Zoom sastanke, a isto se dogodilo i s mojim satima podučavanja. U sljedećih nekoliko tjedana mnogi će učenici svih dobnih skupina
Pametni budilnik: pametni budilnik napravljen od Raspberry Pi: 10 koraka (sa slikama)
Pametni budilnik: pametni budilnik napravljen od Raspberry Pi: Jeste li ikada poželjeli pametni sat? Ako je tako, ovo je rješenje za vas! Napravio sam Smart Alarm Clock, ovo je sat s kojim možete promijeniti vrijeme alarma prema web stranici. Kad se alarm oglasi, oglasit će se zvuk (zujalica) i 2 svjetla će se