Sistema de Segurança Residencial
Daniela Xavier, Carla Luísa e Eduarda Luiza

Introdução

O trabalho tem o objetivo de manter a casa segura durante o tempo em que os seus residentes estiverem ausentes. É composto por alarme, leds, senha e sensor. O seu funcionamento, resumidamente, se baseia em: ao iniciar o sistema, um LED vermelho indica que o sistema está pronto, e neste caso não adianta digitar números no teclado, pois os mesmos não será processados; a não ser a tecla, que indicará ao sistema que alguém irá digitar uma senha.
Ao digitar "#"o sistema libera o teclado para a entrada da senha, e um LED amarelo sinaliza esta funcionalidade, bem como, será mostrado uma mensagem no display informar ao usuário que é necessário digitar a senha. Digitando números no teclado (para cada um será emitido uma sinalização acústica), o sistema processará os dados.
Se a quantidade de números digitar for igual a 4 e corresponder exatamente a senha do sistema, então será habilitado o relé (indicado por um LED verde, que irá piscar por cerca de 5 segundos, e o sistema estará liberado; durante esse período um som será emitido para sinalização; uma mensagem será mostrada no display, para informar ao usuário que o acesso foi liberado). Se a quantidade de números digitados for 4 e não corresponder a senha esperado para o sistema, então o sistema não será liberado e voltará ao estado inicial.O mesmo acontece se for pressionado a tecla "#" novamente.

Montagem

Circuito

Programa Arduino


//Bibliotecas
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Esta biblioteca tem 2 versões uma está apropriada para o IDEv1.0
#include <Keypad.h>

//Inicialização do Display I2C
LiquidCrystal_I2C lcd(0x27,16,2);


int count = 0; //Contador de uso geral
char pass [4] = {'1', '9', '7', '1'}; //Senha
const int yellowPin = 11; //Definição do pino do LED Amarelo
const int redPin = 12;//Definição do pino do LED Vermelho
const int greenPin = 10;//Definição do pino do LED Verde
const int audioPin = 9; //Definição do pino do Buzzer
const int duration = 200; //Duração das sons tocados
const byte ROWS = 4;//Quatro linhas
const byte COLS = 3; //Três colunas

//Mapeamento de teclas
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //Definição de pinos das linhas
byte colPins[COLS] = {6, 7, 8}; //Definição de pinos das colunas

//Cria o teclado
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//Programa inicial
void setup(){
lcd.begin(); //Inicializa o LCD
lcd.backlight(); //Com Backlight
Serial.begin(9600);//Inicializa a comunicação serial a 9600 bps

//Deifinição de modo dos pinos
pinMode(audioPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
lcd.clear(); //Limpa LCD
key_init(); //Inicializa o sistema
}



//Loop Principal do Programa
void loop(){
char key = keypad.getKey(); //Obtém tecla pressionada
if (key != NO_KEY){ //Se foi pressionada uma tecla:
if (key == '#') {//Se a tecla é '#'
code_entry_init();//Então espera que seja inserida uma senha
int entrada = 0;
while (count < 4 ){ //Conta 4 entradas/teclas
char key = keypad.getKey(); //Obtém tecla pressionada
if (key != NO_KEY){ //Se foi pressionada uma tecla:
entrada += 1; //Faz entrada = entrada + 1
tone(audioPin, 1080, 100); //Para cada dígito emite um som de indicação
delay(duration);//Duração do som
noTone(audioPin); //Para de emitir som
if (key == pass[count])count += 1; //Se a tecla pressionada corresponde ao dígito
//da senha correspondente, soma 1 no contador
if ( count == 4 ) unlocked(); //Se contador chegou a 4 e com dígitos corretos,
//desbloqueia siatema
if ((key == '#') || (entrada == 4)){ //Se foi pressionada a tecla "#' ou foram feitas
//4 entradas,
key_init(); //Inicializa o sistema
break; //Para o sistema e espera por uma tecla
}
}
}
}
}
}


//Inicializar o Sistema
void key_init (){
lcd.clear();//Limpa o LCD
lcd.print("Aguardando...");//Emite mensagem
lcd.setCursor(0,1); //Muda de linha
lcd.print("Tecle #"); //Emite mensagem

count = 0;//Variável count é zero na inicialização

//Emite som e acende LED Vermelho, indicando Sistema Iniciado
digitalWrite(redPin, HIGH);
digitalWrite(yellowPin, LOW);
digitalWrite(greenPin, LOW);
tone(audioPin, 1080, 100);
delay(duration);
noTone(audioPin);
tone(audioPin, 980, 100);
delay(duration);
noTone(audioPin);
tone(audioPin, 770, 100);
delay(duration);
noTone(audioPin);
}

//Subrotina de Entrada da Senha
void code_entry_init(){
lcd.clear();//Limpa LCD
lcd.print("Entre a Senha:");//Emite mensagem

count = 0;//Variável count é zero na entrada de senha

//Emite som e acende LEDs
tone(audioPin, 1500, 100);
delay(duration);
noTone(audioPin);
tone(audioPin, 1500, 100);
delay(duration);
noTone(audioPin);
tone(audioPin, 1500, 100);
delay(duration);
noTone(audioPin);
digitalWrite(redPin, LOW); //Apaga LED Vermelho
digitalWrite(yellowPin, HIGH); //Acende LED Amarelo
digitalWrite(greenPin, LOW);//Apaga LED Verde
}


//Subrotina para Acesso Liberado
void unlocked(){
lcd.clear(); //Limpa LCD
lcd.print("Acesso Liberado!"); //Emite mensagem

digitalWrite(redPin, LOW);//Apaga LED Vermelho
digitalWrite(yellowPin, LOW); //Apaga LED Amarelo

//Executa 20 vezes +- 5 segundos, emite som e pisca LED verde
for (int x = 0; x < 20; x++){
digitalWrite(greenPin, HIGH);
tone(audioPin, 2000, 100);
delay(duration);
noTone(audioPin);
digitalWrite(greenPin, LOW);
tone(audioPin, 2000, 100);
delay(duration);
noTone(audioPin);
delay(250);
}
}

Conclusão

O sistema de segurança residencial permite que sua casa esteja segura em qualquer momento, você estando ou não ali. Foi criado com a finalidade de facilitar a entrada no local, com acesso por senha e, ao mesmo tempo, manter a segurança.

Referências



Administrado por: Epaminondas Lage