Programacion en Arduino desde Cero (0) – Conceptos Básicos

En este curso, exploraremos cómo programar y controlar un brazo robótico utilizando Arduino. Aprenderemos los fundamentos de la cinemática de robots y cómo aplicarlos para mover el brazo en diferentes direcciones y posiciones.

Utilizaremos el monitor serial como herramienta para visualizar el movimiento del brazo en tiempo real, lo que nos permitirá comprender mejor su comportamiento y depurar el código de manera eficiente.

Nombre articulaciones Brazo Robótico Kimo:

Recomendamos utilizar la siguiente versión de Arduino IDE si experimenta errores críticos al momento de subir el código, puedes descargar el programa recomendado en el siguiente enlace:Descargar Codigos Bluetooth

Explicación Código:

  1. Inclusión de la librería Servo.h:
    #include 

    Esta línea incluye la librería necesaria para controlar los servomotores en Arduino.

  2. Declaración de objetos Servo y variables:
    Servo rotacion;
    Servo Hombro1;
    Servo Hombro2;
    Servo Codo;
    Servo muneca;
    Servo Garra;
    
    int angulorotacion = 90;
    int angulohombro1 = 90;
    int angulohombro2 = 90;
    int angulocodo = 0;
    int angulomuneca = 90;
    int angulogarra = 0;

    Se declaran objetos Servo para cada servo y se inicializan variables para almacenar los ángulos de rotación deseados para cada uno.

  3. Configuración inicial en el método setup():
    void setup() {
      Serial.begin(115200);
      Serial.println("Iniciando... ");
    
      // Asigna los pines de los servomotores
      rotacion.attach(2);
      Hombro1.attach(4);
      Hombro2.attach(5);
      Codo.attach(7);
      muneca.attach(12);
      Garra.attach(11);
    
      // Establece los ángulos iniciales de los servomotores
      rotacion.write(angulorotacion);
      Hombro1.write(angulohombro1);
      Hombro2.write(angulohombro2);
      Codo.write(angulocodo);
      muneca.write(angulomuneca);
      Garra.write(angulogarra);
    
      delay(500);
    }

    En el método setup(), se inicia la comunicación serial, se asignan los pines a los servomotores y se establecen los ángulos iniciales de cada uno.

  4. Bucle principal en el método loop():

    void loop() {
      unsigned char comando = 0;
      if (Serial.available()) {  
        comando = Serial.read();  
    
        // Control de movimientos según comando recibido
        if (comando == 'a') {
          angulorotacion += 10;
          rotacion.write(angulorotacion);
        } else if (comando == 's') {
          angulorotacion -= 10;
          rotacion.write(angulorotacion);
        } else if (comando == 'e') {
          angulohombro1 += 10;
          angulohombro2 -= 10;
          Hombro1.write(angulohombro1);
          Hombro2.write(angulohombro2);
        } else if (comando == 'd') {
          angulohombro1 -= 10;
          angulohombro2 += 10;
          Hombro1.write(angulohombro1);
          Hombro2.write(angulohombro2);
        } else if (comando == 'r') {
          angulocodo += 10;
          Codo.write(angulocodo);
        } else if (comando == 'f') {
          angulocodo -= 10;
          Codo.write(angulocodo);
        } else if (comando == 't') {
          angulomuneca += 10;
          muneca.write(angulomuneca);
        } else if (comando == 'g') {
          angulomuneca -= 10;
          muneca.write(angulomuneca);
        } else if (comando == 'z') {
          angulogarra = 40;
          Garra.write(angulogarra);
        } else if (comando == 'x') {
          angulogarra = 0;
          Garra.write(angulogarra);
        }
    

    Vamos a analizar esta sección con más detalle:
    void loop() { }: Este es el bucle principal del programa en Arduino. Se ejecuta continuamente después de que el programa se inicia en el método setup(). Aquí es donde se manejan todas las operaciones que deben realizarse repetidamente.
    "unsigned char comando = 0;": Se declara una variable llamada comando que almacenará el comando enviado a través del Monitor Serial. Se inicializa en 0 como un valor predeterminado.
    "if (Serial.available()) { }": Se verifica si hay datos disponibles en el puerto serial. Si hay datos disponibles, significa que se ha enviado un comando desde el Monitor Serial.
    "comando = Serial.read();": Se lee el comando enviado y se almacena en la variable comando.
    –  Control de Movimientos segun comando recibido:Se utiliza una serie de instrucciones if y else if para determinar qué acción tomar en función del comando recibido. Por ejemplo:
    a. Si el comando es ‘a‘, se incrementa el ángulo de rotación en 10 grados y se actualiza el servo rotacion.
    b. Si el comando es ‘s‘, se decrementa el ángulo de rotación en 10 grados y se actualiza el servo rotacion.
    c. Si el comando es ‘e‘, se incrementa el ángulo del hombro 1 en 10 grados y se decrementa el ángulo del hombro 2 en 10 grados, actualizando los servos correspondientes.

    Estas instrucciones permiten controlar dinámicamente los movimientos del brazo robótico en función de los comandos enviados desde el Monitor Serial, lo que brinda una forma interactiva de controlar el brazo robótico durante su funcionamiento.

  5. Envío de información por el Monitor Serial:

        Serial.println("----------------------------------");
        Serial.println("Nueva Posicion: ");
        Serial.println(" ");
        Serial.print("Motor Base    : ");
        Serial.println(angulorotacion);
        Serial.print("Motor Hombro 1: ");
        Serial.println(angulohombro1);
        Serial.print("Motor Hombro 2: ");
        Serial.println(angulohombro2);
        Serial.print("Motor Codo    : ");
        Serial.println(angulocodo);
        Serial.print("Motor Muñeca  : ");
        Serial.println(angulomuneca);
        Serial.print("Motor Garra   : ");
        Serial.println(angulogarra);
      }
    }  //End loop

    Finalmente, se envían los ángulos de cada servo al Monitor Serial para visualizar la nueva posición del brazo robótico en tiempo real.

Este código permite controlar el brazo robótico a través de comandos enviados por el Monitor Serial, lo que permite ajustar los ángulos de rotación y la posición de cada servo de forma dinámica y precisa.

Código Completo

#include 

Servo rotacion;
Servo Hombro1;
Servo Hombro2;
Servo Codo;
Servo muneca;
Servo Garra;

int angulorotacion = 90;
int angulohombro1 = 90;
int angulohombro2 = 90;
int angulocodo = 0;
int angulomuneca = 90;
int angulogarra = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("Iniciando... ");

  rotacion.attach(2);
  Hombro1.attach(4);
  Hombro2.attach(5);
  Codo.attach(7);
  muneca.attach(12);
  Garra.attach(11);

  rotacion.write(angulorotacion);
  Hombro1.write(angulohombro1);
  Hombro2.write(angulohombro2);
  Codo.write(angulocodo);
  muneca.write(angulomuneca);
  Garra.write(angulogarra);
  delay(500);
}

void loop() {
  unsigned char comando = 0;
  if (Serial.available()) {  //solo leeremos si hay un byte en el buffer

    comando = Serial.read();  //leemos el byte

    if (comando == 'a') {
      angulorotacion += 10;  //incrementamos 10
      rotacion.write(angulorotacion);
    } else if (comando == 's') {
      angulorotacion -= 10;  //decrementamos 10
      rotacion.write(angulorotacion);
    } else if (comando == 'e') {
      angulohombro1 += 10;
      angulohombro2 -= 10;
      Hombro1.write(angulohombro1);
      Hombro2.write(angulohombro2);
    } else if (comando == 'd') {
      angulohombro1 -= 10;
      angulohombro2 += 10;
      Hombro1.write(angulohombro1);
      Hombro2.write(angulohombro2);
    } else if (comando == 'r') {
      angulocodo += 10;
      Codo.write(angulocodo);
    } else if (comando == 'f') {
      angulocodo -= 10;
      Codo.write(angulocodo);
    } else if (comando == 't') {
      angulomuneca += 10;
      muneca.write(angulomuneca);
    } else if (comando == 'g') {
      angulomuneca -= 10;
      muneca.write(angulomuneca);
    } else if (comando == 'z') {
      angulogarra = 40;
      Garra.write(angulogarra);
    } else if (comando == 'x') {
      angulogarra = 0;
      Garra.write(angulogarra);
    }

    Serial.println("----------------------------------");
    Serial.println("Nueva Posicion: ");
    Serial.println(" ");
    Serial.print("Motor Base    : ");
    Serial.println(angulorotacion);
    Serial.print("Motor Hombro 1: ");
    Serial.println(angulohombro1);
    Serial.print("Motor Hombro 2: ");
    Serial.println(angulohombro2);
    Serial.print("Motor Codo    : ");
    Serial.println(angulocodo);
    Serial.print("Motor Muñeca  : ");
    Serial.println(angulomuneca);
    Serial.print("Motor Garra   : ");
    Serial.println(angulogarra);
  }
}  //End loop

 

Select your currency (Seleccione su moneda)
Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
Click outside to hide the comparison bar
Compare
Menú Principal Categorías CONTACTO
¿Qué buscas en RoboticaDeColombia.Com?
Verificado por MonsterInsights