Programación de modo autónomo


Esta actividad consiste en programar el robot para que este sea capaz de permanecer en movimiento teniendo en cuenta la presencia o no de un obstaculo frontal. Para ello, va a usar un sensor capaz de obtener la distancia que hay entre el objeto y el robot.

La programaciópn debe hacer que el robot avance en linea recta hasta detectar un obstaculo frontal. Cuando detecte este obstaculo, deberá girar, hacia un lado defindido por el usuario, y seguir avanzando en linea recta. Esto debe repetirse sin fin hasta que se apague el robot.

Para poder llevar a cabo esta actividad, va a ser necesario el robot Orbito junto con el módulo de motores y un sensor de distancia láser.


A continuación, en el desplegable, se muestra la solución de esta actividad.

// Se declaran las lñaibrerias necesarias
#include <Orbito.h>
#include <Motores.h>

// Parametros del codigo
#define DISTANCIA_MIN 50
// Se debe dejar sin comentar el sentido en el que debe girar el robot
//#define GIRAR_IZQUIERDA
#define GIRAR_DERECHA

// Se declaran las variables necesarias
bool marcha = 0;
uint16_t laser_value = 0;

// Se crea el objeto ModuloMotores
Motores ModuloMotores;

void setup() {
  // Se inicializa el robot
  Orbito.begin();
  // Se inicializa el sensor laser
  Orbito.ExternalModule.Laser.begin();
  // Se inicializa el monitor serial
  Serial.begin(115200);
  Serial.print("Iniciando modo autónomo");
  // Retardo para dejar el robot en el suelo
  delay(2500);
}

void loop() {
  // Se obtiene el valor de distancia del sensor
  laser_value = Orbito.ExternalModule.Laser.getDistance();
  // Se imprime por el monitor serial el valor del sensor de distancia laser
  Serial.println(laser_value);
  // Verificar si hay un objeto cerca del robot
  if(laser_value < DISTANCIA_MIN){
    // Se apagan los motores
    ModuloMotores.apagarMotores();
    // Girar hacia el lado indicado
    #ifndef GIRAR_IZQUIERDA
    ModuloMotores.rotarRobot(ModuloMotores.horario);
    Serial.print("Girando a la izquierda");
    delay(100);
    #endif
    #ifndef GIRAR_DERECHA
    ModuloMotores.rotarRobot(ModuloMotores.antihorario);
    delay(100);
    Serial.print("Girando a la derecha");
    #endif
  }
  else{
    ModuloMotores.apagarMotores();
    ModuloMotores.moverRobot(ModuloMotores.adelante);
  }
  delay(100);
}


Vistas
1 Número de vistas
1 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.