Controla 3 articulaciones con potenciometros o programa secuencias automaticas.
Las 3 Articulaciones
Base
Gira todo el brazo de izquierda a derecha (0° - 180°)
Codo
Sube y baja el antebrazo (30° - 150° para no golpear)
Pinza
Abre y cierra para agarrar objetos (30° cerrada - 90° abierta)
Cables del Servo
Los servos SG90 tienen 3 cables con colores estandar. Es importante conectarlos correctamente:
Con 3 servos moviendose a la vez, el pin 5V de Arduino puede no dar suficiente corriente. Esto causa que Arduino se reinicie o los servos tiemblen.
Solucion:
- Usa 4 pilas AA (6V) o una fuente de 5V externa para los servos
- Conecta el GND de la fuente externa al GND de Arduino (tierra comun)
- Los cables naranjas (senal) van a los pines de Arduino
Potenciometros como Joysticks
Cada potenciometro controla una articulacion. Al girarlo, Arduino lee un valor de 0 a 1023 y lo convierte al angulo del servo (0° a 180°).
| Potenciometro | Pin Analogico | Controla |
|---|---|---|
| Pot 1 | A0 |
Base (giro) |
| Pot 2 | A1 |
Codo (arriba/abajo) |
| Pot 3 | A2 |
Pinza (abrir/cerrar) |
Diagrama del Circuito
Movimiento Suave
Si movemos el servo directamente al angulo objetivo, el movimiento es brusco y puede danar el brazo o tirar objetos. Usamos una funcion que mueve gradualmente, paso a paso.
❌ Movimiento Directo
Salta instantaneamente. Brusco, puede tirar objetos.
✅ Movimiento Suave
Avanza poco a poco. Suave, control preciso.
int moverSuave(int actual, int objetivo, int paso) {
if (actual < objetivo) {
return min(actual + paso, objetivo); // Subir
} else if (actual > objetivo) {
return max(actual - paso, objetivo); // Bajar
}
return actual; // Ya llegamos
}
Cada vez que se llama, avanza 2 grados hacia el objetivo. Si objetivo es 90° y actual es 80°, despues de llamarla sera 82°, luego 84°, etc.
El Codigo
#include <Servo.h>
// Pines de servos
const int PIN_BASE = 9;
const int PIN_CODO = 10;
const int PIN_PINZA = 11;
// Pines de potenciometros
const int POT_BASE = A0;
const int POT_CODO = A1;
const int POT_PINZA = A2;
// Limites de movimiento
const int BASE_MIN = 0;
const int BASE_MAX = 180;
const int CODO_MIN = 30; // Evitar golpear la base
const int CODO_MAX = 150;
const int PINZA_ABIERTA = 90;
const int PINZA_CERRADA = 30;
// Servos
Servo servoBase;
Servo servoCodo;
Servo servoPinza;
// Posiciones actuales
int posBase = 90;
int posCodo = 90;
int posPinza = 90;
void setup() {
Serial.begin(9600);
Serial.println("Brazo Robotico - EigenRobotics");
servoBase.attach(PIN_BASE);
servoCodo.attach(PIN_CODO);
servoPinza.attach(PIN_PINZA);
posicionInicial();
delay(1000);
}
void loop() {
// Leer potenciometros
int lecturaBase = analogRead(POT_BASE);
int lecturaCodo = analogRead(POT_CODO);
int lecturaPinza = analogRead(POT_PINZA);
// Mapear a angulos
int objetivoBase = map(lecturaBase, 0, 1023, BASE_MIN, BASE_MAX);
int objetivoCodo = map(lecturaCodo, 0, 1023, CODO_MIN, CODO_MAX);
int objetivoPinza = map(lecturaPinza, 0, 1023, PINZA_ABIERTA, PINZA_CERRADA);
// Mover suavemente
posBase = moverSuave(posBase, objetivoBase, 2);
posCodo = moverSuave(posCodo, objetivoCodo, 2);
posPinza = moverSuave(posPinza, objetivoPinza, 3);
// Aplicar posiciones
servoBase.write(posBase);
servoCodo.write(posCodo);
servoPinza.write(posPinza);
delay(20);
}
int moverSuave(int actual, int objetivo, int paso) {
if (actual < objetivo) return min(actual + paso, objetivo);
if (actual > objetivo) return max(actual - paso, objetivo);
return actual;
}
void posicionInicial() {
servoBase.write(90);
servoCodo.write(90);
servoPinza.write(PINZA_ABIERTA);
posBase = 90;
posCodo = 90;
posPinza = PINZA_ABIERTA;
}
Demo Interactivo
Controla el Brazo
Mueve los deslizadores como si fueran potenciometros
Simulador
Pasos de Construccion
Construye la estructura
Usa LEGO Technic o piezas impresas 3D. Necesitas base, brazo, antebrazo y pinza.
Monta los servos
Servo 1 en la base (giro horizontal), Servo 2 en el codo, Servo 3 en la pinza.
Prepara la alimentacion
Conecta 4 pilas AA (6V) o fuente 5V externa. Une el GND con el de Arduino.
Conecta los servos
Marron a GND, rojo a 5V (externo), naranja a pines 9, 10 y 11.
Coloca los potenciometros
Cada pot: extremos a 5V y GND de Arduino, centro a A0, A1 y A2.
Sube el codigo
Copia el codigo y subelo. Los servos iran a posicion inicial (90°).
Ajusta los limites
Modifica CODO_MIN, CODO_MAX etc. para que el brazo no golpee la base.
Prueba el control manual
Gira los potenciometros y observa como cada articulacion responde suavemente.
Anade objetos
Pon piezas LEGO o canicas en la mesa. Intenta agarrarlas y moverlas.
Programa secuencias
Usa la funcion secuenciaAgarrar() o crea las tuyas propias.
Experimentos
Control con Joystick
Reemplaza los potenciometros por un joystick analogico para control tipo videojuego
Control Remoto IR
Integra el proyecto P6 para mover el brazo con el mando a distancia
4º Servo: Muneca
Anade un servo extra para rotar la pinza 360°
Grabar Movimientos
Guarda posiciones en un array y reproducelas como "memoria muscular"
Juego de Precision
Competicion: ¿Cuantos objetos puedes mover en 1 minuto?
Brazo Dibujante
Pon un rotulador en la pinza y programa figuras geometricas