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);
}
}