Brazo robótico controlado por PC
Componentes y suministros
| × | 1 | ||||
| × | 4 |
Aplicaciones y servicios en línea
| ||||
|
Acerca de este proyecto
Siempre he admirado las modernas tecnologías de fabricación y el importante papel que juegan estas máquinas en diferentes áreas de la fabricación como:elevación de materiales, instalación y recogida de piezas, soldadura y corte y, por último, pero no menos importante, su usabilidad en almacenes.
Mi experiencia en la construcción de este brazo robótico fue un desafío. Entonces, para comenzar, elegí un brazo robótico simple diseñado por fortzeroas en 2016, luego decidí no controlarlo a mano como de costumbre, así que creé una aplicación de automatización con la "Aplicación de Windows C #" e hice que pareciera aplicaciones de automatización de fabricación.
Entonces, según mi experiencia en habilidades de programación, creé esta Aplicación de Automatización para controlar completamente el brazo robótico, monitorear su movimiento y asignarle diferentes tareas.
Paso 1:Material
El material principal es madera MDF y utilicé 2 mm para la estructura y 4 mm para la base.
Los planos están disponibles para descargar en el último paso, debe imprimir el patrón y luego pegarlo directamente en MDF.
Corte junto con los contornos y taladre los agujeros. Usé una herramienta rotativa para perforar y cortar la madera, y para la base no tengo planos, pero creo que puedes improvisar.
Paso 2:pintura y estilo
Para darle al proyecto un aspecto atractivo, utilicé los mismos planos, luego diseñé una cubierta con Photoshop para crear algunas calcomanías y formas geométricas para que parecieran realistas, luego lo pegué en madera con pegamento blanco.
Paso 3:Montaje del marco
Este brazo robótico fue fácil de ensamblar porque todo se planeó con anticipación, así que simplemente fije los servomotores en su lugar con tornillos, y mientras trabajaba, hice pequeños ajustes por hacer.
Luego, para unir el lado derecho e izquierdo, utilicé palos de madera gruesos y los pegué con súper pegamento en lugar de tornillos largos para reducir el peso.
Paso 4:Pinza (mecanismo de pellizco)
Doblo dos varillas de metal con unos alicates, luego taladro un pasillo dentro de una pieza de madera de 3 mm de grosor con un taladro giratorio y lo pego con superpegamento.
Paso 5:hacer la base
La base está hecha de madera MDF de 4 mm de espesor, corté un cuadrado de aproximadamente 17 cm * 10 cm con una sierra de mesa y luego taladré una sala para colocar el servomotor de la base 9g. Para reducir la fricción entre la base y el cilindro, corté una parte de una lata de cartón resistente de 2,5 cm de altura y 10 cm de diámetro, luego la taladro también para sujetar el eje del servomotor.
Paso 6:Electrónica
Cuando uses más de dos servos con Arduino debes usar una fuente de energía externa para ellos, y en este proyecto usé tres micro servos 9g y uno gran servomotor.
Por supuesto, la primera prueba de demostración fue virtual en tinkercad.com para simular los servos y probar el circuito eléctrico.
Entonces, en este caso usé 4 baterías AA 1.5 v que equivalen a 6 v, luego hice la configuración de prueba de la placa de pruebas y luego hice una base de expansión muy simple para Arduino nano.
Paso 7:Código Arduino
1. Descargue e instale la última versión de Arduino IDE. Puede encontrar la última versión para Windows, Linux o MAC OSX en el sitio web de Arduino:https://www.arduino.cc/en/main/software
2. Conecte su placa Arduino al puerto USB.
3. Vaya a herramientas> tablero> luego elija su tablero.
4. Copie y pegue el código en el editor IDE.
5. Verifique su código haciendo clic en el botón de icono (✔).
6. Cargue el código en su tablero haciendo clic en el botón con el icono (➤).
Paso 8:Aplicación de automatización
En realidad, esta es mi parte favorita es automatizar un proyecto Arduino usando PC. En mi opinión, fue un buen comienzo para aprender cómo mejorar las capacidades de control de la placa y cualquier otro proyecto en el futuro.
Llegar a posiciones de ángulos fijos no fue fácil de hacer, así que al principio resolví este problema usando una aplicación de terceros llamada "Processing 3".
En las etapas iniciales hice una interfaz soportada que simulaba los servos del brazo del robot (Base, Hombro, Codo y Pinza) por teclado y los movía por separado "ángulo por ángulo" hasta llegar a una posición fija preparada previamente.
Luego, cuando llegó a esa posición preparada, registro estos cuatro ángulos en una matriz de código (A, B, C, D), luego usé estas matrices múltiples más adelante en mi aplicación de Windows, me ayudó mucho a conocer los límites de cada servomotor inclina cada uno en su lugar.
Estos límites recopilados los puse como guía en las barras laterales de la interfaz de usuario para mantener el ARM bajo control y también para admitir la función de reproducción.
Entonces, al usar esta aplicación, podrá controlar, grabar y monitorear el brazo robótico de la siguiente manera:
1. Control de movimiento:
Hay dos modos de controlar este brazo robótico, el primero es manual arrastrando las barras de seguimiento que controlan un servo espástico como
- Pinza:haga clic en el botón abrir y cerrar para abrir y cerrar la pinza del robot.
- Base:arrastre la barra de seguimiento hacia la derecha e izquierda o incluso use las flechas del teclado (derecha / izquierda) para mover la base hacia la derecha y la izquierda.
- Hombro:arrastre la barra de seguimiento hacia la derecha e izquierda o incluso use las flechas del teclado (arriba / abajo) para mover el hombro hacia arriba y hacia abajo.
- Codo:arrastre la barra de seguimiento hacia la derecha e izquierda o incluso use las teclas del teclado (w / s) para mover el motor del codo hacia arriba y hacia abajo.
2. Grabación de movimiento:
Una vez que desee automatizar el movimiento del brazo robótico, debe registrar la posición en cada paso haciendo clic en el botón "Rec. Posición" o presionando (R) en el teclado. Entonces la aplicación se encargará de ello.
En cada paso, registra la aplicación, detecta la posición del motor movido y la guarda dentro de una lista por separado.
Al hacer clic en el botón "Iniciar estado de ánimo automático", la aplicación enviará esas posiciones guardadas en forma de órdenes de secuencia.
3. Supervisión:
He creado una interfaz gráfica que dibuja cada paso en un gráfico para permitir que el usuario observe que puede ocurrir cualquier cambio inusual. al mismo tiempo, hay una tabla de datos en el lado derecho que da el ángulo específico y el tiempo exacto para su movimiento.
Por lo tanto, al usar estas funciones, puede componer sus propios movimientos y enviarlos al brazo robótico como una tarea, como lo hacen exactamente en la automatización de la fabricación.
Paso 9:actualizaciones
Agosto de 2018:
Recientemente hice el mismo diseño después de agregar algunas modificaciones en una máquina de corte por láser usando MDF de 3 mm. En realidad, esta idea adicional fue genial, especialmente cuando le agregué un joystick personalizado.
Código
- Task.ino
- RobotArm.ino
Task.ino Arduino
int delayT =350; void Home () // Llame a esta función cuando desee colocar el brazo en la posición inicial {MyServo0.write (valGripper); // Retraso de la pinza (15); MyServo.write (valBase); // retraso base (30); MyServo2.write (valShoulder); // retraso del hombro (30); MyServo3.write (valElbow); // retraso del codo (delayT); } void Pick () // Este es un lugar de picking fijo. {MyServo.write (4); // retraso base (delayT); MyServo3.write (125); // codo MyServo2.write (95); // retraso del hombro (delayT); MyServo0.write (50); // Retardo de apertura amplia de la pinza (delayT); MyServo0.write (2); // Retardo de cierre de la pinza (delayT); MyServo2.write (60); // cargar con el pequeño MyServo3.write (80); // codo hacia arriba un poco de retraso (delayT); Serial.println ("Objeto protegido"); } void Drop () // Este es un lugar fijo. {MyServo.write (145); // retraso base (delayT); MyServo2.write (80); // retraso del hombro (15); MyServo3.write (115); // retraso del codo (delayT); MyServo0.write (40); // Retardo de apertura amplia de la pinza (delayT); MyServo3.write (90); // codo hacia arriba un poco de retraso (delayT); Serial.println (F ("Objeto eliminado")); } void Playback () {// https://arduino.stackexchange.com/questions/1013/how-do-i-split-an-incoming-string // input DEBE ser array (servoId:Position &servoId:Position &servoId:Position) // Frase de cadena; // frase =String (frase + ByteReceived); // convertir la entrada de caracteres a agitación se puede dividir // Leer cada par de comandos char * command =strtok (ByteReceived, "&"); while (comando! =0) {// Dividir el comando en dos valores char * separator =strchr (comando, ':'); if (separator! =0) {// Realmente divide la cadena en 2:reemplaza ':' con 0 * separator =0; int servoId =atoi (comando); ++ separador; int ángulo =atoi (separador); // Haz algo con servoId y angle if (servoId =1) {MyServo.write (angle); retraso (delayT); } else if (servoId =2) {MyServo2.write (ángulo); retraso (delayT); } else if (servoId =3) {MyServo3.write (ángulo); retraso (delayT); }} // Encuentra el siguiente comando en la cadena de entrada command =strtok (0, "&"); }}
RobotArm.ino Arduino
// escrito por AhmedAzouz # incluyeServo MyServo, MyServo2, MyServo3, MyServo0; char ByteReceived; int MyPosition, MyPosition2, MyPosition3, MyPositionG; int runCounter =0; int ledPin =A5; // establece el posiciones de servo de inicio por defecto int valGripper =30; int valBase =70; int valShoulder =25; int valElbow =150; void setup () {Serial.begin (9600); pinMode (ledPin, SALIDA); digitalWrite (13, BAJO); MyServo0.attach (12); // Pinza adjuntar MyServo.attach (11); // base adjunta MyServo2.attach (13); // hombro adjuntar MyServo3.attach (10); // Codo adjunto // Establecer posiciones de inicio MyServo0.write (valGripper); // Retraso de la pinza (15); MyServo.write (valBase); // retraso base (30); MyServo2.write (valShoulder); // retraso del hombro (30); MyServo3.write (valElbow); // retardo de codo (300);} bucle vacío () {Serial.print ("Base:"); Serial.print (valBase); Serial.print ("\ t"); Serial.print ("Shou:"); Serial.print (valShoulder); Serial.print ("\ t"); Serial.print ("Codo:"); Serial.print (valElbow); Serial.print ("\ t"); Serial.print ("Grip:"); Serial.println (valGripper); // if (Serial.available ()) //Byte=Serial.read (); // leerlo // {while (Serial.available ()> 0) {ByteReceived =Serial.read (); switch (ByteReceived) {// ************* LED case 'n':digitalWrite (ledPin, HIGH); // enciende el LED Serial.println ("LED está encendido"); descanso; caso 'f':digitalWrite (ledPin, LOW); // apaga el LED Serial.println ("LED está apagado"); descanso; // ************* Caso base 'l':MyPosition =MyServo.read () + 2; // L para mover la base a la izquierda MyServo.write (MyPosition); Serial.print ("Base"); Serial.print ("\ t"); Serial.println (MyServo.read ()); retraso (15); descanso; caso 'r':MyPosition =MyServo.read () - 2; // R para mover la base a la derecha MyServo.write (MyPosition); Serial.print ("Base"); Serial.print ("\ t"); Serial.println (MyServo.read ()); retraso (15); descanso; // ************* Funda codo 'u':MyPosition2 =MyServo2.read () + 2; // U para mover Elbow hacia arriba MyServo2.write (MyPosition2); Serial.print ("Codo"); Serial.print ("\ t"); Serial.println (MyServo2.read ()); retraso (15); descanso; caso 'd':MiPosición2 =MiServo2.read () - 2; // D para mover Elbow hacia abajo MyServo2.write (MyPosition2); Serial.print ("Codo"); Serial.print ("\ t"); Serial.println (MyServo2.read ()); retraso (15); descanso; // ************* Funda de hombro 'w':MyPosition3 =MyServo3.read () + 2; // W para mover hombro hacia abajo MyServo3.write (MyPosition3); Serial.print ("Hombro"); Serial.print ("\ t"); Serial.println (MyServo3.read ()); retraso (15); descanso; caso 's':MyPosition3 =MyServo3.read () - 2; // S para mover hombro hacia arriba MyServo3.write (MyPosition3); Serial.print ("Hombro"); Serial.print ("\ t"); Serial.println (MyServo3.read ()); retraso (15); descanso; // ************* Estuche de pinza 'o':MyServo0.write (30); // O para abrir Gripper Serial.print ("Gripper Open"); Serial.print ("\ t"); Serial.println (MyServo0.read ()); retraso (15); descanso; case 'c':// C para abrir Gripper MyServo0.write (1); Serial.print ("Cierre de pinza"); Serial.print ("\ t"); Serial.println (MyServo0.read ()); retraso (15); descanso; // ************* Posición de caída predeterminada (posición de caída rápida) caso 'q':digitalWrite (ledPin, HIGH); Serial.println ("¡Predeterminado eliminado activado!"); Elegir(); Soltar(); Casa(); digitalWrite (ledPin, BAJO); descanso; // ************* Forzar parada y volver a la posición inicial case 'h':Home (); digitalWrite (ledPin, BAJO); descanso; // ************* Ejecuciones automáticas del estado de ánimo Función de reproducción // lectura en serie Debe estar en este formato:1:90 y 2:80 y 3:180 // el lugar de recogida es fijo, esta función automatizará la caída posición. predeterminado:digitalWrite (ledPin, HIGH); Serial.println ("¡Estado de ánimo automático activado!"); Elegir(); Reproducción(); Casa(); digitalWrite (ledPin, BAJO); descanso; }}}
Piezas y carcasas personalizadas
f98t2axin238k2n_khGWAEIqdl.skpEsquemas
Proceso de manufactura
- Makerarm:un brazo robótico genial para los creadores
- Brazo robótico:¿Cómo se fabrica?
- Brazos robóticos en la fabricación y sus beneficios
- Brazos robóticos industriales:una clave para la productividad
- Brazo robótico hidráulico en la industria manufacturera:una guía definitiva
- Uso de IoT para controlar de forma remota un brazo robótico
- Brazo robótico Arduino impreso en 3D
- Brazo robótico controlado por Nunchuk (con Arduino)
- Brazo robótico controlado a través de Ethernet
- El mercado de los brazos robóticos crecerá hasta los 14.780 millones de USD para 2026
- El brazo robótico industrial:un auge en la fabricación