Obsah:
- Krok 1: Materiály
- Krok 2: 3D tlač robotického ramena
- Krok 3: Elektronická montáž
- Krok 4: Aplikácia pre smartphone
- Krok 5: Kód Arduino
- Krok 6: To je ono
Video: Hra s robotickým ramenom - ovládač pre smartfón: 6 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
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
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
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áž
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 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
// 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:
Aruduino LED hra Rýchle kliknutie Hra pre dvoch hráčov: 8 krokov
Aruduino LED hra Rýchle kliknutie Hra pre dvoch hráčov: Tento projekt je inšpirovaný @HassonAlkeim. Ak ste ochotní sa podrobne pozrieť, tu je odkaz, ktorý si môžete pozrieť https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Táto hra je vylepšenou verziou hry Alkeim's. Jedná sa o
Kladková, robotická lampa s výkyvným ramenom: 6 krokov
Robotická lampa s kyvným ramenom: Budete potrebovať: Náradie: -Nožnice na drôt -Píla -Ráčna alebo kľúč -Elektrická vŕtačka -Laserová rezačka (voliteľné) -Elektronika pištole na lepidlo: -2x hobby servomotory -Arduino/RaspberryPi/Elegoo súprava-modul na joystick alebo 2 potenciometreDodávky/iný materiál
4 robot s mechanickým ramenom DOF ovládaný Arduinom: 6 krokov
4 Robot s mechanickým ramenom DOF ovládaný Arduinom: Nedávno som kúpil túto sadu na aliexpress, ale nenašiel som návod, ktorý by sa k tomuto modelu hodil. Nakoniec to urobí takmer dvakrát a urobí veľa experimentov, aby zistil správne montážne uhly serva. Primeraná dokumentácia je, že
Statív pre domácich majstrov - Ako vyrobiť statív pre smartfón a fotoaparát z antény: 8 krokov
Statív pre domácich majstrov | Ako vyrobiť statív pre smartfóny a fotoaparáty pomocou antény: Keď hľadám statív na vytváranie videí pre CookQueens, zistil som, že cena každého statívu za 5 stôp začína na veľmi vysokej úrovni na rôznych webových stránkach elektronického obchodu. Tiež čakám na zľavu, ale tú som nedostal. Potom som sa rozhodol urobiť m
Cenovo dostupné riešenie pre víziu s robotickým ramenom založeným na Arduine: 19 krokov (s obrázkami)
Cenovo dostupné riešenie vízie s robotickým ramenom založeným na Arduine: Keď hovoríme o strojovom videní, vždy sa nám to zdá také nedosiahnuteľné. Vytvorili sme demo vízie s otvoreným zdrojovým kódom, ktoré by bolo veľmi jednoduché urobiť pre každého. V tomto videu s kamerou OpenMV robot bez ohľadu na to, kde je červená kocka,