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 de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Componentes y materiales

Aplicaciones y servicios online

Sobre el proyecto

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

¡Los brazos robóticos son geniales! Las fábricas los usan para pintar, soldar y manipular con precisión. También en exploración espacial, vehículos ROV submarinos y aplicaciones médicas.

Ahora puedes tener una versión más barata en casa, oficina o laboratorio. ¿Cansado de tareas repetitivas? Programa tu robot para ayudarte... ¡o para liarla! :D

Este tutorial muestra cómo montar un brazo robótico y programarlo con Arduino Mega. Usé un Nintendo Nunchuk para controlarlo: son baratos, fáciles de encontrar y tienen muchos sensores.

Puedes usar este tutorial de varias formas: si no tienes kit de brazo, aprende programación Arduino e interfaz Nunchuk. También sirve para practicar electrónica y mecánica.

Paso 1: Herramientas y materiales

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Herramientas y materiales:

Existe un adaptador para Nunchuk que facilita la conexión a protoboard (enlace), buena opción si no quieres soldar ni cortar el conector original.

El kit SainSmart 6-ejes ya incluye:

Puedes encontrar otros kits online o diseñar el tuyo (hay proyectos para imprimir en 3D).

En los siguientes 7 pasos muestro el montaje del kit antes de cablear. Si no tienes kit similar, salta al cableado y programación. Los GIFs animados solo funcionan en versión de escritorio de la web.

Paso 2: Montaje del brazo - Base

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

La base une dos soportes en U espalda con espalda usando 4 tornillos M3. Es la parte más fácil.

Paso 3: Montaje - Servo #1

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

El primer servomotor se monta perpendicular a la base con un soporte de servo, atornillado a la base (4 tornillos M3). El servo va encima, también con 4 tornillos. Se usa un cuerno metálico circular en el eje (los cuernos plásticos del kit no se usan).

Paso 4: Montaje - Servo #2

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Otro soporte de servo perpendicular al anterior, conectado al cuerno del servo #1 (4 tornillos). Servo #2 instalado con 4 tornillos y cuerno metálico. Un soporte en U se atornilla al cuerno (4 tornillos). Un tornillo M3 opuesto al eje da estabilidad; un rodamiento encaja en ese tornillo, fijado con otra tuerca M3, sujetando firmemente el soporte en U al eje central del servo #2.

Paso 5: Montaje - Servo #3

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Otro soporte en U montado con 4 tornillos. En el otro extremo, servo #3 con cuerno metálico y 4 tornillos. Un soporte de servo conectado al motor, y un perfil en L unido al soporte con tornillos. Otro rodamiento opuesto al eje, como antes.

Paso 6: Montaje - Servo #4

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Otro soporte en U conectado al perfil en L (4 tornillos). Servo #4 montado en el soporte en U (4 tornillos). Otro soporte de servo conectado.

Paso 7: Montaje - Servo #5

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Quinto servo conectado perpendicular al servo #4 con otro soporte de servo (4 tornillos M3).

Paso 8: Montaje - Servo #6

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

La pinza se conecta al eje del servo #5. Encima, servo #6 conectado con tornillos, tuercas y cuerno metálico. La pinza tiene engranajes que convierten la rotación del servo en movimiento lineal.

Paso 9: Preparación del mando Nunchuk

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Elegí el Nunchuk por: barato (réplicas son suficientes), fácil de encontrar, muchos sensores (2 botones Z/C, joystick 2 ejes, acelerómetro 3 ejes), librería Arduino (Robert Eisele: enlace).

El conector del Nunchuk es difícil de interconectar. Tuve que cortar el cable y exponer los hilos (ya no funcionará con Wii). Corté el conector, pelé los cables y con multímetro identifiqué cada hilo (Vcc, GND, SCL, SDA) según el esquema del conector. Los colores no tienen estándar; aquí tres posibilidades:

Original: SDA=verde, SCL=amarillo, 3V3=rojo, GND=blanco
Réplica #1: SDA=amarillo, SCL=blanco, 3V3=verde, GND=rojo
Réplica #2: SDA=azul, SCL=blanco, 3V3=rosa, GND=verde

Soldé los cables a pines macho para conectar fácilmente al Arduino. Usé soldador y termoretráctil. También existe el adaptador Nunchuk mencionado antes.

Paso 10: Cableado de circuitos

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Una vez montada la estructura y preparados los conectores del Nunchuk, cablea los circuitos. Usé la placa de control (shield) del kit, que facilita conexiones con conectores específicos para servos, alimentación, etc.

Nunchuk (en shield):

Si usas Arduino Uno (pines I2C distintos):

Servos (en shield):

Sin shield (pines directos Arduino):

Necesitas fuente externa 12V (>2A). Los servos consumen mucha potencia; si la fuente es insuficiente, vibrarán, se calentarán y perderán fuerza. No conectes la fuente hasta subir el código. El shield tiene botón de encendido; mantenlo en OFF. Conecta USB al Arduino y pasa al siguiente paso.

Paso 11: Configurar Arduino IDE

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

1. Descarga e instala la última versión de Arduino IDE desde arduino.cc.

2. Añadir librerías

Usé la librería Nunchuk de Robert Eisele. Más info en su web. Descarga en GitHub. En Arduino IDE: Sketch → Include Library → Manage Libraries para añadirla.

Funciones de la librería:

Los ángulos vienen en radianes; los convertí a grados en mi código.

Paso 12: Código Arduino

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

Descarga el sketch de Arduino. Conecta USB y sube el código. Aprovecha para dar like y compartir mientras sube. :D

Tras subir, desconecta USB, conecta la fuente y enciende el botón. El código arranca inmediatamente.

¡Advertencia! Al iniciar, el brazo se mueve rápido a su posición inicial. ¡Cuidado con no hacerte daño ni dañar equipos cercanos!

Probablemente debas ajustar los ángulos iniciales de cada servo según cómo los montaste.

Explicación del código:

Antes del setup(), importa librerías (nunchuk.h, wire.h, servo.h). Define pines y variables globales. Variables angle# guardan posición inicial de cada servo (cámbialas para posición inicial segura; el robot intentará moverse instantáneamente al encender). Variables servo#_speed definen velocidad de movimiento. Variables angle#min y angle#max limitan ángulos máx/mín para evitar colisiones entre articulaciones consecutivas.

// Librerías
#include <nunchuk.h>
#include <wire.h>
#include <servo.h>

// Pines
#define SERV1 8
#define SERV2 9
#define SERV3 10
#define SERV4 11
#define SERV5 12
#define SERV6 13

Servo s1, s2, s3, s4, s5, s6;

// Ángulos iniciales (ajustar según montaje)
int angle1 = 90, angle2 = 30, angle3 = 0;
int angle4 = 90, angle5 = 90, angle6 = 45;

// Velocidades
int servo1_speed = 3, servo2_speed = 3, servo3_speed = 3;
int servo4_speed = 1, servo5_speed = 1;

// Límites
int angle1min = 0, angle1max = 180;
int angle2min = 0, angle2max = 180;
int angle3min = 0, angle3max = 180;
int angle4min = 0, angle4max = 180;
int angle5min = 0, angle5max = 180;
int angle6min = 0, angle6max = 180;

boolean display_angles = true;

En setup(), cada servo se adjunta a su pin y se posiciona. Inicia comunicación serial (Serial Monitor) e I2C con Nunchuk.

void setup() {
  s1.attach(SERV1); s1.write(angle1);
  s2.attach(SERV2); s2.write(angle2);
  s3.attach(SERV3); s3.write(angle3);
  s4.attach(SERV4); s4.write(angle4);
  s5.attach(SERV5); s5.write(angle5);
  s6.attach(SERV6); s6.write(angle6);
  Serial.begin(9600);
  Wire.begin();
  nunchuk_init();
}

El loop() se repite constantemente. Lee sensores del Nunchuk cada ciclo y ejecuta comandos según lecturas.

void loop() {
  if (nunchuk_read()) {
    int x = nunchuk_joystickX();
    int y = nunchuk_joystickY();
    boolean z = nunchuk_buttonZ();
    boolean c = nunchuk_buttonC();
    float pitch = nunchuk_pitch();
    float roll = nunchuk_roll();

Joystick X mueve servo #1 (rotación base). Ignora valores pequeños (ruido). Si supera umbral, incrementa/decrementa ángulo a velocidad fija.


    // Girar izquierda/derecha (velocidad fija)
    if (x > 90) {          // Izquierda
      angle1 -= servo1_speed; display_angles = true;
      if (angle1 < angle1min) angle1 = angle1min;
    }
    if (x < -90) {         // Derecha
      angle1 += servo1_speed; display_angles = true;
      if (angle1 > angle1max) angle1 = angle1max;
    }
    s1.write(angle1);

Joystick Y mueve servo #3 (elevación). Servo #2 se mantiene fijo en este código.

Rotación de pinza (servo #5) y movimiento vertical pinza (servo #4) usan ángulos pitch/roll del acelerómetro del Nunchuk. Solo se actualizan cuando se pulsa botón C o Z para facilitar control.

Solo botón C pulsado: lee roll, convierte a grados, velocidad proporcional al error entre posición actual y deseada. Mueve servo #5 hasta alcanzar consigna. Similar para servo #4 con pitch.


    // Acelerómetro solo con botones pulsados
    // Rotar pinza (solo botón C)
    if (c && !z) {
      roll = roll * 57.0 + 90.0; // convertir a grados
      servo5_speed = abs(angle5 - roll)/10 + 1;
      if (roll > angle5) { angle5 += servo5_speed; display_angles = true; }
      if (roll < angle5) { angle5 -= servo5_speed; display_angles = true; }
      s5.write(angle5);
    }

Pinza cierra (servo #6 a 90°) cuando AMBOS botones C y Z pulsados. Si se suelta cualquiera, abre (45°).


    // Abrir/cerrar pinza (ambos botones)
    if (z && c) { s6.write(90); display_angles = true; } // cerrar
    else { s6.write(45); } // abrir

Bloque final muestra en Serial Monitor el ángulo actual de cada servo, útil para elegir ángulos iniciales.

Archivo completo: nunchuk.ino (descarga desde GitHub).

Paso 13: Uso

Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino

¡Alimenta el robot y diviértete! El Nunchuk controla 5 movimientos: rotación derecha/izquierda, subida/bajada, rotación pinza, pinza arriba/abajo, abrir/cerrar pinza. Puedes combinarlos para tareas. Modifica el código para otros movimientos combinando botones y ángulos del joystick.

Código

Archivo: nunchuk.ino (descarga directa desde GitHub: enlace)

Esquemáticos

Ver diagrama de conexiones en Paso 10.

Proceso de manufactura

  1. Construya un robot con streaming de vídeo controlado por Internet con Arduino y Raspberry Pi
  2. Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
  3. Control Remoto IoT de Brazo Robótico Personalizado con Arduino MKR1000 y ThingSpeak
  4. Transforma un viejo coche RC en un vehículo controlado por joystick con Arduino
  5. Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
  6. Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
  7. Construye un robot controlado por voz con Arduino Nano
  8. Brazo Robótico Controlado por Ethernet: Control Remoto Simplificado
  9. Electrodomésticos activados por voz: Control Bluetooth con Google Assistant
  10. Brazo Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
  11. Brazo Robótico Arduino Controlado por Gestos Manuales – Construcción Paso a Paso