Robos, incendios, escapes de gas,... un buen sistema de alarma no sólo debe hacer sonar una sirena; también debe ser capaz de mantener constantemente informado al propietario de la vivienda de todo lo que sucede en esta, mientras está
ausente.


En www.todomicrostamp.com ya hay publicado un excelente sistema de alarma que, además de gobernar varios sensores, avisa mediante el envío de un e-mail alertando de lo que está sucediendo en nuestra casa o en nuestro local gracias a un software específico (http://www.todomicrostamp.com/iker.php).

En este otro proyecto vamos a plantear una versión diferente, en la que además de posibilitar el envío de alertas personalizadas por email, introducimos también un aspecto novedoso que nos permitirá consultar en tiempo real, gráficamente y desde cualquier lugar donde exista una conexión a Internet, los estados de unos sensores que vigilan en nuestra vivienda sin necesidad de tener encendido nuestro ordenador; todo esto gracias a la utilización de un servidor web: el Parallax Internet
Netburner Kit. También, hemos previsto dos modos de alarma ("modo vigilancia" y "modo alarma") para atender a diferentes funcionalidades que podemos dar a nuestro sistema.


ESQUEMA GENERAL
El sistema de alarma conectado a Internet que aquí comentamos seguirá el siguiente esquema:




LOS SENSORES
Si optais por montar vosotros mismos los sensores, podeis buscar entre los artículos de la revista NUTS&VOLTS. Aquí teneis un buscador para localizar lo que necesiteis entre resúmenes traducidos al castellano: http://www.todomicrostamp.com/microsparallax/indice_nv.php

No obstante, con el objetivo de posibilitar la mayor comprensión de este proyecto y ofrecer facilidades para los que se inician, hemos optado por usar unos sensores ya montados y comprobados de la empresa Microsystems y Parallax, cuyos módulos económicos son fáciles de instalar y conectar a nuestro circuito BASIC Stamp2:


- Apertura de puerta: Sensor I.R. de obstáculos (MSE-S135)
Se trata de un detector IR de obstáculos que detecta la presencia de un objeto sin contacto físico con el mismo. Consiste en un emisor/detector de luz infrarroja modulada, lo que lo hace inmune a interferencias provocadas por otras fuentes de luz como la luz normal de una bombilla o la luz del Sol. En reposo proporciona un nivel lógico "1", pero cuando la luz que emite el LED (emisor) rebota contra un objeto es recibida
por el detector (receptor) y tratada para pasar a nivel lógico "0" (si la señal captada es suficientemente fuerte).
Asi pues, este sensor lo ubicaremos encima de la puerta principal de nuestra
casa, para que detecte cuando la hoja de la puerta se abre.

http://www.msebilbao.com/tienda/product_info.php?products_id=66

- Sensor de ruido (MSE-S100)
Este tipo de detector es recomendable en viviendas con grandes cristaleras. El micrófono que incluye recoge la señal de ruido como puede ser el de la rotura de cristales. Esta señal es amplificada y si alcanza un determinado nivel, proporciona un nivel lógico "1". Dispone de un pequeño potenciómetro con el que podremos ajustar el nivel de disparo y de esta manera aislar otras fuentes de ruido no significativas. El lugar idóneo será en el techo de la estancia donde se encuentran los grandes ventanales.


http://www.msebilbao.com/tienda/product_info.php?products_id=72

-
Sensor de proximidad (PIR: Passive Infra-Red)



Se trata de un sensor PIR que tiene un pin de salida que pasa a nivel alto (5 Volts) por un par de segundos cada vez que registra movimiento o cambios en el patrón IR de la habitación. Es el
típico sensor empleado en multitud de sistemas de larma,
normalmente conectado a un LED rojo que se enciende cada vez que alguien se mueve o en interruptores de iluminación que
encienden las luces cuando alguien se aproxima.

http://www.parallax.com/.../PIR/List/1/ProductID/83/



- Sensor de Luz (MSE-S130)
Este sensor capta la variación de luz, que después la condiciona y amplifica para proporcionar una tensión de salida de la que obtendremos un nivel lógico "1" para nuestro circuito BS2. Nos será util para ubicarlo en aquellos sitios donde guardemos algo de valor y que para acceder a este sea necesario abrir o destapar algún compartimiento (cajón, armario, compartimiento secreto, detrás de un cuadro,...) Cuando el sensor reciba la luz del entorno o de alguna linterna, este simplemente "se activará".


http://www.msebilbao.com/tienda/product_info.php?products_id=68

EL CIRCUITO BASIC STAMP 2
Como podeis ver en las imágenes, inicialmente hemos conectado los sensores con cable corto para realizar las primeras pruebas y ajustes del programa.



Los módulos sensores disponen de 3 puntos de conexión cómunes en todos: Vcc (+5V), Vss (masa o GND) y Señal (SIG). El PIR de Parallax ofrece posibilidad de conectar un
"latiguillo" de triple cable, de los usados para
conectar servos, teniendo en cuenta que la conexión
del cable negro debe ir al pin macho "-"; el rojo
(central) al "+" y el blanco al de señal
"OUT".


EL MODULO SERVIDOR WEB PINK
Este módulo denominado PINK (Parallax Internet Netburner Kit) constituye un servidor web embebido (incrustado en el circuito del módulo) capaz de alojar nuestras propias páginas web, desde las cuales poder mostrar datos que pueda gestionar nuestro circuito BS2, como es el caso en este proyecto, donde interactuaremos con 4 de las 100 variables que soporta. Además, nos posibilitará
el envío de mensajes email de acuerdo con la gestión de nuestro BS2 y los sensores.




Conexiones de la BOE con el módulo PINK

Notad que vamos a utilizar el pin P8 para comunicar nuestro circuito BS2 con el módulo PINK (en modo envío), para que de esta manera pueda pasar serialmente valores
de variables y el PINK las haga servir en una página web.

EL PROGRAMA PARA EL BS
Una vez realizado el conexionado de todos los elementos, vamos a confeccionar el programa que en el BS controlará los sensores y enviará datos al módulo PINK.

Al comienzo del programa, después de declarar las variables que usaremos, observad que hemos dispuesto la gestión de 2 pulsadores para seleccionar, bajo nuestro criterio, uno de los dos modos de vigilancia que hemos hecho disponible:

- Modo "alarma", apropiado para cuando nos ausentamos de la vivienda, en el que el "disparo" de cualquiera de los sensores provoca el envío de un email notificándonos la alerta.

- Modo "vigilancia nocturna", apropiado para cuando en la vivienda estan algunos miembros de la familia o estamos todos durmiendo; entonces no será necesario el envío de alertas por email, aunque sí hemos dispuesto que se oiga un beep.

La desactivación de los modos o del sistema se podrá llevar a cabo mediante el propio botón RESET de la tarjeta BOE, con lo que devolvemos el control del programa al inicio, donde se ejecuta un bucle eterno hasta que seleccionemos uno de los modos.




' {$STAMP BS2}
' {$PBASIC 2.5}

modo VAR Byte
NBVAR VAR Byte
n VAR Byte
email VAR Byte

cont0 VAR Word
cont1 VAR Word
cont2 VAR Word
cont3 VAR Word

SEROUT 8,396,["!NB0W00:0",CLS] 'inicializa
SEROUT 8,396,["!NB0W01:0",CLS] 'inicializa
SEROUT 8,396,["!NB0W02:0",CLS] 'inicializa
SEROUT 8,396,["!NB0W03:0",CLS] 'inicializa



DO WHILE modo = 0
IF IN14 = 0 THEN 'modo [alerta durante ausencia]
modo = 1
FOR N = 1 TO 10 'damos tiempo para
abandonar la casa

FREQOUT 4, 250, 3000 ' beep

PAUSE 750
NEXT
ENDIF
IF IN10 = 0 THEN 'modo [vigilancia
nocturna]

modo = 2
FREQOUT 4, 250, 3000 ' beep

PAUSE 100
FREQOUT 4, 250, 3000 ' beep
PAUSE 100
FREQOUT 4, 250, 3000 ' beep
ENDIF

LOOP



En realidad, lo que hacemos es cargar la variable "modo" con el modo seleccionado ("1" modo alarma; "2" modo vigilancia nocturna) , para cuando sea necesario comprobar más adelante en el programa en qué modo estamos
trabajando. Además, si seleccionamos el modo "alarma", deberemos disponer de tiempo suficiente para abandonar la casa; por esta razón, se incluye una instrucción FOR-NEXT (ajustado para contar 10seg. aproximadamente) antes de que el
programa comience a comprobar el estado de los sensores. Además, observareis que hemos incluido unas líneas para que el sistema responda auditivamente a través de un altavoz piezoeléctrico o zumbador y sepamos qué estamos haciendo (modo "alarma": secuencia de 10 bips; modo "vigilancia": tres beeps consecutivos).


A continuación tenemos la parte del programa que corresponde a la comprobación de los sensores:

DO
GOSUB APERTURAPUERTA
GOSUB ALERTARUIDO
GOSUB ALERTALUZ
GOSUB PIR
LOOP


Fijaos que simplemente lo que hacemos es disponer de una serie de llamadas a las subrutinas para la contínua comprobación del estado de cada sensor. Debemos procurar que se "pierda"
el mínimo tiempo posible de proceso en cada una de las subrutinas
que son ejecutadas, a fin de que la comprobación del resto de los
sensores continúe con toda la rapidez que se requiere y de esta
manera evitar perder alguna activación.


A continuación escribimos las subrutinas que corresponden a cada uno de los sensores:


APERTURAPUERTA:
IF IN0 = 1 THEN
cont0 = 1 'OJO puerta abierta
GOSUB EMAIL_BEEP 'envía email
o beep


ENDIF
IF cont0 > 0 THEN
SELECT cont0
CASE > 24000
cont0 = 0 'contador ha llegado a
60minutos -> vuelve a estado alerta


email = 0
SEROUT 8,396,["!NB0W00:0",CLS]
'inicializa después de 30 minutos

RETURN
CASE > 4000

SEROUT 8,396,["!NB0W00:3",CLS] 'sensor
ha sido activado hace más de 5 minutos-> mostrar
huella

CASE > 400
SEROUT 8,396,["!NB0W00:2",CLS] 'sensor
ha sido activado hace más de 1 minuto-> mostrar
huella


CASE > 0
SEROUT 8,396,["!NB0W00:1",CLS] 'sensor
ha sido activado

ENDSELECT
cont0 = cont0 +1 'contador en marcha
(aunque se haya cerrado la puerta)


PAUSE 10
ENDIF
RETURN


ALERTARUIDO:
IF IN1 = 1 THEN

cont1 = 1 'OJO alerta ruido
GOSUB EMAIL_BEEP 'envía email
o beep

ENDIF
IF cont1 > 0 THEN

SELECT cont1
CASE > 24000
cont1 = 0 'contador ha llegado a
60minutos -> vuelve a estado alerta

SEROUT 8,396,["!NB0W01:0",CLS]
'inicializa después de 30 minutos


RETURN
CASE > 4000
SEROUT 8,396,["!NB0W01:3",CLS]
'sensor ha sido activado hace más de 5 minutos->
mostrar huella


CASE > 400
SEROUT 8,396,["!NB0W01:2",CLS] 'sensor
ha sido activado hace más de 1 minuto-> mostrar
huella

CASE > 0

SEROUT 8,396,["!NB0W01:1",CLS] 'sensor
ha sido activado

ENDSELECT
cont1 = cont1 +1 'contador en marcha
(aunque no haya ruido)

PAUSE 10
ENDIF

RETURN


ALERTALUZ:
IF IN2 = 1 THEN
cont2 = 1 'OJO alerta luz
GOSUB EMAIL_BEEP 'envía email
o beep


ENDIF
IF cont2 > 0 THEN
SELECT cont2
CASE > 24000
cont2 = 0 'contador ha llegado a
60minutos -> vuelve a estado alerta


SEROUT 8,396,["!NB0W02:0",CLS] 'inicializa
después de 30 minutos

RETURN
CASE > 4000
SEROUT 8,396,["!NB0W02:3",CLS] 'sensor
ha sido activado hace más de 5 minutos-> mostrar
huella


CASE > 400
SEROUT 8,396,["!NB0W02:2",CLS]
'sensor ha sido activado hace más de 1 minuto->
mostrar huella

CASE > 0

SEROUT 8,396,["!NB0W02:1",CLS] 'sensor
ha sido activado

ENDSELECT
cont2 = cont2 +1 'contador en marcha
(aunque no haya luz)

PAUSE 10
ENDIF

RETURN


PIR:
IF IN3 = 1 THEN
cont3 = 1 'OJO alerta aproximación

GOSUB EMAIL_BEEP 'envía email
o beep

ENDIF
IF cont3 > 0 THEN
SELECT cont3
CASE > 24000

cont3 = 0 'contador ha llegado a
60minutos -> vuelve a estado alerta

SEROUT 8,396,["!NB0W03:0",CLS] 'inicializa
después de 30 minutos

RETURN
CASE > 4000

SEROUT 8,396,["!NB0W03:3",CLS] 'sensor
ha sido activado hace más de 5 minutos-> mostrar
huella

CASE > 400
SEROUT 8,396,["!NB0W03:2",CLS] 'sensor
ha sido activado hace más de 1 minuto-> mostrar
huella


CASE > 0
SEROUT 8,396,["!NB0W03:1",CLS] 'sensor
ha sido activado

ENDSELECT
cont3 = cont3 +1 'contador en marcha
(aunque no exista aproximación)


PAUSE 10
ENDIF
RETURN

Con la variable contador "contx" controlamos el paso del tiempo para ir cambiando las diferentes imágenes de los sensores activados.


Ahora concentrémonos en las líneas de código en las que asignamos diferentes valores a las variables que pasarán al módulo PINK: Nuestro programa en el
BS2 envia serialmente el comando: !NB0Wxx donde "xx" es el número de la variable que estamos usando para un sensor determinado ("00" apertura puerta, "01" sensor de ruído, "02" sensor de luz y "03" sensor PIR).


Pero ¿por qué asignar varios valores para un único estado activo del sensor?

Fijaos: en muchos casos el registro al instante del estado lógico de un sensor puede ser una solución válida, pero en el funcionamiento de este sistema que monitorizamos a distancia desde una página web no nos vale. Suponeos el caso en el que uno de los sensores se activa un solo instante, por ejemplo, el de ruido: aún cuando estemos observando en ese momento la página donde es posible monitorear el comportamiento del sistema, puede que no nos percatemos de que el
sensor ha estado activo durante un instante. De manera que hemos tenido que buscar la manera de aplicar un modo "latcheado", esto es, que la huella de la actuación de un sensor cualquiera permanezca activa hasta que pueda ser vista por nosotros.


Para lograr ese modo, hemos pensado en incluir 3 lecturas del gráfico del sensor activado: una que nos indica que en ese momento el sensor está actuando (durante el tiempo de su activación, que en algunos casos podrá ser un solo instante); otra en la que el sensor ha actuado recientemente (durante unos minutos después de su activación); y otra, después de una hora desde su activación. Finalmente, al cabo de esa hora, el gráfico representativo, la huella, "se desvanecerá". Por ejemplo, para el sensor que controla la apertura de la puerta, cuando este se active, obtendremos los siguientes gráficos a partir de los 3 diferentes valores que pasaremos a las variables del módulo PINK:



Cuando la puerta se está abriendo/cerrando en ese momento.
Transcurridos 5 minutos desde que se activó el sensor (huella)
Transcurrida 1 hora desde que se activó el sensor (huella)

Vereis que los tiempos que la "huella" permanece los podemos configurar cambiando los valores '24000', '4000' y '400' que vamos compronado con los SELECT. Con este uso, lo que conseguimos es un sistema de alertas más eficaz,
gráfico e informativo.

Pero, no sólo vamos a pasar al PINK los valores que corresponden al estado de los sensores: veamos ahora cómo podemos "construir" el email que se enviará en modo "alerta", cuando se dispare el sensor de apertura de puerta. Deben ser especificadas las variables de los registros: Nb_varET (dirección email destinatario), Nb_varEF (dirección email remitente), Nb_varES (asunto del mensaje) y Nb_varEV (servidor SMTP que no requiera autentificación):


EMAIL_BEEP:IF modo = 1 THEN FREQOUT 4, 250, 3000 ' beep
IF cont0 > 1 THEN 'envía
email sólo en caso de apertura puerta

IF email = 0 THEN
SEROUT 8,396,["!NB0WET: tu_direccion_email_destino",CLS]

SEROUT 8,396,["!NB0WEF:tu_direccion_email_remitente",CLS]
SEROUT 8,396,["!NB0WES:Alerta, puerta principal de
la casa abierta",CLS]
SEROUT 8,396,["!NB0WEV:tu_servidor_SMTP",CLS]

SEROUT 8,396,["!NB0SM"]
email = 1 'email ya enviado
ENDIF
ENDIF
RETURN



Observa que hemos utilizado la variable 'email' para el caso en que la puerta se quede abierta durante cierto tiempo, evitaremos que el sistema envíe continuamente emails de alerta.

Para descargar el programa completo, pulsar aquí. Llegado a este punto, ahora sólo se trata de construir la página web.


CONSTRUCCIÓN DE LA PAGINA WEB
Ahora viene cuando vamos a poder demostrar nuestras dotes de creatividad y buen gusto: debemos crear una página web para poder mostrar los diferentes estados de los sensores que gestiona el sistema.

Primero prepararemos con cualquier programa de dibujo una imagen que represente el plano de nuestra vivienda, con trazos simples y un solo color a fin de que destaque cualquier otra señalización que hagamos sobre el plano. Por ejemplo:





En el plano hemos incluido una referencia en color azul que corresponde a la ubicación física de los 4 sensores; además nos servirá de ayuda para "afinar la puntería" e ir colocando las otras imágenes sobre el plano que nos mostrarán los sensores en su estado activo. La imagen la guardamos con nombre y formato "plano.gif".


El código HTML para mostrar esa imagen en nuestra página, que guadaremos con nombre y formato "micasa.htm", será:




Fíjate en la línea
<meta http-equiv="refresh" content="20"; URL="micasa.htm">, esta etiqueta HTML permitirá que la página se recargue automáticamente cada 5 seg. Con el fin de que muestre información actualziada constantemente.

Respecto a la etiqueta HTML que carga la imagen, los que manejais perfectamente
código HTML, mirad de especificar el tamaño de esta para acelerar su carga en la página.


Después, vamos a diseñar las imágenes de los sensores, que representan su estado activo y su "huella". Por ejemplo, para el sensor de ruído:



Activado (ruido1.gif)
Recién activado (ruido2.gif)
Activado hace un rato (ruido3.gif)

Los mismos gráficos para el sensor de luz, pero diferentes nombres de archivo:



Activado (luz1.gif)

Recién activado (luz2.gif)
Activado hace un rato (luz3.gif)

Y este, por ejemplo, para el sensor PIR:



Activado (aproximacion1.gif) Recién activado (aproximacion2.gif) Activado hace un rato (aproximacion3.gif)

Y por último, para el sensor de apertura de puerta:


Activado (apertura1.gif)
Recién activado (apertura2.gif)

Activado hace un rato (apertura3.gif)


Estas imágenes animadas las podeis realizar con cualquier programa de gifs animados (o serviros utilizar estas mismas).

Bueno pues, para que nuestra página web "lea" los valores de las variables que el circuito BS2 envia al módulo PINK es tan sencillo como, por ejemplo, emplear este tipo de codigo:

El valor de la variable 01 es <Nb_var01>


Si el valor de esa variable (que en el programa la hemos hecho corresponder con el sensor de ruido) tuviera el valor "1" (porque está activado), se nos mostraría una página como la imagen.

Pero concordareis conmigo en que lo interesante va a ser representar esos valores gráficamente. ¿Qué pasaría si en vez de la línea de código anterior intentamos cargar una imagen con esta otra línea:

El valor de la variable 01 es <img src="ruido<Nb_var01>.gif">


Pasamos a contestar la pregunta: si el valor de la variable Nb_var01 es "0", la página que contenga esa línea mostrará la imagen "ruido0.gif"; en cambio, si el valor es "1", la página mostrará la imagen "ruido1.gif". Pues ya está! Podemos "jugar" a nuestro antojo con los valores de las variables que entregue nuestro circuito BS al módulo PINK para que en determinados casos se muestre, en nuestra página web, la imagen que queramos.


Asi pues los nombres de los archivos de las imágenes de cada uno de los sensores deberán acabar en "1"las que corresponden a su estado activo; acabarán en "2" las que correspondan a su huella más reciente; y acabarán en "3" las que correspondan a la última huella (por ejemplo: apertura1.gif, apertura2.gif y apertura3.gif, ...)


También prepararemos una imagen gif transparente (un "spacer" o imagen que no muestre nada), no importa el tamaño, y que guardaremos con los mismos nombres que las imágenes anteriores, pero acabado en "0": apertura0.gif, ruido0.gif, ... Estas nos servirán para cuando el valor de las variables sean "0"; es decir, cuando nuestros sensores esten en reposo.

Ahora ha llegado el momento en colocar las imágenes en nuestra página web. Pero antes, desde la página "VV_show.htm" (una de las páginas que viene por defecto en el módulo PINK) cambiaremos manualmente el valor de las variables "Nb_var00"
a "Nb_var03" al valor "1" y de esta manera "forzaremos" a nuestro sistema a que vaya mostrando las imágenes de todos los sensores en estado activo, a medida que las vayamos incluyendo en la página.

Asi pues, comenzaremos insertando unas pocas líneas HTML para el primero de los sensores, por ejemplo, el de la
apertura puerta:


donde:

- "id" es el nombre descriptivo que le ponemos a esta capa o "layer" - "left" es la distancia en pixels desde la izquierda de la página donde queremos situar la imagen.
- "top" es la distancia en pixels desde arriba de la página.

Todos los demás parámetros (cuya descripción no nos interesa en este momento), los mantenemos invariables.
La carga de la imagen se realiza mediante la etiqueta "< img src >" que ya hemos visto anteriormente con la imagen del plano. Si podeis especificar el tamaño de la imagen, mejor.


Aunque resultará algo tedioso, para fijar las coordenadas "left" y "top", tendremos que ubicar "a ojo" cada una de las imágenes. Probablemente debamos realizar varias tentativas, siguiendo el siguiente proceso:

- fijar coordenadas estimadas en el código.
- guardar archivo de la página.
- hacer doble clic en el archivo "micasa.htm"
- comprobar la desviación de la imagen.
- editar de nuevo el código.


Una vez conseguido, repetimos las mismas líneas de código, pero con nombres descriptivos, coordenadas y nombres de archivos de imagen diferentes, para el resto de los sensores. La página completa nos quedará así:

Ahora recurrimos de nuevo a la página "VV_show.htm" para cambiar las variables 0-3 con valor "2", y veamos las imágenes de la huella reciente de todos los sensores. Después repitamos el proceso, pero con valor "3" y la página deberá mostrar las imágenes de la última huella de todos los sensores.

Visitas: 700

Cursos online y tutoriales


(se requiere registro previo gratuito en PortalArduino.com)

Mantenimiento del sitio

© 2024   Creado por Lorenzo M. Oliver.   [Imágenes licenciadas por Depositphotos.com] Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio