2.4.4. Ejemplo de temporizadores (alarma casa)
Se ha de implementar una alarma simple para una casa según las siguientes características:
- Se dispone de una llave con interruptor de paro/marcha que conecta la alarma.
- Al activarse la alarma se inhibe la entrada de la puerta principal durante un tiempo, denominado tiempo de salida, en el que podemos abrir y cerrar la puerta sin peligro de que sea detectada.
- Cuando la alarma está activa y se accede al edificio por la puerta, disponemos de un tiempo para parar la alarma antes de que suene, denominado tiempo de entrada.
- Si se abre una ventana y la alarma está activa, ésta se dispara de forma inmediata.
- Cuando se dispara la alarma, la sirena suena durante un tiempo, denominado tiempo de alarma, pasado éste, la sirena retorna a su estado de reposo a la espera de un nuevo evento.
- Para indicar los tiempos críticos de entrada y salida de la casa se dispone de un testigo luminoso que parpadea cuando nos encontramos en estos estados.
Entradas
- S1 Paro/Marcha
- S2 Puerta
- S3 Ventana
Salidas
- K1 Indicador de alarma activa
- K2 Indicador de tiempos de entrada o salida
- K3 Sirena
Ladder de la alarma casa para microPLC con arduino
Ejemplo de alarma para casa
/*
* Ejemplo de una alarma simple para una casa con el microPLC - arduino
*
* Descripción: Programa básico que reproduce el funcionamiento de una alarma para una casa
*
* Autor: Rafa Aranda
* Fecha: 12-03-2014
* Versión: 1.0
*/
// Asignación de Pins a Salidas digitales (están ordenados de forma decreciente por necesidades del PCB)
#define Out_1 6
#define Out_2 7
#define Out_3 8
#define Out_4 9
// Pins de entrada (están ordenados de forma decerciente por necesidades del PCB)
#define In_1 5
#define In_2 4
#define In_3 3
#define In_4 2
// Librerías
#include "microPLC.h"
// Funciones prototipo
void getInputs(void);
void setOutputs(void);
// Variables globales
//Definición de las variables de trabajo
m4bits s; // Entradas del microPLC
m4bits k; // Salidas del microPLC
m4bits m1; // Memoria temporal
// microPLC
microPLC uPLC; // Declaración del microPLC
// Contadores y temporizadores
TRC ts(10,T1S); // Tiempo de salida 10 segundos
TRCM te(5,T1S); // Tiempo de entrada 5 segundos
TI ta(15,T1S); // Tiempo de alarma 15 segundos
PULSE tp(1, 1, T1S, 0); // Iniciamos el temporizador t1 con 1 segundo en ON y 1 segundo en OFF, impulsos continuos
/* setup
* Tareas iniciales de preparación
*/
void setup(){
// Establecer los pins de salida de los relés
pinMode(Out_1, OUTPUT);
pinMode(Out_2, OUTPUT);
pinMode(Out_3, OUTPUT);
pinMode(Out_4, OUTPUT);
// Establecer los pins de entradas digitales optoacopladas
pinMode(In_1, INPUT);
pinMode(In_2, INPUT);
pinMode(In_3, INPUT);
pinMode(In_4, INPUT);
// Preparar las variables
uPLC.init(); // Iniciar funciones del tiempo
}
/* loop
* Programa principal
*/
void loop() {
getInputs(); // Leer las entradas digitales
//-------- Alarma --------
// A. Temporizador de salida
ts.Set(s._1);
// B. Piloto de alarma en funcionamiento
k._1=ts.Q();
// C. Temporizador de entrada por la puerta
te.Set(s._2&ts.Q()); // Activación del temporizador por la ppuerta si la alarma esté en marcha
te.Reset(ta.Q()); // Iniciamos el temporizador, cuando se dispara la alarma
// D. Temporizador de alarma o sirena en marcha
ta.Set((s._3|te.Q()|ta.Q())&ts.Q());
// E. Sirena
k._2=ta.Q();
// F. Pilotos indicadores de tiempo de entrada y salida
tp.Set(ts.T()|te.T());
// G. Asignar la salida K3 como piloto de parpadeo de tiempos
k._3=tp.Q();
//------------------------
setOutputs(); // Activar las salidas
delay(1); // CicloScan + 1ms, retardo para anti-rebotes
}
/* GetInputs
* Lee el estado de la entrada indicada en el parámetro y lo asigna invertido a las variables de trabajo
*/
void getInputs(void){
s._1=!digitalRead(In_1);
s._2=!digitalRead(In_2);
s._3=!digitalRead(In_3);
s._4=!digitalRead(In_4);
}
/* setOutputs
* asigna el estado de las varibles de trabajo a las salidas digitales
*/
void setOutputs(void){
digitalWrite(Out_1, k._1);
digitalWrite(Out_2, k._2);
digitalWrite(Out_3, k._3);
digitalWrite(Out_4, k._4);
}