¿Como Mover tu Brazo Robotico de 6 Servos con Computadora?
El Brazo Robótico Kimo es un manipulador que contiene 6 servomotores sg90 o 6 servomotores mg90s, de tamaño educativo y de Código Abierto, manipulable con cualquier placa que maneje servomotores básicos.
En la siguiente guía podrás encontrar todos los pasos necesarios para controlar tu Brazo Robótico Kimo con un mando a distancia infrarrojo (IR Remote) y su sensor IR, utilizando un Arduino el cual puede ser Uno, Mega2560 o Nano como puente de conexión.
Materiales Necesarios:
Explicación Código:
Primero abriremos Arduino IDE, si tienes dudas sobre como utilizar esta aplicación por favor revisa la siguiente guía dedicada donde encontraras la versión recomendada para Arduino de origen Chino o genuinos.
¿Cómo Cargar Códigos a Arduino?
Código Completo:
Descarga el código de control por infrarrojos del Brazo Robótico Kimo diseñado para 6 servomotores en el siguiente enlace y lo cargaremos en nuestra tarjeta Arduino.
a. Inclusión de librería:
#include <Servo.h>
Esta línea importa la librería Servo.h, que proporciona funciones para controlar servo motores en Arduino.
b. Declaración de objetos Servo:
Servo rotacion; Servo Hombro1; ... se agregan los demás servomotores
Se declaran seis objetos de tipo Servo que representan cada uno de los servos conectados a los pines del Arduino.
c. Definición de variables de ángulo:
int angulorotacion = 90; int angulohombro1 = 90; int angulohombro2 = 90; int angulocodo = 0; int angulomuneca = 90; int angulogarra = 0;
Se inicializan variables para almacenar los ángulos de posición de cada servo motor.
d. Funición setup():
void setup() { // Inicialización del puerto serial Serial.begin(115200); Serial.println("Iniciando... "); // Asignación de pines a los objetos Servo rotacion.attach(2); Hombro1.attach(4); --- Siguientes Servomotores // Establecer posiciones iniciales de los servos rotacion.write(angulorotacion); Hombro1.write(angulohombro1); --- Siguientes Servomotores // Pequeño retardo delay(500); }
La función setup()
se ejecuta una vez al inicio del programa y se utiliza para realizar la configuración inicial del microcontrolador y sus periféricos. En este caso particular:
- Inicialización del puerto serial: Esta línea inicializa la comunicación serial a una velocidad de 115200 baudios. Esto permite la comunicación entre el Arduino y un dispositivo externo, como una computadora, a través de un cable USB.
- Asignación de pines a los objetos Servo: Después los objetos
"rotacion"
,"Hombro1"
, “Hombro2"
,"Codo"
,"muneca"
y"Garra"
a los pines específicos del Arduino. Esto establece la comunicación entre el microcontrolador y los servo motores.
- Establecimiento de posiciones iniciales de los servos: Seguido se establecen las posiciones iniciales de cada servo motor. Estos valores provienen de las variables definidas al principio del código (
,"
angulorotacion""angulohombro1"
, etc.).
- Pequeño retardo: Se agrega un pequeño retardo de 500 milisegundos (0.5 segundos) después de inicializar los servos. Esto puede ser útil para asegurarse de que todos los dispositivos estén listos antes de continuar con el programa.
e. Función loop():
void loop() { unsigned char comando = 0; if (Serial.available()) { comando = Serial.read(); // Manejo de comandos recibidos por el puerto serial // para controlar los servos if (comando == 'a') { // Incrementar el ángulo de rotación angulorotacion += 10; // Resto de los casos similares para controlar los otros servos // ... Serial.println("----------------------------------"); Serial.println("Nueva Posicion: "); Serial.println(" "); Serial.print("Motor Base : "); Serial.println(angulorotacion); Serial.print("Motor Hombro 1: "); --- Siguientes impresión en monitor serial de Servomotores } }
La función loop()
es el corazón del programa y se ejecuta continuamente después de que setup()
haya completado su ejecución. En este caso:
- Recepción de datos desde el puerto serial: Esta parte del código verifica si hay datos disponibles en el puerto serial. Si hay datos disponibles, se lee el primer byte recibido y se almacena en la variable
comando
.
- Procesamiento de comandos: Dependiendo del valor de
comando
, se ejecuta una acción específica. Por ejemplo, si se recibe el carácter'a'
, se aumenta el ángulo de rotación del servorotacion
en 10 grados y se actualiza su posición. Si se recibe el carácter's'
, se disminuye el ángulo de rotación del mismo servo en 10 grados, y así sucesivamente para los demás comandos.
- Impresión de información en el puerto serial: Al final del
loop()
, se imprime información sobre la posición actual de cada servo en el puerto serial. Esto permite monitorear el estado de los servos durante la ejecución del programa.
Control Manual
Iniciaremos por el control primario, esta parte es 100% necesaria para un correcto funcionamiento de tu proyecto, si te saltas directamente al control por bluetooth, posiblemente no te funcione y tu manipulador robótico no presente movimiento.
- Debemos realizar la conexión electrónica inicial que se indica en la siguiente imagen.(Recuerda dar click sobre la imagen para descargar el esquema de conexión en Fritzing)CONEXIÓN EN ARDUINO NANO:
CONEXIÓN EN ARDUINO UNO - Si no tienes el programa Fritzing, puedes descargarlo en el siguiente link:
- Con el Código cargado correctamente procederemos a abrir el monitor serial como se indica en la siguiente imagen.(Recuerda tener tu tarjeta conectada a tu Arduino correctamente con el puerto COM indicado ya seleccionado en la pestaña herramientas).
- En el monitor serial en la opción 1 escribimos el comando y en la opción 2 enviamos el comando.
- Enviaremos a través del monitor serial letras, que serán interpretadas por el código como como comandos de movimiento del servomotor, según los condicionales que están creados.
- Veremos un ejemplo del condicional creado:
- Donde:
- En la fila 43 indicamos que si el puerto serial recibe el comando (letra) “a” realizara la acción contemplada en las filas 44 a la 46
- En la fila 44 indicamos al servomotor que aumente su posición actual 30 grados en sentido positivo.
- En la fila 45 le ordenamos al servomotor escribir en el pin digital 2 el Angulo actual de rotación.
- En la fila 46 escribimos el Angulo de rotación en el puerto serial.
- En la fila 48 inicia el segundo condicional para el mismo servomotor pero esta vez se activa cuando recibe el comando (letra) “s“
- En la fila 49 indicamos que gire el servomotor 30 grados pero esta vez en sentido negativo.
- En la fila 50 escribimos el nuevo Angulo en el pin digital 2.
- En la fila 51 escribimos el Angulo de rotación en el puerto serial para que puedas visualizarlo cuando controles el brazo robótico de forma manual.
- Comandos de control de tu Brazo Robótico (comandos a escribir en el puerto serial).
Cadera Hombro Codo Muñeca Garra - Derecha = a
- Izquierda = s
- Arriba = e
- Abajo = d
- Arriba = r
- Abajo= f
- Arriba = t
- Abajo = g
- Abrir = z
- Cerrar = x