Post on 01-Jan-2016
transcript
UNIVERSIDAD TECNICA DEL NORTE
FACULTAD DE INGENIERIA EN CIENCIAS APLICADAS
SISTEMAS MICROPROCESADOS
TEMA: SISTEMA CONTROL DE ACCESO, SEGURIDAD Y
LUMINOSIDAD EN UNA VIVIENDA (DOMÓTICA).
AUTORES: CARTAGENA OCAMPO EDGAR EDUARDO
FÉLIX BOLAÑOS AMADA LEONOR
FECHA : jueves 1 de agosto del 2013
IBARRA-ECUADOR
2
INDICE
RESUMEN………………………………………………………………………………....4
ABSTRACT………………………………………………………………………………..5
CAPITULO 1……………………………………………………………………………….6
1.1INTRODUCCION…………………………………………………………………...6
1.2OBJETIVOS……………………………………………………………………………8
1.2.1OBJETIVO GENERAL…………………………………………………………...8
1.2.2OBETIVOS ESPECIFICOS……………………………………………………...9
1.3 PLANTEAMIENTO DEL PROBLEMA………………………………………….10
1.4 DESCRIPCION DE LA SOLUCION………….………………………………...11
CAPITULO 2……………………………………………………………………………..12
2.1 MARCO TEORICO ………………………………………………………..………12
2.1.1 SOFTWARE………………………………………………………………..…..…12
2.1.1.1 ATMEGA C COMPILER …………………………………………………..…12
2.1.1.2 SIMULADOR PROTEUS……………………………………………………… 13
2.1.2 HARDAWARE …………………………………………………………………… 14
2.1.2.1 MICROCONTROLADOR ATMEGA 164PA ………………………………14
CAPITULO 3 …..….…….…….…….………….…….……..….…….…….…….…….. 20
3
3.1 FLUJOGRAMA DEL FUNCIONAMIENTO DEL SISTEMA …………..……. 20
3.1.1. FLUJOGRAMA DEL FUNCIONAMIENTO DEL CONTROL DE
ACCESO………….…….…….…….…….…….…….…….…….…….…….……..….…21
3.1.2. FLUJOGRAMA DEL FUNCIONAMIENTO DEL CONTROL DE
LUMINARIAS DE LA VIVIENDA…………………………….…….…….…….……..22
3.1.3. CÓDIGO DEL PROGRAMA EN AVR………….………..…….…….…….…….23
CAPITULO4
4.1 MATERIALES Y COSTOS…………………………………………………………47
4.2 CONCLUSIONES………………..……………………………………………….….48
4.2 RECOMEDACIONES…………..………………………………………………...….49
4.3 ANEXOS……………………………………………………………………………....50
4.4 BIBLIOGRAFIA Y NETGRAFIA…………………………………………………..57
4
RESUMEN:
El presente proyecto consiste de un control de acceso, seguridad y luminosidad en
una vivienda (domótica), utilizando hardware (ATMEGA 164PA) y software
(CODEVISION AVR y PROTEUS).
El principio básico de funcionamiento es contar con un control de acceso a la
vivienda mediante una clave de seguridad, también una alarma sonora la cual se activa al
ingresar a la vivienda sin ingresar la clave o al ingresar la clave equivocada por tres
ocasiones, para el control de luminosidad se realiza una comunicación serial mediante la
cual se puede manipular tanto el encendido y apagado de las luminarias de la vivienda. En
todos estos procesos se mostraran mensajes como señales indicando cada una las acciones
tomadas, las mismas que se visualizar en una pantalla de cristal líquido o LCD.
.
Con este proceso se lograra dar una automatización de la vivienda. Los usuarios que
cuenten con un sistema como el que aquí se describe, lograra tener el control de luces y
ahorro de energía del hogar, sistema de vigilancia, entre otros. Este sistema puede reducir
los gastos económicos, dar más confort, tranquilidad a los usuarios, y a su vez todo esto se
realizara cuidando nuestro medio ambiente.
5
ABSTRACT:
This project consists of an access control, security and lighting in a home (home
automation) using hardware (ATMEGA 164PA) and software (AVR codevision
PROTEUS).
The basic principle of operation is to have control of access to housing by a security
key, also an audible alarm which is activated by entering the house without entering the key
or by entering the wrong password three times, for the brightness control is done via serial
communication which can handle both on and off of the lights of the house. In all these
processes will show messages as signs indicating each action taken, the same that is
displayed on a liquid crystal display or LCD.
This process was achieved to give a home automation. Users who have a system
like the one described here, managed to take control of lights and home energy savings,
surveillance, among others. This system can reduce economic costs, provide more comfort,
tranquility to users, and in turn all this was done taking care of our environment.
6
CAPITULO 1
1.1 INTRODUCCION
Un sistema de control de acceso, seguridad y luminosidad en una vivienda (domótica),
reúne varios dispositivos entre estos el HADWARE y SOFTAWARE que tiene como fin
controlar el encendido de luces a distancia y evitar gastos innecesarios en las planillas de
pago de este servicio, conjuntamente mejorar la seguridad en la vivienda; además el
objetivo de automatizar la vivienda de acuerdo a los avances de la tecnología y a las
procesos de evolución que vive la sociedad.
El sistema tendrá su propio código de programación desarrollado a continuación, toma
los datos de entradas proporcionados tanto por el sensor, teclado y comunicación serial, los
cuales permiten se realicen todos los procesos del sistema.
Todo sistema de control de acceso, seguridad y luminosidad tendrá una clave de acceso
la cual será administrada solamente el programador, la misma que puede cambiar solo
cambiando la programación y posterior grabado.
Las herramientas utilizadas para el desarrollo de este proyecto se han venido estudiando
en el periodo de un bimestre en la materia de Sistemas Microprocesados con la finalidad de
adaptar los conocimientos adquiridos al desarrollo del siguiente proyecto utilizando
programas como el simulador Proteus y el compilador Codevision AVR
FIGURA1. Diagrama de bloques sistema de control de acceso, seguridad y luminosidad en una vivienda (domótica).
1.2 OBJETIVOS
1.2.1 OBJETIVO GENERAL
Realizar un sistema domótico, mediante la utilización de dispositivos estudiados en la
materia de Sistemas Microprocesados, para poder controlar de una forma más eficiente y
oportuna la seguridad, el control del sistema de luminarias y la alarma de seguridad de una
vivienda.
1.2.2 OBJETIVOS ESPECIFICOS
Llegar a realizar un código de programación accesible, modificable y práctica, mediante
el compilador antes mencionado, con el fin de que cumpla los requerimientos de un sistema
de control de acceso, seguridad y luminosidad en una vivienda.
Investigar las diferentes conexiones a utilizar en el circuito para no tener problemas al
momento de la presentación final del proyecto.
Simular cada uno de los circuitos, en un Proteus para poder comprobar el correcto
funcionamiento de los circuitos.
9
El sistema de control de acceso, seguridad y luminosidad en una vivienda debe ser
práctico, sencillo y eficaz; teniendo en cuenta los diferentes recursos físicos que se puedan
adquirir para su realización del mismo.
Realizar la entrega del proyecto en su fecha limite indicada por el dirigente de la materia
de Sistemas Microprocesados.
Tener el circuito simulado con su debido código y además armar en protoboard para su
presentación en la defensa del proyecto.
Realizar la maqueta de una vivienda en la cual se pueda acoplar el circuito armado en
protoboard y de esta manera se pueda visualizar de una forma más real y práctica el
funcionamiento del sistema.
Comprender el uso y funcionamiento de cada uno de los elementos utilizados en este
proyecto, mediante la implantación de los circuitos.
Desarrollar una interfaz de control amigable y sencillo que utilice una interfaz más visual y
fácil de comprender, para ayuda a que el usuario sea capaz de controlar el sistema de
manera autosuficiente.
10
1.3 PLANTEAMIENTO DEL PROBLEMA
Vivimos en un mundo que avanza de prisa, donde el tiempo es muy valioso, donde los
seres humanos buscamos tener mayores comodidades, mayores seguridades y privilegios,
sin tener que preocuparse demasiado. De igual manera hoy en el día la delincuencia ha
crecido bastante convirtiéndose así en un problema social, haciendo que exista gran
inseguridad en las personas y en sus propiedades.
Es ahí donde la domótica cumple un papel muy importante por cuanto debido a los
grandes avances tecnológicos esto ya es una realidad y puede satisfacer nuestros deseos y
problemas mencionados.Hoy en día, la domótica aporta soluciones dirigidas a todo tipo de
viviendas, mejorando la calidad de vida de muchas personas, brindando tranquilidad y
confortabilidad.
Para personas que tienen algún tipo de discapacidad, y no pueden realizar actividades
en la misma medida que las demás personas, para ellas estos sistemas son más que un
privilegio, son una herramienta necesaria para mejorar su calidad de vida. Así es que
partiendo de esta necesidad de dotar a nuestras viviendas de una funcionalidad extra que
mejore nuestra calidad de vida, nace la domótica basándose en aspectos como: confort,
seguridad, gestión energética.
11
1.4 DESCRIPCION DE LA SOLUCION
El proyecto de control de acceso, seguridad y luminosidad en una vivienda (domótica), permite
dar respuesta a los requerimientos que plantean estos cambios sociales y las nuevas
tendencias de nuestra forma de vida, facilitando el diseño de casas y hogares más humanos,
más personales, polifuncionales y flexibles.
El sector de la domótica ha evolucionado considerablemente en los últimos años, y en la
actualidad ofrece una oferta más consolidada. Hoy en día, la domótica aporta soluciones
dirigidas a todo tipo de viviendas, incluidas las construcciones de vivienda oficial
protegida. Además, se ofrecen más funcionalidades por menos dinero, más variedad de
producto, y gracias a la evolución tecnológica, son más fáciles de usar y de instalar. En
definitiva, la oferta es mejor y de mayor calidad, y su utilización es ahora más intuitiva y
perfectamente manejable por cualquier usuario.
Los usuarios que cuenten con un sistema como el que aquí se describe, lograra tener el
control de luces y ahorro de energía del hogar, sistema de vigilancia, entre otros. Este
sistema puede reducir los gastos económicos, dar más confort a los usuarios, y a su vez
todo esto se realizara cuidando nuestro medio ambiente. Hoy en día se facilita el trabajo
mediante sistemas inteligentes que hagan esto por el hombre, así evitar la fatiga humana, y
mayor tranquilidad al contar con un sistema de seguridad.
12
CAPITULO 2
2.1 MARCO TEORICO
2.1.1 SOFTWARE
2.1.1.1 ATMEGA C COMPILER
El programa compilador traduce las instrucciones que se han escrito en el lenguaje de
alto nivel (como en este caso se utiliza el lenguaje en C) a código binario ejecutable por el
microcontrolador. CodeVisionAVR es un compilador desarrollado por Pavel Haiduc para
los AVR de 8 bits, desde los tinyAVR hasta los XMEGA. Su principal ventaja es que
provee librerías integradas para controlar sus recursos internos y también dispositivos
externos como LCDs, GLCDs, RTCs, sensores de temperatura, etc. En este sentido se le
podría comparar con los compiladores C de CCS o Mikroe para los PICmicro. Como lo
comprobaremos enseguida, CodeVisionAVR es el compilador C para los AVR más fácil de
usar, sin embargo, no llega a igualar la eficacia de los compiladores IAR AVR o AVR
GCC. También podremos comprobar algo de esta diferencia en la siguiente práctica.
La versión de evaluación de CodeVisionAVR permite usarlo en casi toda su
funcionalidad para fines no comerciales. Tiene ciertas limitaciones con algunas de sus
librerías (casi ni se nota) y no compila programas que superen los 4 kbytes de código
ejecutable.
Figura 2.- Logotipo del CCS
13
2.1.1.2 SIMULADOR PROTEUS
Es una compilación de programas de diseño y simulación electrónica, desarrollado por
Labcenter Electronics que consta de los dos programas principales: Ares e Isis, y los
módulos VSM y Electra.
Son capaces de ejecutar en una PC programas realizados para el microcontrolador, este
simulador permite tener el control absoluto sobre la ejecución de un programa.
Su gran inconveniente es que es difícil simular la entrada y salida de datos del
microcontrolador, tampoco cuentan con los posibles ruidos en las entradas, pero, al menos,
permiten el paso físico de la implementación de un modo más seguro y menos costoso,
puesto que ahorraremos en grabaciones de chips para las diferentes pruebas realizadas al
circuito.
Figura 3.- Logotipo del simulador Proteus
14
2.1.2 HARDAWARE
2.1.2.1 MICROCONTROLADOR ATMEGA 164PA
Figura4. Patillaje del microprocesador
El ATmega164PA es un microcontrolador CMOS de 8 bits de bajo consumo basado en
la arquitectura RISC mejorada. Sus instrucciones se ejecutan en un ciclo de máquina, el
ATmega164PA consigue transferencia de información alrededor de 1 MIPS por MHz
admitido por el sistema, permitiendo al diseñador del sistema optimizar el consumo de
energía versus la velocidad de procesamiento.
CARACTERISTICAS GENERALES:
Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo.
Arquitectura Avanzada RISC
15
- 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución.
- 32 registros de trabajo de 8 bits para propósito general.
- Funcionamiento estático total.
- Capacidad de procesamiento de unos 20 MIPS a 20 MHz.
- Multiplicador por hardware de 2 ciclos
Memorias de programa y de datos no volátiles de alta duración
- 16/32/44 K bytes de FLASH auto programable en sistema
- 512B/1K/2K bytes de EEPROM
- 1/2/4K bytes de SRAM Interna
- Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM
Características de los periféricos
- Dos Timer/Contadores de 8 bits con prescalamiento separado y modo comparación.
- Un Timer/Contador de 16 bits con prescalamiento separado, modo comparación y modo
de captura.
- Contador en Tiempo Real con Oscilador separado
- 6 Canales para PWM
- ADC de 10 bits y 8 canales
Modo Diferencial con ganancia seleccionable a x1, x10 o x200.
- Interface serie de dos hilos con byte orientado.
- Dos puertos Seriales USART Programables
- Interfaz Serial SPI maestro-esclavo
- Watchdog Timer programable con oscilador independiente, dentro del mismo chip.
- Comparador Analógico dentro del mismo Chip
16
2.1.2.2 PANTALLA DE CRISTAL LÍQUIDO O LCD
Una pantalla de cristal líquido o LCD (sigla del inglés liquid crystal display) es una
pantalla delgada y plana formada por un número de píxeles en color o monocromos
colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos
electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.
Figura 4. Pantalla de cristal líquido o LCD
Figura 5.Configuracion de pines para una pantalla de cristal líquido o LCD
17
2.1.2.3 TECLADO MATRICIAL
Los teclados matriciales son muy útiles para el ingreso de datos, un ejemplo seria el
teclado del computador.
Un teclado matricial es un simple arreglo de botones conectados en filas y columnas, de
modo que se pueden leer varios botones con el mínimo número de pines requeridos. Un
teclado matricial 4×4 solamente ocupa 4 líneas de un puerto para las filas y otras 4 líneas
para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8 líneas de
un micro controlador. Si asumimos que todas las columnas y filas inicialmente están en alto
(1 lógico), la pulsación de un botón se puede detectar al poner cada fila a en bajo (0 lógico)
y checar cada columna en busca de un cero, si ninguna columna está en bajo entonces el 0
de las filas se recorre hacia la siguiente y así secuencialmente.
Figura6. Teclado matricial
2.1.2.4. MAX 232
El MAX232 es un IC, primero creado por Maxim Integrated Products , que convierte
las señales a partir de un RS-232 puerto serie a señales adecuadas para su uso
18
en TTL circuitos lógicos digitales compatibles. El MAX232 es un doble controlador /
receptor y normalmente convierte las señales RTS RX, TX, CTS y.
Figura7. Conexión Max 232
2.1.2.5. CABLE SERIAL USB/DB9
Descripción general: se describe el procedimiento para la conexión de un cable de
interconexión entre un conector USB y otro DB9. Esta interfaz se usa en los casos en los
cuales la PC (en particular las LAPTOPS) no cuente con salida DB9-RS232. El driver de
la interfaz crea un puerto virtual COM, generalmente COM3 ó COM4 y puede ser usado
por cualquier programa de comunicaciones, como Hyperterminal, que es un software
estándar en todos los sistemas WINDOWS.
Figura8. Cable serial
19
2.1.2.6. INTERRUPCIONES
Interrupción (también conocida como corrupción del hardware o petición de
interrupción) es una señal recibida por el procesador de un ordenador, indicando que debe
"interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar
esta situación. Una interrupción supone la ejecución temporaria de un programa, para pasar
a ejecutar una "subrutina de servicio de interrupción", que pertenece al BIOS (Basic Input
Output System)
2.1.2.7. COMUNICACIÓN SERIAL
La comunicación serial consiste en el envío de un bit de información de manera
secuencial, esto es, un bit a la vez y a un ritmo acordado entre el emisor y el receptor. Esta
nos permite realizar como se indica la comunicación entre el computador y el
microprocesador, y así intercambiar información.
2.1.2.8. MÉTODOS
La utilización de métodos dentro de nuestro sistema, no solo permite que el código
este más ordenado, sino que también permite la reutilización del código y así el programa
pueda ser más fácil y entendible. No tenga tantas líneas de código y al momento de
compilar, este proceso será mas fácil.
20
CAPITULO 3
3.1 FLUJOGRAMA DEL FUNCIONAMIENTO DEL SISTEMA
3.1.1. FLUJOGRAMA DEL FUNCIONAMIENTO DEL CONTROL DE ACCESO
|
else
if
INICIO
Int cont// Teclado //LCD
Ingresar la clave de seguridad
SE DESACTIVA LA SEGURIDAD DE LA VIVIENDA
Ingresar nuevamente la
clave
Cont++;
CLAVE
CORRECTA
mensaje en LCD “ABRIENDO”
Cont=3
Alarma sonora se activa
mensaje en LCD “ABRIENDO”
Se bloquea el sistema
Mensaje en LCD “error”
mensaje en LCD “ABRIENDO”
FIN
21
3.1.2. FLUJOGRAMA DEL FUNCIONAMIENTO DEL CONTROL DE
LUMINARIAS DE LA VIVIENDA
|
INICIO
COMUNICACIÓN SERIAL
HYPERTERMINAL
INTERRUPCIÓN
Presiono botón de interrupción
Opción
correcta
FIN
Se imprime el menú en el hyperterminal
Elegimos una opción del menú
Activación/desactivación luminarias
Esperar que elija
una opción
22
3.1.3. CÓDIGO DEL PROGRAMA EN AVR
#include <mega164a.h> // libreria del microcontrolador utilizado
#include <delay.h> // libreria de retardo
#include <stdlib.h> // libreria que contiene los prototipos en lenguaje C
para gestionar la memoria dinamica
// Alphanumeric LCD Module functions
#include <alcd.h> // libreria de la lcd
// External Interrupt 0 service routine
// Standard Input/Output functions
#include <stdio.h> // libreria q contiene las definiciones de macros, las
constantes, las declaraciones de funciones
// Declare your global variables here
unsigned char i; // variable tipo caracter utilizada en el cicl for del
metodo teclado
unsigned int d1,d2,d3; //variables tipo caracter de control que
cambian su valor seudun el boton del teclado;
int alarma;
23
int h=0; // variable utilizada como contador para que se active
la alarma en caso de tres intentos fallidos
eeprom unsigned int clave[4]; // arreglo guardado en la memoria eeprom
donde se almacena la clave
int j; // variable tipo entero utilizada en el for que realiza la
funcion de verificacion de la clave
unsigned int s=0; //variables tipo caracter de control que cambian
su valor seudun el boton del teclado;
char opc;
unsigned int clave1=0,clave2=0,clave3=0,clave4=0; //cuatro digitos que utilizaremos
para leer la EEprom ;
int numero[4]; // aregl* donde se guarda la clave ingresada para
luego ser verificada
char text[]="A.ABRIR" ; // arregl tipo caracter que contiene el texto
ABRIR
char text2[]="B.CERRAR"; // arregl tipo caracter que contiene el
texto CERRAR
char actual[]="SU CLAVE" ; // arregl tipo caracter que contiene el texto
SU CONTRASENIA
char errors[]="error"; // arregl tipo caracter que contiene el texto
ERROR
unsigned char tecla(void) // metodo que nos ayuda a identificar el valr
de la tecla presionada
24
{
PORTB=0X80;
if (PINB.0)return 13; // indica la direccion de la tecla precionada
if (PINB.1)return 8;
if (PINB.2)return 9;
if (PINB.3)return 10;
PORTB=0X40;
if (PINB.0)return 7; // indica la direccion de la tecla precionada
if (PINB.1)return 5;
if (PINB.2)return 6;
if (PINB.3)return 11;
PORTB=0X20;
if (PINB.0)return 4;
if (PINB.1)return 2; // indica la direccion de la tecla precionada
if (PINB.2)return 3;
if (PINB.3)return 12;
PORTB=0X10;
if (PINB.0)return 1; // indica la direccion de la tecla precionada
if (PINB.1)return 0;
if (PINB.2)return 14;
if (PINB.3)return 15;
delay_ms(20);
return 21;
}
25
void teclado (void) // metodo para dar un valr y una funcion a cada tecla
{
for (i=0;i<4;i++) // ciclo
{
i=tecla ();
if (i!= 21)
{
switch (i)
{
// TECLA 5
case 0:
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d1=1;d2=5;d3++;
break;
case 1: // TECLA 7
delay_ms(200); //retardo de 200 milisegundos
lcd_gotoxy (d3,1); // la ubicacion donde vamos a imprimir en la lcd
lcd_puts("*"); // se imprime "*" en la ubicacion antes dada
d2=7;d3++; // da el valor de la tecla a una variable
26
break;
case 2: // TECLA 4
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d2=4;d3++;
break;
case 3: // TECLA 1
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d1=1;
d2=1;
d3++;
break;
case 4: // TECLA 9
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d2=9;d3++;
27
break;
case 5: // TECLA 6
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d2=6;d3++;
break;
case 6:
delay_ms(200); // TECLA 3
lcd_gotoxy (d3,1);
lcd_puts("*");
d2=3;d3++;
break;
case 7:
delay_ms(200); //TECLA C
lcd_gotoxy (1,1);
lcd_puts("-");
// d1=1;d2=1;d3++;
break;
28
case 8:
lcd_clear(); //TECLA B
delay_ms(200);
s=3;d2=12;d3++;
break;
case 9: // TECLA A
delay_ms(200);
lcd_gotoxy (1,1);
delay_ms(300);
//lcd_puts("/");
s=1;d2=12;d3++;
break;
case 10:
delay_ms(200);
lcd_gotoxy (1,1); //TECLA D
delay_ms(300);
//s=1;d2=12;d3++;
break;
case 11:
29
delay_ms(200);
lcd_gotoxy (1,1);
//lcd_puts("=");
//d1=1;d2=1;d3++;
break;
case 12: //tecla ACEPTAR
delay_ms(200);
// lcd_clear();
// lcd_gotoxy (0,0);
// lcd_puts("DOMOTICA");
s=2;d2=10;d3++;
break;
case 13: //TECLA 8
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d2=8;d3++;
break;
case 14: //TECLA 2
delay_ms(200);
30
lcd_gotoxy (d3,1);
lcd_puts("*");
d1=2;d2=2;d3++;
break;
//TECLA 0
case 15:
delay_ms(200);
lcd_gotoxy (d3,1);
lcd_puts("*");
d2=0;d3++;
break;
}
}
}
}
void abrir(){ // metodo utilizado cuando se ingresa la clave correcta, imprime en la lcd
indicando que la puerta esta abierta;
lcd_clear();
31
lcd_gotoxy (1,1);
lcd_puts("abriendo");
}
void sucontr(){ // cuando se pide que ingrese la contraseña.....,;
lcd_clear();
lcd_gotoxy (0,0);
lcd_puts(actual);
}
void write_lcd(){ // visualizar en pantalla las cadenas text y text2 a manera de menu;
lcd_clear();
lcd_gotoxy (0,0);
lcd_puts(text);
lcd_gotoxy (0,1);
lcd_puts(text2);
}
void leer_eep(){ //* rutina que lee los datos de la EEprom y los guarda en las variables para
ser comparadas;
clave1=1;
clave2=2;
clave3=1;
clave4=2;
32
clave[0]=clave1;
clave[1]=clave2;
clave[2]=clave3;
clave[3]=clave4;
}
void error(){ //* se ve en pantalla la palabra error si no c teclea el num correcto;
lcd_clear();
lcd_gotoxy (1,1);
lcd_puts(errors);
}
void initmain (){ // subfuncion principal ;
d1=d2=d3=0;
}
void menu(void) {
scanf("%c", &opc) ; // identifica la tecla presionada en la comunicacion
serial
switch (opc) { // segun la tecla presionada en la comunicacion serial
asigna un caso
case'0': // encender luz de la sala
33
PORTD.3=1;
printf("\r\rSALA ENCENDIDA"); // imprime en la pantalla del hyperterminal
lcd_clear(); // borra todo l que este en la pantalla lcd
delay_ms(200); // retardo de 200 milisegundos
lcd_gotoxy (0,0); // ubicacion de donde se va imprimir en la pantalla lcd
lcd_puts("SALA"); // imprime en la pantalla lcd
lcd_gotoxy (0,1); // ubicacion donde se va imprimir en la pantalla lcd
lcd_puts("ON"); // imprime en la pantalla lcd
break;
case'1': //apagar la luz de la sala
PORTD.3=0;
printf("\r\rSALA APAGADA");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("SALA");
lcd_gotoxy (0,1);
lcd_puts("OFF");
break;
case '2': // enceder luz del dormitorio1
34
PORTD.4=1;
printf("\r\rDORMITORIO 1 ENCENDIDO");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("DORM1");
lcd_gotoxy (0,1);
lcd_puts("ON");
break;
//apagar luz del dormitorio1
case '3':
PORTD.4=0;
printf("\r\rDORMITORIO 1 APAGADO") ;
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("DORM1");
lcd_gotoxy (0,1);
lcd_puts("OFF");
break;
case '4': // enceder luz del dormitorio2
PORTD.5=1;
printf("\r\rDORMITORIO 2 ENCENDIDO");
lcd_clear();
35
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("DORM2");
lcd_gotoxy (0,1);
lcd_puts("ON");
break;
case '5': // apagar luz del dormitorio2
PORTD.5=0;
printf("\r\rDORMITORIO 2 APAGADO");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("DORM2");
lcd_gotoxy (0,1);
lcd_puts("OFF");
break;
case '6': // encender luz del estudio
PORTD.6=1;
printf("\r\rESTUDIO ENCENDIDO");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("ESTUDIO");
lcd_gotoxy (0,1);
36
lcd_puts("ON");
break;
case '7': // apagar luz del estudio
PORTD.6=0;
printf("\r\rESTUDIO APAGADO");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("ESTUDIO");
lcd_gotoxy (0,1);
lcd_puts("OFF");
break;
case'8': // encender todas las luces
PORTD.3=1;
PORTD.4=1;
PORTD.5=1;
PORTD.6=1;
printf("\r\rTODAS ON");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("LUCES");
lcd_gotoxy (0,1);
37
lcd_puts("ON");
break;
case'9': // apagar todas las luces
PORTD.3=0;
PORTD.4=0;
PORTD.5=0;
PORTD.6=0;
printf("\r\rTODAS OFF");
lcd_clear();
delay_ms(200);
lcd_gotoxy (0,0);
lcd_puts("LUCES");
lcd_gotoxy (0,1);
lcd_puts("OFF");
break;
default: // en caso de no ser ninguno de ls casos mencionados nos
imprime error
printf ("\rERROR");
}
}
38
interrupt [EXT_INT0] void ext_int0_isr(void) // interrupcion 0 que llama al metodo
menu para controlar el encndido de luces de la vivienda
{
printf("\r\r\r CONTROLAR LUCES DE LA VIVIENDA \r\r\r0.
ENCENDER_SALA \r1. APAGAR_SALA \r\r2. ENCENDER_DORMITORIO1 \r3.
APAGAR_DORMITORIO1 \r\r4. ENCENDER_DORMITORIO2 \r5.
APAGAR_DORMITORIO2 \r\r6. ENCENDER_ESTUDIO \r7. APAGAR_ESTUDIO
\r\r8. ENCENDER_TODAS\r9. APAGAR TODAs_TODAS\r\r\r ELIA UNA
OPCION...." );
menu();
}
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
39
#pragma optsize+
#endif
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0xF0;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xF8;
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
40
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
EICRA=0x00;
EIMSK=0x01;
EIFR=0x01;
PCICR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
41
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x00;
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
UCSR1B=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR1=0x00;
// ADC initialization
// ADC disabled
42
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
lcd_init(16);
//lcd_gotoxy (0,0);
//lcd_puts("DOMOTICA");
delay_ms(200);
// Global enable interrupts
#asm("sei")
initmain() ;
write_lcd() ; //* llamada a las funciones;
leer_eep() ;
while (1)
{
int in = PINC;
43
teclado (); // llama al metodo teclado
if (s==1){ // si escogemos la opcion ABRIR s=1 y nos pide que ingresemos la
contrasenia
inicio: // en caso de error retorna aqui
sucontr() ; // si se escogio "ABRIR" o sea la opcion 1 del menu, llama a la
funcion que pide tu contraseña;
d1=0; // limpia las variables, (necesario para los nuevos valores que se van
a comparar);
d2=0;
d3=0;
if(alarma==3){PORTD.7=1;} // en caso de que ingresamos la clave incorrecta 3
veces se activa la alarma
for(j=0;j<5;j=d3){ // como la contraseña es de 4 digitos, espera a que se
presionen 4 teclas, el contador j se encarga de esto;
teclado() ; // llama al metodo teclado
numero[j]= (d2); // va guardadndo el valor de la clave en el arreglo numero en
la ubicacion j
delay_ms(200) ; // retardo de 100 milisegundos
}
if (s==2){ // cuando presionamos la tecla de aceptar, verifica si la clave es
correcta
44
if(numero[0]==clave[0] ){ // verifica si el digito ingresado en la ubicacion 0 es igual
al de nuestra clave en la misma ubicacion
if(numero[1]==clave[1] ){ // verifica si el digito ingresado en la ubicacion 1 es igual
al de nuestra clave en la misma ubicacion
if(numero[2]==clave[2] ){ // verifica si el digito ingresado en la ubicacion 2 es igual
al de nuestra clave en la misma ubicacion
if(numero[3]==clave[3] ){ // verifica si el digito ingresado en la ubicacion 3 es igual
al de nuestra clave en la misma ubicacion
alarma=0;delay_ms(500);abrir();delay_ms(3000); // si la clave es correcta llama al
metodo abrir
h=1;
lcd_clear(); // borra la lcd
lcd_gotoxy (0,0); // ubicacion donde va imprimir en la lcd
lcd_puts("1.ABRIR"); // imprime de nuevo el menu
lcd_gotoxy (0,1);
lcd_puts("2.CERRAR");
PORTD.7=0;
}
else{ error(); delay_ms(1000);alarma++;goto inicio;} // en caso de que
algun digito de la clave sea erroneo imprime error
}
45
else{error(); delay_ms(1000);alarma++;goto inicio;}
}
else{ error(); delay_ms(1000); alarma++;goto inicio;}
} else{ error(); delay_ms(1000); alarma++; goto inicio;}
}
}
if(in==1 && h==0) // comprueba si la alarma esta activada
{
PORTD.7=1; // si la alarma esta activada en caso de abrir la puerta se enciende la
alarma
}
if(s==3){ // si precionamos la tecla de cerrar puerta se imprime en la pantalla lcd
el mensaje
h=0;
lcd_gotoxy (0,0); // ubicacion donde va imprimir en la lcd
lcd_puts("PUERTA CERRADA");
}
}
}
46
CAPITULO 4
4.1 MATERIALES Y COSTOS
DISPOSITIVO CANT PRECIO UNIDAD ($) PRECIO TOTAL
($)
Micro ATMEGA 164PA 1 10 10
Grabador 1 22 22
LCD 1 12 12
Teclado matricial 1 8 8
Pulsadores 2 0,1 0,2
Cables conectores 30 0.10 3.00
Transistor 3904 1 0,2 0,2
Resistencias 18 0,05 0,9
Impresiones 1 5 5
Cable serial USB/DB9 1 9,5 9,5
Conector DB9 1 2,5 2,5
leds 4 0,25 1
maqueta 1 16 16
capacitores 4 0,2 0,8
potenciómetro 1 0,8 0,8
TOTAL 91,9
Figura9. Tabla de materiales y gastos
47
4.2 CONCLUSIONES:
Se logró construir un circuito de manera que se pueda realizar el sistema control de
acceso, seguridad y luminosidad en una vivienda (domótica).
Se realizó el control de acceso, mediante el acceso de la clave de 4 dígitos, utilizando la
memoria eeprom del microprocesador.
Se logró identificar la configuración de pines del microprocesador ATMEGA 164 y
cada una de sus funciones, características, con la ayuda de los conocimientos adquiridos en
clases y mediante el estudio del datasheet del mismo.
Luego de los análisis respectivos se logró concluir que la teoría aprendida en clases
durante el transcurso del semestre satisface de una manera muy correcta el análisis de la
práctica.
Se logró conocer las conexiones de cada uno de los elementos, tanto como LCD,
microprocesador, su correcta polarización.
Gracias al programa PROTEUS se pudo comprobar el buen funcionamiento del
circuito y para posteriormente realizar la implementación respectiva.
Se logró comprender el funcionamiento de todos los elementos estudiados durante el
semestre, utilizándolos todos conjuntamente en un circuito en el que se aplique nuestros
conocimientos adquiridos.
48
Mediante el microcontrolador se puede realizar muchas aplicaciones, dependiendo las
funciones que este posee y deseemos utilizar.
Se pudo realizar la maqueta respectiva, en la cual se implementó el circuito realizado
para el sistema de control de acceso y luminosidad de la vivienda.
4.3 RECOMENDACIONES:
Conocer el datasheet del microprocesador ATMEGA 164 PA, y en si todas las
características del mismo.
Analizar primeramente la polarización y la distribución de pines de nuestros elementos
utilizados en el proyecto para tener un buen funcionamiento y evitar que estos puedan
dañarse.
Realizar la simulación respectiva, antes de armar el circuito para comprobar su correcto
funcionamiento.
Utilizar métodos y la menor cantidad de líneas de código en nuestro programa, para
que este se pueda compilar de una manera más rápida y eficaz.
4.4 BIBLIOGRAFIA
- SISTEMAS CON MICROPROCESADORES /ING. GERARDO COLLAGUAZO
- DATASHEET PIC16F628A
- ttp://www.todopic.com.ar/foros/index.php?topic=38913.0/controleeprom
- http://www.cursomicros.com/avr/compiladores/tutorial-de-codevision-avr.html
- http://electronica.webcindario.com/circuitos/cerradura.htm
- http://hetpro-
store.com/index.php?option=com_content&view=article&id=17%3Auart-usart-
atmega&catid=4%3Atutoriales&Itemid=7&lang=en
- http://galaxi0.wordpress.com/el-puerto-serial/