Përmbajtje:
- Hapi 1: Materialet
- Hapi 2: Shtypni 3D Krahun Robotik
- Hapi 3: Montimi elektronik
- Hapi 4: Aplikimi për smartphone
- Hapi 5: Kodi Arduino
- Hapi 6: Kjo është ajo
Video: Lojë Robotike e Krahëve - Kontrolluesi i Smartphone: 6 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:17
Përshëndetje !
Këtu është një lojë argëtuese verore: Krahu robotik i kontrolluar nga Smartphone !!
Siç mund ta shihni në Video, ju mund të kontrolloni krahun me disa Joysticks në smartphone tuaj.
Ju gjithashtu mund të ruani një model, që roboti do të riprodhohet në një lak, në mënyrë që të bëjë disa detyra të përsëritura si shembull. Por ky model është i modulueshëm ashtu siç dëshironi !!!!
Behu krijues !
Hapi 1: Materialet
Këtu mund të shihni materialin që ju nevojitet.
Do t'ju kushtojë rreth 50 € për të ndërtuar këtë krah robotik. Softueri dhe mjetet mund të zëvendësohen, por unë i përdor ato për këtë projekt.
Hapi 2: Shtypni 3D Krahun Robotik
Krahu Robotik u printua 3D (me prusa tonë i3).
Falë faqes në internet "HowtoMechatronics.com", skedarët e tij STL janë të mrekullueshëm për të ndërtuar një krah 3D.
Do të duhen rreth 20 orë për të printuar të gjitha pjesët.
Hapi 3: Montimi elektronik
Montimi është i ndarë në 2 pjesë:
Një pjesë elektronike, ku arduino është e lidhur me servos nga kunjat dixhitale, dhe me pajisjen Bluetooth (Rx, Tx).
Një pjesë e energjisë, ku servot mundësohen me 2 karikues telefoni (5V, 2A max).
Hapi 4: Aplikimi për smartphone
Aplikacioni u bë në shpikësin e aplikacionit 2. Ne përdorim 2 Joystick për të kontrolluar 4 Servos dhe 2 Butona të tjerë për të kontrolluar Mbërthimin përfundimtar.
Ne lidhim krahun dhe smartphone-in së bashku duke përdorur një modul Bluetooth (HC-06).
Së fundi, një mënyrë kursimi i lejon përdoruesit të kursejë deri në 9 pozicione për Krahun.
Krahu pastaj do të kalojë në një mënyrë automatike, ku ai do të riprodhojë pozicionet e ruajtura.
Hapi 5: Kodi Arduino
// 08/19 - Smartphone Robotic Arm i kontrolluar
#përfshi #përcakto E VUERTET trueN E VRTET #përcaktoni FALSE të rreme // ******************* DEKLARATA ***************** ***********
fjala rep; // mot envoyé du module Arduino ose smartphone
int chiffre_final = 0; int cmd = 3; // variable commande du servo moteur (troisième fil (portokalli, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activ_saving = 0; Servo moteur; // në shërbimin définit notre Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int_kapi = 3; kënd int, kënd 1, kënd 3, kënd 5, kënd 2; // kënd int pas; int r, r1, r2, r3; int regjistrues; fin boolean = FALSE; fin boolean1 = FALSE; fin boolean2 = FALSE; fin boolean3 = FALSE; fin boolean4 = FALSE; fjala w; // ndryshues i dërguar i smartphone -it ose modulit Arduino int sauvegarde_positions1 [5]; int sauvegarde_pozicionet2 [5]; int sauvegarde_pozicionet3 [5]; int sauvegarde_pozicionet4 [5]; int sauvegarde_pozicionet5 [5]; int sauvegarde_pozicionet6 [5]; int sauvegarde_pozicionet7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_pozicionet9 [5];
// këndi int; // këndi i rrotullimit (0 në 180)
// ******************* SETUP ************************* ******** 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.shtoj (cmd); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.tash (cmd3); // moteur4.tash (cmd4); moteur5.shtoj (cmd5); moteur.shkruaj (6); kënd = 6; moteur1.shkruaj (100); kënd1 = 100; moteur2.shkruaj (90); moteur3.shkruaj (90); //moteur4.shkruaj (12); moteur5.shkruaj (90); kënd = 6; kënd1 = 100; kënd2 = 90; kënd3 = 90; kënd5 = 90; Serial.filloj (9600); // permettra de communiquer au module Bluetooth} // ******************* BOUCLE ****************** ***************** void loop () {
// Serial.print ("kënd");
//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 = marrës (); // për marrjen e informacionit nga smartphone, ndryshues i ndryshueshëm w (w) {rasti 1: TouchDown_Release (); pushim; rasti 2: TouchDown_Grab (); pushim; rasti 3: Baza_Rotacioni (); pushim; rasti 4: Baza_AntiRotation (); pushim; rasti 5: Rrotullimi i belit (); pushim; rasti 6: Waist_AntiRotation (); pushim; rasti 7: Arma e tretë_Rrotullimi (); pushim; rasti 8: Arma e tretë_AntiRotation (); pushim; rasti 9: Fourth_Arm_Rotation (); pushim; rasti 10: Fourth_Arm_AntiRotation (); pushim; // rasti 11: Fryth_Arm_Rotation (); pushim; // rasti 12: Fifth_Arm_AntiRotation (); pushim; rasti 21: Serial.print ("butoni i rastit 1"); chiffre_final = 1; sauvegarde_positions1 [0] = kënd; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); pushim; rasti 22: chiffre_final = 2; sauvegarde_positions2 [0] = angle; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; pushim; rasti 23: chiffre_final = 3; sauvegarde_positions3 [0] = angle; sauvegarde_positions3 [1] = angle1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = angle5; rasti 24: chiffre_final = 4; sauvegarde_positions4 [0] = angle; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; pushim; rasti 25: chiffre_final = 5; sauvegarde_positions5 [0] = angle; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; pushim; rasti 26: chiffre_final = 6; sauvegarde_positions6 [0] = angle; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; pushim; rasti 27: chiffre_final = 7; sauvegarde_positions7 [0] = angle; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; pushim; rasti 28: chiffre_final = 8; sauvegarde_positions8 [0] = angle; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; pushim; rasti 29: chiffre_final = 9; sauvegarde_positions9 [0] = angle; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; pushim;
rasti 31: Serial.print ("31"); activ_saving = 1; chiffre_final = 0; pushim; // FILLO
rasti 33: Serial.print ("33"); activ_saving = 0; pushim; // BUTONI RUAJ parazgjedhje: pushim; } if (w == 32) {Serial.print ("\ nRiprodho / nFinalja e çifres:"); Serial.print (chiffre_final); Serial.print ("\ n Pozicioni Sauvegarde 1: / n"); për (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 2: / n"); për (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 3: / n"); për (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} për (i = 1; i <= chiffre_final; i ++) {Serial print ("\ n / n FILLIM / nLapë:"); Serial.print (i); Serial.print ("\ n"); kaloni (i) {rasti 1: goto_moteur (*(sauvegarde_positions1))); vonesë (200); goto_moteur1 (*(sauvegarde_positions1+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions1+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions1+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions1+4)); vonesë (200); pushim; rasti 2: goto_moteur (*(sauvegarde_positions2)); vonesë (200); goto_moteur1 (*(sauvegarde_positions2+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions2+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions2+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions2+4)); vonesë (200); pushim; rasti 3: goto_moteur (*(sauvegarde_positions3)); vonesë (200); goto_moteur1 (*(sauvegarde_positions3+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions3+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions3+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions3+4)); vonesë (200); pushim; rasti 4: goto_moteur (*(sauvegarde_positions4)); vonesë (200); goto_moteur1 (*(sauvegarde_positions4+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions4+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions4+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions4+4)); vonesë (200); pushim; rasti 5: goto_moteur (*(sauvegarde_positions5)); vonesë (200); goto_moteur1 (*(sauvegarde_positions5+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions5+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions5+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions5+4)); vonesë (200); pushim; rasti 6: goto_moteur (*(sauvegarde_positions6)); vonesë (200); goto_moteur1 (*(sauvegarde_positions6+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions6+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions6+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions6+4)); vonesë (200); pushim; rasti 7: goto_moteur (*(sauvegarde_positions7)); vonesë (200); goto_moteur1 (*(sauvegarde_positions7+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions7+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions7+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions7+4)); vonesë (200); pushim; rasti 8: goto_moteur (*(sauvegarde_positions8)); vonesë (200); goto_moteur1 (*(sauvegarde_positions8+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions8+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions8+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions8+4)); vonesë (200); pushim; rasti 9: goto_moteur (*(sauvegarde_positions9)); vonesë (200); goto_moteur1 (*(sauvegarde_positions9+1)); vonesë (200); goto_moteur2 (*(sauvegarde_positions9+2)); vonesë (200); goto_moteur3 (*(sauvegarde_positions9+3)); vonesë (200); goto_moteur5 (*(sauvegarde_positions9+4)); vonesë (200); pushim; } Serial.print ("\ n ********************* FIN RIPRODUCE ***************** / n "); vonesë (500); }} /*Serial.print ("debutimi / 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");*/
vonesë (100); } // ************************** FONCTIONS ***************** ******************
fjalë recevoir () {// fonction permettant de recevoir l'information du smartphone
nëse (Serial.disponueshëm ()) {w = Serial.lexim ();
Serial.flush ();
kthehu w; }}
void goto_moteur (int angle_destination)
{ndërsa (këndi_këndi i destinacionit+këndi i hapit) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (destinacioni_kënd); Serial.print ("\ n kënd1 = / t"); Serial.print (kënd); nëse (këndi_këndi i_destinimit + këndi i hapit) {këndi = këndi + këndi i hapit; moteur.shkruaj (këndi);} vonesë (100); } moteur.write (këndi_destinimi); } void goto_moteur1 (int angle_destination) {ndërsa (angle_destination angle11+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (destinacioni_kënd); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); nëse (këndi_këndi i destinimit1 +këndi i hapit) {këndi1 += këndi i hapit; moteur1.shkruaj (këndi1);;} vonesë (100); } moteur1.write (këndi_destinimi); } void goto_moteur2 (int angle_destination) {
ndërsa (këndi_këndi i përcaktimit2+këndi i hapit)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (kendi_destinimi); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); nëse (këndi_këndi i destinimit2 +këndi i hapit) {këndi2 += këndi i hapit; moteur2.shkruaj (këndi2);} vonesë (100); } moteur2.write (këndi_destinimi); } void goto_moteur3 (int angle_destination) {
ndërsa (këndi_këndi i destinimit3+këndi i hapit)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (kendi_destinimi); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); nëse (këndi_këndi i destinimit3 +këndi i hapit) {këndi3 += këndi i hapit; moteur3.shkruaj (këndi3);} vonesë (100); } moteur3.write (këndi_destinimi); } void goto_moteur5 (int angle_destination) {
ndërsa (këndi_këndi i destinimit5+këndi i hapit)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (kendi_destinimi); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); nëse (këndi_këndi i destinimit5 +këndi i hapit) {këndi5 += këndi i hapit; moteur5.shkruaj (këndi5);} vonesë (100); } moteur5.write (këndi_destinimi); }
i pavlefshëm TouchDown_Release () // TouchDown Button Release
{if (angle5 <180) {angle5 = angle5+step_angle_mini; } moteur5.shkruaj (këndi5); }
i pavlefshëm TouchDown_Grab () // Kapni Butonin TouchDown
{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.shkruaj (këndi5); } void Base_Rotation () {if (angle 0) {angle = angle-step_angle; } tjetër kënd = 0; moteur.shkruaj (kënd); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } tjetër kënd1 = 20; moteur1.shkruaj (këndi 1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.shkruaj (këndi2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.shkruaj (këndi3); }
Hapi 6: Kjo është ajo
Faleminderit për shikimin, shpresoj të keni vlerësuar!
Nëse ju pëlqeu ky Instructable, me siguri mund të na vizitoni për më shumë! =)
Recommended:
Proteza robotike: 3 hapa
Proteza Robotike: Ky është projekti përfundimtar i Masterit tim. Ai konsiston në bërjen e prototipit të një proteze robotike të krijuar për t’u prodhuar në vend duke përdorur një printer 3D dhe komponentë elektronikë të lehtë për t’u programuar. Një pjesë shumë e rëndësishme ishte përhapja e saj në një platformë
MBAJTJE Robotike me IT Syze: 5 hapa
ROBOT DE SI BENI ME GOTA T IT IT: Ky projekt ju tregon se si të bëni DEBOTIM Robotik me syze IT. Në këtë projekt përfshihet një montim i printuar në 3D i cili do të bëjë një aktivizues linear nëse kombinohet me raftin dhe pjesët e lira të robotikëve të lirë. Filloni duke shkarkuar montimin këtu: https: //www.th
Mini lojë "Guess the Number" Lojë me mikro: bit: 10 hapa
Mini Makina e lojës "Guess the Number" me Micro: bit: A keni luajtur ndonjëherë " Guess the Number "? Kjo është një makinë lojërash shumë e thjeshtë për t’u ndërtuar që luan " Guess the Number " me ty Ne e projektuam këtë projekt DIY për të inkurajuar lojën fizike dhe për t'i ndihmuar fëmijët të mësojnë programim. Ai përdor një MU
Lojë Microbit Tic Tac Toe Lojë: 4 hapa (me fotografi)
Microbit Tic Tac Toe Lojë: Për këtë projekt, bashkëpunëtori im - @descartez dhe unë krijuam një lojë të mrekullueshme tic tac toe duke përdorur radio funksionalitetin e mikrobitëve. Nëse nuk keni dëgjuar më parë për mikrobit, ata janë një mikrokontrollues i mrekullueshëm i krijuar për t'u mësuar fëmijëve programimin. Ata
Lojë Maze për të kontrolluar me smartphone: 5 hapa (me fotografi)
Lojë Maze për të kontrolluar me smartphone: Lojë labirint për të kontrolluar me telefonin inteligjent. Labirinti lëviz sipas pjerrësisë së smartphone -it. Para së gjithash, ju lutemi shikoni videon. Imazhi i lëvizjes Raspberry Pi është një server websocket.2. Smartphone është një klient Websocket.3. Smartphone ju dërgon informacionin