sábado, 14 de mayo de 2016

Juntando todo (2)

Continuando con el uso de la librería desarrollada para el robot, se recomienda la realización de pequeños programas de muestra del uso de sus funciones, y, si bien la librería es exclusiva para una aplicación en concreto y poca utilidad tendría en otros desarrollos, no está de más seguir con los consejos de la página oficial de Arduino en lo que a librerías concierne, aunque más no sea para recordar rápidamente que hace cada función.

Los siguientes cuatro programas están destinados a la verificación de las funciones de la librería.

En el código siguiente se crea el objeto Motores, pasando cómo parámetros los cuatro pines de conexión hacia el C.I. L298N, el objetivo del programa es el de mover a velocidad constante el robot en las ocho direcciones previstas durante un determinado tiempo, al finalizar el ciclo enciende y apaga el led del pin 13 cuatro veces, antes de repetir nuevamente el ciclo:

#include <MiselaneasRobot01.h>

MiselaneasRobot01 Motores(12, 13, 11, 7, 8, 6);

void setup() {
  Motores.Direccion(DetenerLOW);
  Motores.FijarVelocidades(200, 200);
}

void loop() {
  delay(2500);
  Motores.Direccion(Avanzar);    
delay(1000); 
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Retroceder); 
delay(1000); 
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_1);     
delay(500);
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_2);   
  delay(500);
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_3);   
  delay(750);  
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_4);     delay(750);
  Motores.Direccion(DetenerLOW);

  for (int i = 0; i < 5; i++) {
    Motores.Direccion(DetenerHIGH); delay(250);
    Motores.Direccion(DetenerLOW);  delay(250);
  }
}

El siguiente código hace lo mismo que el anterior, con la diferencia de que en lugar de probar las posibles direcciones durante un determinado tiempo, las verifica durante cierta cantidad de pulsos recibidos desde los encoders. Se crea el objeto Encoders, pasando cómo parámetros los pines donde se recibe la información, y un valor de 0.0 que anula la posibilidad de corregir velocidades:

#include <MiselaneasRobot01.h>

MiselaneasRobot01 Motores(12, 13, 11, 7, 8, 6);
MiselaneasRobot01 Encoders(2, 3, 0.0);

void setup() {
  Motores.Direccion(DetenerLOW);
  Motores.FijarVelocidades(200, 200);
}

void loop() {
  delay(2500);
  Motores.Direccion(Avanzar);  
  Encoders.ContarPulsos(100); 
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Retroceder); 
Encoders.ContarPulsos(100);
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_1);     
Encoders.ContarPulsos(20);
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_2);     
Encoders.ContarPulsos(20);
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_3);     
Encoders.ContarPulsos(40);
  Motores.Direccion(DetenerLOW);
  Motores.Direccion(Giro_4);     
Encoders.ContarPulsos(40);
  Motores.Direccion(DetenerLOW);

  for (int i = 0; i < 5; i++) {
    Motores.Direccion(DetenerHIGH);
    delay(250);
    Motores.Direccion(DetenerLOW);
    delay(250);
  }
  delay(5000);
}

El objetivo del siguiente programa es avanzar y retroceder en línea recta. Se aplica corrección de velocidades hasta 0.95 del valor de PWM de cada motor:

#include <MiselaneasRobot01.h>

MiselaneasRobot01 Motores(12, 13, 11, 7, 8, 6);
MiselaneasRobot01 Encoders(2, 3, 0.95);

int Vel_0, Vel_1;
byte aux = 0;

void setup() { }

void loop() {
  Vel_0 = 200;
  Vel_1 = 200;
  Motores.Direccion(DetenerLOW);
  delay(2500);

  Motores.CorregirVelocidades(Vel_0, Vel_1);
  Motores.FijarVelocidades(Vel_0, Vel_1);

  if (aux == LOW) {
    aux = HIGH;
    Motores.Direccion(Avanzar);
    Encoders.ContarPulsos(150);
  } else
    aux = LOW;
    Motores.Direccion(Retroceder);
    Encoders.ContarPulsos(150);
  }
}

Por último, un pequeño programa que sigue a un objeto que se encuentre delante del robot hasta una distancia de 100 cm. Se utiliza a la placa de ultrasonidos:

#include <MiselaneasRobot01.h>

MiselaneasRobot01 Ultrasonido(4, 5);
MiselaneasRobot01 Motores(12, 13, 11, 7, 8, 6);
MiselaneasRobot01 Encoders(2, 3, 0.95);

int Vel_0, Vel_1;
unsigned long D;

void setup() {
  Motores.Direccion(DetenerLOW);
  delay(2500);
}

void loop() {
  Vel_0 = 255;
  Vel_1 = 255;
  D = Ultrasonido.Distancia_cm();
 
  if (D > 10 && D < 100) {
    Motores.Direccion(Avanzar);
    Encoders.CorregirVelocidades(Vel_0, Vel_1);
    Motores.FijarVelocidades(Vel_0, Vel_1);
  } else { 
    Motores.Direccion(DetenerLOW);
    Encoders.DetenerInterrupciones();
  }
}

Verificado entonces la funcionalidad de la librería, queda disponible para ser usada ya en un proyecto final.

--------------------------------------------------------------------------------------------------------------------------

No hay comentarios.:

Publicar un comentario