Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Embebidos
INTEGRANTES
TUTOR
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.
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
Objetivo Principal
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.
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(*)");
}
//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
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
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]