Você está na página 1de 21

UNIVERSIDAD TCNICA PARTICULAR DE

LOJA
La Universidad Catlica de Loja

Sistemas Embebidos

Sistema digital de automatizacin y control de


luminarias LED, aplicado a ambientes domsticos

INTEGRANTES
Paola Cecibel Chamba Agila
Bryan Antonio Gordillo Poma
Leonardo Antonio Jaramillo Rodrguez
Santiago Ren Sarmiento Sotomayor
Jason Mauricio Tituaa Castillo
Jos David Ziga Vivanco

TUTOR
Ing. Christian Lojn Herrera

Abril 2014 Agosto 2014

Planteamiento del Problema


Encontrar mtodos eficientes con los que se pueda aprovechar las condiciones
ambientales, en este caso la luz solar, de tal manera que se controle
automticamente las luminarias del hogar, la intensidad de la iluminacin tanto
manual como automticamente, teniendo como resultado ahorro de energa y
aprovechamiento de las fuentes de energa renovables.

Delimitacin del problema


El siguiente proyecto est enfocado a trabajar en una vivienda, en el cual se
emplear un sistema de control automtico de alumbrado. Para ello se
necesitara de dispositivos que censen la luz solar y de acuerdo a esto poder
controlar el alumbrado del hogar, es decir que cuando exista exceso de luz
solar la vivienda ser iluminada con energa solar, y cuando exista ausencia de
luz solar el sistema har que la vivienda sea iluminada con luminarias LED;
esto suceder siempre y cuando sea necesario, es decir, el sistema de
automatizacin funcionara nicamente cuando exista movimiento en el interior
de la vivienda, el cual a su vez estar controlado por sensores de presencia. De
tal forma, que como se mencion anteriormente existir el ahorro de energa y
a su vez el aprovechamiento de las condiciones ambientales.
Mediante un dimmer se pretende controlar la intensidad luminosa, segn las
necesidades del usuario, el mismo que podr ser manipulado de manera
automtica,
como
tambin
manual.

Justificacin de la investigacin
Actualmente las personas requieren de sistemas que proporcionen comodidad
y eficiencia energtica para sus hogares, oficinas, estudios de cualquier lugar
en donde se encuentren. Gracias a la innovacin de sistemas de domtica, es
posible obtener tecnologas de control de dispositivos electrnicos sin la
necesidad de la presencia de un usuario, o, con su consentimiento para
establecer caractersticas del dispositivo a su agrado.
Sin duda estos sistemas de control de luminaria ofrecen ms comodidad,
permitiendo regular la intensidad luminosa de todo su hogar segn el sector en
el que se encuentre, manual o automticamente. Como consecuencia de una
atenuacin automtica, el sistema har eficiente el consumo energtico del
lugar donde sea instalado.
Domtica es una de las reas que facilita los procesos de automatizacin y
operacin de mecanismos electrnicos, logrando de esa manera una unin de
las diferentes tecnologas que nos permiten mejorar de cierta forma nuestro
estilo de vida, es por esta razn que se busca implementar un sistema
domtico que contribuya con la eficiencia energtica mediante la opcin de

atenuacin automtica, o el control manual mediante un dispositivo remoto


como tambin un panel local. De este modo se ofrece ms comodidad al
usuario.

Objetivos de la investigacin
Objetivo Principal

Desarrollar un dimmer con acceso remoto y local, usando el micro


controlador ATmega328P; originando un sistema de automatizacin de
luminarias.

Objetivos Especficos

Mostrar cmo se usa la domtica para ayudar en la disminucin del


consumo energtico, incrementacin del confort en las casas por medio
de sistemas de iluminacin.

Desarrollar un software con una interfaz amigable que permita el control


de las luminarias a travs de internet, y un panel dentro de la residencia
para control.

Caractersticas Del Proyecto:


SENSORES

HARDWARE
Atmega 328P

Sensor Pir Me003

Teclado matricial 4x4


LCD 16x2

Sensor LDR

Ethernet Shield
LED's 12V (tira)

Diagramas de flujo:
Esquematizacin de funcionamiento.

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int piso=0;
//Programa teclado
const int entrada_analogica_teclado = A1;
int valor_analogico_teclado = 0;
int boton = 99;
int numero = 0;
//Variables globales
int transistorPin=5;//Por defecto se inicia en planta baja
int cont = 0;
int valor[]={0,0,0};
int aux = 0;
int atenuacion_planta_alta=0;
int atenuacion_planta_baja=0;
int estado=0;//52-1 manual
//51-0 automatico

Cdigo:

const int LED_estado1=10;//LED auntomatico pin 13


const int LED_estado2=9;//LED manual pin 12
//Variables sensor pir
const int pirPin1 = 2;// Planta baja PIR
const int pirPin2 = 3; // Planta alta PIR

int pirState = LOW;


int pirState2 = LOW;
int val
= 0;
void
loop()
{ // aux para pir
int val2= 0; // aux para pir
internet();
//Variables
LDR
numero
= lectura_teclado();//Lectura
teclado
int sensorPin = A2;
if const
((boton!=99)&&(numero>=0)){//Engloba
todo el codigo
const int sensorPin2 = A3;
if(numero==51)
const
int ledPin = 5;
estado=0;
constif int
ledPin2 = 6;
else
(numero==52)
int
sensorValue = 0;
estado=1;
int sensorValue2 = 0;");
Serial.print("numero
//Aux
Serial.println(numero);
int atenuacion = 0;//Valor
de PWM
Serial.print("estado
");
int atenuacionsalida = 0;//Valor de PWM
Serial.println(estado);
Ethernet shield
if//Variables
(estado==0){//Modo
Automatico
int PIN_LED;
if(aux==0){
byte
mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
digitalWrite(LED_estado2,LOW);
IPAddress
ip(192,168,1,6);
digitalWrite(LED_estado1,HIGH);
EthernetServer
server(80);
lcd.clear();
String
readString=String(30);//lee
caracteres
lcd.print("Modo
Automatico");
String
state=String(3);
aux=1;
String state1=String(3);
}
void setup() {
while(1){
Serial.begin(9600);
Pir();
Inicio();//Inicio
general pines y lcd
numero=lectura_teclado();
Inicializacion();
if((boton!=99)&&(numero>=0)){
inicio_internet();
if(numero==52){
}

boton=99;
break;
}
}}

Serial.print("Modo autoooooooooooo ");


}//Fin Modo Automatico
else if (estado==1){//Modo manual
if(aux==1){
digitalWrite(LED_estado1,LOW);
digitalWrite(LED_estado2,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
lcd.clear();
lcd.print("Modo Manual");
lcd.setCursor(0,1);
lcd.print("Espere");
delay(1000);
numero=54;
atenuacion_planta_alta=0;
atenuacion_planta_baja=0;
aux=0;
//cont=0;
}
if(numero != 53 && numero != 54 && numero != 41 && numero != 42 && numero !=
51 && numero != 52 ){
if(cont <= 3)
valor[cont] = numero;
Serial.print(valor[0]);
Serial.print(valor[1]);
Serial.println(valor[2]);
cont++;
}// Fin lector numero
//Cambio de sector

else if(numero == 54 ){//Boton D


transistorPin = 5;
LCD_PlantaBaja(atenuacion_planta_baja);//llamando a funcion de LCD
}
else if(numero == 53){//Boton C
transistorPin = 6;
cont = 0;
LCD_PlantaAlta(atenuacion_planta_alta);//Llamando a la funcion para escritura
}// Fin Conversor cadena a entero
en LCD
}}//Fin
// Finmodo
cambio
de sector
manual
de prueba
else if(numero == 41 /* '*' */){//Conversor cadena a entero (*) se define como
}
enter
switch (cont) {
boton=99;
case 1:
= valor[0];// sentencias
}// Finatenuacion
loop
break;
case
2:
//Inicia
valores
generales
atenuacion = (valor[0]*10) + valor[1];// sentencias
void Inicio(){
break;
case 3: OUTPUT);//salida para LED's 12V
pinMode(6,
atenuacion = (valor[0]*100)+(valor[1]*10)+valor[2];// sentencias
break; OUTPUT);//salida para LED's 12V
pinMode(5,
}
digitalWrite(6,
LOW);//inicializacion
estado bajo
atenuacionsalida
= (atenuacion * 255)/100;
if(atenuacion >= 101){// Condicion para modulacion porcentual max 100%
digitalWrite(5, LOW);//inicializacion estado bajo
atenuacionsalida = 255;
atenuacion = 100;
pinMode(LED_estado1,
OUTPUT);//estado de modo
}
pinMode(LED_estado2,
OUTPUT);//estado
de modo
analogWrite(transistorPin,
atenuacionsalida);//Salida
de seal PWM a LED's
if(transistorPin == 5){
pinMode(pirPin1, INPUT);//sensor pir entrada
atenuacion_planta_baja = atenuacion;
LCD_PlantaBaja(atenuacion_planta_baja);//llamando
a funcion de LCD
pinMode(pirPin2,
INPUT);//sensor pir entrada
}
digitalWrite(LED_estado2,
LOW);//inicializacion estado bajo
else if(transistorPin == 6){
atenuacion_planta_alta = atenuacion;
digitalWrite(LED_estado1, LOW);//inicializacion estado bajo
LCD_PlantaAlta(atenuacion_planta_alta);//Llamando a la funcion para
escritura
en LCD
lcd.init();//
initialize the lcd
}
lcd.backlight();
cont = 0;
}// Fin Conversor cadena a entero
}//Fin
}//Fin modo manual de prueba
}//Seleccion de estado auto o manual
boton=99;
void Selec_modo(){
}// Fin
loop
lcd.clear();
//Inicia
valores generales
lcd.print("Seleccione");
lcd.setCursor(0,1);
lcd.print("Manual o Auto");

while(1){//Condicion no sirve
numero=lectura_teclado();
if ((boton!=99)&&(numero>=0)){//Condicion evita entrar al codigo sin presionar un
boton
if(numero==51){
lcd.clear();
lcd.print("Auto. ON");
estado=0;//modo auto
digitalWrite(LED_estado1, HIGH);//Indica estado auto
break;
}
else if(numero==52){
lcd.clear();
lcd.print("Manual ON");
estado=1;//modo manual
digitalWrite(LED_estado2, HIGH);//Indica estado manual
break;
}
}
}//Fin while 1
lcd.setCursor(0,1);
lcd.print("Selec. Enter(*)");
numero=lectura_teclado();
while(numero!=41)//Debe pulsar el boton (*) para seguir
numero = lectura_teclado();
}//Fin
//Permite la seleccion del sector para inicializar
void Selec_sector(){
lcd.clear();
lcd.print("Planta Alta (C)");

lcd.setCursor(0,1);
lcd.print("Planta Baja (D)");
void Inicializacion(){
while(1){//53 boton C........54 boton D
lcd.print("Instrucciones");
numero=lectura_teclado();
delay(1000);
if ((boton!=99)&&(numero>=0)){//Condicion evita entrar al codigo sin presionar
Selec_modo();//Funcion para seleccionar modo auto o manual
un boton
if(estado==1)//Si es manual debe seleccionar sector
if(numero==53){
Selec_sector();//Funcion para seleccionar el sector
lcd.clear();
lcd.clear();
lcd.print("Planta Alta");
lcd.print("Continue");
transistorPin=6;
lcd.setCursor(0,1);
break;
lcd.print("Selec. Enter(*)");
}
while(numero!=41)//Debe pulsar el boton (*) para seguir
else if(numero==54){
numero = lectura_teclado();
lcd.clear();
if(piso==53)
lcd.print("Planta Baja");
LCD_PlantaAlta(atenuacion_planta_alta);
if(piso==54)
transistorPin=5;
LCD_PlantaBaja(atenuacion_planta_baja);
break;
}
//Funcion de escritura a LCD
}
void LCD_PlantaAlta(int
atenuacion_PA){
lcd.clear();
}
lcd.print("Planta Alta");
lcd.setCursor(0,1);
boton=99;
lcd.print("Atenuacion");
}
lcd.setCursor(11,1);
lcd.print(atenuacion_PA);
piso=numero;
lcd.setCursor(14, 1);
lcd.print("%");
lcd.setCursor(0,1);
Serial.println("Funcion LCD");
lcd.print("Selec. Enter(*)");
Serial.println("Planta
Alta");
Serial.println("Atenuacion");
while(numero!=41)//Debe pulsar el boton (*) para seguir
Serial.print(atenuacion_PA);
Serial.println("
%");
numero = lectura_teclado();
}
}

Serial.print(atenuacion_PA);
Serial.println(" %");
}
void LCD_PlantaBaja(int atenuacion_PB){
lcd.clear();
lcd.print("Planta Baja");
lcd.setCursor(0,1);
lcd.print("Atenuacion");
lcd.setCursor(11,1);
lcd.print(atenuacion_PB);
lcd.setCursor(14, 1);
lcd.print("%");
Serial.println("Funcion LCD");
Serial.println("Planta Baja");
Serial.println("Atenuacion");
Serial.print(atenuacion_PB);
Serial.println(" %");
}
//Funcion sensor de movimiento
void Pir(){//Lectura sensor PIR
val = digitalRead(pirPin1); // Pir 1
val2= digitalRead(pirPin2); // Pir 2
if (val == HIGH) {
// check if the input is HIGH
LDR();
//digitalWrite(ledPin, HIGH); // turn LED ON
pirState = HIGH;
Serial.println("Planta baja ON");
}

if (valor_analogico_teclado<=(643+tolerancia) &&
valor_analogico_teclado>=(643-tolerancia)) boton = 2;
if (valor_analogico_teclado<=(501+tolerancia) &&
else if(val == LOW) {
valor_analogico_teclado>=(501-tolerancia)) boton = 3;
digitalWrite(ledPin, LOW); // turn LED OFF
if (valor_analogico_teclado<=(799+tolerancia) &&
valor_analogico_teclado>=(799-tolerancia))
boton = 4;
pirState = LOW;
if
(valor_analogico_teclado<=(610+tolerancia)
&&
Serial.println("Planta
baja OFF");
valor_analogico_teclado>=(610-tolerancia)) boton = 5;
}
if (valor_analogico_teclado<=(480+tolerancia) &&
if (val2 == HIGH) {
// check if the input
is HIGH
valor_analogico_teclado>=(480-tolerancia))
boton
= 6;
LDR2();
if
(valor_analogico_teclado<=(730+tolerancia)
&&
//digitalWrite(ledPin2,
HIGH); // turn LED ON
valor_analogico_teclado>=(730-tolerancia))
boton = 7;
pirState2 = HIGH;
Serial.println("Planta alta ON");
if (valor_analogico_teclado<=(569+tolerancia) &&
}
valor_analogico_teclado>=(569-tolerancia)) boton = 8;
else if(val2 == LOW) {
if (valor_analogico_teclado<=(454+tolerancia) &&
valor_analogico_teclado>=(454-tolerancia))
digitalWrite(ledPin2, LOW); // turn LED OFFboton = 9;
if
(valor_analogico_teclado<=(691+tolerancia)
&&
pirState2
= LOW;
valor_analogico_teclado>=(691-tolerancia)) boton = 41; //*
Serial.println("Planta alta OFF");
if (valor_analogico_teclado<=(439+tolerancia) &&
}
valor_analogico_teclado>=(439-tolerancia))
boton = 42; //#
} if (valor_analogico_teclado<=(336+tolerancia2) &&
valor_analogico_teclado>=(336-tolerancia2)) boton = 51; //(A) estado automatico
//Funcion teclado
intiflectura_teclado(){
(valor_analogico_teclado<=(326+tolerancia2) &&
if(analogRead(entrada_analogica_teclado)>10){
valor_analogico_teclado>=(326-tolerancia2))
boton = 52; //(B) estado manual
valor_analogico_teclado = analogRead(entrada_analogica_teclado);
if
(valor_analogico_teclado<=(315+tolerancia2) &&delay(1);
while(analogRead(entrada_analogica_teclado)>10)
valor_analogico_teclado>=(315-tolerancia2))
boton = 53; //C planta alta
int tolerancia = 10;
int tolerancia2 = 5;
if (valor_analogico_teclado<=(306+tolerancia2) &&
if (valor_analogico_teclado<=(545+tolerancia) &&
valor_analogico_teclado>=(306-tolerancia2)) boton = 54; //D planta baja
valor_analogico_teclado>=(545-tolerancia)) boton = 0;
if (valor_analogico_teclado<=(857+tolerancia)
&&
return
boton;
valor_analogico_teclado>=(857-tolerancia))
boton = 1;
}
}
//Funcion LDR
void LDR() {

sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
sensorValue = map(sensorValue, 1023, 300 , 0, 255);
if(sensorValue <=41)
sensorValue=0;
if(sensorValue >=255)
sensorValue=255;
analogWrite(ledPin, sensorValue);
}
//Funcion LDR2
void LDR2() {
sensorValue2 = analogRead(sensorPin2);
sensorValue2 = map(sensorValue2, 1023, 300 , 0, 255);
if(sensorValue2 <=41)
sensorValue2=0;
if(sensorValue2 >=255)
sensorValue2=255;
analogWrite(ledPin2, sensorValue2);
}
//Inicializacion internet
void inicio_internet(){
//Serial.begin(9600);
Ethernet.begin(mac, ip);
server.begin();
state="OFF";
state1="OFF";
}

//Programa internet
else if(readString.substring(LED,LED+5)=="LED=F"){
void internet(){
digitalWrite(PIN_LED,LOW);
// listen for incoming clients
if (PIN_LED==5)
EthernetClient client = server.available();
state="OFF";
if (client) {
else if (PIN_LED==6)
state1="OFF";
boolean currentLineIsBlank
= true;
}
while (client.connected())
{
// Programa para pagina
web
if (client.available())
{
client.println("HTTP/1.1
200 OK");
charclient.println("Content-Type:
c = client.read();
text/html");
if(readString.length()<30)
client.println();
{

client.println("<html>");

readString.concat(c);
client.println("Integrantes: Santiago Sarmiento, ");
}

client.println("

David Zuniga, ");

if (c ==
'\n' && currentLineIsBlank)
{
client.println("
Paola Chamba,
");
int LED=readString.indexOf("LED=");
client.println("
Leonardo Jaramillo, ");
int PIN=readString.indexOf("PIN=");
client.println("
Jason Tituana, ");
if(readString.substring(PIN,PIN+5)=="PIN=5"){
client.println("
Bryan Gordillo");
PIN_LED=5;
client.println("<title>Proyecto Sistemas Embebidos</title>");
} client.println("</head>");
else
if(readString.substring(PIN,PIN+5)=="PIN=6"){
client.println("<body
width=100% height=100%>");
PIN_LED=6;
client.println("<center>");
client.println("<h1>Proyecto Sistemas Embebidos</h1>");
}
client.println("<br><br>");
if(readString.substring(LED,LED+5)=="LED=T"){
client.println("Sector seleccionado: ");
digitalWrite(PIN_LED,HIGH);
if(PIN_LED==5)
if (PIN_LED==5)
client.println("Planta Baja");
state="ON";
if(PIN_LED==6)
else if (PIN_LED==6)
client.println("Planta Alta");
state1="ON";
//client.println(PIN_LED);
}

client.println("<br><br>");
client.println("<input type=submit value=Planta_Baja
style=width:175px;height:65px onClick=location.href='./?PIN=5\'>");
client.println("<input type=submit value=Planta_Alta
style=width:175px;height:65px onClick=location.href='./?PIN=6\'>");
client.println("<br><br><br>");
client.println("Estado de la lampara: ");
if(PIN_LED==5)
client.println(state);
else if (PIN_LED==6) //Borrar la condicion, es innecesaria
client.println(state1);
client.println("<br><br>");
client.println("<input type=submit value=ON style=width:200px;height:75px
onClick=location.href='./?LED=T\'>");
client.println("<input type=submit value=OFF
style=width:200px;height:75px onClick=location.href='./?LED=F\'>");
client.println("</center>");
client.println("</body>");
client.println("</html>");
client.stop();
readString="";
}
}
}
}
}

Cdigo realizado en Arduino 1.0.5 [Autores]

Proceso de fabricacin

Primeramente se procedido a la simulacin de todo el sistema de


iluminacin con los respectivos sensores, con el atmega 328p en Proteus
8
Obtenido resultados positivos en las simulaciones se procedi a armar el
circuido en ProtoBoard, para verificacin de su correcto funcionamiento
Una vez comprobado el resultado en ProtoBoard, se procedi al diseo e
implementacin en una placa.

Posteriormente se organiz los sensores en la placa.


La interfaz web realizada nos permitir controlar el estado de los LEDs a
travs de la Web.

Consecutivamente se busc la manera de acoplar los sensores y


dispositivos.

Finalmente se realiz el acondicionamiento de todo el sistema en una


maqueta.

Proyecto finalizado.

Presupuesto
A continuacin se describe cada uno de los materiales, costos y cantidad que
se ha usado para el desarrollo del proyecto:

Cantida
d
1
2
1
1
1
12
1
2
1
1
1
1
1
1
1

Descripcin
Maqueta
Sensor Pir Me003
Teclado matricial 4x4
Atmega 328P
Materiales arduino standalone
Resistores
LED's 12V (tira)
Zcalos
LCD 16x2
Cable gemelo
Transformador 110V-12V
(1A)
Regulador 7812
Regulador 7805
Capacitor 2200 uF
Ethernet Shield

TOTAL
Conclusiones

Precio
unitario
20,00
9,00
6,50
6,50
2,00

Total
20,00
18,00
6,50
6,50
2,00

0,05
3,00
0,90
7,00
0,30

0,60
3,00
1,80
7,00
0,30

8,00

8,00

2,00
2,00
0,60
28,00

2,00
2,00
0,60
28,00
$
106,30

La implementacin de este tipo de sistema ayudan al ahorro de energa,


utilizando este recurso de la mejor manera.
La comodidad y confort que brinda este sistema, lo hace llamativo y
comercial.
La comunicacin del ATmega328 P a travs de la Web tiene muchas
ventajas, una de ellas se hace referencia en el proyecto, desarrollando un
sistema que posibilite el acceso, mediante una conexin a internet, a
controlar el estado de las luminarias LED.
Se debe tener en consideracin el nmero de pines del microcontrolador
ATmega328 P para la mayor optimizacin posible, ya que nos limitamos a 20
pines para su uso.

Bibliografa consultada
[1] Adrian Javier Len; Honolulu; Hawai; 2007; LIGHTING [En lnea] Disponible
en:
http://www.aiu.edu/applications/DocumentLibraryManager/upload/Lighting
%20Adrian%20Leon.pdf [Consulta mayo 2014]
[2] lvarez, Holgun, Serrano; Guayaquil; Ecuador; 2007; Diseo de una
Instalacin Domtica en un Condominio para el Control de Seguridad e
Iluminacin mediante la Tecnologa LonWorks [En lnea] Disponible en:
http://www.cib.espol.edu.ec/digipath/d_tesis_pdf/d-35940.pdf
[Consulta
mayo 2014]

[3] DomoDesk; DomoDesk S.L; Valencia; Espaa; 2002; Qu es Domtica?


[En lnea] Disponible en:
http://www.domodesk.com/que-es-domotica [Consulta mayo 2014]

Você também pode gostar