En esta práctica vamos a realizar un coche esquivaobstáculos, el cuál avanzará recto mientras no detecte la presencia de un obstáculo. En caso de detectar algún obstáculo en su camino debe ir girando sobre sí mismo hasta que esquive el obstáculo y pueda seguir su camino.
long distancia;
long tiempo;
int trig=12;
int echo=13;
//Motor A
int ENA=11;
int IN1=10;
int IN2=9;
//Motor B
int ENB=5;
int IN3=6;
int IN4=7;
void setup(){
Serial.begin(9600);
//Declaramos todos los pines con salidas
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
}
void Adelante()
{
//Direccion motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 120);//Velocidad motor A
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite (ENB,120); //Velocidad motor B
}
void Atras ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
analogWrite (ENA, 100); //Velocidad motor A
//Direccion motor B
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite (ENB, 100); //Velocidad motor B
}
void Derecha ()
{
//Direccion motor A
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
analogWrite (ENA, 150); //Velocidad motor A
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite (ENB, 0); //Velocidad motor A
}
void Parar ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
analogWrite (ENA, 0); //Velocidad motor A
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite (ENB, 0); //Velocidad motor A
}
void loop (){
digitalWrite(trig,LOW);//Declaro el funcionamiento del ultrasonido, así como su funcionamiento
delayMicroseconds(5);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
tiempo=pulseIn(echo,HIGH);
distancia= int(0.017*tiempo);
Serial.println("Distancia");
Serial.println(distancia);
Serial.println("cm");
delay(1000);
if (distancia>20)//Declaro una función, si se cumple, se realizará la condición, pero si no se cumple, se buscará otra de las condiciones que se sitúan dentro de esta condición, para mirar si se cumple alguna de ellas
{
Adelante();
}
else
{
if (distancia<20)
{
Parar();
delay(1000);
Atras();
delay(2000);
Derecha();
delay(1000);
}
Comentarios
Publicar un comentario