Or-bit Fase 5
Fase 5
En el desarrollo de la fase 5 observaremos ciertos cambios generales en el robot por un lado a nivel de estructura se implementaron cambios en las llantas y se le implemeto un nuevo sensor del mismo tipo del anterior aparte que se utilizo una bateria con mayor vida util que la anteriior
Algoritmo
nos encontramos con un algoritmo un tanto diferente ya que debido a la nececidad de que el robot no solo evitara objetos si no de implementar una estrategia la cual le permitera resolver el labenrinto se opto por la decision de que el robot siguiera una de las paredes como guia usando uno de los dos sensores para encontrar siemre la pared y el otro para visualisar las paredes que se pueda encontrar de frente. ocasionando asi que el robot aunque siempre siga una pared lograra llegar a la linea de meta.
codigo
En este codigo se opto por hacer unos cambios: se uso una libreria para determinar la distancia de los sensores hc-sr04 porque al ser 2, adquiere mas orden y menos lineas de esta forma, ademas ahora el robot en el loop, avanzara siempre y cuadno no se cumplan las condiciones de los if o el, else if, el primer if tiene lugar cuando la distancia que sensa el de en frente, es ==4 y a su vez, la distancia del izquierdo es mayor o igual a 10, en este caso girara a la izquierda sobre su propio eje(este giro se puede denominar como uno que se produce cuando el sensor frente detecta poca distnacia y el sensor izquierda detecta mucha distancia) si esta condicion no se cumple se evalua la condicion del else if, donde se mira si la distanciaFrente es 4 o mejor dicho si esta muy cercano a una pared y ademas si el sensor izquierda encuentra una pared, en ese caso se ejecuta un giro sobre su propio eje, pero hacia la derecha, siempre que termina estos giros el robot vuelve a su estado normal: avanzar.
#include <NewPing.h>
int izqA = 4;
int izqB = 5;
int derA = 6;
int derB = 7;
int grados, tiempo;
float distanciaIzquierda,distanciaFrente;
NewPing SensorIzquierda(3,2,400);
NewPing SensorFrente(9,8,400);
void setup() {
Serial.begin(9600);
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
pinMode(13,OUTPUT);
}
void loop() {
grados = 160;
tiempo = map(grados,0,360,0,4000);
distanciaIzquierda = SensorIzquierda.ping_cm();
distanciaFrente = SensorFrente.ping_cm();
digitalWrite(derB, 1);
digitalWrite(izqB, 1);
digitalWrite(derA, 0);
digitalWrite(izqA, 0);
Serial.println("frente");
if(distanciaFrente==4 && distanciaIzquierda>=10){
digitalWrite(derB, 1);
digitalWrite(izqB, 0);
digitalWrite(derA, 0);
digitalWrite(izqA, 1);
delay(tiempo);
Serial.println("IZQUIERDO");
}else if(distanciaFrente==4 && (distanciaIzquierda>0 && distanciaIzquierda<10) ){
digitalWrite(13,HIGH);
digitalWrite(derB, 0);
digitalWrite(izqB, 1);
digitalWrite(derA, 1);
digitalWrite(izqA, 0);
delay(tiempo);
Serial.println("DERECHO");
digitalWrite(13,LOW);
}
}
diagrama de flujo

anexos graficos
Comentarios
Publicar un comentario