Avisador Porta Janela Aberta
Muitas vezes existe a necessidade de ter um aviso que a janela ou porta esta aberta. O avisador pode ser aplicado a qualquer outra aplicação alterando o sensor, ou seja, tanto pode avisar a abertura/fecho como para controlar ou avisar em função de outro tipo de sensor (sensor de luz por exemplo). O sistema é composto por duas zonas um com sensores normalmente abertos (SW NA) que atuam o aviso quando fecham e outra zona com sensores normalmente fechados (SW NF). Podem ser usados vários sensores, por exemplo, pretendemos verificar se todas as janelas de uma sala se encontram fechadas, podem ser usados vários sensores NA em cada uma janela. Usando os NF, têm de estar em série, os NA em paralelo.
Optou-se por usar um LCD 16 carateres com 2 linhas mas é facultativo, o circuito funciona e atua sem a informação no display.
Circuito Elétrico
A saída do LED pode ser usada para ativar dispositivos com maior potência usando um relé ou um triac em substituição.
Saída com Triac
- R1-180Ω, R2-380Ω, R3-330Ω
- IC1-MOC3041, >Triac-BT136, F1 - 5A
Saída com Relé
Funcionamento
Foi definido no código que o circuito das janelas é normalmente aberto e o circuito das portas normalmente fechado. Ao ativar os sensores, aparece no display "JANELA ABERTA!" ou "PORTA ABERTA!" e se o alarme está ligado ou não. Ao mesmo tempo, acende um led e o avisador sonoro é ativado.
Arduino Sketch
// Eletronica PT //
// Jan 2016 //
#include <LiquidCrystal.h> // Carrega LIB para o LCD
int sensPin2 = 2; // entrada sensor PINO 2
int sensPin3 = 3; // entrada sensor PINO 3
int ledPin = 13; // Saida LED PINO 13
int Speaker = 5; // Saida Piezo PINO 5
int alarm1 = 0; // Definiçao da Variável de entrada ´1
int alarm2 = 0; // Definiçao da Variável de entrada ´1
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
void setup() {
pinMode(sensPin2, INPUT); // Define Sensor2 como entrada
pinMode(sensPin3, INPUT); // Define Sensor3 como entrada
pinMode(Speaker, OUTPUT); // Define piezo como saida
pinMode(ledPin, OUTPUT); // Define LED como saida
lcd.begin(16, 2);
lcd.print("ALARME LIGADO");
}
void loop(){
alarm1 = digitalRead(sensPin2); // Faz a leitura do alarm1
alarm2 = digitalRead(sensPin3); // Faz a leitura do alarm2
if (alarm1 == LOW || alarm2 == HIGH){ // Verifica entrada alarm1 e alarm2
if (alarm1 == LOW){
digitalWrite(ledPin, HIGH); // Liga o LED
lcd.setCursor(0, 1);
lcd.print("PORTA ABERTA! ");
playTone(500, 600);
delay(100);
playTone(500, 800);
delay(100);
}
if (alarm2 == HIGH){
digitalWrite(ledPin, HIGH); // Liga o LED
lcd.setCursor(0, 1);
lcd.print("JANELA ABERTA! ");
playTone(500, 600);
delay(100);
playTone(500, 800);
delay(100);
}
} else {
digitalWrite(ledPin, LOW); // Desliga o LED
lcd.setCursor(0, 1);
lcd.print("OK ");
playTone(0, 1);
delay(300);
}
}
// duraçao em mSecs, frequencia em Hz
void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(Speaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(Speaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}