Cuprins:

Joc Robotic Arm - Controler Smartphone: 6 pași
Joc Robotic Arm - Controler Smartphone: 6 pași

Video: Joc Robotic Arm - Controler Smartphone: 6 pași

Video: Joc Robotic Arm - Controler Smartphone: 6 pași
Video: ARDUINO BASED BLUETOOTH CONTROLLED 6 AXIS ROBOTIC ARM 2024, Iulie
Anonim
Joc Robotic Arm - Controler pentru smartphone
Joc Robotic Arm - Controler pentru smartphone

Buna !

Iată un joc distractiv de vară: Brațul robotizat controlat de Smartphone !!

După cum puteți vedea în videoclip, puteți controla brațul cu niște joystick-uri pe smartphone.

De asemenea, puteți salva un model, pe care robotul îl va reproduce într-o buclă, pentru a face câteva sarcini repetitive, de exemplu. Dar acest model este modulabil după cum doriți !!!!

Fii creativ !

Pasul 1: Materiale

Materiale
Materiale

Aici puteți vedea materialul de care aveți nevoie.

Vă va costa în jur de 50 € să construiți acest braț robot. Software-ul și instrumentele pot fi înlocuite, dar le-am folosit pentru acest proiect.

Pasul 2: Imprimați 3D brațul robotizat

Imprimați 3D brațul robotizat
Imprimați 3D brațul robotizat
Imprimați 3D brațul robotizat
Imprimați 3D brațul robotizat
Imprimați 3D brațul robotizat
Imprimați 3D brațul robotizat

Brațul robotizat a fost tipărit 3D (cu prusa noastră i3).

Datorită site-ului web "HowtoMechatronics.com", fișierele sale STL sunt minunate pentru a construi un braț 3D.

Va dura aproximativ 20 de ore pentru a imprima toate piesele.

Pasul 3: Montaj electronic

Montaj electronic
Montaj electronic

Montajul este separat în 2 părți:

O parte electronică, în care arduino-ul este conectat la servos de pinii digitali și cu dispozitivul Bluetooth (Rx, Tx).

O parte de alimentare, în care servomotoarele sunt alimentate cu 2 încărcătoare de telefon (5V, 2A max).

Pasul 4: Aplicație pentru smartphone

Aplicație pentru smartphone
Aplicație pentru smartphone

Aplicația a fost făcută pe inventatorul aplicației 2. Folosim 2 Joystick pentru a controla 4 Servo-uri și încă 2 Butoane pentru a controla Grip-ul final.

Conectăm Arm și Smartphone împreună utilizând un modul Bluetooth (HC-06).

În cele din urmă, un mod de salvare permite utilizatorului să salveze până la 9 poziții pentru braț.

Brațul va intra apoi într-un mod automat, unde va reproduce pozițiile salvate.

Pasul 5: Codul Arduino

Codul Arduino
Codul Arduino
Codul Arduino
Codul Arduino

// 08/19 - Robotic Arm Smartphone controlat

#include #define TRUE true #define FALSE false // ******************** DECLARAȚII ***************** ***********

cuvânt rep; // mot envoyé du module Arduino au smartphone

int chiffre_final = 0; int cmd = 3; // variable 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; Servo motor; // 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 angle, angle1, angle3, angle5, angle2; // angle int pas; int r, r1, r2, r3; int enregistrer; fin boolean = FALS; boolean fin1 = FALS; boolean fin2 = FALS; boolean fin3 = FALS; boolean fin4 = FALS; cuvântul w; // variable 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 unghi; // unghiul de rotație (0 la 180)

//********************ÎNFIINȚAT*************************** ******** 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); // 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); unghiul = 6; moteur1.write (100); unghiul1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); unghiul = 6; unghiul1 = 100; unghiul2 = 90; unghiul3 = 90; unghiul5 = 90; Serial.begin (9600); // permitra de communiquer au module Bluetooth} // ********************* BOUCLE ****************** ***************** bucla void () {

// Serial.print ("unghi");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (angle3); Serial.print (" / t "); Serial.print (angle5); Serial.print (" / n ");

//Serial.print("angle ");

int i; w = recevoir (); // on va recevoir une information du smartphone, the variable w switch (w) {case 1: TouchDown_Release (); break; cazul 2: TouchDown_Grab (); break; caz 3: Base_Rotation (); break; caz 4: Base_AntiRotation (); break; caz 5: Waist_Rotation (); pauză; caz 6: Waist_AntiRotation (); pauză; caz 7: Third_Arm_Rotation (); break; caz 8: Third_Arm_AntiRotation (); break; caz 9: Al patrulea_Arm_Rotation (); break; caz 10: Al patrulea_Arm_AntiRotation (); pauză; // caz 11: Fifth_Arm_Rotation (); break; // caz 12: Fifth_Arm_AntiRotation (); break; cazul 21: Serial.print ("butonul casei 1"); chiffre_final = 1; sauvegarde_positions1 [0] = angle; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3; sauvegarde_positions1 [4] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); pauză; caz 22: chiffre_final = 2; sauvegarde_positions2 [0] = angle; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; pauză; caz 23: chiffre_final = 3; sauvegarde_positions3 [0] = angle; sauvegarde_positions3 [1] = angle1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = angle5; break; caz 24: chiffre_final = 4; sauvegarde_positions4 [0] = angle; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; pauză; caz 25: chiffre_final = 5; sauvegarde_positions5 [0] = angle; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; pauză; caz 26: chiffre_final = 6; sauvegarde_positions6 [0] = angle; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; pauză; caz 27: chiffre_final = 7; sauvegarde_positions7 [0] = angle; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; pauză; caz 28: chiffre_final = 8; sauvegarde_positions8 [0] = angle; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; pauză; caz 29: chiffre_final = 9; sauvegarde_positions9 [0] = angle; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; pauză;

caz 31: Serial.print ("31"); activate_saving = 1; chiffre_final = 0; pauză; // ÎNCEPE

caz 33: Serial.print ("33"); activate_saving = 0; break; // BUTON SAVE implicit: break; } if (w == 32) {Serial.print ("\ nReproduce / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n poziția Sauvegarde 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde poziția 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde poziția 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 / nLop:"); Serial.print (i); Serial.print ("\ n"); switch (i) {case 1: goto_moteur (* (sauvegarde_positions1)); delay (200); goto_moteur1 (* (sauvegarde_positions1 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions1 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions1 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions1 + 4)); întârziere (200); pauză; cazul 2: goto_moteur (* (sauvegarde_positions2)); întârziere (200); goto_moteur1 (* (sauvegarde_positions2 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions2 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions2 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions2 + 4)); întârziere (200); pauză; caz 3: goto_moteur (* (sauvegarde_positions3)); întârziere (200); goto_moteur1 (* (sauvegarde_positions3 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions3 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions3 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions3 + 4)); întârziere (200); pauză; cazul 4: goto_moteur (* (sauvegarde_positions4)); întârziere (200); goto_moteur1 (* (sauvegarde_positions4 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions4 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions4 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions4 + 4)); întârziere (200); pauză; cazul 5: goto_moteur (* (sauvegarde_positions5)); delay (200); goto_moteur1 (* (sauvegarde_positions5 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions5 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions5 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions5 + 4)); întârziere (200); pauză; cazul 6: goto_moteur (* (sauvegarde_positions6)); întârziere (200); goto_moteur1 (* (sauvegarde_positions6 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions6 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions6 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions6 + 4)); întârziere (200); pauză; caz 7: goto_moteur (* (sauvegarde_positions7)); întârziere (200); goto_moteur1 (* (sauvegarde_positions7 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions7 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions7 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions7 + 4)); întârziere (200); pauză; caz 8: goto_moteur (* (sauvegarde_positions8)); întârziere (200); goto_moteur1 (* (sauvegarde_positions8 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions8 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions8 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions8 + 4)); întârziere (200); pauză; caz 9: goto_moteur (* (sauvegarde_positions9)); întârziere (200); goto_moteur1 (* (sauvegarde_positions9 + 1)); întârziere (200); goto_moteur2 (* (sauvegarde_positions9 + 2)); întârziere (200); goto_moteur3 (* (sauvegarde_positions9 + 3)); întârziere (200); goto_moteur5 (* (sauvegarde_positions9 + 4)); întârziere (200); pauză; } Serial.print ("\ n ************************ FIN REPRODUCE ***************** / n "); întârziere (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"); * /

întârziere (100); } // ***************************** FONCTII ****************** ******************

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

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

Serial.flush ();

retur w; }}

void goto_moteur (int angle_destination)

{while (angle_destination angle + step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle1 = / t"); Serial.print (unghi); if (angle_destination angle + step_angle) {angle = angle + step_angle; moteur.write (angle);} delay (100); } moteur.write (angle_destination); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1 + step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); if (angle_destination angle1 + step_angle) {angle1 + = step_angle; moteur1.write (angle1);;} delay (100); } moteur1.write (angle_destination); } void goto_moteur2 (int angle_destination) {

while (angle_destination angle2 + step_angle)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); if (angle_destination angle2 + step_angle) {angle2 + = step_angle; moteur2.write (angle2);} întârziere (100); } moteur2.write (angle_destination); } void goto_moteur3 (int angle_destination) {

while (angle_destination angle3 + step_angle)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (angle_destination angle3 + step_angle) {angle3 + = step_angle; moteur3.write (angle3);} întârziere (100); } moteur3.write (angle_destination); } void goto_moteur5 (int angle_destination) {

while (angle_destination angle5 + step_angle)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (angle_destination angle5 + step_angle) {angle5 + = step_angle; moteur5.write (angle5);} delay (100); } moteur5.write (angle_destination); }

void TouchDown_Release () // Eliberare buton TouchDown

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

void TouchDown_Grab () // TouchDown Button Grab

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Rotație_Bază () {dacă (unghi 0) {unghi = unghi-pas-unghi; } else angle = 0; moteur.write (unghi); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else angle1 = 20; moteur1.write (angle1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (angle2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (angle3); }

Pasul 6: Asta e

Vă mulțumim pentru vizionare, sper că ați apreciat!

Dacă ți-a plăcut acest Instructable, ne poți vizita cu siguranță pentru mai multe! =)

Recomandat: