CODIGO CARRO EVASOR DE OBSTACULOS
// ==========================================
// EVASOR DE OBSTACULOS
// Arduino UNO + L298N + HC-SR04
// ==========================================
// ---------- MOTORES ----------
const int ENA = 5;
const int IN1 = 8;
const int IN2 = 9;
const int ENB = 6;
const int IN3 = 10;
const int IN4 = 11;
// ---------- HC-SR04 ----------
const int TRIG = 3;
const int ECHO = 4;
// const int TRIG = 12;
// const int ECHO = 13;
// ---------- CONFIGURACION ----------
const int VELOCIDAD = 140;
const int DISTANCIA_MINIMA = 20;
// ==========================================
// FUNCIONES DE MOVIMIENTO
// ==========================================
void adelante() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, VELOCIDAD);
analogWrite(ENB, VELOCIDAD);
}
void atras() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, VELOCIDAD);
analogWrite(ENB, VELOCIDAD);
}
void izquierda() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, VELOCIDAD);
analogWrite(ENB, VELOCIDAD);
}
void derecha() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, VELOCIDAD);
analogWrite(ENB, VELOCIDAD);
}
void detener() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
// ==========================================
// MEDIR DISTANCIA
// ==========================================
float medirDistancia() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long tiempo = pulseIn(ECHO, HIGH);
float distancia = tiempo * 0.0343 / 2;
return distancia;
}
// ==========================================
// CONFIGURACION
// ==========================================
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
// ==========================================
// PROGRAMA PRINCIPAL
// ==========================================
void loop() {
float distancia = medirDistancia();
if (distancia > DISTANCIA_MINIMA) {
adelante();
}
else {
detener();
delay(300);
atras();
delay(300);
detener();
delay(200);
derecha();
delay(600);
detener();
delay(200);
}
}
No hay comentarios:
Publicar un comentario