Sadržaj:
- Korak 1: Materijali
- Korak 2: 3D ispis robotske ruke
- Korak 3: Elektronska 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 izmjena: 2024-01-30 08:05
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
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
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
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 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
// 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:
Kako instalirati Raspbian OS u Raspberry Pi koristeći NOOBS softver i pametni telefon .: 6 koraka
Kako instalirati Raspbian OS u Raspberry Pi koristeći NOOBS softver i pametni telefon.: Pozdrav svima! danas u ovom vodiču pokazujem vam kako lako instalirati Raspbian OS u Raspberry Pi pomoću NOOBS softvera i pametnog telefona
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 koja je ispunjena staklenim kamenjem za lijep efekt difuzije. LED diode se mogu pojedinačno adresirati i stoga su mogući lijepi efekti u
Verander Een Ongebruikte pametni telefon u tankom ekranu Een: 6 koraka (sa slikama)
Verander Een Ongebruikte pametni telefon u Een tankom ekranu: Ovaj vodič je na holandskom, pogledajte englesku verziju ovdje. Heb jij een (oude) ongebruikte smartphone? Napravite tanak ekran sa Google tablicama i olovkom i papirom za otvaranje vodiča za volju.Al je to vodič za voltooid
Pretvorite neupotrebljeni pametni telefon u pametni ekran: 6 koraka (sa slikama)
Pretvorite neupotrebljeni pametni telefon u pametni ekran: Vodič za Deze nalazi se na engleskom jeziku, za verziju Nederlandse kliknite ovdje ili kliknite. 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šite
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