DOMOTICA: AUTOMATIZACIÓN DE CASAS Y EDIFICIOS Introducción El puerto paralelo El puerto paralelo nos permite manejar una cantidad de artefactos y dispositivos, en un programa de la PC, podemos además de conectar y desconectar la ejecución de una orden, controlar tiempos y secuencia de esas ordenes. Si instalamos un programa de la familia de los Basic por ejemplo Visual Basic podemos trabajar en la programación, los puertos paralelos se denominan &h378 (puerto de datos), &h379 (puerto de estado) y &h37A (puerto de control) en hexadecimal y en decimal 888 (puerto de datos), 889 (puerto de estado) y 890 (puerto de control). Puerto de datos.En la salida del puerto de datos tenemos 8 pines que sin ningún agregado entrega una tensión que puede estar entre 0 y 3.5 - 4.8 voltios según la computadora. Pin Bits 2 3 1 4 2 5 4 8 6 16 7 32 8 64 9 128 Puerto de estado.En la salida del puerto de estado tenemos 5 pines que reciben interrupciones. __ Pin 15 13 12 10 11 Bits 8 16 32 64 128 Puerto de control.En la salida del puerto de control tenemos 4 pines que al igual de los de estado entregan una tensión que puede estar entre 0 y 3.5 - 4.8 voltios según la computadora, aparte permiten llevar un registro de ordenes. _ __ __ Pin 1 14 16 10 Bits 1 2 4 8 Control de una maqueta a través de un ordenador Para demostrar la aplicación se tiene un modelo a escala de una casa real, en la cual se encuentran automatizadas las luces externas e internas, ventilación de sala y dormitorio, puerta del garaje, alarmas en las puertas y un sensor de humo, lo cual se controla desde un ordenador por el puerto paralelo, con una interfaz diseñada en Visual Basic 6.0. Cada una de las aplicaciones tienen su propia circuitería, las cuales hacen interactuar correctamente la casa con el ordenador. Este tipo de tecnología es totalmente aplicable en las casas actuales con dispositivos y software especiales que pueden ser encontrados en el mercado, pero exactamente con el mismo funcionamiento y la misma facilidad de uso. La tecnología utilizada en la maqueta es solamente un prototipo de lo que se podría hacer en una casa real, obviamente con dispositivos más avanzados. Luces.- Para poder controlar las luces de la maqueta desde el puerto paralelo tomamos los pines de datos, del 2 al 9, y trabajando en Visual Basic procedemos a crear las instrucciones que llamaran al respectivo puerto y que viajaran por el cable LPT llegaran al puerto paralelo y se empezaran a distribuir mediante un cableado estructurado. Como en la maqueta no se usaron muchos juegos de luces, apenas se emplearon los pines desde el 2 al 7, en los cuales se manda desde el programa una señal. La señal enviada desde el programa realizado en Visual Basic es, en realidad, una que se compone de un voltaje máximo de 5V, el mismo que llegará a cualquiera de los implementos que se encuentren en la maqueta. Lógicamente, todos los elementos que estén conectados deben antes pasar por un juego de relés, transistores y diodos con el objeto de cuidar que ninguna corriente parásita o variable de voltaje pueda dañar los elementos de la maqueta o el puerto en si. Ventiladores.- Para poder crear el evento de ventilación el maqueta se usaron los pines 8 y 9 –por donde se envía la señal de encendido y apagado. Así como en el juego de luces, los disipadores deben de conectarse a los pines de puerto para que estos reciban su respectiva señal que los activará. El cableado estructurado para este y los otros dispositivos es centralizado, además, utiliza un bornera, es decir, una especie de cajetín en donde se centran todas las conexiones eléctricas de la maqueta, lo que significa que si el usuario se percata que algo no funciona, tan solo necesitará fijarse si algún desperfecto se presenta en la bornera. Claro que, la dificultad en esto radica que la maqueta tendría un punto débil que al ser movida de alguna forma, las conexiones empezarían a fallar, por lo delicado de las mismas a este punto. Sensores.- En toda la maqueta, los sensores son los únicos componentes que no tienen conexión alguna a corriente, pues estos son, en realidad, contactos magnéticos que se activan o se desactivan al ser acercados o alejados el uno del otro, por lo tanto, la conexión al puerto era directa, sin necesidad de corriente, pues el programa lo que hace es comprobar minuto a minuto que este lazo magnético no se viera interrumpido en forma alguna, caso contrario, la alarma se activará. Para que los sensores hagan llegar al señal de confirmación al programa, se necesitarán desde el pin 10 hasta el pin 13, en donde se espera una reacción contraria al cero, es decir, mientras el vínculo entre censores no se vea interrumpido, el pin ni el programa reciben notificación de alerta, pero si este vínculo se llegase a romper, el pin recibirá una señal que el programa interpretará como una alerta –para el caso de la alarma- o una señal anormal que indica que algo está sucediendo. Motor.- Para el motor se usaron los pines 1 y 14. La razón es muy sencilla: al usar un motor que gire en dos sentidos –abrir y cerrar puerta, implica usar una señal para que realice un giro y una señal que haga lo inverso; es aquí donde los pines mencionados anteriormente cumplen su cometido. Los pines 1 y 14 tienen una lógica de negación, es decir, que si el usuario envía a través de uno de estos pines una señal de 5V, lo más seguro es que el pin convierta esto a una señal de -5V, es decir, el completo inverso. Como se mencionó antes, la circuitería para controlar estos implementos gira alrededor de relés, transistores y diodos; pero hasta este momento, el usuario debe de fijarse en qué clase de relés debe enfocase para lograr el mejor desempeño posible. Existen en el mercado relés dobles. Lo que quiere decir que son interruptores que pueden encender sea con una polaridad inversa o no, la cuestión es que estos implementos ayudan al motor a dar el giro, a partir de la polaridad que llega al relé, es decir, por ejemplo, si al relé llega una polaridad positiva, el motor girará de izquierda a derecha, caso contrario, el motor hará todo lo contrario, y es aquí donde se obtiene el evento abrir y cerrar puerta. Debido a que al hacer esto, el motor seguirá girando sin cesar –hasta que reciba una orden de apagado, en el programa se configuró esta acción bajo un control de temporizador, o sea, controlar que la señal llegue al motor en un tiempo determinado y pasado ese tiempo, la señal dejará de ser enviada, de forma que el motor se detendrá y no girará más. Sirena.- Al igual que las luces, la sirena es un dispositivo sencillo que puede encenderse y apagarse con una instrucción sencilla enviada desde el computador. El detalle radica en que, en la vida real, una sirena no se prende y se apaga como una luz cualquiera, sino más bien esta se activa a partir de la confirmación del sensor que el vínculo magnético se ha roto. Por lo tanto, luego de haber considerado todos estos aspectos, es necesario tener bien claro que la momento de codificar, la activación de la alarma está estrechamente relacionada a la programación del control de la respectiva alarma. Como es lógico pensar, la alarma y el motor antes descrito deben tener conexión alguna con el computador así como deben ser alimentados con una fuente de poder externa, esto es debido a que se incorporan más elementos que necesitarán más energía que difícilmente puede provenir de un puerto que arroja 5V en una salida simple. Codificación necesaria para ejercer control sobre las secciones de la casa desde el computador Declaración de variables y módulos de control de los elementos: Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte) Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) Public on1 As Integer Public ba1 As Integer Public op As Integer Public reloj As Timer <Declaraciones globales, es decir, variables que cualquier sub-programa puede usar> Esto quiere decir que el usuario llama a una función de Visual Basic a que se ejecute con carácter de pública (que cualquier otra aplicación a lo largo del programa puede llamarla), una para la salida de datos y otra para la entrada –en el caso de los sensores. Para poder ejecutar cada función se requiere de la librería io.dll, que no es más que una librería especial para el compilador de Visual que ayudará al usuario a manejar dispositivos externos desde cualquier puerto que el usuario esté por usar. Uso de mini programas para controlar otros elementos: Dim Dim Dim Dim Dim Dim Dim Dim b1 b2 b3 b4 b5 b6 b7 b8 As As As As As As As As Integer Integer Integer Integer Integer Integer Integer Integer Private Sub Command1_Click() If b1 = 0 Then on1 = on1 + 1 Call PortOut(888, on1) b1 = 1 Else MsgBox "La luz/ventilador ya esta encendida" End If Declaraciones para End Sub sub-programas Private Sub Command10_Click() If b5 = 1 Then on1 = on1 - 16 Call PortOut(888, on1) b5 = 0 Else MsgBox "La Luz/ventilador esta apagada" End If Private Sub Command8_Click() If b3 = 1 Then on1 = on1 - 4 Call PortOut(888, on1) b3 = 0 Else MsgBox "La Luz esta apagada" End If End Sub Private Sub Command9_Click() If b3 = 0 Then on1 = on1 + 4 Call PortOut(888, on1) b3 = 1 Else MsgBox "La luz ya esta encendida" End If End Sub En el primer bloque de sentencias, el usuario declara una serie de variables informáticas conocidas como banderas, es decir, variables comunes que se encargan de verificar si un evento ha sucedido o no. Las banderas se activan a raíz que el usuario logra hacer que un evento acontezca de manera exitosa, por lo cual, si antes la variable de verificación era cero, al activarse un proceso cualquiera, se transformará en uno. En el bloque segundo y tercero se explica cómo es el funcionamiento básico de los segmentos de programa en cuanto al encendido y apagado de toda clase de artefactos dentro de la maqueta. Estos bloques programados solo pueden lograr el encendido y apagado enviando números diferentes de cero para encender y cero para apagar. Los números que el usuario envía son números decimales que al ser enviados por el puerto, adquieren un carácter de binario (00100010, por citar ejemplo), por lo tanto, al querer el usuario enviar un dato, es preferible que sepa las combinaciones binarias antes de hacerlo. Todos los procesos en cuanto a prender y apagar elementos giran alrededor de la sentencia Call PortOut, (lo que se traduce como “llamar a la función que puede hacer las salidas de puerto”) en donde tenemos dos valores entre paréntesis que también son esenciales dentro de este proceso: el primero es el direccionamiento de puerto, y el segundo, el valor que describe el apagado o encendido del implemento. La dirección para direccional el puerto desde Visual Basic puede usar dos tipos de números: uno especificado en hexadecimal y el otro en decimal. Control del motor por medio de temporizadores.Private Sub Command10_Click() If ba1 = 1 Then op = 0 Call PortOut(890, op) ba1 = 0 End If Timer2.Interval = 5000 Timer1.Interval = 0 Command10.Enabled = False Command11.Enabled = True End Sub Private Sub Timer1_Timer() If ba1 = 1 Then op = 4 Call PortOut(890, op) MsgBox "La puerta esta abierta" End If Timer1.Interval = 0 Timer2.Interval = 0 End Sub Para poder lograr un movimiento del motor, se mencionó que había que usar un control temporizado, de forma que se podría lograr un control de cuánto debía de durar el evento de apertura y de cerradura. Los temporizadores de Visual Basic usan una sentencia especial en donde se les designa un intervalo en el cual estos permiten la ejecución de la sentencia en donde han sido llamados. El temporizador –Timer se declara de forma independiente, en donde los intervalos de acción siempre deben de ser designados en cero, los mismos que cambiarán al ser usados en el bloque principal del programa. En el momento que el bloque de temporizador es usado en la aplicación principal, el programa ejecutará el intervalo de tiempo declarado pro el usuario, de forma que cuando este tiempo esté andando, existirá una comprobación de lo que se esté solicitando, en este caso, comprobar que los sensores de la puerta estén unidos y no separados. Es importante que el usuario note que para cada acción que se desee ejecutar hay un diferente tipo de programación en la sentencia Call PortOut, en donde el direccionamiento de puerto varia, por ejemplo, para lograr un evento de prendido y apagado, es necesario que el usuario utilice el direccionamiento de datos 888, sin embargo, para el control del giro del motor en uno u otro sentido, el usuario debe de direccionar el puerto en 890, lo que significa que por este puerto hará un control de los datos que se enviarán por los respectivos pines. Control de los sensores de movimiento en las puertas.Private Sub Timer1_Timer() Dim A As Long A = PortIn(&H379) If A = 207 Then MsgBox "Puerta principal abierta" End If If A = 15 Then MsgBox "Puerta patio abierta" End If If A = 175 Then MsgBox "Puerta cocina abierta" End If If A = 111 Or A = 79 Or A = 239 Or A = 47 Then MsgBox "Alarmas activas" End If End Sub Como puede apreciarse, la codificación que controla los sensores está muy relacionada al uso de temporizadores en Visual Basic, es decir, el control que se ejerce sobre los sectores de la casa con sensores se realiza a cada momento, en un ciclo que solo es interrumpido al romperse el vínculo entre sensores. La lógica aplicada en este segmento de codificación es que mientras los sensores envíen una respuesta de cero, el programa interpreta que ambos contactos están unidos y no transmiten ningún dato que demuestren que haya rompimiento de señal, pero de ser esto falso, la alarma será activada y aparecerá un mensaje indicando qué puerta está abierta. Para poder controlar este evento, se usaron los pines de estado, pues el programa debe confirmar –de forma automática- al usuario que las puertas están abiertas o cerradas, pero la diferencia radica en que la función para tal efecto de verificación no es llamada con una sentencia Call, sino que es llamada por medio de una variable, la que almacenará el dato que los sensores emiten: cero para unión y diferente de cero para desunión. La sentencia se descifra como PortIn, es decir, Entrada al Puerto y su direccionamiento puede ser &H379 en hexadecimal, como 889 en decimal, dependiendo del mejor criterio del usuario en usar tal o cual cifra para direccionamiento de puerto. Circuitería de la maqueta: Esta es la circuitería general implementada en la maqueta, la cual recibe ordenes desde el puerto paralelo enviando un encendido y un apagado para luces, ventilación y sirena. Posibilidades en aplicaciones reales: Es posible instalar otro puerto paralelo –con su respectiva tarjeta en la computadora (la computadora tan solo incluye uno), de necesitarse, pues hay casos en que la red de automatización se amplia y para el usuario resulta complicado centralizar nuevas conexiones. Debido a la complejidad del esquema eléctrico,