Parte III "Control de una plataforma robótica con sensor ultrasónico"

Para este punto ya debes tener armada la plataforma y tener al menos una idea de cómo se controlan los motores de la misma, si no es así, vuelve al tutorial anterior y revisa las primeras dos partes. También es importante que tu sensor de distancia ultrasónico este configurado en modo autónomo esto lo puedes ver en el Tutorial Arduino Intermedio.

 

/*
Este codigo es para controlar un robot con el uso de un sensor
ultrasónico del tipo URM37
 
Se usa un Arduino Uno, un Shield para motor de 1A
Una plataforma Cabra, y un sensor URM37
 
Codigo de dominio público wwww.suallabs.com 2014
 */
 
int EN1 = 6;  
int EN2 = 5;
int IN1 = 7;
int IN2 = 4;
// Define las constantes de control de los motores
int pinSensor = 2; 
//Pin del sensor 
int pinLed = 13; 
//Pin del led
int estadoSensor = 0; 
// Variable para estado del sensor
 
void setup()
{   
    pinMode(IN2, OUTPUT);         
    pinMode(EN2, OUTPUT);         
    pinMode(EN1, OUTPUT);         
    pinMode(IN1, OUTPUT); 
    pinMode(pinLed, OUTPUT);     
// Inicializa los pines 4,5,6,7,13 como salidas 
    pinMode(pinSensor, INPUT); 
// Pin 2 entrada 
}
 
void loop()
{
   estadoSensor = digitalRead(pinSensor); 
  // Lee el valor del pin del sensor y lo almacena 
  // en la variable estadoSensor 
  if (estadoSensor == LOW) {
   // Si tenemos un obstáculo hace las siguientes 4 instrucciones 
   digitalWrite(pinLed, HIGH);  
   //Enciende el LED 13
   Alto(200);                    
    //Alto por 200ms
   Regresar(180, 500);                
   //Regresa 500ms
   Derecha(180, 500);                
   //Derecha 500ms
   } else { 
   // Si no existe obstáculo entonces avanza
 digitalWrite(pinLed, LOW);
 Avanzar(200,100);
 } 
}
 
//********************
//AREA DE SUB RUTINAS
//********************
//Sub-rutina Avanzar, cuando esta sub-rutina es llamada el robot avanza
//Se ejecutara la subrutina por los milisegundos que estén entre paréntesis
int Avanzar(int Vel, int Mil){  
  digitalWrite(IN2, LOW);    
  analogWrite(EN2,Vel);    
  digitalWrite(IN1, LOW);    
  analogWrite(EN1,Vel);     
  delay(Mil);
//Espera el tiempo que se indica entre paréntesis
//La configuración 0110 en los pines 10,11,12,13 
//hace que el robot avance
  }
 
//Sub-rutina Regresar, cuando esta sub-rutina es llamada el robot retrocede
//Se ejecutara la subrutina por los milisegundos que estén entre paréntesis
int Regresar(int Vel, int Mil){ 
  digitalWrite(IN2, HIGH);     
  analogWrite(EN2,Vel);    
  digitalWrite(IN1, HIGH);    
  analogWrite(EN1,Vel);     
  delay(Mil); 
//Espera el tiempo que se indica entre paréntesis
//La configuración 1001 en los pines 10,11,12,13 
//hace que el robot regrese
  } 
 
//Sub-rutina Izquierda, cuando esta sub-rutina es llamada el robot gira a la izquierda
//Se ejecutara la subrutina por los milisegundos que estén entre paréntesis
int Izquierda(int Vel, int Mil){ 
  digitalWrite(IN2, LOW);     
  analogWrite(EN2,Vel);    
  digitalWrite(IN1, HIGH);    
  analogWrite(EN1,Vel);     
  delay(Mil);
//Espera el tiempo que se indica entre paréntesis
//La configuración 0101 en los pines 10,11,12,13 
//hace que el robot de vuelta a la izquierda
  } 
 
//Sub-rutina Derecha, cuando esta sub-rutina es llamada el robot gira a la derecha
//Se ejecutara la subrutina por los milisegundos que estén entre paréntesis
int Derecha(int Vel, int Mil){ 
  digitalWrite(IN2, HIGH);  
  analogWrite(EN2,Vel);    
  digitalWrite(IN1, LOW);    
  analogWrite(EN1,Vel);     
  delay(Mil); 
//Espera el tiempo que se indica entre paréntesis
//La configuración 1010 en los pines 10,11,12,13 
//hace que el robot de vuelta a la derecha
  }
  
//Sub-rutina Alto, cuando esta sub-rutina es llamada el robot hace un alto
int Alto(int Mil){
  digitalWrite(5, LOW);   
  digitalWrite(6, LOW);   
  delay(Mil);
//La configuración 0000 en los pines 10,11,12,13 
//hace que el robot haga un alto
  } 
 

Regresar