Control de distancias con sensor de ultrasonidos y Arduino

Con el siguiente programa, podemos encender varios LEDs y activar un buzzer dependiendo de la distancia a un obstáculo.

El sensor de ultrasonidos envía un pulso cuando activamos el pin «trigger» y nos avisa a través del pin «echo» cuando lo recibe de vuelta. Teniendo en cuenta la velocidad del sonido (340m/s) podemos calcular la distancia y activar en consecuencia los leds y el buzzer.

Podemos utilizar el siguiente esquema de montaje (obtenido de www.luisllamas.es)

Aquí el código de ejemplo:

 

int echo = 5;//patilla echo al pin 5
int trigger = 6;//patilla trigger al pin 6

int verde = 7;
int rojo1 = 6;
int rojo2 = 5;
int rojo3 = 4;

int buzzer = 12;

long distancia;
long tiempo;
void setup() {

Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(buzzer,OUTPUT);
pinMode(verde,OUTPUT);
pinMode(rojo1,OUTPUT);
pinMode(rojo2,OUTPUT);
pinMode(rojo3,OUTPUT);

}

void loop() {

//mostramos tiempo de ida y vuelta por puerto serie
digitalWrite(trigger,LOW);
delayMicroseconds(5);
digitalWrite(trigger,HIGH);
tiempo = pulseIn(echo,HIGH);
//pulseIn nos devuelve el tiempo de ida y vuelta
Serial.print(«Tiempo = «);
Serial.println(tiempo);

//cálculo de la distancia
distancia = 0.017*tiempo;
//V= E/t; V = 340 m/s = 34*10^3 cm/s
//dividimos entre dos para tener en cuenta solo el tiempo de ida
//de ahí sale el 0,017
Serial.print(«Distancia: «);
Serial.print(distancia);
Serial.println(» cm»);
//delay(200);
if (distancia>30){
digitalWrite(verde, HIGH);
digitalWrite(rojo1,LOW);
digitalWrite(rojo2,LOW);
digitalWrite(rojo3,LOW);
}
if ((distancia < 30)&&(distancia>10)){
delay(100);
tone(buzzer, 440);
delay(100);
noTone(buzzer);
digitalWrite(verde,LOW);
digitalWrite(rojo1,HIGH);
digitalWrite(rojo2,LOW);
digitalWrite(rojo3,LOW);
}

if ((distancia <=10 )&&(distancia >5)){
delay(50);
tone(buzzer, 440);
//digitalWrite(led1,HIGH);
delay(100);
noTone(buzzer);
digitalWrite(verde,LOW);
digitalWrite(rojo1,HIGH);
digitalWrite(rojo2,HIGH);
digitalWrite(rojo3,LOW);
}
if (distancia <5){

// delay(50);
tone(buzzer, 440);
//digitalWrite(led1,HIGH);
delay(100);
noTone(buzzer);
digitalWrite(verde,LOW);
digitalWrite(rojo1,HIGH);
digitalWrite(rojo2,HIGH);
digitalWrite(rojo3,HIGH);

}

}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *