¿Cómo Controlar Brazo Robótico de 6 Servomotores con Modulo Bluetooth?

¿Cómo Controlar Brazo Robótico de 6 Servomotores con Modulo Bluetooth?

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 modulo bluetooth HC-05 o HC-06, 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 Bluetooth 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 servo rotacion 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:
  1. 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
  2. En la fila 44 indicamos al servomotor que aumente su posición actual 30 grados en sentido positivo.
  3. En la fila 45 le ordenamos al servomotor escribir en el pin digital 2 el Angulo actual de rotación.
  4. En la fila 46 escribimos el Angulo de rotación en el puerto serial.
  5. En la fila 48 inicia el segundo condicional para el mismo servomotor pero esta vez se activa cuando recibe el comando (letra) “s
  6. En la fila 49 indicamos que gire el servomotor 30 grados pero esta vez en sentido negativo.
  7. En la fila 50 escribimos el nuevo Angulo en el pin digital 2.
  8. 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


Se dará inicio al control a través de modulo Bluetooth, es recomendable que tengas todos los pasos anteriormente mencionados realizados al 100% para así no tener problemas al momento de iniciar con la siguiente parte del manual.

CONTROL CON MODULO BLUETOOTH

  • Debes ahora añadir el modulo bluetooth a la conexión que realizamos al principio de esta guía como se indica en el siguiente esquema desarrollado en fritzing (Recuerda para descargar el esquema, debes dar clic sobre la imagen)CONEXION ARDUINO NANO

    CONEXIÓN ARDUINO UNO
  • Ahora procederemos a descargar la siguiente aplicación diseñada para Android dando clic en el siguiente enlace:
  • Abrimos la aplicación:
  • Configurar de aplicación:

    1. Activamos el modulo bluetooth.
    2. Nos dirigimos al panel de conexión.
    3. Seleccionamos nuestro modulo bluetooth.
    4. Conectamos el modulo bluetooth.
    5. Volvemos a la pagina principal, escogemos un espacio en blanco y lo editamos.
    6. Escogemos un pad y los editamos dando click al botón edit, este pad correspondería a las articulaciones cadera y hombro.
    7. La configuración interna del primer pad quedaría del siguiente modo.
    8. Escogemos otro pad y lo configuramos, este seria para las articulaciones codo y muñeca
    9. La configuración interna del segundo pad seria la siguiente:
    10. Ahora procedemos a configurar la garra, para ello escogemos un Switch,
    11. Lo configuramos internamente del siguiente modo.
  • .Ahora volvemos al menú principal, damos click en RUN y tendremos operando nuestro brazo robótico con modulo bluetooth correctamente bajo el mismo principio de control manual, la unica diferencia es que nuestro monitor serial corresponde al aplicativo bluetooth, facilitando el control del manipulador robótico.

Nombre Articulaciones: