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

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

Componentes y materiales

Componente Cantidad
Arduino Mega 2560 1
SainSmart DIY 3-Axis Control Palletizing Robot Arm Model para Arduino UNO MEGA2560 1
Kit MeArm DIY Robot Arm 1
Módulo Bluetooth HC-06 1
LCD RGB Adafruit 16x2 con retroiluminación 1
Dispositivo Android 1
Potenciómetro rotativo 10Kohm 4
Pulsador SparkFun 12mm 3
LEDs (rojo, azul, verde, amarillo) 4

Aplicaciones y servicios online

Descripción del proyecto

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

El propósito de este tutorial es desarrollar paso a paso un proyecto para controlar y programar un brazo robótico, simulando las funciones básicas de un robot industrial.

Paso 1: Especificaciones

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

El robot tiene dos funciones básicas:

Características principales:

Paso 2: El proyecto

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

Elegí Arduino MEGA para no preocuparme por el número de puertos disponibles (I/Os). El UNO funcionaría pero requeriría expansión de puertos (ej. decodificador 74138).

Para la red Bluetooth se usa el módulo HC-06.

La app Android para "modo remoto" se desarrolló con MIT App Inventor 2, potente plataforma para este tipo de apps Android. La app está disponible gratis en Google Play: MJRoBot Arduino Robot Arm Control.

Paso 3: Desarrollo del proyecto

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

Los brazos robóticos se clasifican según el número de "articulaciones" o "Grados de Libertad" (GDL):

Paso 4: El circuito

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

Los servomotores impulsan las articulaciones, conectados directamente al Arduino. No es raro ver "motores paso a paso" en la base para mayor par y precisión. La elección correcta de servos es crucial (hay servos chinos baratos mal construidos como MG995, que venían con mi SainSmart 3DOF, pero para este proyecto funcionan).

La alimentación DC de los servos debe separarse del Arduino y otros componentes. Una fuente externa de 5-6V funciona bien (verifica datasheet de tus servos). Práctica común: condensadores 470uF entre VCC y GND para reducir ruido de motores DC internos. Une todas las masas (fuente externa con pin GND del Arduino).

Si los servos vibran mucho, ajusta los "delays" del código. Es importante dar tiempo a los servos para llegar a posición antes de nuevo comando. También verifica si son digitales (300Hz) o analógicos (50Hz). La librería estándar Servo.h es para analógicos y puede modificarse para digitales.

Paso 5: El código

El proyecto no es complicado pero tiene muchas variables. Lo prudente es definirlas claramente en un archivo único:

ArmDefine.h

Este archivo también define ángulos mínimo, máximo e inicial de los servos. El código incluye dos juegos de parámetros para los brazos probados (solo usar uno):

// MeArm 4-GDL
#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-GDL
#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 brazo tiene parámetros distintos. Sugiero: potenciómetros en punto medio, mapeo PWM por defecto (Max=255, Min=0, Mid=126). Luego varia potenciómetros uno a uno y observa en Monitor Serie (o LCD) los valores mínimo/máximo donde el brazo funciona bien. Esos serán los valores finales para ArmDefine.h.

Para "grabar" conjuntos de coordenadas (pasos) que el robot debe reproducir, uso arrays de datos:

int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0;  // Índice para array de posiciones de tareas grabadas

Nota: no guardo la posición "almacenada" permanentemente; al finalizar el programa, el índice vuelve a cero y el robot espera nueva secuencia (el programa se pierde). Alternativamente, podrías guardar estos arrays en la EEPROM del Arduino para persistir el programa o tener varios.

Paso 6: Lógica del programa

El bloque principal (Loop) es bastante simple:

  1. Verifica si hay comando para ejecutar el "programa" (secuencia de pasos). Si sí, ejecútalo.
  2. Si no, el "programa" no está completo y hay que grabar nuevos pasos.
  3. Si se define "nueva posición", añádela al programa.
  4. Primero, comprueba mensajes en buffer serie desde dispositivo Android.
  5. Luego, verifica si modo de control es "Local" o "Remoto" (por defecto Local).
  6. Volver al inicio y repetir paso 1.
void loop () {
  checkBTcmd ();
  defineLocalRemote () ;
  execTaskCmd = digitalRead (execTaskPin);
  if (execTaskCmd == HIGH || command == "runon") {
    RunProgram () ;
  } else {
    recArmPosition () ;
  }
  command = "";
}

La función checkBTcmd() ensambla un string con los caracteres que llegan del módulo BT, guardándolo en variable command.

La función defineLocalRemote() evalúa command para cambiar modo a remoto o viceversa. También analiza comando de alarma. Para la lógica, si se dispara "Alarma" en Android, el brazo debe pasar necesariamente a modo Remoto.

La función RunProgram() hace preparativos (LEDs on/off, etc.) e invoca ExecuteTask(), que contiene la lógica de ejecución de la secuencia de pasos. Incrementa positionIndex enviando datos de posición al brazo uno a uno con la herramienta armPosition(grip, base, shoulder, elbow).

La función que realmente manda a los servos y graba los "pasos" es recArmPosition(). Según reciba comando Android, define posicionamiento de servos vía potenciómetros o "sliders" de la app Android. Con cada cambio de posición, envía coordenadas a servos con armPosition. La lectura real de potenciómetros/sliders y activación de servos ocurre al pulsar "GUARDAR" o "PROGRAMAR". Entonces se incrementa el índice del array y se guarda el paso.

Para simplificar, todo el código se basa en funciones específicas. El Setup, Loop y funciones descritas están en: MJRoBot_Arm_Robot_Task_Prgm.ino

Funciones generales (leer comando BT: void checkBTcmd(); generador sonido: void beep(int pin, int freq, long ms); antirrebotes: boolean debounce(int pin)) en: General_Functions.ino

Dato importante: Arduino ejecuta instrucciones a 16MHz, así que los botones de control se leen cientos/miles de veces por segundo. Por eso es crucial hacer "antirrebotes" (debouncing) en el botón que graba el paso.

Cuarto y último archivo: Arm_Ctrl_and_Display.ino

Contiene: lectura potenciómetros bool readPotenciometers(); lectura sliders Android bool readSliders(); posicionamiento servos void armPosition(int gripp, int basee, int shoulder, int elbow). Otras funciones: visualización en LCD, Monitor Serie, alarmas, etc.

El video muestra el brazo robótico 4GDL "meArm" programado remotamente vía la app Android.

Código fuente completo en GitHub:

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

Archivos del proyecto:

Paso 7: Conclusión

Kit de Brazo Robótico Programable de 3 Ejes – Control Local y Remoto con Arduino y Bluetooth

Como siempre, espero que este proyecto ayude a otros a encontrar su camino en el apasionante mundo de la Electrónica, Robótica e IoT. Para más proyectos, visita mi blog: MJRoBot.org

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

Gracias,

Marcelo

Código

Fragmento de código #1 (Arduino)

// MeArm 4-GDL
#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-GDL
#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 #2 (Arduino)

int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0;  // Índice para array de posiciones de tareas grabadas

Fragmento de código #3 (Arduino)

void loop () {
  checkBTcmd ();
  defineLocalRemote () ;
  execTaskCmd = digitalRead (execTaskPin);
  if (execTaskCmd == HIGH || command == "runon") {
    RunProgram () ;
  } else {
    recArmPosition () ;
  }
  command = "";
}

GitHub

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

Esquemáticos

Brazo Robot

Diagrama del brazo robot en GitHub

Proceso de manufactura

  1. Mando universal Android con Arduino, 1Sheeld y control IR
  2. Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
  3. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  4. Control Remoto IoT de Brazo Robótico Personalizado con Arduino MKR1000 y ThingSpeak
  5. Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
  6. Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
  7. Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
  8. Brazo Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
  9. Control Arduino UNO desde Python 3 – Envío de Comandos y Demo LED
  10. Cómo los brazos robóticos industriales transforman la fabricación: beneficios clave explicados
  11. Manipuladores Robóticos vs. Brazos Robóticos: Diferencias Clave Explicadas