Inhoudsopgave:

Robotarmspel - Smartphone-controller - Ajarnpa
Robotarmspel - Smartphone-controller - Ajarnpa

Video: Robotarmspel - Smartphone-controller - Ajarnpa

Video: Robotarmspel - Smartphone-controller - Ajarnpa
Video: Консультант от бога Tg: cadrolikk 2024, November
Anonim
Robotarmspel - Smartphone-controller
Robotarmspel - Smartphone-controller

Hallo !

Hier een leuk zomerspel: de robotarm bestuurd door smartphone !!

Zoals je op de video kunt zien, kun je de arm bedienen met enkele joysticks op je smartphone.

U kunt ook een patroon opslaan, dat de robot in een lus zal reproduceren, om bijvoorbeeld repetitieve taken uit te voeren. Maar dit patroon is naar wens aanpasbaar !!!!

Wees creatief !

Stap 1: Materialen

Materialen
Materialen

Hier ziet u het materiaal dat u nodig heeft.

Het kost je ongeveer € 50 om deze robotarm te bouwen. De software en tools kunnen worden vervangen, maar die heb ik voor dit project gebruikt.

Stap 2: 3D print de robotarm

3D print de robotarm
3D print de robotarm
3D print de robotarm
3D print de robotarm
3D print de robotarm
3D print de robotarm

De robotarm is 3D geprint (met onze prusa i3).

Dankzij de website "HowtoMechatronics.com" zijn zijn STL-bestanden geweldig om een 3D-arm te bouwen.

Het duurt ongeveer 20 uur om alle stukken te printen.

Stap 3: Elektronische montage

Elektronische montage
Elektronische montage

De montage is gescheiden in 2 delen:

Een elektronisch onderdeel, waarbij de arduino is verbonden met de servo's door de digitale pinnen en met het Bluetooth-apparaat (Rx, Tx).

Een Power-gedeelte, waarbij de servo's worden gevoed met 2 telefoonopladers (5V, 2A max).

Stap 4: Smartphone-applicatie

Smartphone-applicatie
Smartphone-applicatie

De applicatie is gemaakt op App-uitvinder 2. We gebruiken 2 joysticks om 4 servo's te bedienen en nog 2 knoppen om de laatste grip te bedienen.

We verbinden Arm en Smartphone met elkaar door middel van een Bluetooth-module (HC-06).

Ten slotte kan de gebruiker in een spaarmodus tot 9 posities voor de arm opslaan.

De arm gaat dan in een automatische modus, waar hij de opgeslagen posities reproduceert.

Stap 5: De Arduino-code

De Arduino-code
De Arduino-code
De Arduino-code
De Arduino-code

// 08/19 - Robotarm Smartphone bestuurd

#include #define TRUE true #define FALSE false //******************** VERKLARINGEN***************** **********

woord rep; // mot envoyé du module Arduino op smartphone

int chiffre_final = 0; int cmd=3; // variabele 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; //op definit notre servomoteur Servo moteur1; servomotor2; Servomotor3; //Servomotor4; Servomotor5; int step_angle_mini = 4; int stap_hoek = 3; int hoek, hoek1, hoek3, hoek5, hoek2;//hoek int pas; int r, rl, r2, r3; int inschrijver; booleaanse fin = ONWAAR; boolean fin1 = ONWAAR; boolean fin2 = ONWAAR; boolean fin3 = ONWAAR; boolean fin4 = ONWAAR; woord w; // variabele 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 hoek; // hoek de rotatie (0 a 180)

//********************OPSTELLING*************************** ******** 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.attach(cmd); // op vertrouwen op de opdracht moteur1.attach (cmd1); moteur2.attach(cmd2); moteur3.attach(cmd3); // moteur4.attach (cmd4); moteur5.attach(cmd5); motief.schrijven(6); hoek = 6; moteur1.write(100); hoek1 = 100; moteur2.write(90); moteur3.write(90); //moteur4.write (12); moteur5.write(90); hoek=6; hoek1=100; hoek2= 90; hoek3=90; hoek5=90; Serieel.begin(9600); // permettra de communiquer au module Bluetooth } //********************BOUCLE******************** **************** ongeldige lus() {

// Serial.print ("hoek");

//Serial.print(hoek);Serial.print ("\t");Serial.print(angle1);Serial.print ("\t");Serial.print(angle2);Serial.print ("\t ");Serial.print(hoek3);Serial.print ("\t");Serial.print(hoek5);Serial.print ("\n");

//Serial.print ("hoek");

int ik; w=ontvanger(); // on va recevoir une information du smartphone, la variable w switch (w) { case 1: TouchDown_Release();break; geval 2: TouchDown_Grab();break; geval 3: Base_Rotation();break; geval 4: Base_AntiRotation();break; geval 5: Waist_Rotation();pauze; geval 6: Waist_AntiRotation();break; geval 7: Third_Arm_Rotation();break; geval 8: Third_Arm_AntiRotation();break; geval 9: Fourth_Arm_Rotation();break; geval 10: Fourth_Arm_AntiRotation();break; // geval 11: Fifth_Arm_Rotation();break; // geval 12: Fifth_Arm_AntiRotation();break; case 21: Serial.print("case button 1");chiffre_final = 1;sauvegarde_positions1[0] =angle;sauvegarde_positions1[1] =angle1;sauvegarde_positions1[2] =angle2;sauvegarde_positions1[3] =angle4_positions =angle5;Serial.println(sauvegarde_positions1[1]);Serial.println(sauvegarde_positions1[2]);Serial.println(sauvegarde_positions1[3]);Serial.println(sauvegarde_positions1[4]); pauze; geval 22: chiffre_final = 2;sauvegarde_positions2[0] =hoek;sauvegarde_positions2[1] =hoek1;sauvegarde_positions2[2] =hoek2;sauvegarde_positions2[3] =hoek3;sauvegarde_positions2[4] =hoek5; pauze; geval 23: chiffre_final = 3;sauvegarde_positions3[0] =hoek;sauvegarde_positions3[1] =hoek1;sauvegarde_positions3[2] =hoek2;sauvegarde_positions3[3] =hoek3;sauvegarde_positions3[4] =hoek5 geval 24: chiffre_final = 4;sauvegarde_positions4[0] =hoek;sauvegarde_positions4[1] =hoek1;sauvegarde_positions4[2] =hoek2;sauvegarde_positions4[3] =hoek3;sauvegarde_positions4[4] =hoek5; pauze; geval 25: chiffre_final = 5;sauvegarde_positions5[0] =hoek;sauvegarde_positions5[1] =hoek1;sauvegarde_positions5[2] =hoek2;sauvegarde_positions5[3] =hoek3;sauvegarde_positions5[4] =hoek5 [4] =hoek pauze; geval 26: chiffre_final = 6;sauvegarde_positions6[0] =hoek;sauvegarde_positions6[1] =hoek1;sauvegarde_positions6[2] =hoek2;sauvegarde_positions6[3] =hoek3;sauvegarde_positions6[4] =hoek5; pauze; geval 27: chiffre_final = 7;sauvegarde_positions7[0] =hoek;sauvegarde_positions7[1] =hoek1;sauvegarde_positions7[2] =hoek2;sauvegarde_positions7[3] =hoek3;sauvegarde_positions7[4] =hoek5; pauze; 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; pauze; geval 29: chiffre_final = 9;sauvegarde_positions9[0] =hoek;sauvegarde_positions9[1] =hoek1;sauvegarde_positions9[2] =hoek2;sauvegarde_positions9[3] =hoek3;sauvegarde_positions9[4] =hoek5; pauze;

geval 31: Serial.print("31");activate_saving = 1;chiffre_final = 0; pauze;// BEGIN

geval 33: Serial.print("33");activate_saving = 0; pauze;// KNOP OPSLAAN standaard: pauze; } if(w == 32) { Serial.print("\nReproduceren\nChiffre final: "); Serial.print(chiffre_final); Serial.print("\n Sauvegarde positie 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. print(" \n\n BEGIN \nLoop: "); Serial.print(i);Serial.print("\n"); switch(i) {geval 1: goto_moteur(*(sauvegarde_positions1));delay(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); pauze; geval 2: goto_moteur(*(sauvegarde_positions2));delay(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); pauze; geval 3: goto_moteur(*(sauvegarde_positions3));delay(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); pauze; geval 4: goto_moteur(*(sauvegarde_positions4));delay(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); pauze; geval 5: goto_moteur(*(sauvegarde_positions5));delay(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); pauze; geval 6: goto_moteur(*(sauvegarde_positions6));delay(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); pauze; geval 7: goto_moteur(*(sauvegarde_positions7));delay(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); pauze; geval 8: goto_moteur(*(sauvegarde_positions8));delay(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); pauze; geval 9: goto_moteur(*(sauvegarde_positions9));delay(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); pauze; } Serial.print("\n********************* FIN REPRODUCEREN **************** \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); } //****************************** FUNCTIES******************** ****************

woord recevoir() { // fonction permettant de recevoir l'information du smartphone

if (Serial.available()) { w = Serial.read();

Serieel.flush();

terug w; }}

void goto_moteur(int angle_destination)

{ while (angle_destination angle+step_angle) { Serial.print(" \n --------------* * * * * *-------------- ----\N"); Serial.print("angle_destination = \t "); Serial.print (hoek_bestemming); Serial.print("\n hoek1 = \t ");Serial.print(hoek); if (hoekbestemmingshoek + 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); if(hoek_bestemmingshoek1 +stap_hoek){hoek1 += stap_hoek; moteur1.write(hoek1);;} vertraging(100); } moteur1.write(hoek_bestemming); } void goto_moteur2(int angle_destination) {

while (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); if(hoek_bestemmingshoek2 +staphoek){hoek2+=staphoek; moteur2.write(hoek2);} vertraging(100); } moteur2.write(hoek_bestemming); } void goto_moteur3(int angle_destination) {

while (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); if(hoek_bestemmingshoek3 +stap_hoek){angle3+=stap_hoek; moteur3.write(hoek3);} vertraging(100); } moteur3.write(hoek_bestemming); } void goto_moteur5(int angle_destination) {

while (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); if(hoek_bestemmingshoek5 +staphoek){hoek5+=staphoek; moteur5.write(hoek5);} vertraging(100); } moteur5.write(hoek_bestemming); }

void TouchDown_Release() // TouchDown-knop loslaten

{ if (angle5 < 180) { angle5 = angle5+step_angle_mini; } moteur5.write(hoek5); }

void TouchDown_Grab() // TouchDown-knop grijpen

{ if (angle5 > 0) { angle5 = angle5-step_angle_mini; } moteur5.write(hoek5); } void Base_Rotation() { if (hoek 0) { angle = angle-step_angle; } anders hoek =0; moteur.write(hoek); } void Waist_Rotation() { if (angle1 20) { angle1 = angle1-step_angle; } anders hoek1 = 20; moteur1.schrijven(hoek1); } void Third_Arm_Rotation() { if (angle2 0) { angle2 = angle2-step_angle; } moteur2.write(hoek2); } void Fourth_Arm_Rotation() { if (angle3 = 0) { angle3 = angle3-step_angle_mini; } moteur3.write(hoek3); }

Stap 6: Dat is het

Bedankt voor het kijken, ik hoop dat je het op prijs stelde!

Als je deze Instructable leuk vond, kun je ons zeker bezoeken voor meer! =)