Tabla de contenido:

Brazo robótico controlado por cable: 31 pasos
Brazo robótico controlado por cable: 31 pasos

Video: Brazo robótico controlado por cable: 31 pasos

Video: Brazo robótico controlado por cable: 31 pasos
Video: BRAZO ROBOTICO controlado por BOTONES || Proyecto ARDUINO || FACIL y RAPIDO || explicación + código 2024, Noviembre
Anonim
Brazo robótico controlado por cable
Brazo robótico controlado por cable

Este es un tutorial sobre cómo hacer un brazo robótico controlado por cables. La ventaja de usar cables es que su brazo es más liviano y puede tener todos sus motores en la parte inferior de su brazo, lo que facilita la construcción y el mantenimiento. Aquí hay un video del brazo en acción. Planeo agregar una garra en el futuro para que pueda recoger cosas y no solo empujarlas.

Imprimibles 3D:

Aquí y aquí

Suministros

6 servomotores (MG995)

Arduino Uno

Aproximadamente 6 metros de alambre de acero recubierto de plástico (0,5 mm)

Caja 23x33x10 (puede ser más estrecha, definitivamente no debería ser más corta)

Tablón de madera 33x10

Tuercas y tornillos

Tubería de 14 cm (esto es necesario para guiar las cuerdas)

4 soportes en L

Adaptador de 5 voltios

2 bloques de terminales de 7 vías

Alambres para protoboard

Componentes impresos en 3D (no diseñados por mí, enlaces a elementos en la descripción):

3 "tornillos"

2 "Elemento 1"

1 "Elemento 2"

2 "Elemento 3"

1 conector base

Paso 1: imprima todos los componentes 3D

Es posible que necesite soporte para los orificios de los pernos y los arcos, pero asegúrese de no agregar soporte al cuerpo de sus componentes; esto cerrará los pequeños orificios de los cables y necesitará hacer nuevos orificios

Paso 2: (Opcional) Coloque una tabla de madera en la parte inferior de su caja para fortalecerla

Mi caja era bastante débil, la tuya puede que no lo sea

Paso 3: Mida y corte una tabla de madera que se ajuste a la caja

Paso 4: marcar las posiciones de los motores

asegúrese de que ninguno de los brazos se toque entre sí

Paso 5: Marque las posiciones de los soportes y la tubería

Marque las posiciones de los soportes y la tubería
Marque las posiciones de los soportes y la tubería

La tubería debe colocarse alrededor de un centímetro por delante del agujero.

Paso 6: Taladre un agujero para los cables que salen de su caja (USB y alimentación)

Taladre un agujero para los cables que salen de su caja (USB y alimentación)
Taladre un agujero para los cables que salen de su caja (USB y alimentación)

Paso 7: Taladre y corte todos los agujeros marcados

Taladre y corte todos los agujeros marcados
Taladre y corte todos los agujeros marcados

Paso 8: conecte los motores y la tubería a la tabla

Paso 9: Fije la tabla a la caja con los soportes en L

Paso 10: tome sus bloques de terminales y suelde los cables juntos

Tome sus bloques de terminales y suelde los cables juntos
Tome sus bloques de terminales y suelde los cables juntos

Paso 11: corte el extremo del cable de alimentación del adaptador y pele los cables

Paso 12: Identifique y marque los cables positivo y negativo

Paso 13: Conecte los cables a los bloques de terminales para que todos los cables + Servo y el cable + del cable de alimentación estén conectados, lo mismo ocurre con los cables -

Conecte los cables a los bloques de terminales de modo que todos los cables + Servo y el cable + del cable de alimentación estén conectados, lo mismo ocurre con los cables
Conecte los cables a los bloques de terminales de modo que todos los cables + Servo y el cable + del cable de alimentación estén conectados, lo mismo ocurre con los cables

Paso 14: corte la cabeza de un cable de tablero

Cortar la cabeza de un alambre de tablero
Cortar la cabeza de un alambre de tablero

Conecte el extremo pelado del cable de la placa de pruebas al bloque de terminales menos y el extremo del pin al pin de tierra en su arduino. Si no hace esto, los motores se moverán erráticamente sin ninguna entrada.

Paso 15: Taladre tres agujeros en la parte inferior de la caja para los cables que salen de su brazo

Los orificios deben coincidir con los orificios del conector de la base.

Paso 16: conecte el conector de la base a la caja

Conecte el conector de la base a la caja
Conecte el conector de la base a la caja

Paso 17: use un cuchillo o una lima de uñas para hacer que las ranuras del alambre sean más profundas

Use un cuchillo o una lima de uñas para hacer las ranuras del alambre más profundas
Use un cuchillo o una lima de uñas para hacer las ranuras del alambre más profundas

Las ranuras para cables de los elementos 2 y 3 son demasiado superficiales.

Paso 18: Construya el brazo

Construye el brazo
Construye el brazo

Construya el brazo de acuerdo con las instrucciones aquí, es posible que deba limar las piezas para que encajen

Paso 19: Instale Processing y Arduino

Procesamiento y Arduino

Paso 20: Pegue los programas de código

El código está al final de esta página.

Paso 21: conecte los pines de control del servo al Arduino

Conecte los pines de control del servo al Arduino
Conecte los pines de control del servo al Arduino

Conecté el primer motor al tercer pin digital, el segundo motor al cuarto pin digital y así sucesivamente. Asegúrese de que la clavija de tierra todavía esté conectada al bloque de terminales -.

Paso 22: presione el botón de reinicio en el procesamiento, esto establecerá todos los brazos a 90 grados

Paso 23: Fije los brazos servo al motor horizontalmente

Paso 24: Pase los cables por los brazos para que no queden flojos

Asegúrate de pasar el cable a través de tantos agujeros como puedas, esto lo sujetará temporalmente y será fácil de quitar.

Paso 25: Pruebe el brazo y apriete o afloje los cables según sea necesario

Paso 26: pegue en caliente los cables a los brazos del servo para que sean permanentes

Paso 27: Notas

Notas
Notas

Usé alambre de joyería de 0.5 mm, pero 0.4 mm debería estar bien. El diseño original usaba alambre de PVC, pero se rompía con demasiada facilidad y era difícil trabajar con él.

Si va a mover el brazo en un automóvil o bicicleta, envuelva las articulaciones del brazo con cinta adhesiva para asegurarse de que no se salgan. Esto es especialmente importante para el elemento 1.

Cuando comencé este proyecto me preguntaba por qué solo podía encontrar un tutorial sobre cómo hacer un brazo controlado por cables. Ahora entiendo por qué esta no es la forma más común de hacer un brazo de robot para pasatiempos. Los cables a veces se salen de sus ranuras y todo es un poco endeble. No sé si los problemas se deben a que no tengo mucha experiencia o si toda la idea es problemática, aunque estoy seguro de que sería más sólido si supiera lo que estoy haciendo.

Paso 28: solución de problemas

Los orificios de los cables se cierran en los elementos impresos en 3D:

Agregó soporte para todo el elemento en lugar de solo los orificios de los pernos. Vuelva a imprimir el elemento o abra los agujeros con una aguja muy caliente.

El puerto COM está cerrado, no puede comunicarse con el arduino:

Es posible que su arduino no acepte puertos USB 3 (el mío no lo hizo), puede comprar un cable de extensión USB 2 o usar una computadora que tenga puertos USB 2

El código no funciona:

Siga este tutorial y modifíquelo para crear su propio código

Una parte del brazo no se mueve:

Es posible que los cables se hayan enredado, para verificar esto, retire el brazo del servo del servo e intente tirar de los cables con la mano. Desenrede los cables y si aún le resulta difícil tirar de los cables, intente usar un poco de WD-40 o un lubricante para facilitar el movimiento.

Paso 29: Enlaces

Brazo no robótico:

Imprimibles 3D del brazo:

Mi brazo imprimible en 3D:

Arduino y procesamiento:

Paso 30: Código

Modificado de este código

Código Arduino:

#include // Declarar los motores Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Todos los motores están configurados a 90 grados por defecto int current1 = 90; int current2 = 90; int current3 = 90; int current4 = 90; int current5 = 90; int current6 = 90; // Grados mínimo y máximo que los motores pueden alcanzar 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; // Grados que se sumarán o restarán de la posición actual int gradosFoward = 5; // Retraso para que dos funciones no sucedan en el orden incorrecto int delayBetweenSteps = 100; void setup () {// Establecer pines de control para cada motor myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Establecer todos los motores a la configuración predeterminada myservo1.write (current1); myservo2.write (current2); myservo3.write (current3); myservo4.write (current4); myservo5.write (current5); myservo6.write (current6); // iniciar la comunicación en serie @ 9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// si hay datos disponibles para leer char val = Serial.read (); // ponerlo en este carácter // Controles del motor if (val == 'a' && current1 + gradosFoward mini1) {myservo1.write (current1 - gradosFoward); current1 = current1 - gradosFoward; delay (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - gradosFoward); current2 = current2 - gradosFoward; delay (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - gradosFoward); current3 = current3 - grados adelante; delay (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - gradosFoward); current4 = current4 - grados adelante; delay (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - gradosFoward); current5 = current5 - grados hacia adelante; delay (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - gradosFoward); current6 = current6 - grados hacia adelante; delay (delayBetweenSteps); } // Controles de velocidad if (val == 'w') {// Si se presiona el botón de velocidad 1 gradosAvance = 1; delay (delayBetweenSteps); } if (val == 'x') {// Si se presiona el botón de velocidad 5 gradosAvance = 5; delay (delayBetweenSteps); } if (val == 'y') {// Si se presiona el botón de velocidad 10 gradosAvance = 10; delay (delayBetweenSteps); } if (val == 'z') {// Si se presiona el botón de velocidad 20 gradosAvance = 20; delay (delayBetweenSteps); } if (val == 'r') {// Si se presiona el botón de velocidad 20 myservo1.write (90); corriente1 = 90; myservo2.write (90); corriente2 = 90; myservo3.write (90); actual3 = 90; myservo4.write (90); actual4 = 90; myservo5.write (90); actual5 = 90; myservo6.write (90); actual6 = 90; delay (delayBetweenSteps); }}}

Código de procesamiento:

procesamiento de importación.serie. *; control de importaciónP5. *; // importar el puerto serie de la biblioteca ControlP5; ControlP5 cp5; // crea el objeto ControlP5 PFont font; void setup () {// igual que el tamaño del programa arduino (300, 700); // tamaño de la ventana, (ancho, alto) printArray (Serial.list ()); // imprime todos los puertos serie disponibles // Si tiene un problema, probablemente provenga de aquí String portName = Serial.list () [0]; port = new Serial (este, portName, 9600); // he conectado arduino a com3, sería diferente en linux y mac os // vamos a agregar un botón a la ventana vacía cp5 = new ControlP5 (esto); font = createFont ("Arial", 13); // fuentes personalizadas para botones y título // Botones de control de velocidad cp5.addButton ("One") // "One" es el nombre del botón.setPosition (50, 50) // coordenadas xey de la esquina superior izquierda del botón.setSize (55, 25) // (ancho, alto).setFont (fuente); cp5.addButton ("Cinco").setPosition (110, 50).setSize (55, 25).setFont (fuente); cp5.addButton ("Diez").setPosition (170, 50).setSize (55, 25).setFont (fuente); cp5.addButton ("Veinte").setPosition (230, 50).setSize (55, 25).setFont (fuente); cp5.addButton ("Restablecer").setPosition (110, 2).setSize (55, 25).setFont (fuente); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (fuente); // Botones de control del motor cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (ancho, alto).setFont (fuente); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (ancho, alto).setFont (fuente); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (fuente); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (fuente); } void draw () {// igual que el bucle en el fondo arduino (192, 215, 249); // color de fondo de la ventana (r, g, b) o (0 a 255) // Agregar texto que diga que el control de velocidad es el relleno de control de velocidad (0, 10, 25); // color del texto (r, g, b) textFont (fuente); texto ("Control de velocidad", 50, 40); // ("texto", coordenada x, coordenada y)} // agreguemos algunas funciones a nuestros botones // para que cuando presiones cualquier botón, envíe un carácter particular a través del puerto serie // Estoy seguro de que es posible enviar cadenas en lugar de caracteres, y tendría más sentido, pero no sé cómo hacerlo // Comandos de control de velocidad void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Comandos de control del motor void 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'); }

Paso 31: Más imágenes

Recomendado: