Además como elemento añadido, colocaremos un elemento de aviso, un diodo led, que se encenderá en caso de que nuestro sensor detecte que la distancia que recibe es demasiado corta(por ejemplo, menor de diez centímetros), y se mantendrá apagado en caso contrario. Es un sistema muy similar al que usarían los cuadros de mando de los coches que llevan sensor de aparcamiento incorporado.
Este es el esquema del proyecto de hoy. Podríamos realizarlo sin lcd, en caso de no disponer de ella.
Antes de empezar a escribir código, vamos a intentar explicar un poco acerca del funcionamiento del sensor de ultrasonidos. Su funcionamiento es muy simple. Vemos que tiene incorporados dos transductores(los cilindros), uno de ellos se empleará para emitir una señal de ultrasonidos, y el segundo será el encargado de recibirla.
Si tenemos en cuenta que la velocidad del sonido es 340 m/s y medimos el tiempo que tarda nuestro sensor en recibir la respuesta, podremos despejar la distancia con la sencilla fórmula:
distancia = velocidad * tiempo
Una vez dicho esto podemos entrar a ver como el código identifica el tiempo y lo multiplica por una constante para hallar la distancia
// incluimos la librería de la pantalla LCD
#include <LiquidCrystal.h>
int led = 4;
long distancia;
long tiempo;
// iniciamos la pantalla LCD con los pines correspondientes
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(3, OUTPUT); /*activamos el pin 3 como salida, emite un pulso ultrasónico*/
pinMode(2, INPUT); /*activamos el pin 2 como entrada, recibe el pulso*/
// encendemos la pantalla LCD:
lcd.begin(16, 2);
// Escribimos en ella un mensaje
lcd.print("Distancia:");
}
void loop(){
digitalWrite(3,LOW);//Nos aseguramos que el ultrasonido empiece apagado.
delayMicroseconds(5);
digitalWrite(3, HIGH);//Encendemos el ultrasonido
delayMicroseconds(10);
tiempo=pulseIn(2, HIGH); /* 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, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor en cm*/
/*Podemos introducir la distancia en el monitor serial*/
Serial.println("Distancia ");
Serial.println(distancia);
Serial.println(" cm");
delay(500);
/*O podemos hacerlo por medio de la LCD*/
// Colocamos el cursor en la segunda fila del LCD
lcd.setCursor(0, 1);
// imprimimos la variable distancia
lcd.print(distancia);
if(distancia < 10){
digitalWrite(led, HIGH); // encendemos un diodo led en caso de que la señal nos indique una distancia menor de 10 cm
}
else{
digitalWrite(led,LOW); //apagamos la señal en caso contrario
}
}
Si hemos realizado bien nuestro proyecto, el resultado final debería ser algo parecido a esto:
Nada más, espero que os haya gustado, y en caso de que tengáis alguna duda la preguntéis. NOS VEMOS!!