INHOUDSOPGAWE:

Robotarmspel - slimfoonbeheerder: 6 stappe
Robotarmspel - slimfoonbeheerder: 6 stappe

Video: Robotarmspel - slimfoonbeheerder: 6 stappe

Video: Robotarmspel - slimfoonbeheerder: 6 stappe
Video: Webinar: iiQKA-gebruikersinterface 2024, Julie
Anonim
Robotic Arm Game - Smartphone Controller
Robotic Arm Game - Smartphone Controller

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

Materiaal
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

3D -druk die robotarm uit
3D -druk die robotarm uit
3D -druk die robotarm uit
3D -druk die robotarm uit
3D -druk die robotarm uit
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

Elektroniese montering
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

Smartphone -toepassing
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

Die Arduino -kode
Die Arduino -kode
Die Arduino -kode
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: