sábado, 4 de octubre de 2014

Arduino Tutorial 17: El sensor de ultrasonidos

En la práctica de hoy queremos enseñaros las utilidades que puede tener un sensor ultrasonidos, y como aplicarlo con el uso de un microcontrolador Arduino. En concreto, vamos a conectar nuestro sensor de ultrasonidos hc-sr04 para que mida distancia, y vamos a hacer que nos muestre la distancia por una pantalla LCD, como ya hicimos en otras entradas como la del sensor de temperatura.

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!!