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

alarme com arduino
Avisador de janela porta aberta.
SW NF (Int. Normalmente Fechado)
SW NA (Int. Normalmente Aberto)

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

triac saida
Saída com triac
  • R1-180Ω, R2-380Ω, R3-330Ω
  • IC1-MOC3041, >Triac-BT136, F1 - 5A

Saída com Relé

saida rele arduino
Atuar Relé com Arduino

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.

aviso porta aberta
Alerta Porta Aberta
aviso janela aberta
Alerta Janela Aberta

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);
       }
    }