Cuprins:
- Pasul 1: Materiale
- Pasul 2: Imprimați 3D brațul robotizat
- Pasul 3: Montaj electronic
- Pasul 4: Aplicație pentru smartphone
- Pasul 5: Codul Arduino
- Pasul 6: Asta e
Video: Joc Robotic Arm - Controler Smartphone: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
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
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
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
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ț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
// 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:
Joc Simon - Joc distractiv !: 5 pași
Joc Simon - Joc distractiv !: Referință: Aici După un weekend lung, trebuie să fii cu adevărat greu să îndeplinești toate sarcinile și munca de care ești responsabil. Este timpul să ne antrenăm creierul, nu-i așa? Pe lângă acele jocuri plictisitoare și fără sens, există și un joc numit Simon Game
Robotic Arm Gripper: 3 pași (cu imagini)
Dispozitiv de prindere a brațului robotizat: Acest dispozitiv de prindere robotizat realizat de imprimantă 3D poate fi controlat cu două servouri ieftine (MG90 sau SG90). Am folosit scutul creierului (+ Arduino) pentru a controla clema și jjRobots controlează APP pentru a muta totul de la distanță prin WIFI, dar puteți utiliza orice
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 pași
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
Consola de joc Arduino Pocket + A-Maze - Joc Maze: 6 pași (cu imagini)
Arduino Pocket Game Console + A-Maze - Maze Game: Bine ați venit la primul meu instructable! Proiectul pe care vreau să îl împărtășesc astăzi este jocul de labirint Arduino, care a devenit o consolă de buzunar la fel de capabilă ca Arduboy și consolele similare bazate pe Arduino. Poate fi intermitent cu jocurile mele (sau ale dvs.) viitoare datorită expo
Joc labirint de controlat cu smartphone: 5 pași (cu imagini)
Joc labirint pentru a controla cu smartphone: Joc labirint pentru a controla cu telefonul inteligent. Labirintul se mișcă în funcție de panta smartphone-ului. În primul rând, vă rugăm să consultați videoclipul. Imaginea mișcării1. Raspberry Pi este un server Websocket. Smartphone-ul este un client Websocket. Smartphone-ul trimite ti