Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Brazo robótico programable local y remoto

Componentes y suministros

Arduino Mega 2560
× 1
SainSmart DIY 3-Axis Control Palletizing Robot Arm Modelo para Arduino UNO MEGA2560
× 1
Kit de brazo robótico para bricolaje MeArm
× 1
LCD retroiluminado Adafruit RGB - 16x2
× 1
dispositivo Android
× 1
Potenciómetro giratorio (genérico)
10Kohm
× 4
Interruptor de botón SparkFun de 12 mm
× 3
LED (genérico)
ROJO, AZUL, VERDE, AMARILLO
× 4

Aplicaciones y servicios en línea

Arduino IDE
MIT App Inventor 2

Acerca de este proyecto

El propósito de este tutorial es desarrollar paso a paso un proyecto para el control y programación de un Brazo Robot, simulando las funciones básicas de un robot industrial.

Paso 1:especificaciones

El robot tiene dos funciones básicas:

  • Programa :Registre las posiciones de los brazos en tres dimensiones (cada registro es un "paso")
  • Ejecutar :Realizar en secuencia las posiciones registradas en el "Programa". El robot ejecutará el programa hasta que se utilice el comando "ABORT".

Características principales:

  • El proyecto se puede utilizar para controlar robots con 3 o 4 DOF ("Grados de libertad").
  • El robot se puede controlar en los modos "LOCAL" y "REMOTO" (el último a través de un dispositivo Android)
  • Durante la fase del programa, el usuario puede cambiar el modo de control de "LOCAL" a "REMOTO" y viceversa.
  • La información al usuario se proporcionará a través de LED de colores, una pantalla LED de 2 líneas y sonido (un timbre).
  • La alarma sonora también se puede activar de forma remota.

Paso 2:el proyecto

El diagrama de bloques del paso anterior muestra la "Lista de materiales" que se utilizará en este proyecto.

Opté por Arduino MEGA para no preocuparme por la cantidad de puertos Arduino disponibles (E / S). La UNO, por ejemplo, funcionaría sin problemas, pero debería utilizarse un método de expansión de puertos. Hay varias opciones que se pueden encontrar fácilmente en Internet, como un decodificador 74138, por ejemplo.

Aquí, el primer prototipo se está programando en "modo local".

Para la red Bluetooth, se utilizará el HC-06.

La aplicación de Android utilizada para " modo remoto ", se desarrolló utilizando la herramienta MIT Appinventor2, que es una potente plataforma única para este tipo de aplicación basada en dispositivos Android. La aplicación está disponible para su descarga gratuita en la tienda de Google:MJRoBot Arduino Robot Arm Control.

El video a continuación puede darle una idea de cuál debería ser el proyecto final con programación remota:

Paso 3:desarrollo del proyecto

Los brazos robóticos se pueden clasificar según el número de "articulaciones" o "grados de libertad" (DOF) que tienen.

  • La " Base "o" Cintura ", generalmente puede girar el brazo 180o o 360o, dependiendo del tipo de Servo utilizado (aquí en este proyecto, se utilizó un Servo de 180o).
  • El " hombro ", es la encargada de" subir o bajar "el brazo en vertical.
  • El " codo "hará que el brazo" avance o retroceda ".
  • La " Garra "o" Pinza "funciona abriendo o cerrando para" agarrar cosas ".

Paso 4:el circuito

Se utilizarán servomotores para impulsar las articulaciones, conectados directamente al Arduino. Tenga en cuenta que no es infrecuente ver "Motores paso a paso" utilizados en la base para un mayor par y precisión. La elección correcta de los servos es muy importante (hay servos chinos baratos que están muy mal construidos, como MG995, que desafortunadamente son los que venían con mi SanSmart 3DOF AARM). Pero para la propuesta de este proyecto funcionó bien.

La potencia de CC para los servos debe estar separada del Arduino y otros componentes. Una fuente de alimentación externa de 5 o 6 V debería funcionar sin problemas (consulte la Hoja de datos de sus servidores para verificar el rango de voltaje adecuado). Una práctica común también es usar capacitores de 470uF entre VCC y GND para minimizar el ruido generado por los motores de CC dentro de los servidores. Asegúrese de conectar todos los "Grounds" (fuente de alimentación externa con el pin Arduino GND).

Si los servos tienen problemas y vibran mucho, haga ajustes en los "retrasos" de su código. Es importante que los servos tengan tiempo para llegar a cierto punto antes de recibir un nuevo comando. También vale la pena comprobar si los servos son digitales o analógicos, ya que si mecánicamente son similares, el digital funciona con una frecuencia de 300Hz mientras que el analógico, 50Hz. La biblioteca estándar de Arduino " Servo.h "fue desarrollado para servos analógicos y puede modificarse si es necesario, para un mejor funcionamiento con servos digitales.

El dibujo de arriba muestra el circuito completo.

Paso 5:el código

El proyecto no es complicado, pero tiene muchas variables. Lo más prudente es definirlos claramente y dejar las observaciones en un archivo único:

ArmDefine.h

Este archivo también debe establecer los ángulos mínimo, máximo e inicial del servo. El código incluido en este tutorial tiene dos conjuntos de parámetros para los brazos robóticos que probé en mi proyecto (por supuesto, solo se debe usar un grupo de constantes):

  // MeArm 4-DOF # define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 # define maxShou 180 #define maxElbw 150 #define midGrip 30 # define midBase 87 # define midShou 138 # define midElbw 100 / * SS 3-DOF # define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150 # define maxShou 155 #define maxElbw 0 #define midGrip 100 # define midBase 90 # define midShou 90 # define midElbw 0 * /  

Cada tipo de brazo tiene un conjunto diferente de parámetros y es importante que encuentre el adecuado para el suyo. Lo que sugiero es que inicialmente los potenciómetros (ollas) permanezcan en su punto medio y el Mapeo de las salidas PWM se establezcan en los valores predeterminados: Max =255 , Min =0 y Mid =126 (" #defines "arriba). Luego, comience a variar los potenciómetros (uno por uno) y siga en el Monitor Serial (o LCD) cuáles deberían ser los valores mínimo y máximo donde el brazo funcione correctamente. Esos serán los valores finales que se utilizarán para el configuración (cambiar mis valores originales en ArmDefine.h) .

Para "registrar" los conjuntos de coordenadas (o pasos) que el robot debería reproducir, usaré matrices de datos:

  int gripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; // Índice que se utilizará en la matriz de posición utilizada para tareas grabadas  

Tenga en cuenta que no estoy manteniendo la posición "almacenada" y al final del programa "robot", el índice vuelve a cero y el robot esperará la grabación de una nueva secuencia (el programa se pierde). Alternativamente, puede mantener estas matrices de datos en la EEPROM de Arduino, por ejemplo. Al hacer eso, el programa se ejecutará nuevamente o incluso podría tener más de un programa almacenado.

Paso 6:la lógica del programa

El bloque principal ("Bucle") es realmente bastante simple:

Compruebe si se utilizó un comando para ejecutar el "programa" (secuencia de pasos).

  • Si es así, ejecútelo.
  • De lo contrario, el "programa" no está completo y aún debe escribir nuevos pasos.
  • Si se define una "nueva posición", agréguela al programa.
  • Primero, verifica los mensajes que llegan al búfer en serie, desde el dispositivo Android.
  • Luego, verifica si el modo de control es "Local" o "Remoto" (el predeterminado es Local).
  • Regrese al principio y realice el paso 1 nuevamente.
  void loop () {checkBTcmd (); defineLocalRemote (); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| comando ALTO =="runon") {RunProgram (); } else recArmPosition (); comando ="";}  

La función checkBTcmd () ensambla una cadena usando los caracteres individuales que llega del módulo BT. Esta cadena se pasa a la variable " comando ".

La función defineLocalRemote () considera la variable " comando "comprobando si se recibe un comando para cambiar el modo a remoto o viceversa. Aquí también se analiza el comando de alarma. Para la lógica del programa, si la" Alarma "se activa en el dispositivo Android, el brazo debe ir necesariamente al Control Remoto modo.

La función RunProgram () realiza los preparativos, encendiendo / apagando los leds, etc y especialmente invocando la función: ExecuteTask () . Esta última es la función que contiene la lógica de ejecución de la secuencia de pasos. La función aumenta el " positionIndex "enviando los datos de posición para armar uno por uno usando la herramienta: armPosition (agarre, base, hombro, codo) .

Finalmente, la función que realmente controla los servos y escribe los "pasos" es recArmPosition () . Dependiendo de recibir el comando de Android, esta función definirá el posicionamiento de los servos que pueden ser a través de los potenciómetros, o mediante los "sliders" de la aplicación Android. Con el cambio de cada posición, esta función envía las coordenadas a los servos usando armPosition función (agarre, base, hombro, codo). La lectura de la posición real de los potenciómetros o deslizadores y la correspondiente activación de los servos se produce en el momento en que se dispara el comando "SAVE" o "PROGRAM". En ese momento, el índice de posición de las matrices se incrementa y el paso se almacena.

Para simplificar la comprensión, todo el código se basó en sus funciones específicas. La " Configuración "," Bucle "y las funciones descritas anteriormente están prácticamente todas en el archivo: MJRoBot_Arm_Robot_Task_Prgm.ino

Las funciones más generales, como leer el comando BT: void checkBTcmd () ; generador de sonido: pitido vacío (int pin, int freq, long ms) y antirrebote: debounce booleano (pin int) ; están en el archivo: General_Functions.ino

Un dato importante:como el Arduino ejecuta instrucciones basadas en un reloj de 16Mhz, se espera que los botones de control se lean cientos o incluso miles de veces por segundo, de ahí que sea importante hacer un botón "antirrebote" que establezca el paso de grabación. .

El cuarto y último archivo es: Arm_Ctrl_and_Display.ino

En este archivo se encuentran las funciones de lectura del potenciómetro: bool readPotenciometers () ; lectura de controles deslizantes de Android: bool readSliders () ; colocación de los servos: void armPosition (int gripp, int basee, int shoulder, codo int) . Las otras funciones incluidas en el archivo son para la visualización de datos en la pantalla LCD, monitor de serie, alarmas, etc.

El video muestra el brazo robótico 4DOF "meArm" siendo programado de forma remota a través de la aplicación de Android .

El código fuente completo del proyecto se puede encontrar en GITHUB:

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

o aquí:

F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino

Paso 7:Conclusión

Como siempre, espero que este proyecto pueda ayudar a otros a encontrar su camino en el apasionante mundo de la electrónica, la robótica y la IoT. Para más proyectos, visite mi blog:MJRoBot.org

¡Saludos desde el sur del mundo! ¡Nos vemos en mi próximo tutorial!

Gracias

Marcelo

Código

  • Fragmento de código n. ° 1
  • Fragmento de código n. ° 2
  • Fragmento de código n. ° 3
Fragmento de código n. ° 1 Arduino
 // MeArm 4-DOF # define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 # define maxShou 180 #define maxElbw 150 #define midGrip 30 # define midBase 87 # define midShou 138 # define midElbw 100 / * SS 3-DOF # define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150 # define maxShou 155 #define maxElbw 0 #define midGrip 100 # define midBase 90 # define midShou 90 # define midElbw 0 * / 
Fragmento de código n. ° 2 Arduino
 int gripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; // Índice que se utilizará en la matriz de posición utilizada para tareas grabadas 
Fragmento de código n. ° 3 Arduino
 bucle vacío () {checkBTcmd (); defineLocalRemote (); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| comando ALTO =="runon") {RunProgram (); } else recArmPosition (); comando ="";} 
Github
https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

Esquemas

Brazo robótico
https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

Proceso de manufactura

  1. Control remoto universal usando Arduino, 1Sheeld y Android
  2. Brazos robóticos en la fabricación y sus beneficios
  3. Diferencias entre robot manipulador y brazo robótico
  4. Animación LCD y juegos
  5. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  6. Uso de IoT para controlar de forma remota un brazo robótico
  7. Brazo robótico Arduino impreso en 3D
  8. Brazo robótico controlado por Nunchuk (con Arduino)
  9. Voltímetro de bricolaje con Arduino y una pantalla Nokia 5110
  10. Brazo robótico simple e inteligente con Arduino
  11. Python3 y comunicación Arduino