Taula de continguts:

Braç de robot controlat per fil: 31 passos
Braç de robot controlat per fil: 31 passos

Vídeo: Braç de robot controlat per fil: 31 passos

Vídeo: Braç de robot controlat per fil: 31 passos
Vídeo: Breaking Point | Critical Role | Campaign 3, Episode 31 2024, De novembre
Anonim
Braç de robot controlat per filferro
Braç de robot controlat per filferro

Aquest és un tutorial sobre com fer un braç de robot controlat per cables. L’avantatge d’utilitzar cables és que el vostre braç és més lleuger i podeu tenir tots els motors a la part inferior del braç, cosa que facilita la construcció i el manteniment. Aquí teniu un vídeo del braç en acció. Tinc previst afegir una urpa en el futur perquè pugui recollir les coses i no només empènyer-les.

Imprimibles en 3D:

Aquí i aquí

Subministraments

6 servomotors (MG995)

Arduino Uno

Aproximadament 6 metres de filferro d’acer recobert de plàstic (0,5 mm)

Quadre 23x33x10 (pot ser més estret, definitivament no hauria de ser més curt)

Tauló de fusta 33x10

Femelles i cargols

Tub de 14 cm (cal per guiar les cordes)

4 suports en L

Adaptador de 5 volts

2 blocs de terminals de 7 vies

Filferros de taulers de pa

Components impresos en 3D (no dissenyats per mi, enllaços a elements de la descripció):

3 "cargols"

2 "Element 1"

1 "Element 2"

2 "Element 3"

1 connector de la base

Pas 1: imprimiu tots els components 3D

És possible que necessiteu suport per als forats i arcs dels cargols, però assegureu-vos de no afegir suport al cos dels components; això tancarà els petits forats de filferro i caldrà fer nous forats

Pas 2: (Opcional) Connecteu un tauló de fusta a la part inferior de la caixa per enfortir-lo

La meva caixa era força feble, potser la vostra no

Pas 3: mesureu i talleu un tauló de fusta per adaptar-lo a la caixa

Pas 4: Marqueu les posicions dels motors

assegureu-vos que cap dels braços no es toqui

Pas 5: marqueu les posicions dels suports i de la canonada

Marqueu les posicions dels suports i de la canonada
Marqueu les posicions dels suports i de la canonada

La canonada s’ha de col·locar al voltant d’un centímetre davant del forat

Pas 6: Traieu un forat per als cables que surten de la vostra caixa (USB i alimentació)

Feu un forat per als cables que surten de la vostra caixa (USB i alimentació)
Feu un forat per als cables que surten de la vostra caixa (USB i alimentació)

Pas 7: perforar i veure tots els forats marcats

Trepant i serrat tots els forats marcats
Trepant i serrat tots els forats marcats

Pas 8: connecteu els motors i la canonada al taulell

Pas 9: fixeu el tauler a la caixa amb els suports en L

Pas 10: agafeu els blocs de terminals i soldeu els cables junts

Agafeu els blocs de terminals i soldeu els cables junts
Agafeu els blocs de terminals i soldeu els cables junts

Pas 11: talleu l'extrem del cable d'alimentació de l'adaptador i tireu els cables

Pas 12: identifiqueu i marqueu els cables més i menys

Pas 13: connecteu els cables als blocs de terminals perquè tots els cables + servo i el cable + del cable d'alimentació estiguin connectats, el mateix passa amb els cables

Connecteu els cables als blocs de terminals perquè tots els cables + servo i el cable + del cable d'alimentació estiguin connectats, el mateix passa amb els cables
Connecteu els cables als blocs de terminals perquè tots els cables + servo i el cable + del cable d'alimentació estiguin connectats, el mateix passa amb els cables

Pas 14: Tallar el cap d’un fil de taulers de pa

Tallar el cap d’un fil de taulers de pa
Tallar el cap d’un fil de taulers de pa

Connecteu l'extrem pelat del cable de la placa de connexió al bloc de terminals menys i l'extrem del pin al pin de terra del vostre arduino. Si no ho feu, els motors es mouran de manera irregular sense cap entrada.

Pas 15: Practicar tres forats a la part inferior de la caixa per als cables que surten del braç

Els forats haurien de coincidir amb els forats del connector de la base.

Pas 16: connecteu el connector base a la caixa

Connecteu el connector base a la caixa
Connecteu el connector base a la caixa

Pas 17: Utilitzeu un ganivet o un fitxer d'ungles per fer més profunds els solcs de filferro

Utilitzeu un ganivet o una llima per fer més profunds els solcs de filferro
Utilitzeu un ganivet o una llima per fer més profunds els solcs de filferro

Les ranures de filferro per als elements 2 i 3 són massa superficials.

Pas 18: construeix el braç

Construeix el braç
Construeix el braç

Construeix el braç d’acord amb les instruccions que aquí necessiteu per arxivar les peces perquè s’adaptin

Pas 19: instal·leu Processing i Arduino

Processament i Arduino

Pas 20: enganxeu els programes de codi

El codi es troba a la part inferior d’aquesta pàgina

Pas 21: connecteu els pins de control del servo a l'Arduino

Connecteu els pins de control del servo a l'Arduino
Connecteu els pins de control del servo a l'Arduino

Vaig connectar el primer motor al tercer pin digital, el segon motor al quart pin digital, etc. Assegureu-vos que el pas de terra encara està connectat al bloc de terminals.

Pas 22: premeu el botó Restableix durant el processament, per la qual cosa es definiran tots els braços a 90 graus

Pas 23: Fixeu els braços servo al motor horitzontalment

Pas 24: passeu els cables pels braços de manera que no hi hagi fluixos

Assegureu-vos que heu filat el cable a través de tants forats com pugueu, això el mantindrà temporalment i serà fàcil de treure.

Pas 25: proveu el braç i estrenyeu o afluixeu els cables segons calgui

Pas 26: Enganxeu en calent els cables als braços servo per fer-lo permanent

Pas 27: notes

Notes
Notes

He utilitzat filferro de joies de 0,5 mm, però 0,4 mm hauria d’estar bé. El disseny original feia servir filferro de PVC, però es trencava massa fàcilment i era difícil de treballar.

Si voleu moure el braç en un cotxe o en una bicicleta, emboliqueu les articulacions del braç amb cinta per assegurar-vos que no surtin. Això és especialment important per a l’element 1.

Quan vaig començar aquest projecte, em preguntava per què només podia trobar un tutorial sobre com fer un braç controlat per cables. Ara entenc per què aquesta no és la forma més comuna de fer un braç robot hobby. Els cables de vegades cauen de les seves ranures i tot és una mica feble. No sé si els problemes són perquè no tinc molta experiència o si tota la idea és problemàtica, tot i que estic segur que seria més sòlid si sabés el que feia.

Pas 28: resolució de problemes

Els forats del filferro es tanquen als elements impresos en 3D:

Heu afegit suport per a tot l’element en lloc de només els forats dels cargols. Reimprimeix l'element o obre els forats amb una agulla molt calenta.

El port COM està tancat, no es pot comunicar amb l’arduino:

És possible que el vostre arduino no accepti ports USB 3 (el meu no), podeu comprar un cable d’extensió USB 2 o utilitzar un ordinador que tingui ports USB 2

El codi no funciona:

Seguiu aquest tutorial i modifiqueu-lo per crear el vostre propi codi

Una part del braç no es mou:

Els cables poden haver-se enredat, per comprovar-ho, traieu el servo braç del servo i intenteu estirar-los a mà. Desenredeu els cables i, si encara és difícil estirar-los, proveu d’utilitzar WD-40 o un lubricant per facilitar el moviment

Pas 29: enllaços

Braç no robòtic:

Arm 3D Printables:

Imprimible 3D My Arm:

Arduino i processament:

Pas 30: Codi

Modificat a partir d’aquest codi

Codi Arduino:

#include // Declareu els motors Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Tots els motors estan configurats a 90 graus per defecte int current1 = 90; int actual2 = 90; int actual3 = 90; int actual4 = 90; int actual5 = 90; int actual6 = 90; // Graus mínims i màxims que els motors poden assolir int mini1 = 0; int maxi1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int maxi3 = 180; int mini4 = 0; int maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; // Graus que cal afegir o restar de la posició actual int degreesFoward = 5; // Retard perquè no es produeixin dues funcions en un ordre incorrecte int delayBetweenSteps = 100; void setup () {// Estableix els pins de control per a cada motor myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Estableix tots els motors al valor predeterminat myservo1.write (current1); myservo2.write (actual2); myservo3.write (actual3); myservo4.write (actual4); myservo5.write (actual5); myservo6.write (actual6); // iniciar la comunicació en sèrie @ 9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// si hi ha dades disponibles per llegir char val = Serial.read (); // posa-ho en aquest caràcter // Controls del motor if (val == 'a' && current1 + degreesFoward mini1) {myservo1.write (current1 - degreesFoward); current1 = current1 - degreesFoward; delay (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - degreesFoward); actual2 = actual2 - grausFoward; delay (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - degreesFoward); actual3 = actual3 - grausFoward; delay (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - degreesFoward); actual4 = actual4 - grausFoward; delay (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - degreesFoward); actual5 = actual5 - grausFoward; delay (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - degreesFoward); actual6 = actual6 - grausFoward; delay (delayBetweenSteps); } // Controls de velocitat si (val == 'w') {// Si el botó de velocitat 1 premia degreesFoward = 1; delay (delayBetweenSteps); } if (val == 'x') {// Si es premia el botó de velocitat 5 grausFoward = 5; delay (delayBetweenSteps); } if (val == 'y') {// Si el botó de velocitat 10 premia grausFoward = 10; delay (delayBetweenSteps); } if (val == 'z') {// Si es prem el botó de velocitat 20 grausFoward = 20; delay (delayBetweenSteps); } if (val == 'r') {// Si es prem el botó de velocitat 20 myservo1.write (90); actual1 = 90; myservo2.write (90); actual2 = 90; myservo3.write (90); actual3 = 90; myservo4.write (90); actual4 = 90; myservo5.write (90); actual5 = 90; myservo6.write (90); actual6 = 90; delay (delayBetweenSteps); }}}

Codi de processament:

processament de la importació. sèrie. *; control d’importacions P5. *; // importació de la biblioteca ControlP5 port sèrie; ControlP5 cp5; // crear una font PFont de l'objecte ControlP5; void setup () {// igual que la mida del programa arduino (300, 700); // mida de la finestra, (amplada, alçada) printArray (Serial.list ()); // imprimeix tots els ports sèrie disponibles // Si teniu algun problema, probablement provingui d'aquí String portName = Serial.list () [0]; port = new Serial (this, portName, 9600); // He connectat arduino a com3, seria diferent a Linux i Mac OS // permet afegir butó a la finestra buida cp5 = ControlP5 nou (això); font = createFont ("Arial", 13); // fonts personalitzades per als botons i el títol // Botons de control de velocitat cp5.addButton ("One") // "One" és el nom del botó.setPosition (50, 50) // Coordenades x i y de la cantonada superior esquerra del botó.setSize (55, 25) // (amplada, alçada).setFont (tipus de lletra); cp5.addButton ("Five").setPosition (110, 50).setSize (55, 25).setFont (font); cp5.addButton ("Ten").setPosition (170, 50).setSize (55, 25).setFont (font); cp5.addButton ("Twenty").setPosition (230, 50).setSize (55, 25).setFont (font); cp5.addButton ("Reset").setPosition (110, 2).setSize (55, 25).setFont (font); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (font); // Botons de control del motor cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (font); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (font); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (font); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (font); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (amplada, alçada).setFont (tipus de lletra); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (font); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (amplada, alçada).setFont (tipus de lletra); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (font); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (font); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (font); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (font); } void draw () {// igual que el bucle en fons arduino (192, 215, 249); // color de fons de la finestra (r, g, b) o (0 a 255) // Afegiu text dient que el control de velocitat és omplir control de velocitat (0, 10, 25); // color del text (r, g, b) textFont (tipus de lletra); text ("Control de velocitat", 50, 40); // ("text", coordenada x, coordenada y)} // permet afegir algunes funcions als nostres botons // de manera que quan premeu qualsevol botó, envia un caràcter particular al port sèrie // Estic segur que és possible enviar cadenes en lloc de caràcters, i tindria més sentit, però no sé com fer-ho // Comandes de control de velocitat void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Ordres de control del motor anul·len Servo_1_Foward () {port.write ('a'); } void Servo_1_Back () {port.write ('b'); } void Servo_2_Foward () {port.write ('c'); } void Servo_2_Back () {port.write ('d'); } void Servo_3_Foward () {port.write ('e'); } void Servo_3_Back () {port.write ('f'); } void Servo_4_Foward () {port.write ('g'); } void Servo_4_Back () {port.write ('h'); } void Servo_5_Foward () {port.write ('i'); } void Servo_5_Back () {port.write ('j'); } void Servo_6_Foward () {port.write ('k'); } void Servo_6_Back () {port.write ('l'); } void Reset () {port.write ('r'); }

Pas 31: Més imatges

Recomanat: