Programa Ejemplo

Acá les dejo un ejemplo de un programa funcional para poder hacer que el robot recorra la superficie de combate y no se caiga.

int Sensor=3; //indicamos donde conectamos el sensor
//señales para los motores ubicados en la derecha
int MotorDA=4; //Pin de Avanzar
int MotorDR=5; //Pin de Retroceder
//señales para los motores ubicados en la izquierda 
int MotorIA=6; //Pin de Avanzar
int MotorIR=7; //Pin de Retroceder

void setup() {
  pinMode(Sensor,INPUT);
  pinMode(MotorDA,OUTPUT);
  pinMode(MotorDR,OUTPUT);  
  pinMode(MotorIA,OUTPUT);
  pinMode(MotorIR,OUTPUT);      
}
//esta función es para que el robot Avance
void Avanzar(){
  digitalWrite(MotorDR,LOW);
  digitalWrite(MotorIR,LOW);
  delay(1);
  digitalWrite(MotorDA,HIGH);
  digitalWrite(MotorIA,HIGH);  
}
//esta función es para que el robot se detenga
void Frenar(){
  digitalWrite(MotorDR,LOW);
  digitalWrite(MotorIR,LOW);
  digitalWrite(MotorDA,LOW);
  digitalWrite(MotorIA,LOW);
}
//esta función es para que el robot retroceda
void Atras(){
  digitalWrite(MotorDA,LOW);
  digitalWrite(MotorIA,LOW);
  delay(1);
  digitalWrite(MotorDR,HIGH);
  digitalWrite(MotorIR,HIGH);
}
//esta función es para que el robot gire a la derecha
void Derecha(){
  digitalWrite(MotorDA,LOW);
  digitalWrite(MotorIR,LOW);
  delay(1);
  digitalWrite(MotorDR,HIGH);
  digitalWrite(MotorIA,HIGH);
}
//esta función es para que el robot gire a la izquierda
void Izquierda(){
  digitalWrite(MotorDR,LOW);
  digitalWrite(MotorIA,LOW);
  delay(1);
  digitalWrite(MotorDA,HIGH);
  digitalWrite(MotorIR,HIGH);
}

void loop() {
  int LecturaSensor;

  LecturaSensor=digitalRead(Sensor);
  if (LecturaSensor==0){ //esto nos indica que sensor esta sobre blanco
    Frenar();//frena el robot
    delay(10);//por 10 milisegundos
    Atras(); //le indicamos que valla hacia atras
    delay(500); //durante 500 milisegundos
    Derecha(); //que gire a la derecha
    delay(400); // por 400 milisegundos
    Avanzar() // y le indicamos que vuelva a avanzar
  }
  else{
    Avanzar();//en el caso que el sensor este sobre negro
    //el robot va a avanzar
  }
delay(10); //este es el tiempo de barrido del programa
}

En este ejemplo hemos utilizado 6 funciones para manejar la activación y desactivación de los motores. Las funciones Avanzar(), Frenar(), Atras(), Derecha(), Izquierda(), se encargan de poner en estado alto o bajo los pines necesarios para comandar el puente H (placa de potencia) para que los motores giren en los sentidos necesarios para lograr los movimientos que deseamos.

El programa principal inicia haciendo una lectura del sensor de línea, que si se encuentra en color blanco nos dará un 0 y si se encuentra en negro nos dará un 1. Esta lectura la guardaremos en una variable que anteriormente hemos declarado llamada LecturaSensor

LecturaSensor=digitalRead(Sensor);

Luego de realizar la lectura entramos a una estructura condicional (IF) donde evaluaremos el valor que obtuvimos de la lectura, en el caso de que tengamos un 0, el robot, frenará, retrocederá, girará y procederá a avanzar hasta detectar línea nuevamente.

if (LecturaSensor==1){ //esto nos indica que sensor esta sobre blanco
    Frenar();//frena el robot
    delay(10);//por 10 milisegundos
    Atras(); //le indicamos que valla hacia atras
    delay(500); //durante 500 milisegundos
    Derecha(); //que gire a la derecha
    delay(400); // por 400 milisegundos
    Avanzar() // y le indicamos que vuelva a avanzar
  }
  else{
    Avanzar();//en el caso que el sensor este sobre negro
    //el robot va a avanzar
  } 

En el caso de leer un 1 en el sensor esto le indica que está sobre superficie negra y por lo tanto puede avanzar.