Está en la página 1de 5

//PROYECTO DE CERRADURA INTELIGENTE AUTOMATIZACON SM 17-II

//LIBRERIAS A UTILIZAR---------------------------------------------

#include <SoftwareSerial.h>//Para simular puerto serial para el SIM800L

#include <LiquidCrystal.h>//Libreria para usar el LCD -> DESCARGAR!

#include <Keypad.h>//Libreria para usar el Keypad -> DESCARGAR!

#include <Servo.h>//Para manipular el Servomotor

//------------------------------------------------------------------

//CCONFIGURACION PARASIM800L----------------------------------------

const char rx = 11, tx = 12; //Pines a usar como RX y TX

SoftwareSerial SIM800L(rx, tx);//Declaramos el Serial SIM800L

String phone = "\"+51999345407\"";//Numero telefonico

String sms; // Cadena donde se almacenara el mensaje de texto

//FIN CONFIGURACION-------------------------------------------------

//CONFIGURACION DE PINES LCD 16x2-----------------------------------

const int rs = 14, en = 15, d4 = 16, d5 = 17, d6 = 18, d7 = 19;//declaracion de pines

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//configuracion con funcion de la libreria

//FIN CONFIGURACION LCD---------------------------------------------

//CONFIGURACION DEl KEYPAD------------------------------------------

const byte FILS = 4; // Numero de filas = 4

const byte COLS = 4; // Numero de columnas = 4

char keys[FILS][COLS] = { //Caracteres que posee nuestro keypad

{'1','2','3','A'},

{'4','5','6','B'},

{'7','8','9','C'},

{'*','0','#','D'}

};

byte filPins[FILS] = {2, 3, 4, 5}; //Conexion pines del keypad filas al arduino
byte colPins[COLS] = {6, 7, 8, 9}; //Conexion pines del keypad columnas al arduino

Keypad keypad = Keypad( makeKeymap(keys), filPins, colPins, FILS, COLS );//Declaracion del
keypad

//FIN CONF. KEYPAD---------------------------------------------------

//DECLARACION DE CONTRASENA Y SU VALOR-------------------------------

char pass[4]; //la contrasena tien 4 caracteres: pass[0],pass[1],pass[2],pass[3]

int x = 0; //variable para asignar un valor a cada caracter a partir del keypad-fila

int y = 0; //variable para asignar un valor a cada caracter a partir del keypad-columna

//FIN DE DECLARACION-------------------------------------------------

//PARAMETROS PARA ACCESO DE CONTRASENA Y VERIFICACION----------------

char key;

char entrada[4]; //Caracteres ingresados desde keypad

int n = 0; //Numero de caracter ingresado

//FIN PARAMETROS PARA ACCESO-----------------------------------------

Servo door; //Declaracion del Servomotor

void setup() {

Serial.begin(9600);

SIM800L.begin(9600);

lcd.begin(16,2); // Declaramos el tipo de lcd: Para este caso 16x2

lcd.clear();

door.attach(10); // Pin que enviara la senal de control al servomotor

delay(5000); // Espera para asegurarse que el SIM800L encuentre red

void loop() {

door.write(0);//Poner el servomotor en angulo 0 -> Cerrado

lcd.print("Solicitar pass");
delay(1000);

SIM800L.println("AT+CMGF=1");//Comando AT para configurar la comunicacion en ASCII

delay(2000);//tiempo para que el sim ejecute el comando AT

SIM800L.println("AT+CNMI=1,2,0,0,0");//Comando AT para esperar SMS y comunicarlo al


arduino

delay(2000);

while(1){//Bucle Infinito

if(SIM800L.available()){ //Hay data de respuesta?

Serial.println(SIM800L.readString()); // Leer respuesta a los comandos debera salir OK para


certificar conexion

break; // Salir de bucle infinito

while(1){ // Esperamos la respuesta con bucle infinito

for(int i=0; i<4 ; i++){//mientras esperamos reasignamos contrasena permanentemente

x = random(3);// randomizamos un numero menor a 4: 0,1,2,3 - fila

y = random(4);// randomizamos un numero menor a 4: 0,1,2,3 - columa

pass[i] = keys[x][y];//asigna caracter random a la contrasena

if(SIM800L.available()){ //Hay data del SMS?

sms = SIM800L.readString(); // Leer data del SMS

break; // Salir de bucle infinito

Serial.println(sms); // mostramos brevemente el SMS

while(1){//Verificamos el comando y enviamos la contrasena por SMS con bucle infinito

if(sms.indexOf("contrasena")>=0){//Si la variable Comando contiene la palabra contrasena

Serial.println("TODO VA A ESTAR BIEN");//Mensaje de aliento

SIM800L.println("AT+CMGF=1");//Comando AT para configurar la comunicacion en ASCII

delay(1000);

SIM800L.println("AT+CMGS="+phone);//Ponemos el SIM800L en modo escritura de SMS al


numero especificado
delay(1000);

SIM800L.write(pass,4);//escribimos la password en el contenido del SMS

delay(100);

SIM800L.println((char)26);//Ctrl+Z para cerrar y enviar el SMS

sms = "";//Vaciamos el comando para proxima lectura

delay(2000);

break;

while(1){//bucle infinito para ver la respuesta a los comandos introducidos anteriormente

if(SIM800L.available()){ //Leemos la respuesta del SIM800L

Serial.println(SIM800L.readString()); // Leer respuesta a los comandos

break; // Salir de bucle infinito

lcd.clear();

delay(100);

lcd.print("Contrasena:");

delay(100);

while(1){//bucle para leer los caracteres del keypad

char key = keypad.getKey();//leo caracter si es que se digito del keypad

if (key){//Si se ingreso algun caracter

Serial.println(key);//muestro el caracter en el serial

entrada[n] = key;//almaceno el el vector entrada en la posicion "n"

lcd.setCursor(n,1);//ponemos el cursor en la segunda fila y columna "n+1"

lcd.print("*");//escribo el "*"

n++;//aumento la posicion del vector 0->1->2->3

if (n == 4){//Si se ingresaron los 4 caracteres

Serial.write( entrada, 4);//imprimo los caracteres ingresados

n = 0;//Reinicamos el contador
break;

delay(1000);

if(entrada[0] == pass[0] && entrada[1] == pass[1]

&& entrada[2] == pass[2] && entrada[3] == pass[3]){//Se comparan los 4 caracteres


ingresados con la contrasena

lcd.clear();

delay(100);

lcd.print("Bienvenido");

delay(500);

door.write(90);//Abrimos la puerta

delay(5000);

lcd.clear();

else{

lcd.clear();

delay(100);

lcd.print("PASS INCORRECTO");//Mostramos que la contrasena es incorrecta

delay(700);

lcd.clear();

También podría gustarte