You are on page 1of 16

I Concurso de proyectos con Pingino.

Alarma Infrarroja
programada con
Pinguino
Alarma diseada para una casa u automvil que se activa al
interrumpirse un haz infrarrojo.
David Arlandi Solla
29/12/2010

Esquema del circuito

Este es el circuito de la alarma infrarroja, los nmeros puestos en las salidas o entradas del PIC
corresponden al nmero de las patillas de Pingino. Los interruptores de abajo equivalen a los
pulsadores utilizados para introducir los nmeros; as SW1 corresponde al nmero 1, SW2 al
nmero 2 La salida hacia el cable rojo corresponde a la patilla 10 de Pingino y la entrada
desde el operacional corresponde a la patilla 11, la salida hacia Q1 y el Buzzer corresonde a la
patilla 17. El potencimetro est a un valor de 2.3v ya que el receptor IR vara entre 2v y 2.5v.










En la imagen se puede ver cmo est
conectado el telfono mvil, cuando los dos
cables se unan la tecla se activar enviando
el sms.




Funcionamiento
Pasos que realiza la alarma:
En cuanto se conecta la alarma por primera vez (primera instalacin), est activada, esto
significa que para desactivarla primero habr que hacer que el receptor IR est recibiendo del
emisor IR, es decir, habr que abrir la puerta. Si se introduce el cdigo correcto la alarma se
desactiva. Si el cdigo introducido es incorrecto se tendr un intento ms, si se vuelve a
introducir incorrectamente la alarma se activar, y si es correcto se desactivar. Una vez que la
alarma est desactivada, para volver a activarla habr que introducir la clave, una vez hecho,
se dispondr de 10 segundos para cerrar la puerta, si la puerta se queda abierta volver al
principio del programa volviendo a pedir el cdigo para desactivar la alarma ( es el estado de
que el receptor IR est recibiendo del emisor IR) y si la puerta se cierra empezar el programa
de nuevo esperando a que la puerta se vuelva a abrir. En el caso de que la alarma se active y
no se introduzca la contrasea en el tiempo establecido de 15 segundos, automticamente
sonar el buzzer y enviar el sms.
La alarma es activada:
En un primer instante el haz infrarrojo estara interrumpido por un objeto acoplado a la puerta
( por ejemplo en el marco superior ), cuando la puerta se abra, ese objeto ya no interrumpir
el haz por lo que el Amplificador Operacional conmutar hacia saturacin positiva provocando
una seal de 3.4v, suficiente para que el PIC lo tome como un 1. En ese momento se activar
el proceso de alarma; si la alarma no es desactivada har que el transistor Q1 funcione,
haciendo que el Buzzer suene ( para una aplicacin real se pondra una bocina ), tambin se
pondr a 1 la patilla 10 de Pingino haciendo que el cable rojo y negro estn unidos, en ese
instante se cerrar el sistema de pulsacin del mvil provocando que la tecla se active; cuando
eso suceda enviar el sms preparado de antemano en el mvil.

La alarma es desactivada:
Si se introduce la clave correcta, la alarma se desactivar dando un mensaje de bienvenida y
esperar hasta que se introduzca de nuevo la clave para activar todo el proceso.
Adicionalmente si se quiere activar la alarma manualmente estando en el estado de
desactivacin, habr que introducir una clave especial.


Ejemplo de una soldadura bien hecha
Co digo del programa
//Programa alarma para Pinguino
//Definicin de nmeros
#define num1 4
#define num2 5
#define num3 6
#define num4 7
#define bocina 17
#define sensor 11
#define sms 10


//Variables
float i=0; //Se utiliza Float debido a que permite guardar ms bits
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int f=0;
int g=0;
int h=0;
int j=0;
int x[4]={1,2,3,4};//Array para los codigos de nmeros
int intento=0;
int k=0;
int cuenta=0;


void msgbienvenida();

//setup
void setup()
{



//LCD 4bits
lcd(8, 9, 0, 1, 2, 3, 0, 0, 0, 0); // RS, E, D4 ~ D0, RB4 - RB0, RA1-RA0

//LCD format
lcd.begin(2, 0);


//Pin Mode
pinMode(num1, INPUT);
pinMode(num2, INPUT);
pinMode(num3, INPUT);
pinMode(num4, INPUT);
pinMode(bocina, OUTPUT);
pinMode(sensor, INPUT);
pinMode(sms,OUTPUT);


//Mensaje de bienvenida
msgbienvenida();
}

void msgbienvenida()
{
lcd.home();
lcd.print("Pinguino Alarm"); // mensaje de bienvenida
lcd.setCursor(0,1);
lcd.print(" System ");
delay(2000);
}



//Programa

void loop()
{
//Comienzo del programa
empieza: //Comienza aqui una vez que se introduce el codigo para activar la alarma (salimos
//de casa y dejamos activada la alarma)
lcd.home();
lcd.print("Alarma activada ");// En el primer estado la alarma est activada
lcd.setCursor(0,1);
lcd.print(" ");
if (digitalRead(sensor)) //Si el sensor es activado se inicia todo el proceso
//Para desactivarla habr que activar el sensor por 1 vez e introducir el codigo
{
empieza1: //Comienza aqui si se ha introducido mal la clave por 1 vez

lcd.home();//El sensor se ha activado y pide la clave
lcd.print ("Introduzca clave");
lcd.setCursor(0, 1);
lcd.print(" tiene 15 seg ");
delay(2000);
lcd.home(); //Borra la primera linea para poner los asteriscos
lcd.print(" ");




while (i<=150000) //Bucle que tarda en realizarse 15seg
{

if (cuenta==4)//Si se pulsan los 4 dgitos salta directamente a la comprobacin de si son
//correctos o no
{

goto numero;

}

if (i==149999)//Si se llega a 14.9seg (se cumple el tiempo) salta directamente al estado
//de alarma
{
goto alarma;

}


if (digitalRead(num1)) //Lectura del teclado, numero 1
{



lcd.setCursor(b,0);
lcd.print("*");
delay(300); //Delay de 500ms, se utiliza para que no haya "rebote" y se pulse por
//error el mismo numero dos veces en menos de 500ms
e=x[a++]; //Array de la clave
cuenta++; //Cuenta las veces que se ha pulsado un numero
b++;//Aumenta la posicin del asterisco

}
if (digitalRead(num2))
{


lcd.setCursor(b,0);
lcd.print("*");
delay(300);
c=x[a++];
cuenta++;
b++;

}
if (digitalRead(num3))
{


lcd.setCursor(b,0);
lcd.print("*");
delay(300);
f=x[a++];
cuenta++;
b++;
}

if (digitalRead(num4))
{


lcd.setCursor(b,0);
lcd.print("*");
delay(300);
k=x[a++];
cuenta++;
b++;



}

i++;
}
numero:

if (e==4 & c==2 & f==1 & k==3) //Entra si la clave es correcta
{

lcd.home();//Borra la primera linea
lcd.print (" Clave correcta ");
lcd.setCursor(0, 1);
lcd.print(" Bienvenido ");
delay(3000);
denuevo: //Salta si se ha introducido mal la clave para activar la alarma, una vez que la alarma
//ya est desactivada
lcd.setCursor(0,1);
lcd.print("Alarma inactiva ");

i=0; //Variables a 0
a=0;
e=0;
c=0;
f=0;
k=0;
cuenta=0;
b=0;
intento=0;

//Inicializacin para volver a activar la alarma
lcd.home(); //Borra la primera linea para poner los asteriscos
lcd.print(" ");

while (cuenta<=5) //Una vez que la alarma es desactivada, entra en esta funcion y hasta
//que no se pulsen los 4 dgitos correctamente no se vuelve a activar
{
//Se pone 5 para que cuando se pulsen los 4 digitos no se salga de la funcin
if (cuenta==4) //Si se pulsan los 4 dgitos entra en esta funcin
{
if (e==1 & c==2 & f==3 & k==4)// Si se introduce el cdigo 1,2,3,4 la alarma sonar
//automticamente
{
i=0; //Variables a 0
a=0;
e=0;
c=0;
f=0;
k=0;
cuenta=0;
b=0;
goto alarma; //Salta al estado de alarma
}
if (e==4 & c==2 & f==1 & k==3)//Si la clave es correcta empieza todo de nuevo
{
i=0; //Variables a 0
a=0;
e=0;
c=0;
f=0;
k=0;
cuenta=0;
b=0;
lcd.home(); //Tiene 10 segundos para salir de la casa, en ese momento la alarma
//se activar
lcd.print(" La alarma se ");
lcd.setCursor(0,1);
lcd.print("activara en 10s");
delay(10000);
goto empieza; //Salta al principio del programa


}
else //Si la clave es incorrecta una vez que la alarma est desactivada vuelve a
//preguntarla
{
lcd.home();
lcd.print ("Clave incorrecta");
delay(1500);
lcd.home();//limpia la primera linea del LCD
i=0; //variables a 0
a=0;
e=0;
c=0;
f=0;
k=0;
cuenta=0;
b=0;
goto denuevo; //Salta para volver a pedir la clave correcta

}
}
if (digitalRead(num1))
{

lcd.setCursor(b,0);
lcd.print("*");
delay(300);
e=x[a++];
cuenta++;
b++;

}
if (digitalRead(num2))
{

lcd.setCursor(b,0);
lcd.print("*");
delay(300);
c=x[a++];
cuenta++;
b++;

}
if (digitalRead(num3))
{

lcd.setCursor(b,0);
lcd.print("*");
delay(300);
f=x[a++];
cuenta++;
b++;
}

if (digitalRead(num4))
{

lcd.setCursor(b,0);
lcd.print("*");
delay(300);
k=x[a++];
cuenta++;
b++;

}
}




}

if (intento==1) //2 intento fallido, es decir, se ha introducido la clave mal por segunda vez
//mientras que la alarma est activada
{

goto alarma; //Salta al estado de alarma

}
else //1 intento fallido, se ha introducido una vez mal la clave mientras que la alarma est
//activada
{
i=0;//Variables a 0
e=0;
c=0;
f=0;
k=0;
a=0;
cuenta=0;
b=0;
lcd.home();
lcd.print (" ultimo intento ");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(2000);
intento++; //Se incrementa en 1 indicando que la clave ya se ha introducido mal 1 vez
goto empieza1; //Salta para volver a pedir la clave por segunda y ltima vez

}

alarma: //estado de alarma

lcd.home();
lcd.print (" Incorrecto ");
lcd.setCursor(0, 1);
lcd.print(" enviando sms ");
digitalWrite(sms,HIGH);
delay(200);
digitalWrite(sms,LOW);
digitalWrite(sms,HIGH);
delay(200);
digitalWrite(sms,LOW);
digitalWrite(bocina,HIGH); //suena la alarma
delay(30000);
digitalWrite(bocina,LOW);

i=0; //Variables a 0
e=0;
c=0;
f=0;
k=0;
a=0;
cuenta=0;
b=0;
intento=0;

goto empieza; //Vuelve a activarse la alarma
}
}

You might also like