Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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í
#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.
}