INHOUDSOPGAWE:
- Stap 1: materiaal
- Stap 2: 3D -druk die robotarm uit
- Stap 3: Elektroniese montering
- Stap 4: Smartphone -toepassing
- Stap 5: Die Arduino -kode
- Stap 6: Dit is dit
Video: Robotarmspel - slimfoonbeheerder: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Hallo!
Hier is 'n prettige somerspel: Die robotarm wat deur 'n slimfoon beheer word!
Soos u op die video kan sien, kan u die arm met 'n paar joysticks op u slimfoon beheer.
U kan ook 'n patroon stoor wat die robot in 'n lus sal reproduseer om 'n paar herhalende take as voorbeeld uit te voer. Maar hierdie patroon is modulerbaar soos u wil !!!!
Wees kreatief !
Stap 1: materiaal
Hier kan u die materiaal sien wat u benodig.
Dit sal u ongeveer 50 € kos om hierdie robotarm te bou. Die sagteware en gereedskap kan vervang word, maar ek het dit vir hierdie projek gebruik.
Stap 2: 3D -druk die robotarm uit
Die robotarm is 3D gedruk (met ons prusa i3).
Danksy die webwerf "HowtoMechatronics.com" is sy STL -lêers wonderlik om 'n 3D -arm te bou.
Dit sal ongeveer 20 uur neem om al die stukke te druk.
Stap 3: Elektroniese montering
Die montage is apart in 2 dele:
'N Elektroniese deel, waar die arduino verbind is met die servo's deur die Digital Pins, en met die Bluetooth -toestel (Rx, Tx).
'N Power -deel, waar die servo's aangedryf word met 2 telefoonlaaiers (5V, 2A max).
Stap 4: Smartphone -toepassing
Die aansoek is op App uitvinder 2. Ons gebruik 2 joystick om 4 servo's en nog 2 knoppies te beheer om die finale greep te beheer.
Ons verbind Arm en Smartphone met 'n Bluetooth-module (HC-06).
Uiteindelik kan 'n besparingsmodus die gebruiker tot 9 posisies vir die arm bespaar.
Die arm gaan dan in 'n outomatiese modus, waar hy die gestoorde posisies weergee.
Stap 5: Die Arduino -kode
// 08/19 - Robotarm -slimfoon beheer
#sluit #definieer WAAR waar #definieer ONWAAR vals // ******************** VERKLARINGE ***************** ************
woord rep; // vir 'n module met 'n Arduino of 'n slimfoon
int chiffre_final = 0; int cmd = 3; // veranderlike commande du servo moteur (troisième fil (oranje, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int active_saving = 0; Servomotor; // on définit notre servomoteur Servo moteur1; Servomotor2; Servomotor3; // Servomotor4; Servomotor5; int step_angle_mini = 4; int step_angle = 3; int hoek, hoek1, hoek3, hoek5, hoek2; // hoek int pas; int r, r1, r2, r3; int enregistrer; boolean vin = ONWAAR; boolean fin1 = ONWAAR; boolean fin2 = ONWAAR; boolean fin3 = ONWAAR; boolean fin4 = ONWAAR; woord w; // veranderlike gesante van slimfone of modules 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 hoek; // rotasiehoek (0 a 180)
//********************STEL OP*************************** ******** ongeldige opstelling () {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.aanheg (cmd2); moteur3.aanheg (cmd3); // moteur4.attach (cmd4); moteur5.aanheg (cmd5); moteur.write (6); hoek = 6; moteur1.write (100); hoek1 = 100; moteur2.write (90); moteur3. skryf (90); // motor4. skryf (12); moteur5. skryf (90); hoek = 6; hoek1 = 100; hoek2 = 90; hoek3 = 90; hoek5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************* BOUCLE ****************** ******************* leegte lus () {
// Serial.print ("hoek");
//Serial.print(angle);Serial.print ("\ t"); Serial.print (hoek1); Serial.print ("\ t"); Serial.print (hoek2); Serial.print ("\ t "); Serial.print (hoek3); Serial.print (" / t "); Serial.print (hoek5); Serial.print (" / n ");
//Serial.print("angle ");
int ek; w = recevoir (); // op 'n manier om u inligting oor die slimfoon te ontvang, met die veranderlike w skakelaar (w) {geval 1: TouchDown_Release (); breek; geval 2: TouchDown_Grab (); breek; geval 3: Base_Rotation (); breek; geval 4: Base_AntiRotation (); breek; saak 5: Waist_Rotation (); breek; geval 6: Waist_AntiRotation (); breek; saak 7: Derde_Arm_Rotasie (); breek; saak 8: Derde_Arm_AntiRotasie (); breek; saak 9: Fourth_Arm_Rotation (); breek; saak 10: Fourth_Arm_AntiRotation (); breek; // saak 11: Vyfde_Arm_Rotasie (); breek; // saak 12: Fifth_Arm_AntiRotation (); breek; saak 21: Serial.print ("saakknoppie 1"); chiffre_final = 1; sauvegarde_positions1 [0] = hoek; sauvegarde_positions1 [1] = hoek1; sauvegarde_positions1 [2] = hoek2; sauvegarde_positions1 [3] = hoek3; sauvegarde_ = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); breek; saak 22: chiffre_final = 2; sauvegarde_positions2 [0] = hoek; sauvegarde_positions2 [1] = hoek1; sauvegarde_positions2 [2] = hoek2; sauvegarde_positions2 [3] = hoek3; sauvegarde_positions2 [4] = hoek5; breek; saak 23: chiffre_final = 3; sauvegarde_positions3 [0] = hoek; sauvegarde_positions3 [1] = hoek1; sauvegarde_positions3 [2] = hoek2; sauvegarde_positions3 [3] = hoek3; sauvegarde_positions3 [4] = hoek5; saak 24: chiffre_final = 4; sauvegarde_positions4 [0] = hoek; sauvegarde_positions4 [1] = hoek1; sauvegarde_positions4 [2] = hoek2; sauvegarde_positions4 [3] = hoek3; sauvegarde_positions4 [4] = hoek5; breek; saak 25: chiffre_final = 5; sauvegarde_positions5 [0] = hoek; sauvegarde_positions5 [1] = hoek1; sauvegarde_positions5 [2] = hoek2; sauvegarde_positions5 [3] = hoek3; sauvegarde_positions5 [4] = hoek5; breek; saak 26: chiffre_final = 6; sauvegarde_positions6 [0] = hoek; sauvegarde_positions6 [1] = hoek1; sauvegarde_positions6 [2] = hoek2; sauvegarde_positions6 [3] = hoek3; sauvegarde_positions6 [4] = hoek5; breek; saak 27: chiffre_final = 7; sauvegarde_positions7 [0] = hoek; sauvegarde_positions7 [1] = hoek1; sauvegarde_positions7 [2] = hoek2; sauvegarde_positions7 [3] = hoek3; sauvegarde_positions7 [4] = hoek5; breek; geval 28: chiffre_final = 8; sauvegarde_positions8 [0] = hoek; sauvegarde_positions8 [1] = hoek1; sauvegarde_positions8 [2] = hoek2; sauvegarde_positions8 [3] = hoek3; sauvegarde_positions8 [4] = hoek5; breek; saak 29: chiffre_final = 9; sauvegarde_positions9 [0] = hoek; sauvegarde_positions9 [1] = hoek1; sauvegarde_positions9 [2] = hoek2; sauvegarde_positions9 [3] = hoek3; sauvegarde_positions9 [4] = hoek5; breek;
saak 31: Serial.print ("31"); active_saving = 1; chiffre_final = 0; breek; // BEGIN
saak 33: Serial.print ("33"); active_saving = 0; breek; // BUTTON SAVE default: break; } as (w == 32) {Serial.print ("\ nReproduseer / nChiffre -finale:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde -posisie 1: / n"); vir (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde posisie 2: / n"); vir (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde posisie 3: / n"); vir (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} vir (i = 1; i <= chiffre_final; i ++) {Serial. print ("\ n / n BEGIN / nLus:"); Serial.print (i); Serial.print ("\ n"); skakelaar (i) {geval 1: goto_moteur (*(sauvegarde_positions1)); vertraging (200); goto_moteur1 (*(sauvegarde_positions1+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions1+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions1+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions1+4)); vertraging (200); breek; geval 2: goto_moteur (*(sauvegarde_positions2)); vertraging (200); goto_moteur1 (*(sauvegarde_positions2+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions2+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions2+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions2+4)); vertraging (200); breek; saak 3: goto_moteur (*(sauvegarde_positions3)); vertraging (200); goto_moteur1 (*(sauvegarde_positions3+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions3+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions3+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions3+4)); vertraging (200); breek; saak 4: goto_moteur (*(sauvegarde_positions4)); vertraging (200); goto_moteur1 (*(sauvegarde_positions4+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions4+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions4+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions4+4)); vertraging (200); breek; saak 5: goto_moteur (*(sauvegarde_positions5)); vertraging (200); goto_moteur1 (*(sauvegarde_positions5+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions5+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions5+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions5+4)); vertraging (200); breek; saak 6: goto_moteur (*(sauvegarde_positions6)); vertraging (200); goto_moteur1 (*(sauvegarde_positions6+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions6+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions6+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions6+4)); vertraging (200); breek; saak 7: goto_moteur (*(sauvegarde_positions7)); vertraging (200); goto_moteur1 (*(sauvegarde_positions7+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions7+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions7+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions7+4)); vertraging (200); breek; saak 8: goto_moteur (*(sauvegarde_positions8)); vertraging (200); goto_moteur1 (*(sauvegarde_positions8+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions8+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions8+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions8+4)); vertraging (200); breek; saak 9: goto_moteur (*(sauvegarde_positions9)); vertraging (200); goto_moteur1 (*(sauvegarde_positions9+1)); vertraging (200); goto_moteur2 (*(sauvegarde_positions9+2)); vertraging (200); goto_moteur3 (*(sauvegarde_positions9+3)); vertraging (200); goto_moteur5 (*(sauvegarde_positions9+4)); vertraging (200); breek; } Serial.print ("\ n ********************** FIN REPRODUCE ***************** / n "); vertraging (500); }} /*Serial.print ("debuut / 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");*/
vertraging (100); } // *************************** FONKSIES ****************** *******************
word recevoir () {// fonction permettant de recevoir l'information du smartphone
as (Serial.available ()) {w = Serial.read ();
Serial.flush ();
terugkeer w; }}
leeg goto_moteur (int hoek_bestemming)
{terwyl (hoek_bestemmingshoek+staphoek) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (hoek_bestemming); Serial.print ("\ n hoek1 = / t"); Serial.print (hoek); as (hoek_bestemmingshoek + staphoek) {hoek = hoek + staphoek; moteur.write (hoek);} vertraging (100); } moteur.write (hoek_bestemming); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (hoek_bestemming); Serial.print ("\ n hoek2 = / t"); Serial.print (hoek1); as (hoek_bestemmingshoek1 +staphoek) {hoek1 += staphoek; moteur1.write (hoek1);;} vertraging (100); } moteur1.write (hoek_bestemming); } ongeldig goto_moteur2 (int hoek_bestemming) {
terwyl (hoek_bestemmingshoek2+stap_hoek)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (hoek_bestemming); Serial.print ("\ n hoek3 = / t"); Serial.print (hoek2); as (hoek_bestemmingshoek2 +staphoek) {hoek2 += staphoek; moteur2.write (hoek2);} vertraging (100); } moteur2.write (hoek_bestemming); } void goto_moteur3 (int angle_destination) {
terwyl (hoek_bestemmingshoek3+stap_hoek)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (hoek_bestemming); Serial.print ("\ n hoek4 = / t"); Serial.print (hoek3); as (hoek_bestemmingshoek3 +stap_hoek) {hoek3 += stap_hoek; moteur3.write (hoek3);} vertraging (100); } moteur3.write (hoek_bestemming); } ongeldig goto_moteur5 (int hoek_bestemming) {
terwyl (hoek_bestemmingshoek5+stap_hoek)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (hoek_bestemming); Serial.print ("\ n hoek5 = / t"); Serial.print (hoek5); as (hoek_bestemmingshoek5 +staphoek) {hoek5 += staphoek; moteur5.write (hoek5);} vertraging (100); } moteur5.write (hoek_bestemming); }
ongeldig TouchDown_Release () // TouchDown -knoppie -vrystelling
{if (hoek5 <180) {hoek5 = hoek5+stap_hoek_mini; } moteur5.write (hoek5); }
leegte TouchDown_Grab () // TouchDown Button Grab
{if (hoek5> 0) {hoek5 = hoek5-stap_hoek_mini; } moteur5.write (hoek5); } ongeldig Base_Rotation () {if (hoek 0) {hoek = hoek-stap_hoek; } anders hoek = 0; moteur.write (hoek); } void Waist_Rotation () {if (hoek1 20) {hoek1 = hoek1-stap_hoek; } anders hoek1 = 20; moteur1.skryf (hoek1); } void Third_Arm_Rotation () {if (hoek2 0) {hoek2 = hoek2-stap_hoek; } moteur2.write (hoek2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (hoek3); }
Stap 6: Dit is dit
Dankie dat jy gekyk het, ek hoop jy waardeer dit!
As u van hierdie Instructable gehou het, kan u ons beslis meer besoek! =)
Aanbeveel:
Spelontwerp in vyf stappe: 5 stappe
Spelontwerp in fliek in 5 stappe: Flick is 'n baie eenvoudige manier om 'n speletjie te maak, veral iets soos 'n legkaart, visuele roman of avontuurlike spel
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: 3 stappe
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: in hierdie instruksies gaan ons gesigsopsporing uitvoer op Raspberry Pi 4 met Shunya O/S met behulp van die Shunyaface-biblioteek. Shunyaface is 'n biblioteek vir gesigherkenning/opsporing. Die projek het ten doel om die vinnigste opsporing en herkenningssnelheid te bereik met
DIY Vanity Mirror in eenvoudige stappe (met LED -strookligte): 4 stappe
DIY Vanity Mirror in eenvoudige stappe (met behulp van LED Strip Lights): In hierdie pos het ek 'n DIY Vanity Mirror gemaak met behulp van die LED strips. Dit is regtig cool, en u moet dit ook probeer
Arduino Halloween Edition - Zombies pop -out skerm (stappe met foto's): 6 stappe
Arduino Halloween Edition - Zombies pop -out skerm (stappe met foto's): wil u u vriende skrik en 'n skreeu geraas maak tydens Halloween? Of wil u net 'n goeie grap maak? Hierdie pop-up skerm van Zombies kan dit doen! In hierdie instruksies sal ek u leer hoe u maklik Zombies kan spring deur Arduino te gebruik. Die HC-SR0
Speel Doom op u iPod in 5 maklike stappe !: 5 stappe
Speel Doom op u iPod in 5 maklike stappe !: 'n Stap-vir-stap gids oor hoe u Rockbox op u iPod kan dubbellaai om Doom en tientalle ander speletjies te speel. Dit is iets baie maklik om te doen, maar baie mense staan nog steeds verbaas as hulle sien hoe ek op my iPod doom speel en deurmekaar raak met die instruksies