miércoles, 26 de febrero de 2014

Sistema de alarma II: sensores ultrasónicos de medición de distancias

Continuamos con la serie de entradas en las que vamos a tratar de desarrollar un sistema de alarma sobre la plataforma hardware y software libre arduino. En una entrada anterior se estudió el funcionamiento y utilización de sensores PIR. 

En esta ocasión, analizaremos la posibilidades de utilización en sistemas de alarma que nos brindan los sensores ultrasónicos de medición de distancias, para la detección de eventos tales como aperturas de puertas, ventanas o cualquier intrusión no autorizada. El modelo concreto de sensor que voy a utilizar es el HC-SR04. Este sensor permite medir distancias utilizando ultrasonidos, es decir, sonidos en una frecuencia más allá del espectro audible del ser humano (20KHz, aproximadamente). Un transductor envía ultrasonidos que al rebotar sobre un objeto es detectada por otro transductor. El sensor devuelve el tiempo transcurrido entre el envío y la posterior recepción del ultrasonido. Dado que la velocidad del sonido en un medio como el aire es de aproximadamente 340m/s, resulta posible obtener la distancia al objeto que ha provocado el rebote.



sensor HC-SR04

Los cilindros que se observan en la fotografía del sensor son los dos transductores, existen numerosas librerías que facilitan el manejo desde el entorno arduino. En cuanto a las conexión necesarias para el funcionamiento del sensor HC-SR04, indicar que sólo exige dos pines para la transmisión de datos, además de la conexión de alimentación a 5V y GND.

Lo que hace especial interesante a este sensor es su coste, ya que por 0,99 euros podemos obtenerlo en ebay. Ya se que parece que soy socio fundador o amigo íntimo de estos señores, pero realmente lo que ocurre es que los componentes que necesitamos aquellos que tenemos por afición crear cosas que pueden programarse, normalmente no podemos obtenerlos en el proveedor local más cercano, si es que lo hay, por lo que esta compañía nos brinda una oportunidad de oro y a precios realmente bajos.

Bien, dicho lo anterior, debemos destacar que este sensor sólo medirá distancias cuando se le solicita, por lo que si queremos que detecte una determinada variación de distancia que puede suponer la apertura de una puerto, ventana o cualquier otra intrusión, deberemos crear una rutina que solicite a este sensor que mida la distancia existente, de tal forma que, detectada una variación dentro de un determinado umbral, genere el evento correspondiente.

Hace un par de meses monté con una placa arduino Mega, un sensor HC-SR04 y una pantalla LCD que adquirí en Sparkfun, lo que podía denominarse como metro ultrasónico.

medidor de distancias casero por ultrasonidos
Nótese la avanzada tecnología que se ha empleado para sujetar todo los componentes, se trata de dos dispositivos de caucho sintético de fijación por presión variable, más conocidas como "gomillas de toda la vida". Evidentemente para ese proyecto no era necesario hacer uso de una placa arduino Mega, pero fue la que tenía más a mano.

Un montaje como el descrito también puede utilizarse como sensor de aparcamiento

A continuación os dejo el sketch para poder medir distancias por ultrasonidos. Para que funcione correctamente es necesario descargarse previamente una librería que maneje adecuadamente el sensor HC-SR04, como por ejemplo la que os podéis descargar en el siguiente enlace.

//  Medidor de distancias por ultrasonido con pantalla de Sparkfun
//  07.11.2013

#include <Ultrasonic.h>

Ultrasonic ultrasonic(9,8); // (Trig PIN, Echo PIN)

void setup() {
  Serial.begin(9600);
  clearLCD();
  backlightOn();
}

void selectLineOne(){    // Pone el cursor en el primer carácter de la primera línea del LCD
   Serial.write(0xFE);     // Código que debe enviarse previamente a mandar cualquier comando
   Serial.write(128);       // Comando de posición del cursor.
   delay(10);                 //  Da tiempo a procesar el comando por el puerto serie.
}
void clearLCD(){
   Serial.write(0xFE);    
   Serial.write(0x01);     // Comando para limpiar pantalla
   delay(10);
}
void backlightOn(){      // Enciende la iluminación de la pantalla LCD
    Serial.write(0x7C);   // Cmando para modificar la iluminación de fondo
    Serial.write(157);     // Fija nivel de iluminación
   delay(10);
}

void loop()
{
  selectLineOne();
  Serial.print("Distance: ");
  Serial.print(ultrasonic.Ranging(CM));   // CM o INC
  Serial.print(" cm " );
  delay(200);
}

Os informo que si queréis medir el rango máximo de distancias que permite este sensor (4 metros, según el fabricante), debéis modificar el valor de la variable "Time_out", fijándolo a 30000 milisegundos, ya que por defecto viene establecida en 3000, lo cual sólo permitirá medir distancias hasta 50 centímetros.

Sobre la base del medidor de distancia ultrasónico, y realizando ligeras modificaciones en el sketch anterior, como por ejemplo, fijando un umbral de distancia de activación, podemos detectar facilmente la producción de eventos tales como apertura de puertas, ventanas o intrusiones no autorizadas.

Sin embargo, la utilización de estos sensores presenta diversos inconveninetes, el primero es que para detectar cualquier variación de distancia, es necesario que el sensor realice mediaciones cada cierto intervalo, por lo que nos consumirá tanto electricidad (del orden de unos 15mA según el datasheet del fabricante), como tiempo de cálculo del microprocesador.

El consumo del sensor puede no parecer muy elevado, pero cuando le sumamos el consumo del microprocesador que debe de realizar lecturas periódicas, las cifras de consumo alcanzadas pueden llegar a ser críticas para sistemas que no puedan ser conectados a la red y deban funcionar con baterías.

Por otra parte, el sensor sólo es capaz de detectar variaciones de distancia en un ángulo máximo según el fabricante de 15º, por lo que es incapaz de detectar movimientos relativamente cercanos.

En conclusión, y teniendo en cuenta lo comentado en el párrafo anterior, las posibilidades de utilización de sensores ultrasónicos en sistemas de seguridad, deberán tener muy en cuenta las limitaciones indicadas, para que no lleguen a suponer en ningún caso, la vulnerabilidad del propio sistema.

No hay comentarios:

Publicar un comentario