Sei sulla pagina 1di 24

CASA INTELIGENTE

OMAR GRANADOS OSPINA

EDWARD OREJUELA VILLANUEVA

UNIVERSIDAD COOPERATIVA DE COLOMBIA

FACULTAD DE INGENIERÍA

BOGOTA

24 DE MAYO DE 2013

INTRODUCCIÓN

Este proyecto se realiza con el fin de afianzar conocimientos en la materia de domótica ya que esta es una rama de la ingeniería muy interesante por sus aplicaciones además nos permite el uso de microcontroladores y demás componentes electrónicos los cuales son de uso en el curso al cual presentaremos el presente proyecto de una casa inteligente haciendo uso de un microcontrolador 16f877a un display lcd y otros componentes activos y pasivos de la electrónica análoga y de este modo tener un circuito análogo digital para el montaje y prueba del proyecto.

Objetivo general:

OBJETIVOS

Automatizar y controlar laborares cotidianas de una casa

Objetivos específicos:

Manejo de pic 16f877a

Uso del lcd

Uso del teclado matricial

Amplificación de corriente para un motor

Visualizar menú en la lcd

Acceso desde el teclado

Uso de compilador picc para realizar la programación del microcontrolador

MARCO TEÓRICO

Microcontrolador

MARCO TEÓRICO Microcontrolador Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz

Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Algunos microcontroladores pueden utilizar palabras de cuatro bits y funcionan a velocidad de reloj con frecuencias tan bajas como 4 kHz, con un consumo de baja potencia (mW o microvatios). Por lo general, tendrá la capacidad para mantener la funcionalidad a la espera de un evento como pulsar un botón o de otra interrupción, el consumo de energía durante el sueño (reloj de la CPU y los periféricos de la mayoría) puede ser sólo nanovatios, lo que hace que muchos de ellos muy adecuados para aplicaciones con batería de larga duración. Otros microcontroladores pueden servir para roles de rendimiento crítico, donde sea necesario actuar más como un procesador digital de señal (DSP), con velocidades de reloj y consumo de energía más altos.

DISPLAY LDC

DISPLAY LDC Las pantallas de cristal líquido (LCD) se han popularizado mucho en los últimos años,

Las pantallas de cristal líquido (LCD) se han popularizado mucho en los últimos años, debido a su gran versatilidad para presentar mensajes de texto (fijos y en movimiento), valores numéricos y símbolos especiales, su precio reducido, su bajo consumo de potencia, el requerimiento de solo 6 pines del PIC para su conexión y su facilidad de programación en lenguajes de alto nivel (por ejemplo, lenguaje C). Desde todo punto de vista el empleo del display LCD 16x2 (LCD 2x16) debería considerarse como la primera opción a la hora de decidir por un dispositivo de presentación alfanumérica, excepto cuando las condiciones de iluminación ambiental no sean las más favorables. En este último caso se debería pensar en el empleo de displays de 7 segmentos, que aunque no tienen la misma versatilidad tienen la ventaja innegable de sus mejores características de visibilidad aún en los ambientes más desfavorables. En la actualidad existen diversos modelos de display LCD, aunque los más comunes son los LCD 16x2 (16 caracteres x 2 filas) o LCD 2x16, gobernados por el controlador Hitachi HD44780, que se ha convertido en el estándar de facto para las aplicaciones con microcontroladores PIC. Específicamente se hará referencia al display LM016L, que tiene las características mencionadas, aunque cualquier otro display LCD con el controlador HD44780 o compatible se puede utilizar. Existen LCD 16x2 con diferentes combinaciones de colores de fondo y texto.

TRANSISTOR DARLINGTON

TRANSISTOR DARLINGTON Esta configuración sirve para que el dispositivo sea capaz de proporcionar una gran ganancia

Esta configuración sirve para que el dispositivo sea capaz de proporcionar una gran ganancia de corriente y, al poder estar todo integrado, requiere menos espacio que dos transistores normales en la misma configuración. La ganancia total del Darlington es el producto de la ganancia de los transistores individuales. Un dispositivo típico tiene una ganancia en corriente de 1000 o superior. También tiene un mayor desplazamiento de fase en altas frecuencias que un único transistor, de ahí que pueda convertirse fácilmente en inestable. La tensión base-emisor también es mayor, siendo la suma de ambas tensiones base-emisor, y para transistores de silicio es superior a 1.2V. La beta de un transistor o par Darlington se halla multiplicando las de los transistores individuales. La intensidad del colector se halla multiplicando la intensidad de la base por la beta total.

TECLADO MATRICIAL

La intensidad del colector se halla multiplicando la intensidad de la base por la beta total.

Un teclado matricial es un conjunto de botones (switches) dispuestos en forma de malla, de modo que no se requieran de muchas líneas para su interface. De hecho, la mayoría de los teclados (incluyendo quizá el de tu computadora) funciona con una estructura similar. En esta práctica trabajaremos con un teclado de 4×4.

Como se aprecia en la siguiente imagen, cada botón del teclado está conectado a alguna de las filas Row, por un lado; y por el otro, a alguna de las columnas Col.

MOTOR DC

lado; y por el otro, a alguna de las columnas Col. MOTOR DC El motor de

El motor de corriente continua es una máquina que convierte la energía eléctrica continua en mecánica, provocando un movimiento rotatorio. En la actualidad existen nuevas aplicaciones con motores eléctricos que no producen movimiento rotatorio, sino que con algunas modificaciones, ejercen tracción sobre un riel. Estos motores se conocen como motores lineales.

Esta máquina de corriente continua es una de las más versátiles en la industria. Su fácil control de posición, par y velocidad la han convertido en una de las mejores opciones en aplicaciones de control y automatización de procesos. Pero con la llegada de la electrónica su uso ha disminuido en gran medida, pues los motores de corriente alterna, del tipo asíncrono, pueden ser controlados de igual forma a precios más accesibles para el consumidor medio de la industria. A pesar de esto los motores de corriente continua se siguen utilizando en muchas aplicaciones de potencia (trenes y tranvías) o de precisión (máquinas, micros motores, etc.)

MARCO PRÁCTICO

Diagrama de flujo

El programa a realizar se divide en 4 diagramas:

1. Menú

Es el programa principal

se divide en 4 diagramas: 1. Menú Es el programa principal Y nos muestra cómo funciona

Y nos muestra cómo funciona cada si se presiona la tecla correspondiente pues este responde a otro programa dentro del principal.

2. Leds

Es un subprograma que me lleva a otro menú con el fin de activar cualquiera de los 4 leds que representan una bombilla de una casa y se da su respectivo nombre.

3. Motor Si en el menú principal se selecciona la opción motor este abre un

3.

Motor

Si en el menú principal se selecciona la opción motor este abre un menú con varios tipos de velocidades y para pausar el motor.

4. Clave de acceso Y este último nos representa la parte de acceso de la

4. Clave de acceso

Y este último nos representa la parte de acceso de la casa el cual almacena una clave en la memoria del pic y la compara con la ingresada.

DIAGRAMA DE BLOQUES El diagrama de bloques nos da a grandes rasgos lo que se

DIAGRAMA DE BLOQUES

El diagrama de bloques nos da a grandes rasgos lo que se pretende hacer en un proyecto, actividad, investigación etc. Gracias a este es más sencilla la comprensión de nuestro proyecto sin tener que profundizar de una manera muy específica.

CÓDIGO EN LENGUAJE C El lenguaje de programación c es muy conocido y de gran

CÓDIGO EN LENGUAJE C

El lenguaje de programación c es muy conocido y de gran utilidad en nuestro proyecto debido a que es un lenguaje de programación de un nivel alto pero de fácil comprensión, usamos el compilador picc para generar nuestro archivo .hex el cual reconoce nuestro pic ya que es el código de máquina.

Código

#include <kbd_lib.c>

#include <LCD.C>

#byte kbd_port_b = 8

#include <stdlib.h>

#rom 0x2100={'3','4','3','4'}

void acceso()

{

char k;

int i;

char data[4], clave[4];

//Matrices para guardar clave y datos

lcd_init();

kbd_init();

i=0;

//posición de la matriz

printf(lcd_putc,"\fDigito Clave 1\n");

//Para primer dato

while(i<=3)

{

k=kbd_getc();

//Lee el teclado

if (k!=0)

//Si se ha pulsado alguna tecla

{data[i]=k;

//se guarda en la posición correspondiente

i++;

//de la matriz

printf(lcd_putc,"\fDigito Clave %u\n",i+1); //Siguiente dato

}

}

for (i=0;i<=3;i++)

//Pasa datos de eeprom a la matriz clave

{

clave[i]=read_eeprom(i);

}

if

((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])&&(data[3]==clave[3]))

//Compara los datos con la clave

{

printf(lcd_putc,"\fPuerta Abierta");

output_high(PIN_A0);

delay_ms(1500);

output_low(PIN_A0);

//Si es igual da pulso al relé

}

else printf(lcd_putc,"\fPuerta Cerrada");

delay_ms(1000);

}

int cont;

#int_TIMER1

void TIMER1_isr(void)

{

//Clave erronea

if (cont>=20) OUTPUT_A(0x00);

set_timer1(3036);

cont++;

}

void luces()

{

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_CLOCK_DIV_2);

setup_psp(PSP_DISABLED);

setup_spi(SPI_SS_DISABLED);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);setup_wdt(WDT_18MS);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

setup_timer_2(T2_DISABLED,0,1);

setup_comparator(NC_NC_NC_NC);

setup_vref(FALSE);

enable_interrupts(INT_TIMER1);

enable_interrupts(GLOBAL);

// TODO: USER CODE!!

cont=0;

char k;

lcd_gotoxy(1,1);

lcd_putc("1.Cocina");

lcd_gotoxy(10,1);

lcd_putc("2.Comedor");

lcd_gotoxy(1,2);

lcd_putc("3.Sala");

lcd_gotoxy(10,2);

lcd_putc("4.Habitacion");

set_timer1(3036);

while(k=='\0'){

k=kbd_getc();

}

switch (k){

case '1':

output_high(PIN_A1);

break;

case '2':

output_high(PIN_A2);

break;

case '3':

output_high(PIN_A3);

break;

case '4':

output_high(PIN_A5);

break;

default:

lcd_putc("\f");

lcd_putc("Opcion Incorrecta");

delay_ms(1000);

break;

}

k='\0';

}

void pwm()

{

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_CLOCK_DIV_2);

setup_psp(PSP_DISABLED);

setup_spi(SPI_SS_DISABLED);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_timer_1(T1_DISABLED);

setup_comparator(NC_NC_NC_NC);

setup_vref(FALSE);

// TODO: USER CODE!!

setup_ccp1(CCP_PWM);

char q;

lcd_gotoxy(1,1);

lcd_putc("1.Alta");

lcd_gotoxy(10,1);

lcd_putc("2.Media");

lcd_gotoxy(1,2);

lcd_putc("3.Baja");

lcd_gotoxy(10,2);

lcd_putc("4.Parar");

while(q=='\0'){

q=kbd_getc();

}

switch (q){

case '1':

setup_timer_2(T2_DIV_BY_16, 255, 1); //para dejaar un frecuencia fija

set_pwm1_duty(200);//el porcentaje del ciclo util, solo voy a modificar esto

delay_ms(25);

break;

case '2':

setup_timer_2(T2_DIV_BY_16, 255, 1); //para dejaar un frecuencia fija

set_pwm1_duty(50);//el porcentaje del ciclo util, solo voy a modificar esto

delay_ms(25);

break;

case '3':

setup_timer_2(T2_DIV_BY_16, 254, 1); //para dejaar un frecuencia fija

set_pwm1_duty(10);//el porcentaje del ciclo util, solo voy a modificar esto

delay_ms(25);

break;

case '4':

setup_timer_2(T2_DIV_BY_16, 255, 1); //para dejaar un frecuencia fija

set_pwm1_duty(0);//el porcentaje del ciclo util, solo voy a modificar esto

delay_ms(25);

break;

default:

lcd_putc("\f");

lcd_putc("Opcion Incorrecta");

delay_ms(1000);

break;

}

q='\0';

}

void main()

{

setup_adc_ports(NO_ANALOGS);

char k;

while (TRUE)

{

lcd_init();

kbd_init();

lcd_gotoxy(1,1);

lcd_putc("1.Luces");

lcd_gotoxy(10,1);

lcd_putc("2.Motor");

lcd_gotoxy(1,2);

lcd_putc("3.Acceso Puerta");

while(k=='\0'){

k=kbd_getc();

}

switch (k){

case '1':

lcd_putc("\f");

luces();

break;

case '2':

lcd_putc("\f");

pwm();

break;

case '3':

lcd_putc("\f");

acceso();

break;

default:

lcd_putc("\f");

lcd_putc("Opcion Incorrecta");

delay_ms(1000);

break;

}

k='\0';

}

}

Es un poco extenso…

De manera muy sencilla explicare el funcionamiento de este código comienza definiendo librerías y fuses los cuales son necesarios para la debida comprensión y protección del pic después de esto se inicia con una función principal el cual nos muestra un menú de donde dependiendo de la opción deseada se procede a llamar la rutina correspondiente en este caso hay 3 una para prender leds otra para la velocidad de un motor y el acceso por medio de una clave, a su vez cada uno de los tres anteriores mencionados están compuesto por un submenú el cual nos indicara que hacer y cómo proceder a activar de manera muy sencilla gracias a nuestra entrada que es un teclado matricial de

3x4.

ESQUEMÁTICO

La simulación de este proyecto se puede realizar gracias a nuestro esquema de diseño electrónico el cual se muestra en la siguiente figura y lo simularemos en un programa diseñado para circuitos que se llama Proteus

CONCLUSIONES

Es realmente satisfactorio llevar a cabo un proyecto de tal magnitud ya que se ve la esencia de lo que es un ingeniero y de cómo debe afrontar y tomar decisiones al momento de realizar tales labores además es un comienzo a un campo muy grande como lo es la domótica ya que podemos optimizar y mejorar el consumo de energía por algo se empieza quizá este sea un proyecto a futuro como una empresa dedicada a esta labor ya que no es muy conocida además con diseños propios se puede empezar a bajar costos para poder realizar y dar mantenimiento a esta fantástica labor.