Medidor de Distancia con un HC-SR04

Medidor de Distancia con un HC-SR04

 

Primero el Circuito

 

 

PROGRAMA
const int TriggerPin =12;
const int EchoPin = 11;

//luces verdes
const int LEDV1 = 10;
const int LEDV2 = 9;

//luces amarillas
const int LEDA1 = 8;
const int LEDA2 = 7;

//luces rojas
const int LEDR1 = 6;
const int LEDR2 = 5;

float distancia;
long tiempo;



void setup() {
//activacion del monitor
  Serial.begin(9600);
  //configurar leds como outputs
  pinMode(LEDV1, OUTPUT);
  pinMode(LEDV2, OUTPUT);
  pinMode(LEDA1, OUTPUT);
  pinMode(LEDA2, OUTPUT);
  pinMode(LEDR1, OUTPUT);
  pinMode(LEDR2, OUTPUT); 

  //PIN TRIG COMO SALIDA
  pinMode(TriggerPin,OUTPUT);
  // pin ECHO como entrada
  pinMode(EchoPin, INPUT);
}

void Secuencia(int valor){
  if (valor == 0){
  digitalWrite(LEDV1, LOW);
    digitalWrite(LEDV2, LOW);
    digitalWrite(LEDA1, LOW);
    digitalWrite(LEDA2, LOW);
    digitalWrite(LEDR1, LOW);
    digitalWrite(LEDR2, LOW);
  }
  else if (valor == 1){
  digitalWrite(LEDV1, HIGH);
    digitalWrite(LEDV2, LOW);
    digitalWrite(LEDA1, LOW);
    digitalWrite(LEDA2, LOW);
    digitalWrite(LEDR1, LOW);
    digitalWrite(LEDR2, LOW);
  }
  else if (valor == 2){
  digitalWrite(LEDV1, HIGH);
    digitalWrite(LEDV2, HIGH);
    digitalWrite(LEDA1, LOW);
    digitalWrite(LEDA2, LOW);
    digitalWrite(LEDR1, LOW);
    digitalWrite(LEDR2, LOW);
  }
  else if (valor == 3){
  digitalWrite(LEDV1, HIGH);
    digitalWrite(LEDV2, HIGH);
    digitalWrite(LEDA1, HIGH);
    digitalWrite(LEDA2, LOW);
    digitalWrite(LEDR1, LOW);
    digitalWrite(LEDR2, LOW);
  }
  else if (valor == 4){
  digitalWrite(LEDV1, HIGH);
    digitalWrite(LEDV2, HIGH);
    digitalWrite(LEDA1, HIGH);
    digitalWrite(LEDA2, HIGH);
    digitalWrite(LEDR1, LOW);
    digitalWrite(LEDR2, LOW);
  }
  else if (valor == 5){
  digitalWrite(LEDV1, HIGH);
    digitalWrite(LEDV2, HIGH);
    digitalWrite(LEDA1, HIGH);
    digitalWrite(LEDA2, HIGH);
    digitalWrite(LEDR1, HIGH);
    digitalWrite(LEDR2, LOW);
  }
  else if (valor == 6){
  digitalWrite(LEDV1, HIGH);
    digitalWrite(LEDV2, HIGH);
    digitalWrite(LEDA1, HIGH);
    digitalWrite(LEDA2, HIGH);
    digitalWrite(LEDR1, HIGH);
    digitalWrite(LEDR2, HIGH);
  };
};


void loop() {
delay(150);
  digitalWrite(TriggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(TriggerPin, LOW);
  
  //medimos el pulso de respuestas
  tiempo = (pulseIn(EchoPin, HIGH)/2);
  distancia = float(tiempo * 0.0343);
  Serial.print("Distancia");
  Serial.println(distancia);
  if (distancia >= 300){
     Secuencia(0);
  } else if ((distancia <= 299) && (distancia >= 250)){
     Secuencia(1);
  } else if ((distancia <= 249) && (distancia >= 200)){
     Secuencia(2);
  } else if ((distancia <= 199) && (distancia >= 149)){
     Secuencia(3);
  } else if ((distancia <= 149) && (distancia >= 100)){
     Secuencia(4);
  } else if ((distancia <= 99) && (distancia >= 50)){
     Secuencia(5);
  } else if ((distancia <= 49) && (distancia >= 0)){
     Secuencia(6);
  };

  delay(1000);
}

 

DESAFIOS:

  1. QUE PRENDA AL REVES: Es decir que primero prenda los rojos y cuando este bien cerca, que prenda los verde.
  2. PARPADEO: Que si esta lejos, los rojos APENAS parpadean .. pero que a medida que se acerque AUMENTE la velocidad de parpadeo.

 

 

 

Leave a Reply

Your email address will not be published.