Cuando estaba probando el circuito me fijé que el objeto tiene que estar perpendicular al sensor, porque sino el sonido rebota hacia otro lugar midiendo mal. Esto también ocurre con la luz al reflejarse en los espejos.
Para comprobar el funcionamiento acercaré un coche al sensor y se encenderán distintas luces según la distancia a la que se encuentre, cuando esté lejos estarán todos los LED apagados, y según se vaya acercando se encenderán los LED verde, amarillo y rojo.
Materiales
Para realizar este proyecto se necesita:- Placa Arduino Uno.
- 3 LED de colores rojo, verde y amarillo.
- 1 placa de prototipos sin soldadura.
- 8 Cables macho a macho.
- 1 sensor de proximidad HC-SR04
Realización
- Para la conexión de los LED ver el Proyecto 1: Simulador luces de semáforo.
- Las conexiones del sensor HC-SR04 son:
- El pin VCC del sensor al pin 5V del arduino
- El pin TRIG del sensor al pin -9 del arduino
- El pin ECHO del sensor al pin 8 del arduino
- El pin GND del sensor al pin GND del arduino
Este es el código en lenguaje C necesario para el proyecto.
long distancia;
long tiempo;
int LEDrojo = 13, LEDamarillo = 12, LEDverde = 11, LEDapagados=-1;
void setup()
{
Serial.begin(9600);
//Inicializamos los pines del sensor de proximidad
pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
//Inicializamos los pines de los LED
pinMode(LEDrojo, OUTPUT);
pinMode(LEDamarillo, OUTPUT);
pinMode(LEDverde, OUTPUT);
digitalWrite(LEDrojo, LOW);
digitalWrite(LEDamarillo, LOW);
digitalWrite(LEDverde, LOW);
}
void EnciendeLED(int LED)
{
digitalWrite(LEDrojo, LOW);
digitalWrite(LEDamarillo, LOW);
digitalWrite(LEDverde, LOW);
if(LED!=-1) digitalWrite(LED,HIGH);
}
void loop(){
digitalWrite(9,LOW); // Para estabilizar el sensor
delayMicroseconds(5);
digitalWrite(9, HIGH); // envio pulso ultrasonico
delayMicroseconds(10);
/* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote */
tiempo=pulseIn(8, HIGH);
distancia= int(0.017*tiempo); // fórmula para calcular la distancia
// Monitorización en centímetros por el monitor serial
Serial.print("Distancia ");
Serial.print(distancia);
Serial.println(" cm");
// comprobacion de la distancia en cm para encender los LED
if(distancia<10) EnciendeLED(LEDrojo);
else if(distancia<30) EnciendeLED(LEDamarillo);
else if(distancia<50) EnciendeLED(LEDverde);
else EnciendeLED(LEDapagados);
delay(100);
}
Si quereis cambiar la distancia en la que se encienden los LED hay que modificar los valores de la última parte del código, donde se hace la comprobación de la distancia.
Aquí podéis ver un vídeo de ejemplo, espero que os guste.
No hay comentarios:
Publicar un comentario