Está en la página 1de 19

UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

La Universidad Católica de Loja

Sistemas Embebidos

“Sistema digital de automatización y control de luminarias LED, aplicado a


ambientes domésticos”

INTEGRANTES

Paola Cecibel Chamba Agila


Bryan Antonio Gordillo Poma
Leonardo Antonio Jaramillo Rodríguez
Santiago René Sarmiento Sotomayor
Jason Mauricio Tituaña Castillo
José David Zúñiga Vivanco

TUTOR

Ing. Christian Loján Herrera

Abril 2014 – Agosto 2014


Planteamiento del Problema

Encontrar métodos eficientes con los que se pueda aprovechar las condiciones ambientales, en
este caso la luz solar, de tal manera que se controle automáticamente las luminarias del hogar, la
intensidad de la iluminación tanto manual como automáticamente, teniendo como resultado
ahorro de energía y aprovechamiento de las fuentes de energía renovables.

Delimitación del problema

El siguiente proyecto está enfocado a trabajar en una vivienda, en el cual se empleará un sistema
de control automático 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 energía 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 automatización 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 energía y a su
vez el aprovechamiento de las condiciones ambientales.

Mediante un dimmer se pretende controlar la intensidad luminosa, según las necesidades del
usuario, el mismo que podrá ser manipulado de manera automática, como también manual.

Justificación de la investigación

Actualmente las personas requieren de sistemas que proporcionen comodidad y eficiencia


energética para sus hogares, oficinas, estudios de cualquier lugar en donde se encuentren. Gracias
a la innovación de sistemas de domótica, es posible obtener tecnologías de control de dispositivos
electrónicos sin la necesidad de la presencia de un usuario, o, con su consentimiento para
establecer características del dispositivo a su agrado.
Sin duda estos sistemas de control de luminaria ofrecen más comodidad, permitiendo regular la
intensidad luminosa de todo su hogar según el sector en el que se encuentre, manual o
automáticamente. Como consecuencia de una atenuación automática, el sistema hará eficiente el
consumo energético del lugar donde sea instalado.
Domótica es una de las áreas que facilita los procesos de automatización y operación de
mecanismos electrónicos, logrando de esa manera una unión de las diferentes tecnologías que nos
permiten mejorar de cierta forma nuestro estilo de vida, es por esta razón que se busca
implementar un sistema domótico que contribuya con la eficiencia energética mediante la opción
de atenuación automática, o el control manual mediante un dispositivo remoto como también un
panel local. De este modo se ofrece más comodidad al usuario.
Objetivos de la investigación

Objetivo Principal

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


ATmega328P; originando un sistema de automatización de luminarias.

Objetivos Específicos

 Mostrar cómo se usa la domótica para ayudar en la disminución del consumo energético,
incrementación del confort en las casas por medio de sistemas de iluminación.

 Desarrollar un software con una interfaz amigable que permita el control de las luminarias
a través de internet, y un panel dentro de la residencia para control.

Características Del Proyecto:

SENSORES HARDWARE
Atmega 328P
Sensor Pir Me003 Teclado matricial 4x4
LCD 16x2
Ethernet Shield
Sensor LDR
LED's 12V (tira)
Diagramas de flujo:

Esquematización de funcionamiento.
Código:

#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
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; // aux para pir
int val2= 0; // aux para pir
//Variables LDR
const int sensorPin = A2;
const int sensorPin2 = A3;
const int ledPin = 5;
const int ledPin2 = 6;
int sensorValue = 0;
int sensorValue2 = 0;
//Aux
int atenuacion = 0;//Valor de PWM
int atenuacionsalida = 0;//Valor de PWM
//Variables Ethernet shield
int PIN_LED;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,6);
EthernetServer server(80);
String readString=String(30);//lee caracteres
String state=String(3);
String state1=String(3);
void setup() {
Serial.begin(9600);
Inicio();//Inicio general pines y lcd
Inicializacion();
inicio_internet();
}
void loop() {
internet();
numero = lectura_teclado();//Lectura teclado
if ((boton!=99)&&(numero>=0)){//Engloba todo el codigo
if(numero==51)
estado=0;
else if (numero==52)
estado=1;
Serial.print("numero ");
Serial.println(numero);
Serial.print("estado ");
Serial.println(estado);
if (estado==0){//Modo Automatico
if(aux==0){
digitalWrite(LED_estado2,LOW);
digitalWrite(LED_estado1,HIGH);
lcd.clear();
lcd.print("Modo Automatico");
aux=1;
}
while(1){
Pir();
numero=lectura_teclado();
if((boton!=99)&&(numero>=0)){
if(numero==52){
boton=99;
break;
}
}
}
case 2:
atenuacion = (valor[0]*10) + valor[1];// sentencias
break;
case 3:
atenuacion = (valor[0]*100)+(valor[1]*10)+valor[2];// sentencias
break;
}
atenuacionsalida = (atenuacion * 255)/100;
if(atenuacion >= 101){// Condicion para modulacion porcentual max 100%
atenuacionsalida = 255;
atenuacion = 100;
}
analogWrite(transistorPin, atenuacionsalida);//Salida de señal PWM a LED's
if(transistorPin == 5){
atenuacion_planta_baja = atenuacion;
LCD_PlantaBaja(atenuacion_planta_baja);//llamando a funcion de LCD
}
else if(transistorPin == 6){
atenuacion_planta_alta = atenuacion;
LCD_PlantaAlta(atenuacion_planta_alta);//Llamando a la funcion para escritura en LCD
}
cont = 0;
}// Fin Conversor cadena a entero
}//Fin modo manual de prueba
}
boton=99;
}// Fin loop
//Inicia valores generales
void Inicio(){
pinMode(6, OUTPUT);//salida para LED's 12V
pinMode(5, OUTPUT);//salida para LED's 12V
digitalWrite(6, LOW);//inicializacion estado bajo
digitalWrite(5, LOW);//inicializacion estado bajo
pinMode(LED_estado1, OUTPUT);//estado de modo
pinMode(LED_estado2, OUTPUT);//estado de modo
pinMode(pirPin1, INPUT);//sensor pir entrada
pinMode(pirPin2, INPUT);//sensor pir entrada
digitalWrite(LED_estado2, LOW);//inicializacion estado bajo
digitalWrite(LED_estado1, LOW);//inicializacion estado bajo
lcd.init();// initialize the lcd
lcd.backlight();
}//Fin
//Seleccion de estado auto o manual
void Selec_modo(){
lcd.clear();
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)");
while(1){//53 boton C........54 boton D
numero=lectura_teclado();
if ((boton!=99)&&(numero>=0)){//Condicion evita entrar al codigo sin presionar un boton
if(numero==53){
lcd.clear();
lcd.print("Planta Alta");
transistorPin=6;
break;
}
else if(numero==54){
lcd.clear();
lcd.print("Planta Baja");
transistorPin=5;
break;
}
}
boton=99;
}
piso=numero;
lcd.setCursor(0,1);
lcd.print("Selec. Enter(*)");

while(numero!=41)//Debe pulsar el boton (*) para seguir


numero = lectura_teclado();
}
//Programa de inicializacion de datos
void Inicializacion(){
lcd.print("Instrucciones");
delay(1000);
Selec_modo();//Funcion para seleccionar modo auto o manual
if(estado==1)//Si es manual debe seleccionar sector
Selec_sector();//Funcion para seleccionar el sector
lcd.clear();
lcd.print("Continue");
lcd.setCursor(0,1);
lcd.print("Selec. Enter(*)");
while(numero!=41)//Debe pulsar el boton (*) para seguir
numero = lectura_teclado();
if(piso==53)
LCD_PlantaAlta(atenuacion_planta_alta);
if(piso==54)
LCD_PlantaBaja(atenuacion_planta_baja);

}
//Funcion de escritura a LCD
void LCD_PlantaAlta(int atenuacion_PA){
lcd.clear();
lcd.print("Planta Alta");
lcd.setCursor(0,1);
lcd.print("Atenuacion");
lcd.setCursor(11,1);
lcd.print(atenuacion_PA);
lcd.setCursor(14, 1);
lcd.print("%");
Serial.println("Funcion LCD");
Serial.println("Planta Alta");
Serial.println("Atenuacion");
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");
}
else if(val == LOW) {
digitalWrite(ledPin, LOW); // turn LED OFF
pirState = LOW;
Serial.println("Planta baja OFF");
}
if (val2 == HIGH) { // check if the input is HIGH
LDR2();
//digitalWrite(ledPin2, HIGH); // turn LED ON
pirState2 = HIGH;
Serial.println("Planta alta ON");
}
else if(val2 == LOW) {
digitalWrite(ledPin2, LOW); // turn LED OFF
pirState2 = LOW;
Serial.println("Planta alta OFF");
}
}
//Funcion teclado
int lectura_teclado(){
if(analogRead(entrada_analogica_teclado)>10){
valor_analogico_teclado = analogRead(entrada_analogica_teclado);
while(analogRead(entrada_analogica_teclado)>10) delay(1);
int tolerancia = 10;
int tolerancia2 = 5;
if (valor_analogico_teclado<=(545+tolerancia) && valor_analogico_teclado>=(545-
tolerancia)) boton = 0;
if (valor_analogico_teclado<=(857+tolerancia) && valor_analogico_teclado>=(857-
tolerancia)) boton = 1;
if (valor_analogico_teclado<=(643+tolerancia) && valor_analogico_teclado>=(643-
tolerancia)) boton = 2;
if (valor_analogico_teclado<=(501+tolerancia) && valor_analogico_teclado>=(501-
tolerancia)) boton = 3;
if (valor_analogico_teclado<=(799+tolerancia) && valor_analogico_teclado>=(799-
tolerancia)) boton = 4;
if (valor_analogico_teclado<=(610+tolerancia) && valor_analogico_teclado>=(610-
tolerancia)) boton = 5;
if (valor_analogico_teclado<=(480+tolerancia) && valor_analogico_teclado>=(480-
tolerancia)) boton = 6;
if (valor_analogico_teclado<=(730+tolerancia) && valor_analogico_teclado>=(730-
tolerancia)) boton = 7;
if (valor_analogico_teclado<=(569+tolerancia) && valor_analogico_teclado>=(569-
tolerancia)) boton = 8;
if (valor_analogico_teclado<=(454+tolerancia) && valor_analogico_teclado>=(454-
tolerancia)) boton = 9;
if (valor_analogico_teclado<=(691+tolerancia) && valor_analogico_teclado>=(691-
tolerancia)) boton = 41; //*
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
if (valor_analogico_teclado<=(326+tolerancia2) && valor_analogico_teclado>=(326-
tolerancia2)) boton = 52; //(B) estado manual
if (valor_analogico_teclado<=(315+tolerancia2) && valor_analogico_teclado>=(315-
tolerancia2)) boton = 53; //C planta alta
if (valor_analogico_teclado<=(306+tolerancia2) && valor_analogico_teclado>=(306-
tolerancia2)) boton = 54; //D planta baja
return boton;
}
}
//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
void internet(){
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if(readString.length()<30)
{
readString.concat(c);
}
if (c == '\n' && currentLineIsBlank) {
int LED=readString.indexOf("LED=");
int PIN=readString.indexOf("PIN=");
if(readString.substring(PIN,PIN+5)=="PIN=5"){
PIN_LED=5;
}
else if(readString.substring(PIN,PIN+5)=="PIN=6"){
PIN_LED=6;
}
if(readString.substring(LED,LED+5)=="LED=T"){
digitalWrite(PIN_LED,HIGH);
if (PIN_LED==5)
state="ON";
else if (PIN_LED==6)
state1="ON";
}
else if(readString.substring(LED,LED+5)=="LED=F"){
digitalWrite(PIN_LED,LOW);
if (PIN_LED==5)
state="OFF";
else if (PIN_LED==6)
state1="OFF";
}
// Programa para pagina web
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<html>");
client.println("Integrantes: Santiago Sarmiento, ");
client.println(" David Zuniga, ");
client.println(" Paola Chamba, ");
client.println(" Leonardo Jaramillo, ");
client.println(" Jason Tituana, ");
client.println(" Bryan Gordillo");
client.println("<title>Proyecto Sistemas Embebidos</title>");
client.println("</head>");
client.println("<body width=100% height=100%>");
client.println("<center>");
client.println("<h1>Proyecto Sistemas Embebidos</h1>");
client.println("<br><br>");
client.println("Sector seleccionado: ");
if(PIN_LED==5)
client.println("Planta Baja");
if(PIN_LED==6)
client.println("Planta Alta");
//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="";
}
}
}
}
}
Proceso de fabricación

 Primeramente se procedido a la simulación de todo el sistema de iluminación 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 verificación de su correcto funcionamiento
 Una vez comprobado el resultado en ProtoBoard, se procedió al diseño e implementación
en una placa

 Posteriormente se organizó los sensores en la placa.


 La interfaz web realizada nos permitirá controlar el estado de los LED’s a través 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 continuación se describe cada uno de los materiales, costos y cantidad que se ha usado para el
desarrollo del proyecto:

Precio
Cantidad Descripción unitario Total
1 Maqueta 20,00 20,00
2 Sensor Pir Me003 9,00 18,00
1 Teclado matricial 4x4 6,50 6,50
1 Atmega 328P 6,50 6,50
1 Materiales arduino standalone 2,00 2,00
12 Resistores 0,05 0,60
1 LED's 12V (tira) 3,00 3,00
2 Zócalos 0,90 1,80
1 LCD 16x2 7,00 7,00
1 Cable gemelo 0,30 0,30
1 Transformador 110V-12V (1A) 8,00 8,00
1 Regulador 7812 2,00 2,00
1 Regulador 7805 2,00 2,00
1 Capacitor 2200 uF 0,60 0,60
1 Ethernet Shield 28,00 28,00
TOTAL $ 106,30

Conclusiones

 La implementación de este tipo de sistema ayudan al ahorro de energía, utilizando este


recurso de la mejor manera.
 La comodidad y confort que brinda este sistema, lo hace llamativo y comercial.
 La comunicación del ATmega328 P a través de la Web tiene muchas ventajas, una de ellas se
hace referencia en el proyecto, desarrollando un sistema que posibilite el acceso, mediante una
conexión a internet, a controlar el estado de las luminarias LED.
 Se debe tener en consideración el número de pines del microcontrolador ATmega328 P para la
mayor optimización posible, ya que nos limitamos a 20 pines para su uso.

Bibliografía consultada

[1] Adrian Javier León; Honolulu; Hawai; 2007; “LIGHTING” [En línea] Disponible en:
http://www.aiu.edu/applications/DocumentLibraryManager/upload/Lighting%20Adrian%20Le
on.pdf [Consulta mayo 2014]
[2] Álvarez, Holguín, Serrano; Guayaquil; Ecuador; 2007; “Diseño de una Instalación Domótica en
un Condominio para el Control de Seguridad e Iluminación mediante la Tecnología LonWorks”
[En línea] Disponible en:
http://www.cib.espol.edu.ec/digipath/d_tesis_pdf/d-35940.pdf [Consulta mayo 2014]
[3] DomoDesk; DomoDesk S.L; Valencia; España; 2002; “¿ Qué es Domótica?” [En línea] Disponible
en:
http://www.domodesk.com/que-es-domotica [Consulta mayo 2014]

También podría gustarte