Tal como comentábamos en la fase anterior, en este
tipo de alarma en el que no es posible monitorizar
el momento exacto en el que se produce la activación de alguno de los
sensores (a no ser que estemos
mirando en ese instante nuestra página web de control), nos quedamos con
las ganas de saber que se
ha activado alguno de los sensores (o varios) y cuándo ha sido.
Y es que el tiempo que empleamos para mostrar la imagen del sensor,
cuando este ha sido activado (sólo 5 seg.), no podemos alargarlo por
mucho más tiempo dado que nos "paraliza" el circuito de alarma durante
un tiempo muy significativo y no deja disponible el control del programa
para la alerta de otros sensores.
Por eso, la solución consiste en recurrir a la captura de "diferentes
huellas en el tiempo", una 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 en la página de
control. De esta manera,
podremos monitorizar cuándo ha sido activado uno de los sensores:
- en ese mismo instante
- hace 5 minutos
- hace 1 hora
- ...
Ya que, como hemos visto en la fase anterior, podemos hacer que nuestro
sistema visualice diferentes imágenes según el estado activado/no
activado de un sensor cualquiera (por ejemplo, en el caso del sensor de
la apertura de la puerta:
apertura0.gif/apertura1.gif) ¿porque no hacer que visualice otros
diferentes estados del sensor?
Por ejemplo, para el sensor que controla la apertura de la puerta,
cuando este se active, podríamos hacer que se visualizasen los
siguientes gráficos a partir de 3 diferentes valores que pasaríamos a
las variables del módulo PINK:
|
Cuando
la puerta se está abriendo/cerrando en ese mismo instante
(sólo 5 seg.) |
|
Transcurridos
5 minutos desde que se activó el sensor (huella) |
|
Transcurrida
1 hora desde que se activó el sensor (huella) |
Con esto podeis ver que los tiempos que la "huella" permanece los
podemos configurar cambiando los valores de un contador (según el
listado a continuación: '24000', '2000' y '400') y que iremos
comprobando con los SELECT según el siguiente listado. Con este uso, lo
que conseguimos es un sistema de alertas más eficaz, gráfico e
informativo.
Para empezar, vamos a añadir unas líneas al comienzo de nuestro listado
del programa:
cont0 VAR Word
cont1 VAR Word
cont2 VAR Word
cont3 VAR Word
Esta nueva variable nos va a servidor de contador de "tiempos".
A continuación, esta es la subrutina, ya modificada, que comprueba la
apertura de la puerta a la que le hemos añadido
unas cuantas líneas (los cambios son aplicativos también para el resto
de las subrutinas):
Helvetica, sans-serif" size="1"">APERTURAPUERTA:
IF IN0 = 1 THEN
cont0 = 1 'OJO puerta
abierta
ENDIF
IF cont0 > 0 THEN
SELECT cont0
CASE > 24000
cont0 = 0 'contador ha
llegado a
60minutos -> vuelve a estado alerta
SEROUT 8,396,["!NB0W00:0",CLS]
'inicializa después de 60 minutos
RETURN
CASE > 2000
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
Fijémonos en la variable cont0 (cont1, cont2
y cont3 para el
resto de las subrutinas de comprobación de sensores); esta se encarga a
modo de flag-contador, de
hacer que cada vez que el control del programa pase por esta subrutina
(así como en el resto)
continúe enviando valores a las variables correspondientes del módulo
PINK mediante una instrucción
SELECT/CASE. ¿Qué valores?
- Desde el momento que el sensor ha sido activado, cont0=1, envía al
PINK valor "1" (SEROUT
8,396,["!NB0W00:1",CLS]) y sigue sumando.
- Cuando el flag-contador > 400 (400 ciclos para un minuto aprox.),
envía valor "2"
(SEROUT 8,396,["!NB0W00:2",CLS]) y sigue sumando.
- Cuando el flag-contador > 2000 (5 minutos aprox.), envía valor "3"
(SEROUT 8,396,["!
NB0W00:3",CLS]) y sigue sumando.
- Cuando el flag-contador > 24000 (60 minutos aprox.), inicializa
flag-contador, envía valor "0"
(SEROUT 8,396,["!NB0W00:0",CLS]) y vuelve a estado alerta.
Así que con estas modificaciones conseguimos que el BASIC Stamp envíe
hasta 4 valores distintos (que pueden ser más, evidentemente) según el
tiempo en que un sensor cualquiera ha estado activado. El código
que acabamos de explicar debe repetirse para cada una de las diferentes
subrutinas que comprueban cada uno de los sensores, pero con su contador
correspondiente (cont0, cont1, cont2, cont3) y el SEROUT
escribiendo en la variable correspondiente (NB0W00, NB0W01, NB0W02 y
NB0W03).
Notad también que de esta manera evitamos "paralizar" el control del
programa mediante PAUSEs innecesarias, cuando uno de los sensores ha
sido activado; en lugar de eso, hacemos que el control compruebe también
el resto de los sensores.
Diferentes imágenes para diferentes huellas
¿Cómo se reflejará esta huella en nuestra página web? Pues bien, ¿os
acordais del código HTML que
usábamos en nuestra página web para mostrar las imágenes del estado de
los sensores, por ejemplo el
del sensor de apertura puerta: ? Vereis que, según el valor que carguemos en la variable
correspondiente en el PINK, sobre el plano se mostrará la imagen "apertura0.gif",
"apertura1.gif", "apertura2.gif" o "apertura3.gif".
Aquí teneis una tabla con las posibles diferentes imágenes que podeis
usar en vuestro proyecto, pero
podeis usar cualesquier otras con tal de que reflejen claramente el
estado de un sensor, tanto en el
momento en que ha sido activado, como también después que haya pasado
algún tiempo (que podeis
vosotros modificar ajustando los topes del contador).
Por
ejemplo, para el sensor de ruído:<br /"">Helvetica, sans-serif" size="1"">
|
|
|
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, imágenes que
ya hemos visto antes:
|
|
|
Activado (apertura1.gif)
|
Recién
activado (apertura2.gif)
|
Activado
hace un rato (apertura3.gif)
|
Si quereis hacer algún comentario respecto a
esta fase, sólo
teneis que dejar vuestros comentarios en esta misma página.