Você está na página 1de 32

UNIVERSIDAD NACIONAL

“PEDRO RUIZ GALLO”

FACULTAD DE CIENCIAS FÍSICAS Y MATEMÁTICAS

CURSO :
Sistemas Digitales II.

DOCENTE :
Chiclayo Padilla Hugo.

TEMA :
Proyecto: “Casa Domótica”

INTEGRANTES :
 Chamaya Carhuatanta Roger Antonio.
 Espinoza Lápiz Jhon Peter.
 Santa Cruz López Dany Alberto.

Lambayeque, Julio 2016


CASA DOMÓTICA
I. OBJETIVOS

 Realización tanto teórica como práctica de una vivienda domotizada.


 Diseño, implementación y control de una vivienda real tamaño escala.
 Realizar toda la instalación electrónica de una vivienda real para conseguir el bienestar del
usuario y a la vez crear un producto energéticamente rentable.

II. MOTIVACIÓN

Nuestro proyecto es sobre la realización de una casa domotizada. ¿Por qué elegimos realizar este
proyecto? Pues simplemente porque es un tema muy interesante, sabemos muy bien que todas
las cosas han ido evolucionando día a día, y las casas tampoco se escapan a ello. Todo esto debido
a la electricidad y la electrónica, puntos muy importantes que nos han permitido elevar el nivel de
confort en cada una de nuestras casas y a la vez dando paso a los electrodomésticos, los cuales
son capaces de realizar diversas tareas cotidianas de casi de forma autónoma. Una casa domótica
es capaz de “sentir”, por dar algunos ejemplos, es capaz de detectar la presencia de personas,
detectar el nivel de temperatura y la luz, y a la vez, reaccionar por sí sola a estos estímulos, como
regular la iluminación o conectar una alarma en caso de emergencias, y si queremos llevarlo a otro
nivel, incluso podemos comunicarnos e interactuar con ella por diversos medios como PC y celular.

III. ESPECIFICACIONES TÉCNICAS

La casa domótica contará con los siguientes puntos a efectuar:

 Sistema de alarma de seguridad (contraseña)


 Control de la iluminación interior y exterior de la vivienda.
 Control de la temperatura y humedad del hogar.
 Control de las puertas de acceso a la vivienda (puerta principal y garaje).
IV. HARDWARE

MÓDULO RELÉ

Un relé es un interruptor que podemos activar mediante una señal eléctrica. En su versión más
simple es un pequeño electro-imán que cuando lo excitamos mueve la posición de un contacto
eléctrico de conectado a desconectado o viceversa.

El símbolo del relé muestra la bobina y en este caso, un accionador que conmuta entre dos
contactos, pero también existen relés de múltiples contactos. Mediante una señal de control de
poca intensidad que excite la bobina podemos conmutar grandes tensiones o intensidades.

Beneficios:

- En primer lugar, los relés llevan entre nosotros desde finales del siglo 19 (y nadie ha sido
todavía capaz de convertirlos en obsoletos), es una tecnología muy probada y bien
establecida en la industria y además sirve para cosas que son problemáticas para los
transistores.
- Hay límites en la corriente que un transistor puede aceptar, pero un relé se puede diseñar
para que aguante cualquier carga, porque basta con los extremos metálicos de los
contactos lo soporten.
- Aísla completamente el circuito de control del de potencia, lo que tiene su importancia
especialmente en líneas de media y alta tensión.

Normalmente usaremos un relé cuando se requiera conmutar grandes picos de tensión o


intensidad como por ejemplo arrancando motores de corriente alterna de una cierta potencia. En
cambio el transistor es preferible como conmutador, para pequeñas cargas y cuando la velocidad
de conmutación sea una cuestión importante

- Un transistor conmuta varios millones de veces más rápido que un relé.

En la práctica, con Arduino es más sencillo utilizar un relé para encender una luz fluorescente o la
calefacción, que buscar un transistor de características adecuadas. Aunque hay relés que
necesitan muy poca potencia para excitar la bobina, por regla general Arduino se quedará corto y
vamos a tener que usar un transistor que nos resuelva la papeleta.
El ejemplo que veremos a continuación incluye un circuito de transistor / relé completo que nos
permitirá atacar cualquier proyecto casero que nos propongamos.

Conectar un módulo de 4 relés a un Arduino es muy fácil y nos permite encender y apagar
dispositivos DC o AC.

Como se puede ver en la tarjeta de relés, se tiene un pin llamado COM, este pin debe ser
conectado a una fuente externa de 5V, NO se debe conectar al pin de 5V de Arduino.
También se tienen los pines de comunicación IN1, IN2, IN3 e IN4, los cuales deben conectarse a 4
pines digitales de Arduino por donde se enviaran las señales de control.

Se debe tener en cuenta que un relé se activa en baja y se desactiva en alta, es decir que debemos
enviarle 0V para que se active y para desactivarlo lo colocamos a 5V.

Si vamos a conectar algo a algún relé, debemos conectarlo en el pin NO (normalmente abierto) y al
pin COM, como se muestra en la figura.
MICRO SERVOMOTOR

El servo SG90 Tower Pro un servo


miniatura de gran calidad y diminutas
dimensiones, además es bastante
económico. Funciona con la mayoría de
tarjetas electrónicas de control con
microcontroladores y además con la
mayoría de los sistemas de radio control
comercial. Funciona especialmente bien en
aeronaves de aeromodelismo dadas sus
características de torque, tamaño y peso.

El servo SG90 tiene un conector universal tipo “S” que encaja perfectamente en la mayoría de los
receptores de radio control incluyendo los Futaba, JR, GWS, Cirrus, Hitec y otros. Los cables en el
conector están distribuidos de la siguiente forma: Rojo =Alimentación (+), Café = Alimentación (–)
o tierra, Naranja= Señal PWM.

Este tipo de servo es ideal para las primeras experiencias de aprendizaje y prácticas con servos, ya
que sus requerimientos de energía son bastante bajos y se permite alimentarlo con la misma
fuente de alimentación que el circuito de control. Por ejemplo, si se conecta a una tarjeta arduino,
se puede alimentar durante las pruebas desde el puerto USB del PC sin mayor problema.

Características:

- Micro Servo Tower-pro


- Velocidad: 0.10 sec/60° @ 4.8V
- Torque: 1.8 Kg-cm @ 4.8V
- Voltaje de funcionamiento: 3.0-7.2V
- Temperatura de funcionamiento: -30 ℃ ~ 60 ℃
- Ángulo de rotación: 180°
- Ancho de pulso: 500-2400 µs
- Longitud de cable de conector: 24.5cm
PLACAS
 PUERTAS: Puerta principal y garaje
 MENÚ PRINCIPAL: Temperatura, Humedad y Luces
V. SOFTWARE

Programación en arduino.

 Programación del menú principal: control de luces, temperatura y humedad

/*

pines de la pantalla lcd:

LCD RS pin to digital pin 12

LCD Enable pin to digital pin 11

LCD D4 pin to digital pin 10

LCD D5 pin to digital pin 9

LCD D6 pin to digital pin 8

LCD D7 pin to digital pin 13

LCD R/W pin to ground

*/

#include <Wire.h>

#include <SoftwareSerial.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

float hum; // valor de la humedad

float temp0; // valor de la temperatura

float temp1;

float temp2;

float temp3;

float temp4;

float tempro;

float hum_lim = 60.0;


float temp_max=40.0;

float temp_min=10.0;

int opcion = 1;

int op = 1;// declarar pines

int der = 5;

int foco1 = 24;

int hab1 = 22;

int hab2 = 23;

int foco2 = 25;

int foco3 = 26;

int foco4 = 27;

int foco5 = 28;

int foco6 = 29;

int foco7 = 30;

int value = 0;

int enter = 6;

int izq = 7;

int vent = 2; // ventilador

int calor = 3; // calefactor

int agua = 4; // bonba de agua para regar

int sen_t0 = A0;

int sen_t1 = A1;

int sen_t2 = A2;

int sen_t3 = A3;

int sen_t4 = A4;

SoftwareSerial mySerial(0,1);
void setup()

// set up the LCD's number of columns and rows:

lcd.begin(16, 2);

pinMode(der, INPUT);

pinMode(enter, INPUT);

pinMode(izq, INPUT);

pinMode(vent, OUTPUT); // ventilador

pinMode(calor, OUTPUT); // calefactor

pinMode(agua, OUTPUT); // bonba de agua para regar

pinMode(foco1, OUTPUT);

pinMode(foco2, OUTPUT);

lcd.setCursor(1, 0);

lcd.print("Proyecto dejado");

lcd.setCursor(3, 1);

lcd.print("por Brian");

delay(4000);

/*lcd.clear();

lcd.setCursor(1, 0);

lcd.print("CASA DOMOTICA");

lcd.setCursor(5, 1);

lcd.print("UNPRG");

delay(4000);

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("INTEGRANTES");
lcd.setCursor(2, 1);

lcd.print("Roger Antonio");

delay(4000);

lcd.clear();

lcd.setCursor(2, 1);

lcd.print("Dany Alberto");

delay(4000);

lcd.clear();

lcd.setCursor(2, 1);

lcd.print("Jhon Peter");

delay(4000);

*/

lcd.clear();

void loop()

temp0 = (5.0 * analogRead(sen_t0) * 100.0) / 1023;

temp1 = (5.0 * analogRead(sen_t1) * 100.0) / 1023;

temp2 = (5.0 * analogRead(sen_t2) * 100.0) / 1023;

temp3 = (5.0 * analogRead(sen_t3) * 100.0) / 1023;

temp4 = (5.0 * analogRead(sen_t4) * 100.0) / 1023;

hum = (5.0 * analogRead(A6) * 20.0) / 1023;

tempro = analogRead((temp0 + temp1 + temp2 + temp3 + temp4))/25 ;


if(tempro>temp_max)

digitalWrite(vent,HIGH);

digitalWrite(calor,LOW);

if( (tempro>=temp_min) && (tempro<=temp_max) )

digitalWrite(vent,LOW);

digitalWrite(calor,LOW);

if(tempro<temp_min)

digitalWrite(calor,HIGH);

digitalWrite(vent,LOW);

if (hum > hum_lim)

digitalWrite(agua, LOW);

if (hum <= hum_lim)

digitalWrite(agua, HIGH);

if (digitalRead(der) == HIGH)

delay(200);
opcion++;

if (opcion == 5)

opcion = 1;

if (digitalRead(izq) == HIGH)

delay(200);

opcion--;

if (opcion == 0)

opcion = 4;

if (digitalRead(enter) == HIGH)

delay(200);

if ( opcion == enter )

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("No hay nada ");

}
}

switch (opcion)

case 1: //temperatura

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("TEMPRO = ");

lcd.print(tempro, 1);

lcd.print(".C");

// lcd.setCursor(0,1);

//lcd.print("max=");

// lcd.print(temp_max,0);

//lcd.setCursor(9,1);

//lcd.print("min=");

//lcd.print(temp_min,0);

/*

if(digitalRead(enter)==HIGH)

delay(200);

while (digitalRead(enter)==LOW)

digitalWrite(vent,LOW);

digitalWrite(calor,LOW);

digitalWrite(agua,LOW);
if(digitalRead(der)==HIGH)

delay(200);

op++;

if(op==3)

op=1;

if(digitalRead(izq)==HIGH)

delay(200);

op--;

if(op==0)

op=2;

switch (op)

case 1: //configurar valor maximo

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" configurar ");

lcd.setCursor(0,1);

lcd.print("valor max ");


lcd.print(temp_max,0);

break;

case 2: //configurar valor minimo

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" configurar ");

lcd.setCursor(0,1);

lcd.print("valor min ");

lcd.print(temp_min,0);

break;

delay(200);

delay(200);

*/

break;

case 2: //humedad

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("HUM = ");

lcd.print(hum, 0);

lcd.print("%");

lcd.setCursor(0, 1);
lcd.print("limite= ");

lcd.print(hum_lim, 0);

lcd.print("%");

/*

if(digitalRead(enter)==HIGH)

delay(200);

while (digitalRead(enter)==LOW)

digitalWrite(vent,LOW);

digitalWrite(calor,LOW);

digitalWrite(agua,LOW);

//configurar valor limite

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" configurar ");

lcd.setCursor(0,1);

lcd.print("valor lim ");

lcd.print(hum_lim,0);

delay(200);

delay(200);

*/

break;
case 3: //visualisar luces

lcd.clear();

lcd.setCursor(2, 0);

lcd.print("configuracion");

lcd.setCursor(5, 1);

lcd.print("luces");

if(Serial.available())

value= Serial.read();

if(value=='A')

digitalWrite(foco1, HIGH);

if(value=='B')

digitalWrite(foco1, LOW);

if(value=='C')

digitalWrite(foco2, HIGH);

if(value=='D')

digitalWrite(foco2, LOW);
}

if(value=='E')

digitalWrite(foco3, HIGH);

if(value=='F')

digitalWrite(foco3, LOW);

if(value=='G')

digitalWrite(foco4, HIGH);

if(value=='H')

digitalWrite(foco4, LOW);

if(value=='I')

digitalWrite(foco5, HIGH);

if(value=='J')

digitalWrite(foco5, LOW);

if(value=='K')
{

digitalWrite(foco6, HIGH);

if(value=='L')

digitalWrite(foco6, LOW);

if(value=='M')

digitalWrite(foco7, HIGH);

if(value=='N')

digitalWrite(foco7, LOW);

/*

//configurar valor limite

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" Habitacion1 encendida ");

lcd.setCursor(0,1);

lcd.print(".l. ");

delay(200);
}

*/

delay(200);

break;

case 4: //visualisar bomba de agua y ventilador y calefactor

lcd.clear();

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("configuracion");

lcd.setCursor(5, 1);

lcd.print("jardin");

/*

if (digitalRead(agua)==HIGH)

lcd.setCursor(0,0);

lcd.print(" bomba on ");

lcd.setCursor(0,1);

lcd.print(" regando ");

else

lcd.setCursor(0,0);

lcd.print(" bomba off ");


}

*/

break;

 Programación del control de puertas: Puerta principal y garaje

#include <LiquidCrystal.h> // include la libreria per la gestione del display

LCD #include <Keypad.h> //include la libreria per la gestione del keypad

#include <Servo.h> //include la libreria per la gestione del servo

#include <Password.h>

LiquidCrystal lcd(10, 11, A0, A1, A2, A3); //Imposta i pin di Arduino a quali sono collegati in pin del
display (Rs,E,DB4,DB5,DB6,DB7)

byte colPins[4] = {5, 4, 3, 2};

byte rowPins[4] = {9, 8, 7, 6};

char Keys[4][4] = //creo la matrice dei tasti della tastiera.

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

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

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

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

};

Keypad keyp = Keypad(makeKeymap(Keys),


rowPins, colPins, 4, 4);

Servo myservo;

Servo servo2;

char key = '\0';

int lum_pin = 12;

long inst_time;

char risp[16];

byte close_val = 0;

byte open_val = 180;

//////

int duracion=100; //Duración del sonido

int fMin=1000; //Frecuencia más baja que queremos emitir

int fMax=1500; //Frecuencia más alta que queremos emitir

int i=0;

void setup()

pinMode(lum_pin, OUTPUT);

analogWrite(lum_pin, 0);

lcd.begin(16, 2);

Serial.begin(9600);

myservo.attach(A4);

myservo.write(close_val);
servo2.attach(A5);

servo2.write(close_val);

pinMode (13, OUTPUT); //pin configurado como salida

void loop()

lcd.clear();

lcd.setCursor(1,0); // Ponte en la line 0, posicion 1

lcd.print("Presione '*'");

lcd.setCursor(1,1); // Ponte en la line 1, posicion 1

lcd.print("Presione '#'");

if(key != '*')

key = keyp.getKey();

while (key != '*')key = keyp.getKey();

analogWrite(lum_pin, 255);

int ans = get_param("Ins. Password", "16830", risp, true);

if (ans == 1)

lcd.print("Abriendo Puerta");

myservo.write(open_val);

delay(5000);
lcd.clear();

lcd.print("Cerrando Puerta");

myservo.write(close_val);

else

if (ans == 2)

lcd.print("CLAVE ERRADA");

delay(2000);

//sonido más agudo

for

(i=fMin;i<=fMax; i++)

tone(13, i, duracion);

//sonido más grave

for (i=fMax;i>=fMin; i--)

tone(13, i, duracion);

//////////////////////////////

key = keyp.getKey();

while (key != '#')key = keyp.getKey();


analogWrite(lum_pin, 255);

int an = get_param("Ins. Password", "1234", risp, true);

if (an == 1)

lcd.print("Abriendo Garaje");

servo2.write(open_val);

delay(5000);

lcd.clear();

lcd.print("Cerrando Garaje");

servo2.write(close_val);

else if (an == 2)

lcd.print("CLAVE ERRADA");

delay(2000);

analogWrite(lum_pin, 0);

boolean get_param(char* question, char* answer, char* param, boolean isPassword )

byte j = 0;
lcd.clear();

lcd.print(question);

lcd.setCursor(j, 1);

lcd.blink();

inst_time = millis();

do

lcd.setCursor(j, 1);

key = keyp.getKey();

jump_key:

if (key)inst_time = millis();

if ((key == '*') || (key == 'D'))break;

else

if (key == 'C' && j > 0)

param[j] = '\0'; j--; lcd.setCursor(j, 1);

lcd.write(" ");

else

if (key == 'B' || key == 'A');

else

if (key) { param[j] = key; j++; lcd.print(key);


if (isPassword)

long pass_wait = millis();

do key = keyp.getKey();

while (((millis() - pass_wait) < 1000) && (!key));

lcd.setCursor(j - 1, 1);

lcd.write('*');

if (key)goto jump_key; }

while ((millis() - inst_time) < 10000 && j < 17);

param[j] = '\0';

lcd.clear(); i

f (key == '*')

Serial.println(param);

if (!strcmp(param, answer))return 1;

else

return 2;

else return 0;

}
VI. IMÁGENES DEL ARMADO Y FUNCIONAMIENTO DE LA CASA DOMÓTICA
VII. CONCLUSIONES

- Toda la programación se desarrolló en arduino, la cual nos ayudó a aprender más acerca
de los beneficios de este, además de aprender que se puede hacer diferentes cosas con
este lenguaje de programación.

- La casa domótica funcionó perfectamente. El sistema de seguridad con contraseña, el


menú principal con la opción de elegir entre observar el nivel de la temperatura, humedad
y además de controlar las luces, las cuales complementamos con una aplicación para
celular la cual nos da mayor comodidad a la hora de encender y apagar las luces o una en
específico.

Você também pode gostar