Escolar Documentos
Profissional Documentos
Cultura Documentos
Director:
Ph.D. Oscar Gmez Carmona
Nota de aceptacin:
Pereira/Risaralda
28 de enero de 2016
Agradecimientos
Agradezco a mis padres por que gracias su dedicacin y esfuerzo he logrado esta meta; a
Duban Ocampo por su ayuda incondicional en el desarrollo del proyecto; a mi director por su
gua y esfuerzo para llevar a cabo este trabajo; a los docentes del programa de Tecnologa
Elctrica por su aporte acadmico y propio durante toda mi formacin acadmica como
Tecnlogo y dems personas de las cuales obtuve siempre un buen apoyo para la terminacin
del Trabajo.
III
Contenido
1. Sistemas Domticos
7
7
3. Objetivos
3.1. Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Objetivos Especficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
9
4. Arduino
4.1. Arduino Yn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1. Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
11
12
5. Implementacin
5.1. Circuito Electrnico de Potencia . . . . . . . . . . . .
5.1.1. Puente Rectificador de Diodos . . . . . . . . .
5.1.2. Optoacoplador (4N25) . . . . . . . . . . . . .
5.1.3. Reles Electromagnticos y Transistor (2N3904)
5.2. PCB (Printed Circuit Board) . . . . . . . . . . . . .
5.3. Interruptores . . . . . . . . . . . . . . . . . . . . . .
5.4. Conexin . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
15
16
17
19
20
21
6. Programacin
6.1. Arduino . . . . . .
6.2. App Web . . . . .
6.2.1. HTML . .
6.2.2. CSS . . .
6.2.3. JavaScript
6.2.4. Bootstrap
6.2.5. jQuery . .
6.2.6. AJAX . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
28
29
29
30
30
31
31
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7. Funcionamiento
33
8. Conclusiones y Recomendaciones
39
9. Bibliografa
41
V
Anexos
43
A. Cdigos Usados
A.1. Cdigo Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2. Cdigo AppWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
45
48
VI
Figuras
4.1. Arduino Yn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Diagrama de bloques placa Arduino Yn . . . . . . . . . . . . . . . . . .
12
13
.
.
.
.
.
.
.
.
.
.
.
.
.
15
16
16
17
17
18
19
20
20
21
21
22
23
31
32
33
33
34
34
35
35
35
36
36
37
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
VII
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Glosario
Entorno de Desarrollo (IDE): Un entorno de desarrollo integrado, es un entorno de
programacin que ha sido empaquetado como un programa de aplicacin, es decir, consiste
en un editor de cdigo, un compilador, un depurador y un constructor de interfaz grfica
(GUI).
Los IDE proveen un marco de trabajo amigable para la mayora de los lenguajes de
programacin tales como C++, PHP, Python, Java, C, Delphi, Visual Basic, etc. En algunos
lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecucin, en donde se
permite utilizar el lenguaje de programacin en forma interactiva, sin necesidad de trabajo
orientado a archivos de texto.
Es posible que un mismo IDE pueda funcionar con varios lenguajes de programacin.
Este es el caso de Eclipse, al que mediante plagios se le puede aadir soporte de lenguajes
adicionales. Un IDE debe tener la caracterstica multiplataforma, soporte para diversos lenguajes de programacin, integracin con sistemas de control de versiones, reconocimiento
de sintaxis, depurador, importar y exportar proyectos, mltiples idiomas, manual de usuarios
y ayuda, entre otras [1].
Open-Source: Cdigo abierto es la expresin con la que se conoce al software distribuido y desarrollado libremente. Se focaliza ms en los beneficios prcticos (acceso al cdigo
fuente) que en cuestiones ticas o de libertad que tanto se destacan en el software libre [2].
Atmel: Atmel es una compaa de semiconductores, fundada en 1984. Su lnea de productos incluye microcontroladores, dispositivos de radiofrecuencia, memorias EEPROM y
Flash. Atmel sirve a los mercados de la electrnica de consumo, comunicaciones, computadores, redes, electrnica industrial, equipos mdicos, automotriz, aeroespacial y militar. Es
una industria lder en sistemas seguros, especialmente en el mercado de las tarjetas seguras
[3].
Open-Wrt: Es un firmware basado en una distribucin de Linux, programado para dispositivos embebidos tales como routers. Su desarrollo fue impulsado gracias a la licencia
GPL, que obliga a todos aquellos que modificaran y mejoraran el cdigo a liberarlo para
contribuir con su desarrollo [4].
REST (Representational State Transfer): La Transferencia de Estado Representacional es un estilo de arquitectura de software usado ampliamente para describir cualquier
interfaz entre sistemas que utilicen HTTP, obtener datos o indicar la ejecucin de operaciones sobre los datos en cualquier formato [5].
1
Resumen
En este trabajo se muestra el desarrollo y la implementacin del control de encendido y
apagado de varias salidas de iluminacin por medio de la placa de desarrollo Arduino Yn
que permite la conexin a internet de esta plataforma va WiFi, desde nuestro dispositivo
mvil a travs de una aplicacin web, con una tarjeta electrnica que mantiene la posibilidad
fsica de encender o apagar estas salidas de iluminacin.
Palabras Clave: Control ON/OFF de Iluminacin, Domtica, WiFi, Arduino, Dispositivo
Mvil.
Captulo 1
Sistemas Domticos
El hombre siempre ha ideado elementos que hacen ms simple su vida y gracias al avance tecnolgico del siglo pasado y al nacimiento de la electrnica, tenemos la capacidad de
maximizar la eficiencia y el control sobre diferentes procesos y artefactos de nuestra vida
cotidiana sin importar en qu lugar nos encontremos.
El conjunto de tecnologas aplicadas al control y la automatizacin de una vivienda o un
recinto cerrado, es lo que se conoce actualmente como domtica. Esta permite una gestin
eficiente del uso de la energa, generando seguridad y confort adems de comunicacin entre
el usuario y el sistema [9].
La domtica nos facilita implementar sistemas conformado por sensores, actuadores y
controladores, aportndonos grandes beneficios tales como: el ahorro energtico, el enriquecimiento y potenciacin de la red de comunicaciones, mejoramiento de la seguridad personal,
la gestin remota de instalaciones y electrodomsticos, incorporacin de cualquier dispositivo que no sea inteligente al sistema obteniendo un nivel de confort excelente aumentando
nuestra calidad de vida.
El ahorro energtico consiste en un concepto que depende de la demanda energtica del
hogar y de el tipo de dispositivos que existan en ella, permitiendo lograr un ahorro considerable al sustituir aquellos dispositivos que no usan debidamente la energa elctrica, y
haciendo una geston eficiente con ellos o promoviendo el uso de energas alternativas como
la obtenida del sol.
La red de comunicaciones es la que permite realmente la automatizacin del hogar, ya
que con base a esta infraestructura se puede tener un grado mayor o menor de automatizacin. Esta red puede ser cableada, inalmbrica (bluetooth, WiFi, panel de acceso) o a
travs de internet (PC, laptop, smartphone).
Desde el punto de vista de la seguridad del hogar, se debe tener en cuenta la integridad
fsica del usuario, adems de sus bienes patrimoniales. Entre las acciones que se deben tomar
para brindar seguridad est la de simulacin de prescencia en el caso de que la casa vaya a
quedar sola por largo tiempo, adems de detectores de intrusos y cierre de puertas y ventanas en intervalos de tiempo especficos, detectores de calor, humo, gas, agua, monxido de
5
Captulo 2
Control de Iluminacin via WiFi
La domtica puede estar integrada por medio de redes internas y externas de comunicacin tanto cableadas como inalmbricas, teniendo un control desde cierta ubicacin dentro
y fuera del hogar.
Uno de los avances en la domtica es el control de iluminacion de una manera remota
o centralizada, mediante un dispositivo conectado al sistema que permita el encendido y
apagado de las luces de un hogar, ademas de la regulacion de la intesidad lumnica. Esto
permite un mayor grado de confort hasta el punto de crear ambientes segn la necesidad o
gusto del usuario.
Estos sistemas a traves del tiempo han tenido muchos avances, como la implementacin de sistema de sensores que permitan determinar la presencia de personas en el lugar y
debido a ello encender o apagar las luminarias de manera autnoma. Otra de las tareas que
se puede llegar a realizar en control de la iluminacin es la programacin de instrucciones
al sistema por rutinas de programacion segun el requirimiento de una persona.
En la bsqueda de nuevos desarrollos y la necesidad de aumentar el grado de confort
en el hogar, se desea tener a la mano la capacidad de poder centralizar todo el control de
iluminacin en la vivienda usando dispositivos mviles. Personas con limitaciones fsicas se
beneficiaran con este sistema ya que podran contar con un dispositivo mvil que controle
la iluminacin de su entorno evitando el desplazamiento por todo el lugar para encender o
apagar las luces.
2.1.
Propuesta
Captulo 3
Objetivos
3.1.
Objetivo General
3.2.
Objetivos Especficos
Captulo 4
Arduino
Arduino es una plataforma electrnica en cdigo abierto basada en un hardware y software fcil de usar. Su hardware consiste en una placa con microcontrolador Atmel AVR;
como el ATmega168, ATmega328, ATmega2560; el cual maneja puertos anlogos-digitales
de entrada-salida. Su software consiste en un entorno de desarrollo que implementa el lenguaje de alto nivel Processing similar a C++ y un bootloader ejecutado en la placa [11].
Arduino no solo puede ser utilizado con el entorno de desarrollo propio, sino que es
posible utilizarse con software intermedio con el que podamos aprovechar la transmisin
serial de datos, como por ejemplo Matlab. Para su programacin cuenta con una cantidad
de libreras que nos permiten usar caractersticas adicionales de las placas, como la librera
Ethernet para la conexin a internet de la placa, LiquidCrystal para el manejo de una LCD
2x16, Servo para el control de servomotores, SoftwareSerial para usar pines del arduino como
pines de comunicacin serial, Stepper para el control de motores paso a paso, entre otras
[12].
4.1.
Arduino Yn
El Arduino Yn es una placa basada en el microcontrolador ATmega32u4 y el chip Atheros AR9331 que cuenta con un sistema WiFi incorporado con una distribucin de Linux
Linio basada en Open-WRT. La placa tiene conexin Ethernet y WiFi incorporada, un
puerto USB-A, una ranura para micro-SD, 20 pines para entradas y salidas de las cuales
7 pueden ser usadas para PWM y 12 como entradas analgicas, un puerto micro USB,
conexin ICSP y 3 botones de reset [13].
El Arduino Yn se distingue de otras placas de Arduino por la comunicacin con la
distribucin de Linux, ofreciendo un excelente equipo en red con la facilidad de Arduino;
adems que a travs de comandos como cURL, se puede escribir cdigo en Python para
robustas interacciones.
La librera Bridge facilita la comunicacin entre los 2 procesadores, dndole a los programas en Arduino la habilidad de correr programas, comunicarse con interfaces de red y
recibir informacin del chip AR9331. El host USB, la ranura para micro-SD y las interfaces
11
4.1.1.
Caractersticas
Microcontrolador ATmega32u4
Microprocesador AR9331
Tensin de operacin 5V
Pines de IN/OUT 20
Canales PWM 7
Interfaz
ethernet
10/100Mbps
Entradas analgicas 12
Corriente por pin IN/OUT 40mA
IEEE
802.3
SRAM 2,5kB
EEPROM 1kB
14
Captulo 5
Implementacin
La realizacin de este proyecto est dividida en 2 partes, una parte encargada del control
y la interaccin con el usuario y una parte de potencia que permite la conexin entre el
control y las salidas de iluminacin, la cual hace parte del circuito ramal de la vivienda.
5.1.
5.1.1.
15
El puente rectificador es un circuito electrnico usado en la conversin de corriente alterna en corriente continua gracias al funcionamiento del diodo semiconductor. Este consiste
en cuatro diodos que convierten una seal con valores positivos y negativos en una seal
nicamente positiva. Un simple diodo permitira quedarse con la parte positiva, pero el puente permite aprovechar tambin la parte negativa obteniendo el valor absoluto de la seal
de entrada; toda esta transformacin se puede ver en la simulacin del puente rectificador
c
utilizando el software Proteus 8 Professional
2015
Labcenter Electronics, ver Figura
5.2. El puente, junto con un condensador permite convertir esta seal positiva en una seal
continua como se puede apreciar en la Figura 5.3(a) y 5.3(b)
(a) Circuito
(b) Simulacion
(a) Circuito
(b) Simulacion
5.1.2.
Optoacoplador (4N25)
la luz emitida por un diodo LED que satura un componente optoelectrnico, normalmente
en forma de fototransistor o fototriac. De este modo se combinan en un solo dispositivo
semiconductor, un fotoemisor y un fotorreceptor cuya conexin entre ambos es ptica. Estos elementos se encuentran dentro de un encapsulado que por lo general es del tipo DIP.
Se suelen utilizar para aislar elctricamente a dispositivos muy sensibles. En la Figura 5.5
podemos ver su diagrama funcional. [14]
5.1.3.
18
5.2.
La tarjeta de circuito impresa es una superficie constituida por caminos, pistas o buses
de material conductor laminadas sobre una base no conductora. El circuito impreso se utiliza
para conectar elctricamente a travs de las pistas conductoras, y sostener mecnicamente
por medio de la base un conjunto de componentes electrnicos. Las pistas son generalmente
de cobre mientras que la base se fabrica de resinas de fibra de vidrio reforzada, cermica,
plstico, tefln o polimeros como la baquelita. En la Figura 5.8 se puede ver el acabado del
circuito impreso despus de fabricada y luego de protegerla con un bao de estao lquido.
[17].
(a) Componentes
(b) Pistas
(c) Diseo
19
c
La tarjeta de circuito impreso se diseo en el software EAGLE 7.4.0
2011
Cadsof t
como se muestra en la Figura 5.7. En esta se integraron todos los elemento mencionados
en el numeral 4.1.
5.3.
Interruptores
20
5.4.
Conexin
Este circuito electrnico (Figura 5.11) hace parte de la etapa fsica la cual se encarga
de interconectar los circuitos ramales y el controlador, este se debe ubicar en un lugar estratgico de la vivienda para economizar en los conductores de circuitos ramales debido a
que en una sola tarjeta puede controlar hasta 5 cargas de iluminacion.
21
Figura 5.12: Simulacin del circuito ramal en conexin con el circuito electrnico
En la Figura 5.13 se muestra el montaje del prototipo con todos los componentes necesario para realizar el control de iluminacin, en este vemos tres salidas de iluminacin
con sus respectivos conmutables y la placa, que conectada con los conmutables, verifica si
hay presencia o ausencia de tensin, que es lo mismo que est encendida la bombilla o no,
y sobre esto encender o apagar la salida de iluminacin desde las seales provenientes del
arduino Yn segn las peticiones que se hagan desde la app web.
Se puede ver entre la placa y cada conmutable la conexin de los comunes entre ellos,
alambres amarillos y rojos, la fase que llega a los conmutables, alambre azul, el neutro que
va hasta la placa y cada salida de iluminacin, alambre blanco, y el retorno de la placa a
cada salida de ilumiancin, alambre amarillo y rojo.
22
23
Captulo 6
Programacin
6.1.
Arduino
25
pinMode ( 9 , INPUT ) ; // I l u m i n a c i o n I I
pinMode ( 8 , OUTPUT) ; // S a l i d a de
pinMode ( 6 , INPUT ) ; // I l u m i n a c i o n I I I
d i g i t a l W r i t e ( 1 3 , LOW) ;
Bridge . begin () ;
d i g i t a l W r i t e ( 1 3 , HIGH ) ;
server . listenOnLocalhost () ;
s e r v e r . begin () ;
}
En el programa principal, usando la librera YunClient, se crea una funcin para la gestin
de la conexin. Si existe un cliente conectado se procesarn las solicitudes establecidas y
cierra la conexin cuando haya terminado, colocando al final un retardo de 50ms.
void loop ( ) {
YunClient c l i e n t = s e r v e r . accept () ;
if ( client ) {
process ( c l i e n t ) ;
c l i e n t . stop () ;
}
delay (50) ;
}
Para aceptar al cliente se crea la funcin process que acepta el cliente y su argumento.
Lee el comando creando un string hasta el primer /. Despus de analizar el comando REST
lo clasifica segn su funcionalidad (digital, analog, and mode) y pasa la informacin a su
correspondiente funcin.
void p r o c e s s ( YunClient c l i e n t ) {
S t r i n g command = c l i e n t . r e a d S t r i n g U n t i l ( / ) ;
i f ( command == " d i g i t a l " ) {
digitalCommand ( c l i e n t ) ;
}
i f ( command == " a n a l o g " ) {
analogCommand ( c l i e n t ) ;
}
i f ( command == " mode " ) {
modeCommand ( c l i e n t ) ;
}
}
Si el comando es digital, crea algunas variables locales para mantener los datos del
cliente, pin y value.
void digitalCommand ( YunClient c l i e n t ) {
i n t pin , v a l u e ;
Analiza la peticin del cliente del pin a trabajar y su valor digital usando la instruccin
client.parseInt(). Si despus del pin se encuentra con un /, significa que la direccin contiene
el valor del pin, sea un 0 o un 1. Si no se encuentra un /, lee el valor del pin especificado.
26
pin = c l i e n t . parseInt () ;
i f ( c l i e n t . r e a d ( ) == / ) {
value = c l i e n t . parseInt () ;
d i g i t a l W r i t e ( pin , v a l u e ) ;
}
else {
value = digitalRead ( pin ) ;
}
Imprime el valor en el cliente y actualiza el valor actual del pin. El valor y estado del pin
se almacena como D# siendo # el numero del pin.
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t (F( " s e t to " ) ) ;
c l i e n t . println ( value ) ;
S t r i n g k e y = "D" ;
k e y += p i n ;
B r i d g e . p u t ( key , S t r i n g ( v a l u e ) ) ;
}
Lo mismo se hace para el comando analog, creando las variables para almacenar el pin
y su valor anlogo que va de 0 a 255.
v o i d analogCommand ( Y u n C l i e n t c l i e n t ) {
i n t pin , v a l u e ;
pin = c l i e n t . parseInt () ;
i f ( c l i e n t . r e a d ( ) == / ) {
value = c l i e n t . parseInt () ;
analogWrite ( pin , v a l u e ) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t (F( " s e t to analog " ) ) ;
c l i e n t . println ( value ) ;
S t r i n g k e y = "D" ;
k e y += p i n ;
B r i d g e . p u t ( key , S t r i n g ( v a l u e ) ) ;
}
else {
v a l u e = analogRead ( pin ) ;
client
client
client
client
.
.
.
.
p r i n t ( F ( " P i n A" ) ) ;
print ( pin ) ;
p r i n t (F( " reads analog " ) ) ;
println ( value ) ;
S t r i n g k e y = "A" ;
k e y += p i n ;
27
B r i d g e . p u t ( key , S t r i n g ( v a l u e ) ) ;
}
}
Se crea una tercera funcin para cambiar el comportamiento de los pines, si son entradas
o salidas, y crea una variable local para almacenar el valor del pin.
v o i d modeCommand ( Y u n C l i e n t c l i e n t ) {
int pin ;
pin = c l i e n t . parseInt () ;
Si es vlido, lo almacena como un string y segn el modo, configura el pin para funcionar
como estrada o salida e imprime en el cliente el cambio. Si no es vlido regresa un error.
S t r i n g mode = c l i e n t . r e a d S t r i n g U n t i l ( \ r ) ;
i f ( mode == " i n p u t " ) {
pinMode ( p i n , INPUT ) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t ( F ( " c o n f i g u r e d a s INPUT ! " ) ) ;
return ;
}
i f ( mode == " o u t p u t " ) {
pinMode ( p i n , OUTPUT) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t ( F ( " c o n f i g u r e d a s OUTPUT! " ) ) ;
return ;
}
c l i e n t . p r i n t ( F ( " e r r o r : i n v a l i d mode " ) ) ;
c l i e n t . p r i n t ( mode ) ;
}
6.2.
App Web
Para desarrollar este App Web se us HTML en su versin 5 para la estructura. Para
el diseo se us el framework Bootstrap basado en CSS y para interactuar con el documento HTML se us la biblioteca de jQuery basada en javascript y AJAX que nos permite
interactuar directamente con el arduino.
28
6.2.1.
HTML
6.2.2.
CSS
dimensiones, margenes, fondo, tamao del elemento entre otros. Acontinuacin vemos un
ejemplo de y aplicar estilo sirectamente al elemento del documento HTML o a travs de
atributos. [21]
. boton {
w i d t h : 100 px ;
h e i g h t : 100 px ;
b o r d e r : 0 px ;
p a d d i n g : 0 px 0 px ;
background image : u r l ( " imagen . j p g " ) ;
background s i z e : 100 px 100 px ;
}
footer {
t e x t a l i g n : c e n t e r ;
p a d d i n g bottom : 19 px ;
6.2.3.
JavaScript
Lenguaje orientado a objetos que se utiliza principalmente en el lado del cliente, permitiendo mejoras en la interfaz de usuario y pginas web dinmicas, aunque se puede usar
del lado del servidor. Tiene una sintaxis similar a C aunque adopta convenciones de Java.
Actualmente es ampliamente utilizado para enviar y recibir informacin de servidores junto
con ayuda de otras tecnologas como AJAX, interactuando con el DOM (Modelo de Objetos del Documento). Entre sus caractersticas importantes est la compatibilidad con la
estructura de programacin en C, como las sentencias if, bucles for, entre otras; y el uso de
variables sin importar su tipo, las cuales pueden cambiar a lo largo del programa. El uso ms
comn en pginas web es la carga de nuevo contenido sin necesidad de recargar la pgina,
animacin de elementos, contenido de audio y video e interaccin directa desde el cliente
hasta el servidor de todos los elementos del documento HTML.
A continuacin se muestra un ejemplo de JavaScript que permite el cambio de contenido
en un documento HTML. [22]
f u n c t i o n Imagen ( v a l o r , i n f o ) {
i f ( i n f o==" s i " ) {
document . g e t E l e m e n t B y I d ( v a l o r ) . s r c = " img / s i . j p g " ;
};
i f ( i n f o==" no " ) {
document . g e t E l e m e n t B y I d ( v a l o r ) . s r c = " img / no . j p g " ;
};
}
6.2.4.
Bootstrap
6.2.5.
jQuery
Es una biblioteca de JavaScript que permite simplificar la manera de interactuar con los
documentos HTML, manipular el DOM, manejar eventos, animar y agregar interacciones con
AJAX. Es de software libre y cdigo abierto. Esta facilita la modificacin de un documento
HTML gracias a sus funciones preestablecidas siendo la biblioteca de JavaScript la ms
utilizada. Tambin existe jQuery mobile, que es un framework basado en HTML5 que permite
hacer responsivo el diseo de la aplicacin web, para ser accesible a todo tipo de dispositivos.
[24]
6.2.6.
AJAX
JavaScript asncrono y XML es una tcnica de desarrollo web para crear aplicaciones
interactivas ejecutadas en el cliente, con una comunicacin asncrona con el servidor en
segundo plano. De esta manera es posible realizar cambios sobre la pgina sin necesidad de
recargarlas, mejorando la velocidad e interactividad de las aplicaciones.
En el desarrollo de la aplicacin web, primero se cre una versin simple que permitia
una bsica interaccin con el arduino y nos permiti hacer la primer prueba de conexin
entre el arduino e internet. Esta versin se construy desde cero en un documento HTML5
con un diseo bsico en CSS3 e interaccin con funciones en JavaScript y AJAX. Luego de
varias etapas y pruebas se lleg a una app web basada en una plantilla de bootstrap con
algunas modificaciones en el documento HTML y en la presentacin; adems se us una
funcin de jQuery que nos permiti colocar todas las partes de la app web en un mismo
documento HTML con mejoras en las funciones de interaccin en JavaScript y AJAX. La
app web, mostrada en la Figura 6.2, se segment en un archivo index donde est todo el
31
documento HTML, carpeta de las funciones en JavaScript y AJAX, carpeta del contenido
de bootstrap y jQuery adems de la carpeta de imgenes. Por ltimo se est usando el API
Google fonts para el tipo de letra del contenido del aplicativo web. [25]
32
Captulo 7
Funcionamiento
El proyecto consta de 2 etapas, una fsica o de conexin y otra de acondicionamiento del
control. Lo primero que se debe tener en cuenta es el nmero de salidas de iluminacin que
se van a controlar, nosotros decidimos controlar 3 salidas de iluminacin de hasta 600W cada una, esto para disear el circuito de interfaz de potencia y de verificacin de cada salida.
La conexin en cada salida se hace a partir de una conexin conmutable entre la interfaz
de potencia y el interruptor del hogar, lo que hace que se deba ubicar estratgicamente el
circuito de potencia.
Lo tercero es la conexin del arduino a la red WiFi del hogar. Primero se configura la red local para darle una direccin IP fija al arduino, accediendo desde el PC al punto
33
de acceso de la red local, que por lo general es 192.168.0.1 como se aprecia en la Figura 7.1.
Al intentar entrar en el router, este nos pide una identificacin que por defecto del router
es admin:admin password:admin, ver Figura 7.2; si no se puede entrar se debe comunicar
con el proveedor de internet que tengamos para solicitarr el acceso al router.
Despus de acceder al router podemos encontrar un men como se muestra en la Figura 7.3. Para configurar la IP fija, ingresamos a opciones avanzadas de LAN (Red de Area
Local), donde podemos reservar direcciones IP (Figura 7.4).
Para adicionar una IP reservada debemos saber la MAC del yun, la cual podemos encontrar en la red WiFi que emite el yun cuando se enciende por primera vez. Para guardar
la IP reservada debemos ingresar la MAC del yun y la direccin IP que le vamos a reservar
(Figura 7.5); as al conectar el yun a la red local, el router le asigna la IP reservada al ver
34
Despus de tener nuestro router configurado nos conectamos al arduino por medio de la
red WiFi que el arduino emite (ArduinoYn-XXXXXXXXXXXX), siendo las Xs la direccin
MAC del arduino. Luego se ingresa la contrasea por defecto arduino para entral al panel
de control a travs de la pantalla de acceso mostrada en la Figura 7.7.
Al entrar veremos algunos parmetros de la conexin del arduino yn (Figura 7.8) como
las 2 interfaces de conexin del yun, WLAN0 y ETH1, y la posibilidad de subir el cdigo de
arduino.
35
Luego le damos click en el botn de configuracin para entrar a la pantalla de configuracin (Figura 7.9) y colocarle un nuevo nombre al yun, modificar la contrasea, enlazar el
yun con la red local y proteger con contrasea el API REST que permite interactuar con el
arduino desde la red.
36
Para finalizar le damos click para configurar y restaurar, ver Figura 7.10; esperamos a
que termine y ya desde la red local podemos acceder al arduino con nuestra nueva contrasea y est listo para cargar la app web, agregando los cambios pertinentes segn el nmero
de salidas de iluminacin conectadas para su ubicacin correcta con los pines del arduino.
Por ltimo se hacen algunos ajustes y verificaciones de conectividad y la activacin correcta del circuito de potencia para poder controlar la iluminacin del hogar desde cualquier
parte y en cualquier momento.
37
Captulo 8
Conclusiones y Recomendaciones
Un dispositivo embebido, como lo es el Arduino Yn, facilita la implementacin de sistemas domticos (Internet de las Cosas), como el control de iluminacin desarrollado, a travs
de paquetes y cdigos en diversos lenguajes dedicados juntamente a cumplir peticiones y
responder de forma correcta.
Una aplicacin web actualizada con las ultimas versiones de frameworks o libreras adems de un diseo adaptativo permite que cualquier usuario con un dispositivo mvil con
acceso a internet pueda tener una comunicacin activa con la informacin a interactuar.
Un buen diseo de un circuito impreso garantiza buena ubicuidad de cada uno de los
componentes, la potencia a disipar por las diferentes pistas de cobre as como el manejo de
varios niveles de tensin en la misma tarjeta.
Para controlar la iluminacin desde un dispositivo mvil va WiFi, adems del control en
sitio por medio del interruptor, se debe conocer de antemano el estado en que se encuentra
la salida, mediante la deteccin de tensin en las salidas de iluminacin o identificando la
posicin del interruptor.
Las tecnologas en comunicacin inalmbrica brindan comodidad en la forma de conexin
del dispositivo, as como la disponibilidad de lugares donde se pueda ubicar; aunque en este
trabajo se implement WiFi, actualmente pueden existir otras opciones como Bluetooth o
ZigBee que trabajan en la misma banda ISM.
39
Captulo 9
Bibliografa
[1] Blog Programacin Orientada a Objetos. Entorno de Desarrollo Integrado.
2013. https://fergarciac.wordpress.com/2013/01/25/entorno-de-desarrollo-integradoide/
[2] Wikipedia.
La
enciclopedia
libre.
http://es.wikipedia.org/wiki/Cdigo-abierto
[3] Wikipedia.
La
enciclopedia
http://es.wikipedia.org/wiki/Atmel
[4] Wikipedia.
La
enciclopedia
https://es.wikipedia.org/wiki/OpenWrt
Cdigo
Abierto.
libre.
libre.
2015.
Atmel.
2015.
OpenWrt.
2015.
libre.
Domtica.
2015.
libre.
Arduino.
2015.
[14] Wikipedia.
La
enciclopedia
https://es.wikipedia.org/wiki/Optoacoplador
Optoacoplador.
libre.
[15] Wikipedia.
La
enciclopedia
https://es.wikipedia.org/wiki/Rel
Rel.
libre.
2015.
2015.
Circuito
libre.
Impreso.
Interruptor.
2015.
2015.
libre.
libre.
libre.
HTML.
2015.
CSS.
2015.
JavaScript.
2015.
libre.
jQuery.
2015.
[25] Wikipedia.
La
enciclopedia
https://es.wikipedia.org/wiki/AJAX
libre.
AJAX.
2015.
42
Anexos
43
Anexo A
Cdigos Usados
A.1.
Cdigo Arduino
#i n c l u d e <B r i d g e . h>
#i n c l u d e <Y u n S e r v e r . h>
#i n c l u d e <Y u n C l i e n t . h>
// L i s t e n t o t h e d e f a u l t p o r t 5 5 5 5 , t h e Yun w e b s e r v e r
// w i l l f o r w a r d t h e r e a l l t h e HTTP r e q u e s t s you s e n d
YunServer s e r v e r ;
void setup ( ) {
// B r i d g e s t a r t u p
pinMode ( 1 3 , OUTPUT) ;
pinMode ( 1 2 , OUTPUT) ; // S a l i d a de
pinMode ( 1 1 , INPUT ) ; // I l u m i n a c i o n I
pinMode ( 1 0 , OUTPUT) ; // S a l i d a de
pinMode ( 9 , INPUT ) ; // I l u m i n a c i o n I I
pinMode ( 8 , OUTPUT) ; // S a l i d a de
pinMode ( 6 , INPUT ) ; // I l u m i n a c i o n I I I
d i g i t a l W r i t e ( 1 3 , LOW) ;
Bridge . begin () ;
d i g i t a l W r i t e ( 1 3 , HIGH ) ;
// L i s t e n f o r i n c o m i n g c o n n e c t i o n o n l y from l o c a l h o s t
// ( no one from t h e e x t e r n a l n e t w o r k c o u l d c o n n e c t )
server . listenOnLocalhost () ;
server . begin () ;
}
void loop ( ) {
// Get c l i e n t s coming from s e r v e r
YunClient c l i e n t = s e r v e r . accept () ;
// There i s a new c l i e n t ?
if ( client ) {
// P r o c e s s r e q u e s t
process ( c l i e n t ) ;
// C l o s e c o n n e c t i o n and f r e e r e s o u r c e s .
45
c l i e n t . stop () ;
}
d e l a y ( 5 0 ) ; // P o l l e v e r y 50ms
}
void p r o c e s s ( YunClient c l i e n t ) {
// r e a d t h e command
S t r i n g command = c l i e n t . r e a d S t r i n g U n t i l ( / ) ;
// i s " d i g i t a l " command?
i f ( command == " d i g i t a l " ) {
digitalCommand ( c l i e n t ) ;
}
// i s " a n a l o g " command?
i f ( command == " a n a l o g " ) {
analogCommand ( c l i e n t ) ;
}
// i s " mode " command?
i f ( command == " mode " ) {
modeCommand ( c l i e n t ) ;
}
}
void digitalCommand ( YunClient c l i e n t ) {
i n t pin , v a l u e ;
// Read p i n number
pin = c l i e n t . parseInt () ;
// I f t h e n e x t c h a r a c t e r i s a / i t means we h av e an URL
// w i t h a v a l u e l i k e : "/ d i g i t a l /13/1"
i f ( c l i e n t . r e a d ( ) == / ) {
value = c l i e n t . parseInt () ;
d i g i t a l W r i t e ( pin , v a l u e ) ;
}
else {
value = digitalRead ( pin ) ;
}
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t (F( " s e t to " ) ) ;
c l i e n t . println ( value ) ;
// Update d a t a s t o r e k e y w i t h t h e c u r r e n t p i n v a l u e
S t r i n g k e y = "D" ;
k e y += p i n ;
B r i d g e . p u t ( key , S t r i n g ( v a l u e ) ) ;
}
v o i d analogCommand ( Y u n C l i e n t c l i e n t ) {
46
i n t pin , v a l u e ;
// Read p i n number
pin = c l i e n t . parseInt () ;
// I f t h e n e x t c h a r a c t e r i s a / i t means we h av e an URL
// w i t h a v a l u e l i k e : "/ a n a l o g /5/120"
i f ( c l i e n t . r e a d ( ) == / ) {
// Read v a l u e and e x e c u t e command
value = c l i e n t . parseInt () ;
analogWrite ( pin , v a l u e ) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t (F( " s e t to analog " ) ) ;
c l i e n t . println ( value ) ;
// Update d a t a s t o r e k e y w i t h t h e c u r r e n t p i n v a l u e
S t r i n g k e y = "D" ;
k e y += p i n ;
B r i d g e . p u t ( key , S t r i n g ( v a l u e ) ) ;
}
else {
// Read a n a l o g p i n
v a l u e = analogRead ( pin ) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n A" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t (F( " reads analog " ) ) ;
c l i e n t . println ( value ) ;
// Update d a t a s t o r e k e y w i t h t h e c u r r e n t p i n v a l u e
S t r i n g k e y = "A" ;
k e y += p i n ;
B r i d g e . p u t ( key , S t r i n g ( v a l u e ) ) ;
}
}
v o i d modeCommand ( Y u n C l i e n t c l i e n t ) {
int pin ;
// Read p i n number
pin = c l i e n t . parseInt () ;
// I f t h e n e x t c h a r a c t e r i s n o t a / we h ave a malformed URL
i f ( c l i e n t . r e a d ( ) != / ) {
c l i e n t . p r i n t l n (F( " e r r o r " ) ) ;
return ;
}
S t r i n g mode = c l i e n t . r e a d S t r i n g U n t i l ( \ r ) ;
i f ( mode == " i n p u t " ) {
47
pinMode ( p i n , INPUT ) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t ( F ( " c o n f i g u r e d a s INPUT ! " ) ) ;
return ;
}
i f ( mode == " o u t p u t " ) {
pinMode ( p i n , OUTPUT) ;
// Send f e e d b a c k t o c l i e n t
c l i e n t . p r i n t ( F ( " P i n D" ) ) ;
c l i e n t . print ( pin ) ;
c l i e n t . p r i n t ( F ( " c o n f i g u r e d a s OUTPUT! " ) ) ;
return ;
}
c l i e n t . p r i n t ( F ( " e r r o r : i n v a l i d mode " ) ) ;
c l i e n t . p r i n t ( mode ) ;
}
A.2.
Cdigo AppWeb
<!DOCTYPE html>
<html>
<head>
<meta c h a r s e t=" u t f 8">
<meta name=" v i e w p o r t " content=" w i d t h=d e v i c e width , i n i t i a l s c a l e =1">
<l i n k
<l i n k
<l i n k
<l i n k
r e l=" s t y l e s h e e t "
r e l=" s t y l e s h e e t "
r e l=" s t y l e s h e e t "
r e l=" s t y l e s h e e t "
h r e f=" c s s / b o o t s t r a p t h i n g s . c s s ">
h r e f=" c s s / b o o t s t r a p theme . c s s ">
h r e f=" c s s / b o o t s t r a p . c s s ">
h r e f=" c s s / main . c s s ">
48
</head>
<body>
<d i v datar o l e=" page " i d=" uno ">
<d i v datar o l e=" h e a d e r " datatheme=" b ">
<h1 c l a s s=" l e t r a ">C o n t r o l de I l u m i n a c i o n 2 . 0</h1>
</ d i v><! / h e a d e r >
<d i v r o l e=" main " c l a s s=" u i c o n t e n t ">
<h2 c l a s s=" t e x t c e n t e r ">B i e n v e n i d o</h2>
<FORM c l a s s=" c o n t a i n e r ">
<P>I n t r o d u c e l a c o n t r a s e n a</P>
<INPUT TYPE=" Password " NAME=" p a l c l a v e " VALUE=" ">
<INPUT TYPE=" b u t t o n " VALUE=" A c c e d e r " o n C l i c k=" p r o t e c c i o n ( t h i s . form .
p a l c l a v e . v a l u e , a , 1 ) ; "></P>
</FORM>
</ d i v><! / content >
<d i v datar o l e=" f o o t e r ">
<h4>© ; F e l i p e O s o r i o y Duban Ocampo 2015</h4>
</ d i v><! / f o o t e r >
</ d i v><! / page popup >
49
50
51