Está en la página 1de 7

Este es un mini diagrama de nuestro proyecto, pues solo tiene 1 sensor.

Más o menos los movimientos que el carrito tiene que hacer es este
O sea, por así decir sus movimientos deberían ser algo así

Cuando termine de hacer esa vuelta, lo repetirá en sentido contrario


Saqué este código de un video de YouTube, pero este código es para que el carrito vaya vagando,
no tiene un patrón, además de que incluye variables para un servomotor, que pues nosotros no
incluimos. Yo pensé en modificar el código, pero es que no les entiendo. No sé qué quitar o poner.

#include <Servo.h>
Servo miServo; //Crea un objeto servo para el control del servo
//Constantes y variables usadas durante el programa
#define eco 11 // Pin Eco
#define Trigger 12 // Pin Trigger
//Motor derecho
#define motor_pin2_av 2
#define motor_pin3_re 3
//Motor Izquierdo
#define motor_pin4_av 4
#define motor_pin5_re 5
long duracion, distancia; // Duracion para calcular la distancia
int val;
int izq;
int der;
void setup(void) {
Serial.begin (115200);//Velocidad del puerto serial
pinMode(Trigger, OUTPUT);//Pin TRigger como salida
pinMode(eco, INPUT);//Pin eco como entrada
miServo.attach(9);// Pin donde conectaremos el servo
val = map(511, 0, 1023, 0, 120); // Escala para usarlo con el servo (valor entre 0 y 120)Mueve
el servo para colocar el sensor HC-SR04 en el centro
miServo.write(val); // Ajusta la posición del servo de acuerdo con el valor de la
variable val
delay(500);
pinMode(motor_pin2_av, OUTPUT); //Configura estos piines como salidas para el control de
motores
pinMode(motor_pin3_re, OUTPUT);
pinMode(motor_pin4_av, OUTPUT);
pinMode(motor_pin5_re, OUTPUT);
digitalWrite(motor_pin2_av, HIGH);// Arranca ambos motores hacia adelante
digitalWrite(motor_pin4_av, HIGH);
}
void loop() {
CalculoDistacia(); //Llama a la funcion CalculoDistancia
Serial.println(distancia);//Imprime ese valor en el puerto serial
if(distancia < 28){ // Si la distancia es menor a 28
Parar();//Esta funcion detiene los motores
val = map(0, 0, 1023, 0, 120); // Setea la posición del servo entre 0 a 120
miServo.write(val); // Mueve el servo a la posición Izquierda
CalculoDistacia(); // LLama a la función calculo distancia, donde se obtiene la distancia del lado
izquierdo
izq=distancia; // Se asigna este valor a la varialble izq
Serial.println(" izquierda");
delay(1000);
val = map(1023, 0, 1023, 0, 120); // Setea la posición del servo entre 0 a 120
miServo.write(val); // Mueve el servo a la posición Derecha
CalculoDistacia(); // LLama a la función calculo distancia, donde se obtiene la distancia del lado
derecho
der=distancia; // Se asigna este valor a la varialble der
Serial.print(distancia);
Serial.println(" derecha");
if(izq>der){ // Si la variable "izq" es mayor a la variable der se cumple esta condición
Serial.println("Ir a Izquierda");
Parar(); //Llamamos a la función Parar que detiene ambos motores
delay(500);
Retroceder(); //Luego retrocede
delay(800);
Parar(); // Vuelve a detener los motores
delay(500);
GirarIzquierda(); // Con esta función giramos a la izquierda
delay(800);
Parar(); // Vuelve a detener los motores
delay(1000);
Avanzar();// Se vuelve a poner en marcha ambos motores hacia adelante
}
if(izq<der){ //Si la variable "der" es mayor a la variable "izq" se cumple esta condición
Serial.println("Ir a Derecha");
Parar();//Llamamos a la función Parar que detiene ambos motores
delay(500);
Retroceder();//Luego retrocede
delay(800);
Parar();// Vuelve a detener los motores
delay(500);
GirarDerecha();// Con esta función giramos a la derecha
delay(800);
Parar();// Vuelve a detener los motores
delay(1000);
Avanzar();// Se vuelve a poner en marcha ambos motores hacia adelante
}
}
//---Girar el servo al fente------
val = map(511, 0, 1023, 0, 120); // Setea la posición del servo entre 0 a 120
miServo.write(val); // Mueve el servo al centro
}
void Avanzar(){//Mueve ambos motores hacia adelante
digitalWrite(motor_pin2_av, HIGH);
digitalWrite(motor_pin3_re, LOW);
digitalWrite(motor_pin4_av, LOW);
digitalWrite(motor_pin5_re, LOW);
}
void Parar(){//Detiene Ambos motores
digitalWrite(motor_pin2_av, LOW);
digitalWrite(motor_pin3_re, LOW);
digitalWrite(motor_pin4_av, LOW);
digitalWrite(motor_pin5_re, LOW);
}
void Retroceder(){//Mueve ambos motores hacia atrás
digitalWrite(motor_pin2_av, LOW);
digitalWrite(motor_pin3_re, HIGH);
digitalWrite(motor_pin4_av, LOW);
digitalWrite(motor_pin5_re, LOW);
}
void GirarDerecha(){//Mueve un motor hacia adelante y otro hacia atrás
digitalWrite(motor_pin2_av, HIGH);
digitalWrite(motor_pin3_re, LOW);
digitalWrite(motor_pin4_av, HIGH);
digitalWrite(motor_pin5_re, LOW);
}
void GirarIzquierda(){//Mueve un motor hacia adelante y otro hacia atrás
digitalWrite(motor_pin2_av, HIGH);
digitalWrite(motor_pin3_re, LOW);
digitalWrite(motor_pin4_av, LOW);
digitalWrite(motor_pin5_re, HIGH);
}
void CalculoDistacia(){ // Esta función determina la distacia de un objeto con el sensor ultra
sónico
digitalWrite(Trigger, LOW);
delayMicroseconds(2);
digitalWrite(Trigger, HIGH);//A travé️s del pin de disparo (Trigger) enviaremos una señal de
activación al sensor, lo activaremos durante 10 microsegundos y lo desactivaremos
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
duracion = pulseIn(eco, HIGH);
distancia = duracion/58.2; //Calcula la distancia en centimetros basado en la velocidad del
sonido.
}

También podría gustarte