INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
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! =)