Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
Componentes y materiales
- Kit de brazo robótico 6 DoF (6 grados de libertad)
- Mando Nintendo Nunchuk
- Arduino Mega 2560
- Placa de control (shield) para servos
Aplicaciones y servicios online
- Arduino IDE
Sobre el proyecto




¡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

Herramientas y materiales:
- Soldador y estaño. Para soldar terminales a los cables del Nunchuk y conectarlo al Arduino.
- Termoretráctil. Para aislar conductores.
- Destornillador. La estructura usa tornillos y tuercas M3.
- Kit de brazo robótico mecánico de escritorio 6 ejes (enlace). Kit fiable y fácil de montar, viene con componentes listados abajo.
- Fuente 12V (2A o más).
- Mando Nunchuk (enlace). Interfaz con Arduino para controlar el brazo.
- Cables macho-macho (4).
- Arduino Mega (enlace). El kit SainSmart ya incluye este Arduino. Si usas otro kit, puedes usar otras placas Arduino.
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:
- Arduino Mega 2560 R3
- Placa de control (shield)
- Módulo inalámbrico NRF24L01+
- MPU6050 (giroscopio 3 ejes + acelerómetro 3 ejes)
- Tornillos M3x8 (71), tuercas M3 (47)
- Soportes en U (2), soportes de servo (5)
- Servos 9kg (4), servos 20kg (2)
- Bandejas metálicas de servo (6)
- Soportes en U (3), soportes en L (21)
- Rodamientos de brida (3), pinza (1)
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

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

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

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

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

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

Quinto servo conectado perpendicular al servo #4 con otro soporte de servo (4 tornillos M3).
Paso 8: Montaje - Servo #6

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

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

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):
- Pin 6 (SCL) → Arduino Mega Pin 21 (SCL)
- Pin 1 (SDA) → Arduino Mega Pin 20 (SDA)
- Pin 3 (Vcc) → Arduino Mega 3V3
- Pin 4 (Gnd) → Arduino Mega GND
Si usas Arduino Uno (pines I2C distintos):
- SCL → Pin A5
- SDA → Pin A4
- Vcc → 3V3
- Gnd → GND
Servos (en shield):
- Terminal 11 → Servo #1
- Terminal 12 → Servo #2
- Terminal 13 → Servo #3
- Terminal 8 → Servo #4
- Terminal 9 → Servo #5
- Terminal 10 → Servo #6
Sin shield (pines directos Arduino):
- Pin 11 → Servo #1 (Señal)
- Pin 12 → Servo #2
- Pin 13 → Servo #3
- Pin 8 → Servo #4
- Pin 9 → Servo #5
- Pin 10 → Servo #6
- GND Arduino → GND Servos
- Fuente 6V → VCC Servos
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

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:
nunchuk_buttonZ(): 1 si botón Z pulsado, 0 si nonunchuk_buttonC(): 1 si botón C pulsado, 0 si nonunchuk_joystickX(): valor X joystick (-127 a 127)nunchuk_joystickY(): valor Y joystick (-127 a 127)nunchuk_pitch(): ángulo pitch en radianes (-180° a 180°)nunchuk_roll(): ángulo roll en radianes (-180° a 180°)
Los ángulos vienen en radianes; los convertí a grados en mi código.
Paso 12: Código 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

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