Você está na página 1de 126

INST

M
CD. GU
TITUTO T
Sistem
Consumo
QUE PA
MAESTRO
JUAN
M.C. J
UZMN, JA
ECNOL
T
T
ma De Mo
o Elctric
ARA OBT
O EN ING
PRE
CARLOS
DIRECTO
JAVIER G
ALISCO,
GICO DE
TESIS
TEMA:
nitoreo In
o Con Mic
TENER EL
ENIERA
ESENTA:
S CHAVEZ
OR DE TE
GUTIERRE
MXICO
E CIUDAD
nalmbrico
crocontro
L GRADO
A ELECTR
:
Z AMEZC
ESIS:
EZ TORR
. DICIEM
D GUZM
o De
lador
O DE:
RNICA
CUA
RES
BRE DE 2
N
2013
I. INTRODUCCION

2

AGRADECIMIENTOS

Primero que nada, quiero agradecer a dios por permitirme llegar a estas instancias,
por guiarme en mi camino y darme salud. Tambin a mi quiero agradecer
profundamente a mis padres y a mi esposa por su apoyo brindado
incondicionalmente, por su compresin y paciencia.
De igual manera, quiero agradecer al Consejo Nacional de Ciencia y
Tecnologa por haberme otorgado la beca durante la totalidad de este posgrado,
siendo esta mi soporte econmico que mantuvo el enfoque en mis estudios.
A mi Director de Tesis el M.C. Javier Gutirrez Torres por su disposicin
constante e inters para contribuir con el desarrollo de todo el trabajo de tesis.
Tambin a todos mis compaeros de la generacin por sus comentarios y
crticas constructivas las cuales me ayudaron a mejorar este prototipo para la
medicin y ahorro de energa.










I. INTRODUCCION

3

RESUMEN

La finalidad de esta tesis es construir un sistema de monitoreo inalmbrico de
consumo elctrico utilizando microcontroladores para medir y generar reportes en
base al consumo energtico realizado por cualquier enser domstico o industrial que
se encuentre conectado a cualquier lnea monofsica o inclusive trifsica.
Con el fin de realizar mediciones de manera precisa este sistema est provisto
con un sensor de efecto hall, que ha resultado ser la manera ms eficiente y barata
de medir la corriente que fluye a travs de un conductor. Por otro lado, al ser un
dispositivo lineal y generar una salida en voltaje, se viene a convertir en un aliado
perfecto de cualquier ADC o microcontrolador.
Hoy en da existe una amplia gama de microcontroladores con caractersticas
similares, pero el diseo se enfoc a utilizar dispositivos econmicos, accesibles y de
software libre, que nos permitieran hacer uso de los protocolos bsicos de
comunicacin (SPI, I
2
C) y convertidores analgico/digital entre los cuales pudimos
encontrar los microcontroladores PIC 16F877A de Microchip y Arduino UNO R3 de
Atmel.
Los sistemas inalmbricos han sido objeto de estudio en la ltima dcada por
los beneficios y comodidades que brinda. El prototipo se doto de una red inalmbrica
semidplex utilizando Xbees Serie 2 para la transmisin de datos mediante el
protocolo serial, mismo que se us para el manejo de las pantallas graficas del
sistema.








I. INTRODUCCION

4

ABSTRACT

The purpose of this thesis is build a wireless monitoring system power consumption
using microcontrollers to measure and generate reports based on energy
consumption made by some domestic or industrial enser that is connected to any
single-phase or three-phase inclusive.
In order to make precise measurements of the system is provided with a hall effect
sensor, that has proven to be the most efficient and inexpensive way to measure the
current flowing through a conductor. On the other hand, as a linear device and
generate an output voltage has been converted to a perfect ally any ADC or
microcontroller.
Today there is a wide range of microcontrollers with similar features, but the design is
focused on devices using affordable, accessible and free software that allow us to
make use of basic communication protocols (SPI, I2C) and analog / digital converters
among which we find 16F877A PIC microcontrollers from Microchip and Atmel
Arduino UNO R3.
Wireless systems have been studied in the last decade for the benefits and amenities
offered. The prototype was equipped with a wireless half-duplex using Xbee's Series
2 for data transmission through the serial protocol, same as used for handling system
graphic displays.









I. INTRODUCCION

5

ndice General
CAPITULO. I INTRODUCCION 11
1.2 Definicin Del Problema. 12
1.3 Objetivo General 13
1.4 Objetivos Especficos 13
1.5 Metas. 13
1.6 Antecedentes. 14
1.6.1 Kill a Watt EZ. 14
1.6.2 Google PowerMeter 16
1.6.3 Nucleus de General Electric 17
CAPITULO II. MARCO TEORICO 21
2.1 Introduccin a Zigbee 21
2.1.1 Frecuencias de trabajo y rango de velocidades 23
2.1.2 Tipos de dispositivos 24
2.1.3 Topologas de red 25
2.2 Mdulos Xbee 27
2.2.1 Eleccin de la antena Xbee 28
2.3 Qu es Arduino? 29
2.3.1 Por Qu Elegir Arduino? 31
2.3.2 El Modelo Del Microcontrolador 33
2.3.3 Memorias Del Microcontrolador 34
2.3.4 Protocolos De Comunicacin I
2
C/TWI Y SPI 35
2.3.5 El Chip ATmega16U2 40
2.3.6 Las Entradas y Salidas Digitales. 42
2.3.7 Las entradas analgicas 42
2.3.8 Otros Usos De Los Pines-Hembra De La Placa 45
2.3.9 Arduino Mega 2560 48
2.4 Qu Es Un IDE? 49
2.4.1 El Serial Monitor y Otras Terminales Serie. 49
2.5 Xbee Shields 52
2.5.1 Arduino Wireless SD Shield 53
2.5.2 Caractersticas de las tarjetas SD 55
2.6 LCD grfico de 128x64 58
2.7 Sensor De Corriente. Descripcin 60
2.7.1 Caractersticas Del Sensor De Corriente ACS712 61
I. INTRODUCCION

6

3.1 Diseo de la lgica de programacin del PIC16F877A 64
3.2 Hardware. Diseo del Transmisor. 67
3.3 Programacin. Transmisor con PIC16F877A 68
3.4 Transmisor. Descripcin Del Programa Fuente. 68
3.5 Configuracin De Puertos Seriales Virtuales 82
3.6 Simulacin del Transmisor 86
3.6.1 Generando Los Primeros Grficos. 87
3.6.2 Iniciando La Transmisin De Datos. 88
3.6.3 Conexin Establecida. 89
3.6.4 Transmitiendo Datos. 90
3.7 Diseo de la lgica de programacin del ARDUINO MEGA. 91
3.7.1 Hardware. Diseo del receptor 93
3.7.2 Programacin. Receptor con Arduino MEGA 94
3.7.3 Receptor. Descripcin Del Programa Fuente. 94
CAPITULO IV. RESULTADOS 105
4.1 Presentacin de los primeros grficos. 105
4.2 Transmisin de los primeros datos 106
4.3 Gestin De Datos. Receptor 108
4.3.1 Inicializacin de memoria microSD 108
4.3.2 Recepcin de datos. 109
4.3.3 Generacin de graficas en Excel. 110
CAPTULO V. CONCLUSIONES 113
CAPTULO VI. REFERENCIAS BIBLIOGRFICAS 115
ANEXO A 117
ANEXO B 119
ANEXO C 121
ANEXO D 121
ANEXO E 122

I. INTRODUCCION

7

ndice de figuras

FIG.

PAG.
1.1 Kill a Watt EZ 15
1.2 Uso de energa en el hogar 17
1.3 Sistema Nucleus de GE 18
1.4 Administrador del hogar Nucleus 18
1.5 Registro de consumo de energa 19
2.1 Tipos de dispositivos Zigbee / IEEE 802.15.4 24
2.2 Topologas de red. 26
2.3 Ventajas de enrutado de topologa Mesh. 26
2.4 Conexiones mnimas para utilizar Xbee. 27
2.5 Microcontrolador ATmega328P 33
2.6 Estructura logia bsica I2C 36
2.7 Estructura bsica I2C 37
2.8 Estructura bsica SPI 39
2.9 ATmega16U2 40
2.10 Esquema Hardware de la placa Arduino Uno 47
2.11 Puertos seriales del Arduino MEGA 48
2.12 Monitor Serial 50
2.13 Arduino Wireless SD Shield 54
2.14 Memoria MicroSD 56
2.15 Configuracin de las memorias SD y MicroSD 57
2.16 Diagrama a bloques del LCD 128X64 58
2.17 LCD grafico 128X64 58
2.18 Configuracin para Alimentar el GLCD 128X64 60
2.19 Diagrama de bloques funcional del sensor de corriente ACS712. 62
3.1 Diagrama de flujo de la etapa de transmisin 66
3.2 Diagrama de prueba del transmisor. 67
3.3 Logo utilizado para crear imagen en transmisor 69
3.4 Programa gestor de imgenes LCD Assistant 70
3.5 Extensin, mapa de bits monocromatico 70
3.6 Imagen monocromtica. 71
3.7 Configuracin de LCD Assistant. 71
3.8 Virtual Serial Port Driver 82
3.9 Seleccionando puertos seriales. 83
3.10 Puertos seriales instalados virtualmente. 83
3.11 Terminal V1.9b 84
I. INTRODUCCION

8

3.12 COM 1 configurado e instalado 84
3.13 Configuracin de ISIS Proteus 85
3.14 ISIS Proteus configurado.
85
3.15 Circuito utilizado en ISIS Proteus 86
3.16 Primer Grafico Generado Por Microcontrolador 87
3.17 Pantalla en Modo Stand by 88
3.18 Subrutina de conexin
88
3.19 Introduciendo respuesta de receptor 89
3.20 Transmisor emitiendo datos. 90
3.21 Logica de programacin del receptor 92
3.22 Diagrama del receptor
93
4.1 Generacin del primer grafico 105
4.2 Pantalla de espera 106
4.3 Subrutina de conexin y enlace. 106
4.4 Transmisin de datos.
107
4.5 Subrutina de reconexin. 108
4.6 Inicializacin correcta, tarjeta presente. 109
4.7 Inicializacin incorrecta, tarjeta ausente o conexin errnea. 109
4.8 Recepcin de datos en monitor serial
110
4.9 Datos en Excel 111
4.10 Grafica de datos obtenidos 111















I. INTRODUCCION

9

ndice de Tablas

TABLA

PAG.
2.1 Cuadro comparativo entre WiFi, Bluetooth y Zigbee. 22
2.2 Bandas de frecuencia en Zigbee 23
2.3 Comparativa de prestaciones entre Xbee. 28
2.4 Comparativa de prestaciones entre Xbee. 29
2.5 Caractersticas tcnicas de Arduino. 44
2.6 Descripcin de Pines 59
2.7 Comparativa entre diferentes sensores de corriente. 60















I. INTRODUCCION

10







CAPTULO I
INTRODUCCIN




I. INTRODUCCION

11

CAPITULO. I INTRODUCCION

En este primer captulo se pretende describir de manera concreta las razones que
motivaron la realizacin de este proyecto as como las metas, alcances y objetivos
planteados, dando una resea de los antecedentes que dieron la pauta para su
desarrollo.
En el segundo captulo de la presente investigacin se plasman los
fundamentos tericos y tcnicos necesarios que servirn como soporte para poder
implementar este proyecto de innovacin.
En el tercer captulo se muestra el desarrollo del proyecto de manera detallada
y sencilla que permitir de manera simple al lector interpretar el proceso de
elaboracin del mismo.
En el cuarto captulo se mencionan los resultados obtenidos en base a la
puesta en funcionamiento y comportamiento del proyecto.
En el quinto captulo se plasman las conclusiones en base a los resultados
obtenidos y la experimentacin realizada.
Por ltimo, en el sexto captulo se menciona las referencias bibliogrficas
utilizadas como fundamento terico y prctico, que fueron fundamentales para la
elaboracin del este proyecto de tesis.
Actualmente las tendencias en ahorro de energa han mostrado ser la forma ms
efectiva de constituir un ahorro significativo tanto en el hogar como en la industria,
con el fin de hacer ms eficiente un proceso industrial o simplemente monitorear el
desempeo de un enser domstico, que quizs posteriormente pueda ser sustituido
y/o nos ayude a saber cunto nos cuesta mantener cierto electrodomstico.

Es por eso que en el mercado han surgido diferentes medidores de corriente
para poder monitorear el consumo de energa en tiempo real, muchos de ellos han
innovado poco o nada en la forma de obtener o inclusive manejar la informacin que
generan. Por otro lado, al ser mdulos que se encuentran localmente realizando una
medicin, muchas de las veces es poco factible adquirir este tipo de informacin,
I. INTRODUCCION

12

pues el lugar donde se va a realizar el monitoreo o censado es poco accesible
fsicamente hacindose complicado llevar un control estadstico de las mediciones.
De ah surge la necesidad de construir un sistema de monitoreo de consumo
elctrico, el cual nos pueda brindar una adquisicin continua de datos
inalmbricamente que nos permita visualizar la informacin de manera remota y
local, que sea capaz de generar un historial del consumo en cualquier momento
determinado por el usuario. De esta manera, tratamos de incursionar no solo en el
rea de domtica sino tambin en la industrial.
Las ventajas de disear y construir un sistema de este tipo son muchas y
variadas, pues nos ayudara a mantener un control sobre los consumos energticos
que puede ser desde un enser domestico hasta un rea industrial completa. Adems,
cumplir con el objetivo de generar un historial, que el usuario podr utilizar para
medir el desempeo elctrico a lo largo del tiempo.
Adems, ser un factor importante a tomar en cuenta el poder utilizar
elementos electrnicos y microcontroladores comunes para su realizacin, pues
tambin uno de los alcances que tiene el proyecto es ahorrar en la implementacin y
desarrollo del mismo para poderlo hacer ms atractivo econmicamente al cliente
con respecto a los sistemas contemporneos.

1.2 Definicin Del Problema.

Actualmente en Mxico, los sistemas de monitoreo de consumo elctrico solo han
incursionado por medio de la compaa paraestatal de la Comisin Federal de
Electricidad (CFE), implementando medidores elctricos bsicos, mostrando poco
inters por mostrar informacin integral sobre costo/consumo como lo han hecho
algunos pases en desarrollo y emergentes.
Es por eso, que contar con un sistema que supervise el consumo elctrico es
fundamental para el buen funcionamiento de empresas, edificios, universidades,
hospitales o cualquier institucin que cuente reas crticas.

I. INTRODUCCION

13

1.3 Objetivo General

Disear e implementar un sistema de monitoreo inalmbrico de consumo elctrico
empleando microcontroladores, que nos permita obtener datos de gasto elctrico
diariamente de cualquier dispositivo elctrico.

1.4 Objetivos Especficos

Investigar el desempeo del sistema de monitoreo inalmbrico de consumo elctrico
usando un microcontrolador, con respecto a los existentes. As como los siguientes
puntos.

x Proponer una metodologa de diseo de sistemas inalmbricos para el
monitoreo de consumo.
x Disear e Implementar la etapa de acondicionamiento utilizando un sensor
de efecto hall de tipo semiconductor.
x Disear y Simular usando el isis de proteus un buffer digital de datos para la
etapa de sensado de corriente.
x Disear e Implementar la etapa de transmisin y recepcin para realizar la
comunicacin inalmbrica.
x Disear e Implementar un datalogger para almacenar los datos obtenidos
peridicamente.
x Disear e Implementar un sistema de medicin local y remota del sistema
utilizando pantallas tipo LCD.

1.5 Metas.

Se pretende que para al trmino del periodo Enero Junio del 2013 se cuente
con:


I. INTRODUCCION

14

x Una red tipo mesh, para poder realizar la comunicacin inalmbrica.
x Un datalogger que nos permita guardar toda la informacin adquirida.
x Un sistema remoto y local de monitoreo.
x Un transmisor bajo la plataforma PIC y un receptor bajo la plataforma de
Arduino.
x Un reporte donde se plasme todos los resultados obtenidos a lo largo del
desarrollo de este proyecto.
1.6 Antecedentes.

Un monitor de energa para el hogar es un tipo de vatihormetro o contador
elctrico que proporciona informacin en tiempo real del consumo elctrico de
manera comprensible para cualquier usuario sin necesidad de conocimientos
tcnicos. Estos dispositivos tambin pueden mostrar al usuario el coste de la energa
consumida y estimaciones de las emisiones de gases de efecto invernadero. Algunos
estudios muestran una reduccin del consumo de energa en el hogar de 4-15%
gracias al uso de monitores de energa.

1.6.1 Kill a Watt EZ.
En la figura 1.1 podemos observar el Kill a Watt EZ, el cual es un medidor de energa
con el que fcilmente usted podr conectar cualquier aparato y as calcular cunto
dinero le cuesta el tenerlo encendido. Adems informa cunto dinero gasta por da,
mes y ao, los watts que usa, as como los kWh, de tal forma que se puede
identificar si conviene apagarlo ms, conservarlo o cambiarlo.
I. INTRODUCCION

15


Kill a Watt EZ

Este modelo cuenta con Memoria para Grabar los registros de cada aparato y
se le pueden capturar los costos del KwH para que d automticamente los costos
por hora, Da, Mes o Ao de ese dispositivo.
Son miles de preguntas ante el gasto de energa de sus electrodomsticos, y
la verdad es que todos desafortunadamente tenemos que pagar una cuenta cada
mes de servicios. Y la economa actualmente no est para altos gastos. Si de verdad
desea bajar significativamente su cuenta de servicios y saber cunto gasta cada
aparato en su hogar, esta es la nica forma de hacerlo y muy fcil.
As de simple, se puede ahorrar mucho dinero al mes y al ao sabiendo que
se puede apagar los electrodomsticos en la noche o analizar que aparatos se tienen
que cambiar. Tambin se puede ver la calidad de energa que se recibe, ya que
muestra voltaje, Lnea, Frecuencia, y factor de potencia.
Caractersticas:
9 Pantalla LCD.
9 Muestra Voltios, Amperes, watts, VA.
9 Timer: para ver cunto tiempo lleva conectado el aparato (entre ms tiempo lo
dejemos mejor lectura hace).
I. INTRODUCCION

16

9 Memoria para Guardar informacin de Diferentes aparatos.
9 Da informacin automtica de costo Diario, Mensual y Anual para cada
aparato.
El Kill a Watt EZ cuenta con memoria para guardar la informacin de
diferentes aparatos. Y usted puede capturar el costo del kWh que viene en el recibo
de energa y automticamente en la pantalla muestra cuento gasta en dinero ese
aparato al da, mes y ao. Facilita la operacin para hacer mediciones ms rpidas y
as poder encontrar el ahorro que se necesita hacer.
El Kill a Watt Normal brinda la informacin de kWh consumidos, as como Voltios,
Amperes, Watts, VA. Pero para sacar el costo en dinero que cada aparato gasta hay
que hacerlo de manera manual con una calculadora.

1.6.2 Google PowerMeter
Google se ha propuesto ayudarnos a reducir el consumo elctrico en nuestras casas,
a travs de un ambicioso proyecto llamado: Google Powermeter.
Bajo el lema de Lord Kelvin: "lo que no se puede medir, no se puede mejorar",
a creado un software que nos permitir a travs de un gadget para el
iGoogle conocer donde consumimos ms energa en nuestros hogares y as poder
hacer esfuerzos focalizados para reducir estos consumos, por nuestro beneficio
propio y el del planeta.
Un verdadero reto tecnolgico y de coordinacin entre las principales
compaas elctricas de Norte Amrica (USA y Canad), en primer lugar, para
finalmente extenderse a todo el mundo.
Google PowerMeter muestra a los usuarios su consumo de electricidad en tiempo
casi real. Creen que PowerMeter ofrecer ms informacin til y prctica que las
complicadas facturas mensuales de papel que proporcionan poca informacin sobre
el consumo o la forma de ahorrar energa.
I. INTRODUCCION

17

Google PowerMeter, ahora como prototipo, recibir informacin de dispositivos
medidores inteligentes y de gestin de la energa y la proporcionar a toda persona
que se registre para acceder al consumo de electricidad de su hogar en la pgina
principal de iGoogle. La figura 1.2 muestra cmo alguien podra utilizar esta
informacin para averiguar cunta energa se utiliza en diferentes actividades del
hogar.

Figura 1.1 Uso de energa en el hogar

Power Meter de Google es una iniciativa que facilitar que podamos saber con qu
electrodomsticos gastamos ms energa elctrica, o a en qu momento del da la
consumimos. El objetivo a corto plazo es que podamos ahorrar recursos, pero en un
futuro podremos planificar por ejemplo a qu compaa compramos la energa para
recargar nuestro coche elctrico por las noche.

1.6.3 Nucleus de General Electric

El administrador Nucleus con tecnologa Brillion es un nuevo e innovador dispositivo
de almacenamiento de datos diseado para comunicarse con un medidor inteligente,
y as proporcionar informacin segura sobre el consumo y los costos estimados de
energa del hogar. Al llevar un registro del consumo y las tarifas de energa en tiempo
I. INTRODUCCION

18

casi real, puede realizar elecciones con mayor informacin y tomar medidas ms
inteligentes para recibir una factura de electricidad con valores ms bajos. En la
figura 1.3 podemos ver como GE distribuye los sensores en el hogar.

Figura 1.2 Sistema Nucleus GE
En el pasado, las compaas de servicios simplemente lean un medidor de
electricidad una vez al mes y luego cobraban el cargo al propietario por la energa
consumida. Esto significaba que los propietarios no tenan manera de saber cunta
energa utilizaban hasta que no reciban la factura. Esos das han terminado. La
figura 1.4 se puede observar ms claramente como el administrador Nucleus
gestiona y mide inalmbricamente el consumo elctrico de cada enser domestico

Figura 1.3 Administrador del hogar Nucleus
I. INTRODUCCION

19

Con slo saber cunta energa consume, puede optar por hacer pequeos
cambios en su estilo vida que podran reducir los costos de energa. Con el
administrador Nucleus como se puede ver en la figura 1.5, usted cuenta con un
tablero centralizado para monitorear el consumo de energa del hogar. Registre el
consumo de energa en kW (tiempo casi real), kWh (a largo plazo) y haga un clculo
de los dlares gastados, luego use estos datos para ver las tendencias a lo largo de
los das, semanas y meses, hasta 3 aos.

Figura 1.4 Registro de consumo de energa














II. MARCO TEORICO

20









CAPTULO II
MARCO TERICO
















II. MARCO TEORICO

21

CAPITULO II. MARCO TEORICO

El presente capitulo menciona los fundamentos tericos y tcnicos bsicos que
marcaron la pauta para poder estructurar as como desarrollar un sistema de
monitoreo inalmbrico de consumo elctrico.
Inicialmente, se hace referencia a los microcontroladores utilizados para
estructurar tanto el transmisor y receptor, que si bien no se utilizaron los mismos
microcontroladores para disear ambas etapas, si se usaron microsistemas similares
con gran versatilidad y prestaciones.
Por otro lado, tambin se mencionaran algunas caractersticas de los
diferentes sensores de tipo hall que existen en el mercado, as como tambin con un
pequeo anlisis que se utiliz para seleccionar el adecuado para el sistema que se
desarroll.

2.1 Introduccin a Zigbee

El nombre de Zigbee deriva de los patrones errticos comunicativos que tienen las
abejas (bees) entre las flores durante la recogida de polen. Los zumbidos de las
abejas evocan en redes inalmbricas invisibles.
Zigbee surge de la necesidad de desarrollar una tecnologa inalmbrica fiable,
pero de no muy alta transferencia de datos. De esta forma, en 1998, un conjunto de
empresas se asociaron para desarrollar un estndar de comunicaciones que
complementara a Wi-fi y Bluetooth. Fue terminado y publicado por el IEEE en Mayo
de 2003.
Desde el punto de vista del Hardware, podemos decir que Zigbee ha sido
cuidadosamente optimizado para el bajo coste a gran escala. Tiene pocas partes
analgicas y utiliza circuitos digitales siempre que sea posible.
Desde el punto de vista tcnico, Zigbee es un estndar que define un conjunto
de protocolos de comunicacin de baja velocidad de datos de corto alcance de redes
inalmbricas. Zigbee est basado en dispositivos inalmbricos que operan a 868
MHz, 915 MHz y 2.4 GHz.
II. MARCO TEORICO

22

La tcnica de modulacin es Direct Sequence Spread Spectrum (DSSS), que tiene
un mximo rango de velocidad de unos 250 kbit /s.
Por lo tanto, a modo resumen podemos catalogar a Zigbee como un protocolo:
9 Basado en el estndar 802.15.4.
9 Con aplicaciones WPAN (Wireless Personal Area Network)
9 Con gran soporte desde la industria: Honeywell, Mitsubishi Electric, Motorola,
Philips, Samsung, etc.
9 Bajo coste.
9 Bajo consumo.
9 Fcil Instalacin y barata.
9 Redes flexibles y extensibles.
En la tabla 2.1 podemos ver un cuadro de comparacin entre WiFi, Bluetooth y
Zigbee:

Tabla 2.1 Cuadro comparativo entre WiFi, Bluetooth y Zigbee.
Tecnologa



Wi-fi Bluetooth Zigbee
Velocidad 50< Mbps 1 Mbps <250 kbps
Numero de nodos 32 8 255/65535
Duracin de batera Horas Dias Aos
Consumo en transmisin 400 ma 40 ma 30 ma
Consumo Reposo 20 ma 0.2 ma 3 a
Precio Caro Medio Barato
Configuracin Compleja Compleja Simple
Aplicaciones Internet en edificios Informtica y mviles Domtica y monitorizacin



En resumen, mientras la tecnologa Bluetooth est orientada a la movilidad del
usuario y a eliminar el cableado entre los dispositivos de corta distancia, Zigbee est
orientado hacia el control remoto y a la automatizacin. Bluetooth por lo tanto tiene
por objetivo eliminar los cables entre dispositivos que estn muy cerca entre s, como
por ejemplo entre el telfono mvil y un ordenador porttil, mientras que Zigbee
II. MARCO TEORICO

23

podra ser una red de sensores inalmbricos que se conecten sin cables a una
estacin de control.
2.1.1 Frecuencias de trabajo y rango de velocidades

En el estndar Zigbee se definen tres bandas de frecuencia distintas:

9 868868.6 MHz (banda de 868 MHz)
9 902- 928 MHz (banda de 915 MHz)
9 2400 2483.5 MHz (banda de 2.4 GHz)

La banda de 2.4 GHz es usada en el mundo entero mientras que las de 868 MHz y
915 MHz se usan en Europa y Amrica del Norte respectivamente. Esto otorga a los
diseadores libertad para tomar sus propias decisiones sobre qu bandas de
frecuencia son mejores para sus aplicaciones.
En general, podemos decir que las aplicaciones de 2.4 GHz permiten un
ancho de banda ms grande y ms canales. Sin embargo, la coexistencia con otros
sistemas que funcionan con 2.4 GHz como WLAN y Bluetooth debe ser tenida en
cuenta. El tamao de las antenas en sistemas de 2.4 GHz es tambin menor
respecto a las otras dos bandas de frecuencias. En la tabla 2.2 podemos observar
las diferentes bandas de frecuencia con la cual trabaja Zigbee.

Tabla 2.2 Bandas de frecuencia en Zigbee
Frequency Number
of
Channels
Modulation Chip
Rate
(Kchip/s)
Bit
Rate
(Kb/s)
Symbol
Rate
(Ksymbol/s
Spreading
Method
868-868.6 1 BPSK 300 20 20 Binary DSSS
902-928 10 BPSK 600 40 40 Binary PSSS
Optional
868-868.6 1 ASK 400 250 12.5 20-Bit PSSS
902-928 10 ASK 1600 250 50 5-Bit PSSS
Optional
868-868.6 1 O-QPSK 400 100 25 16-array
ortogonal
902-928 10 O-QPSK 1000 250 62.5 16-array
ortogonal
2400-
2483.5
16 O-QPSK 2000 250 62.5 16-array
ortogonal

II. MARCO TEORICO

24

2.1.2 Tipos de dispositivos

IEEE 802.15.4 y Zigbee definen diferentes tipos de dispositivos. Por un lado, IEEE
802.15.4 define el FFD (de Full Function Device en ingls), que es un dispositivo de
funcionalidad completo. A su vez, este tipo de dispositivos pueden funcionar como
coordinadores de rea (PAN) o dispositivos normales. Por otro lado, tambin define
los RFD (de reduced-function device en ingls), que son dispositivos de funcionalidad
reducida.
La figura 1.6 nos permite ver las clasificaciones Zigbee e IEEE 802.15.4 y sus
analogas.


Figura 2.1 Tipos de dispositivos Zigbee/IEEE 802.15.4

9 Zigbee Coordinator: Es el dispositivo ms completo. Controla el ruteado y la
administracin de la red. Hay uno por red.

9 Zigbee Router: Se encarga de interconectar los dispositivos mediante
tcnicas de encaminamiento y direccionamiento.

9 Zigbee End Device: Es un elemento pasivo de la red, ya que no transmite
informacin de manera autnoma; simplemente dispone de la funcionalidad
mnima para ser capaz de responder a peticiones de dispositivos superiores
(coordinador o router). Gracias a esto y a la poca memoria que necesita es
II. MARCO TEORICO

25

muy econmico. Adems, su batera puede durar aos debido a que se pasa
dormido la mayor parte del tiempo.

2.1.3 Topologas de red

Zigbee permite tres topologas de red:

9 Pair: La forma ms sencilla de la red es con dos nodos. Uno de ellos debe ser
un coordinador. El otro puede ser bien un router o bien un end device.

9 Star: En esta topologa el coordinador es el centro de la red y es el que se
conecta en crculo con los dems dispositivos (End devices). Por lo tanto,
todos los mensajes deben pasar por el coordinador. Dos end devices no
pueden comunicarse entre s directamente.

9 Mesh: La configuracin cuenta con nodos router y con un nodo coordinador.
Se trata de una topologa no jerrquica en el sentido de que cualquier
dispositivo puede interactuar con cualquier otro.
Este tipo de topologa permite que, si en un momento un nodo o camino fallan
en la comunicacin, sta pueda seguir rehaciendo los caminos. La gestin de
los caminos es tarea del coordinador.

9 Cluster Tree: Es una variacin de la topologa malla, por lo que no la
consideramos realmente como una cuarta topologa. En este diseo, los
routers forman una columna vertebral con los dispositivos finales, que estn
agrupados en torno a los routers.

II. MARCO TEORICO

26


Figura 2.2 Topologas de red.

De todas las topologas antes analizadas y las cuales pudimos observar
claramente en la figura 2.2, la ms ventajosa y caracterstica del protocolo Zigbee es
la Mesh. El poder hacer routing dinmico permite a este tipo de topologa ganar
sobretodo en fiabilidad en las comunicaciones.
Es adecuado destacar la importancia de actuar como un equipo. En
baloncesto los jugadores necesitan coordinarse entre ellos. En Zigbee pasa un poco
lo mismo. Los dispositivos pueden conectarse de muchas formas diferentes para dar
fuerza a la red, como podemos ver en la figura 2.3.


Figura 2.3 Ventajas de enrutado de topologa Mesh.

II. MARCO TEORICO

27

2.2 Mdulos Xbee

Los mdulos Xbee son fabricados por la empresa Digi, proporcionan conectividad
inalmbrica con otro dispositivo de la misma serie por un precio relativamente
econmico comparado con el de otros fabricantes.
Digi ofrece dos series diferentes, la serie 1 y la serie 2, tambin conocida
como Znet 2.5, los mdulos de la Serie 1 y la Serie 2 tienen el mismo pin-out, sin
embargo no son compatibles entre s ya que utilizan distintos chipset y trabajan con
protocolos diferentes.
La serie 1 est basada en el chipset de Freescale y est pensado para ser
utilizado en redes punto a punto y punto a multipunto. Los mdulos de la Serie 2
estn basados en el chipset de Ember, y estn diseados para ser utilizados en
aplicaciones que requieren repetidores o una red mesh. Ambos mdulos pueden ser
utilizados en los modos AT y API.
Con estos mdulos se pueden disear aplicaciones de comunicacin
inalmbrica de bajo consumo energtico, como las requeridas por el proyecto en el
que nos embarcamos.
La figura 2.4 ilustra cmo fluyen los bits de datos a travs del mdulo Xbee.


Figura 2.4 Conexiones mnimas para utilizar un xbee.

Los datos entran en el mdulo UART a travs de la patilla DIN (pin 3) como una
seal asncrona y se almacenan en un buffer. Lo mismo sucede cundo se quieren
transmitir datos por DOUT (pin 4).

II. MARCO TEORICO

28

2.2.1 Eleccin de la antena Xbee

Digi ofrece en la actualidad dos gamas de productos, las Xbee Znet 2.5, y las
Xbee Pro Znet 2.5. En este apartado comparamos las dos antenas antes de
decidirnos por una de ellas:

Tabla 2.3 Comparativa de prestaciones entre Xbee.

Specification
Xbee Znet 2.5 Xbee PRO Xnet 2.5
Indoor/Urban Range Up to 133ft. (40 m) Up to 300 ft. (100 m)
Outdoor RF line-of-sight Range Up to 400 ft. (120 m) Up to 1 mile (1.6 Km)
Transmit Power Output
2mW (+3dBm), boost mode
enabled
1.25mW (+1dBm), boost
mode disabled
63mW (+18dBm)
10mW (+10 dBm) for
international variant
RF Data Rate 250,000 bps 250,000 bps
Serial Interface Data Rate
(software selectable)
1200 230400 bps
(non-standart baud rates also
supported)
1200 230400 bps
(non-standart baud rates also
supported)
Receiber Sensitivity -96 dBm, boost mode
enabled
-95 dBm, boost mode
disabled
-102 dBm

En la tabla 2.3 vemos las prestaciones que ofrecen ambos mdulos. Las Xbee
Pro ganan en cuanto al alcance de las transmisiones a cambio de tener una potencia
de salida bastante mayor. En cuanto a velocidades de transmisin, ambas son
semejantes a 250 kbps.
Por otro lado, por lo que se refiere a las caractersticas tcnicas (ver tabla 2.4),
podemos ver como las Xbee Pro tienen como desventaja, unos rangos de tensin
mucho menores (las Xbee Pro slo operan entre 3 y 3,4V y las Xbee entre 2.1 y
3.6V) que las Xbee. Otro factor en contra de las Xbee Pro es su mayor consumo (295
mA en la transmisin de datos de las Xbee Pro frente a unos 40 mA en las Xbee, y
45 mA en la recepcin para las Xbee Pro frente a 40 mA en las Xbee), esto hace que
el tiempo de vida de las bateras en las Xbee Pro sea mucho menor, tanto por el
menor margen de tensin como por los elevados consumos a los que se somete a la
batera.
II. MARCO TEORICO

29

Tabla 2.4 Comparativa de prestaciones entre Xbee.
Specification Xbee Znet 2.5 Xbee PRO Znet 2.5
Power Requirements
Supply Voltage 2.1 3.6 Volts 3.0 3.4 V
Operating Current (Transmit,
max output power)
40mA (@3.3 V, boost mode enable)
35 mA(@3.3 V, boost mode enable)
295mA (@3.3 V)
Operating Current (Receive) 40mA (@3.3 V, boost mode enable)
38 mA(@3.3 V, boost mode enable)
45 mA (@3.3V)
Idle Current (Receiber off) 15 mA 15 mA
Power-down Current <1 A @25C <1 A @25C
General
Operating Frequency Band ISM 2.4 GHz ISM 2.4 GHz
Dimensions 0.960 x 1.087 (2.438cm x 2.761cm) 0.960 x 1.297 (2.438cm x 3.294cm)
Operating Temperature -40 to 85 C (industrial) -40 to 85 C (industrial)
Antenna Options Integred whip, Chip RPSM, or UFL
Connector
Integred whip, Chip RPSM, or UFL
Connector
Networking & Security
Supported Networking
Topologies
Point-to-point, Point-to-multipoint,
Peer-to-peer, and Mesh
Point-to-point, Point-to-multipoint,
Peer-to-peer, and Mesh
Number of Channels 16 Direct Sequence Channels 13 Direct Sequence Channels
Addressing Options PAN ID and Addresses, Cluster IDs
and Endpoints (optional)
PAN ID and Addresses, Cluster IDs
and Endpoints (optional)
Agency Approvals
United States (FFC Part 15.247) OUR-XBEE2 MCQ-XBEEPRO2
Industry Canada (IC) 4214A-XBEE2 184A-XBEEPRO2
Europe (CE) ETSI ETSI
RoHS Compliant Compliant

Los factores de programacin de cada antena no condicionan la eleccin, ya
que ambas se programan exactamente igual desde X-CTU. Tampoco es un
problema el disponer tanto de las libreras como de la interfaz grfica, ya que ambos
modelos utilizan las mismas.

2.3 Qu es Arduino?

Arduino es realidad tres cosas:
Una placa hardware libre que incorpora un microcontrolador reprogramable y una
serie de pines-hembra (los cuales estn unidos internamente a las patillas de E/S del
microcontrolador) que permiten conectar all de forma muy sencilla y cmoda
diferentes sensores y actuadores.
Cuando hablamos de placa hardware nos estamos refiriendo en concreto a
una PCB (del ingls printed circuit board, o sea, placa de circuito impreso). Las
PCBs son superficies fabricadas de un material no conductor (normalmente resinas
II. MARCO TEORICO

30

de fibra de vidrio reforzada, cermica o plstico) sobre las cuales aparecen
laminadas (pegadas) pistas de material conductor (normalmente cobre). Las PCBs
se utilizan para conectar elctricamente, a travs de los caminos conductores,
diferentes componentes electrnicos soldados a ella. Una PCB es la forma ms
compacta y estable de construir un circuito electrnico (en contraposicin a una
breadboard, perfboard o similar) pero, al contrario que estas, una vez fabricada, su
diseo es bastante difcil de modificar. As pues, la placa Arduino no es ms que una
PCB que implementa un diseo de circuitera interna.
No obstante, cuando hablamos de placa Arduino, deberamos especificar el
modelo concreto, ya que existen varias placas Arduino oficiales, cada una con
diferentes caractersticas (como el tamao fsico, el nmero de pines-hembra
ofrecidos, el modelo de microcontrolador incorporado y como consecuencia, entre
otras cosas, la cantidad de memoria utilizable, etc.). Conviene conocer estas
caractersticas para identificar que placa Arduino es la que nos convendr ms en
cada proyecto.

Un software (ms en concreto, un entorno de desarrollo) gratis, libre y
multiplataforma (ya que funciona en Linux, MacOS y Windows) que debemos
instalar en nuestro ordenador y que nos permite escribir, verificar y guardar (cargar)
en la memoria del microcontrolador de la placa Arduino el conjunto de instrucciones
que deseamos que este empiece a ejecutar. Es decir: nos permite programarlo. La
manera estndar de conectar nuestro computador con la placa Arduino para poder
enviarle y grabarle dichas instrucciones es mediante un simple cable USB, gracias a
que la mayora de placas Arduino incorporan un conector de este tipo.
Los proyectos Arduino pueden ser autnomos o no. En el primer caso, una
vez programado su microcontrolador, la placa no necesita estar conectada a ningn
computador y puede funcionar autnomamente si dispone de alguna fuente de
alimentacin. En el segundo caso, la placa debe estar conectada de alguna forma
permanente (por cable USB, por cable de red Ethernet, etc.) a un computador
ejecutando algn software especfico que permita la comunicacin entre este y la
II. MARCO TEORICO

31

placa y el intercambio de datos entre ambos dispositivos. Este software especfico lo
deberemos programar generalmente nosotros mismos mediante algn leguaje de
programacin estndar como Python, C, Java, Php, etc., y ser necesario
independiente completamente del entorno de desarrollo Arduino, el cual no se
necesitara ms, una vez que la placa ya haya sido programada y est en
funcionamiento.
Un lenguaje de programacin libre. Por lenguaje de programacin se
entiende cualquier idioma artificial diseado para expresar instrucciones (siguiendo
unas determinadas reglas sintcticas) que pueden ser llevadas a cabo por maquinas.
Concretamente dentro del leguaje Arduino, encontramos elementos parecidos a
muchos otros leguajes de programacin existentes (como bloques condicionales, los
bloques repetitivos, las variables, etc.), as como tambin diferentes comandos
asimismo llamados ordenes o funciones que nos permiten especificar de una
forma coherente y sin errores las instrucciones exactas que queremos programar en
el microcontrolador de la placa. Estos comandos los escribimos mediante el entorno
de desarrollo Arduino.

2.3.1 Por Qu Elegir Arduino?

Existen muchas otras placas de diferentes fabricantes que, aun que incorporan
diferentes modelos de microcontroladores, son comparables y ofrecen una
funcionalidad ms o menos similar a la de las placas Arduino. Todas ellas tambin
vienen acompaadas de un entorno de desarrollo agradable y cmodo y de un
lenguaje de programacin sencillo y completo. No obstante, la plataforma Arduino
(hardware + software) ofrece una serie de ventajas:

9 Arduino es libre y extensible: Esto quiere decir que cualquiera que desee
ampliar y mejorar tanto el diseo hardware de las placas como el entorno de
desarrollo software y el propio lenguaje de programacin, puede hacerlo sin
problemas. Esto permite que exista un rico ecosistema de extensiones, tanto
II. MARCO TEORICO

32

de variantes de placas no oficiales como de libreras software de terceros, que
pueden adaptarse mejor a nuestras necesidades concretas.

9 Arduino tiene una gran comunidad: muchas personas lo utilizan,
enriquecen la documentacin y comparten continuamente sus ideas.

9 Su entorno de programacin es multiplataforma: se puede instalar y
ejecutar en sistemas Windows, Mac OS X y Linux. Esto no ocurre con el
software de muchas otras placas.

9 Su entorno y el lenguaje de programacin son simples y claros: son muy
fciles de aprender y de utilizar, a la vez que flexibles y completos para que
los usuarios avanzados puedan aprovechar y exprimir todas las posibilidades
del hardware. Adems, estn bien documentados, con ejemplos detallados y
gran cantidad de proyectos publicados en diferentes formatos.

9 Las placas Arduino son baratas: la placa Arduino estndar (llamada Arduino
UNO) ya preensamblada y lista para funcionar cuesta alrededor de 20 euros.
Incluso, uno mismo se la podra construir (Arduino es hardware libre,
recordemos) adquiriendo los componentes por separado, con lo que el precio
total de la placa resultante sera incluso menor.

9 Las placas Arduino son reutilizables y verstiles: reutilizables porque se
puede aprovechar la misma placa para varios proyectos (ya que es muy fcil
de desconectarla, reconectarla y reprogramarla), y verstiles porque las
placas Arduino proveen varios tipos diferentes de entradas y salidas de datos,
los cuales permiten capturar informacin de sensores y enviarles seales a
actuadores de mltiples formas.

II. MARCO TEORICO

33

2.3.2 El Modelo Del Microcontrolador

El microcontrolador que lleva la placa Arduino UNO es el modelo ARmega328P de la
marca Atmel. La P del final significa que este chip incorpora la tecnologa
Picopower (propietaria de Atmel), la cual permite un consumo elctrico
sensiblemente menor comparndolo con el modelo equivalente sin Picopower, el
ATmega328 (sin la P). De todas formas, aunque el ATmega328P pueda trabajar a
un voltaje menor y consumir menos corriente que el ATmega328 (especialmente en
los modos de hibernacin), ambos modelos son funcionalmente idnticos.
Al igual que ocurre con el resto de microcontroladores usados en otras placas
Arduino, el ATmega328P tiene una arquitectura de tipo AVR, arquitectura
desarrollada por Atmel y en cierta medida competencia de otras arquitecturas como
por ejemplo PIC del fabricante Microchip. Ms concretamente, el ATmega328P
pertenece a la subfamilia de microcontroladores megaAVR. Otras subfamilias de la
arquitectura AVR son la tinyAVR (cuyos microcontroladores son ms limitados y se
identifican con el nombre de ATtiny) y la XMEGA (cuyos microcontroladores son
ms capaces y se identifican con el nombre de ATxmega).
Cada modelo de microcontrolador tiene un nmero y ubicacin de pines
diferente, en nuestro caso concreto deberemos tener a la mano la disposicin de
pines del ATmega328P. La figura 2.5 muestra esta disposicin en el encapsulado de
tipo DIP.

Figura 2.5 Microcontrolador ATmega328P
II. MARCO TEORICO

34

Observando la imagen se puede saber que pin es el que recibe la
alimentacin elctrica (sealado como VCC), que dos pines estn conectados a
tierra (los sealados como GND), que pines son los de E/S (sealados como PBx,
PCx o PDx) y la existencia de otros pines ms especficos como el AVCC (donde se
recibe la alimentacin suplementaria para el convertidor analgico-digital interno del
chip) o el AREF (donde se recibe la referencia analgica para dicho convertidor).
Tambin se puede observar que junto el nombre de los pines E/S se indica entre
parntesis las funciones especializadas que cada uno de ellos tiene en particular
(adems de su funcin genrica de entrada/salida).

2.3.3 Memorias Del Microcontrolador

Otra cosa que hay que saber de los microcontroladores son los tipos y
cantidades de memoria que alojan en su interior. En el caso del ATmega328P
tenemos:

Memoria Flash: memoria persistente donde se almacena permanentemente
el programa que ejecuta el microcontrolador (hasta una nueva reescritura si se da el
caso). En el caso del ATmega328P tiene una capacidad de 32KB.
En los microcontroladores que vienen incluidos en la placa Arduino no
podemos usar toda la capacidad de la memoria Flash porque existen 512 bytes (el
llamado bootloader o gestor de arranque), el cual nos permite usar la placa
Arduino de una forma ms sencilla y cmoda sin tener que conocer las interioridades
electrnicas ms avanzadas del microcontrolador. Los ATmega328P que podamos
adquirir individualmente normalmente no incluyen de fbrica este pequeo programa,
por lo que si ofrecen los 32KB ntegros, pero a cambio no podremos conectarlos a
una placa Arduino y que funcionen sin ms ya que les faltara tener grabada esa
preconfiguracin.

II. MARCO TEORICO

35

Memoria SRAM: memoria voltil donde se alojan los datos que en ese
instante el programa (grabado separadamente en la memoria flash, recordemos)
necesita crear o manipular para su correcto funcionamiento. Estos datos suelen tener
un contenido variable a lo largo del tiempo de ejecucin del programa y cada uno es
de un tipo concreto (es decir, un dato puede contener un valor numrico entero, otro
un numero decimal, otro un valor de tipo carcter, tambin pueden ser cadenas de
texto fijas u otros tipos de datos ms especiales). Independientemente del tipo de
dato, su valor siempre ser eliminado cuando se deje de alimentar elctricamente al
microcontrolador. En el caso del ATmega328P esta memoria tiene una capacidad de
2KB.
Memoria EEPROM: memoria persistente donde se almacenan datos que se
desea que permanezcan grabados una vez apagado el microcontrolador para
podelos usar posteriormente en siguientes reinicios. En el caso del ATmega328P
esta memoria tiene una capacidad de 1KB, por lo que se puede entender como una
tabla de 1024 posiciones de un byte cada una.

2.3.4 Protocolos De Comunicacin I
2
C/TWI Y SPI

Cuando se desea transmitir un conjunto de datos desde un componente electrnico a
otro, se puede hacer de mltiples formas. Una de ellas es estableciendo una
comunicacin serie; en este tipo de comunicacin la informacin es transmitida bit a
bit en cada momento. Otra manera de transferir datos es mediante la llamada
comunicacin paralela, en la cual se envan varios bits simultneamente, cada uno
por un canal separado y sincronizado con el resto.
El microcontrolador, a travs de algunos de sus pines de E/S, utiliza el sistema
de comunicacin serie para transmitir y recibir rdenes y datos hacia/desde otros
componentes electrnicos. Esto es debido sobre todo a que en una comunicacin
serie solo se necesita en teora un nico canal (un nico cable), mientras que en
una comunicacin en paralelo se necesitan varios cables, con el correspondiente
incremento de complejidad, tamao y coste del circuito.
II. MARCO TEORICO

36

No obstante, no podemos hablar de un solo tipo de comunicacin serie.
Existen muchos protocolos y estndares diferentes basados todos ellos en la
transferencia de informacin en serie, pero implementando de una forma diferente
cada uno los detalles especficos (como el modo de sincronizacin entre emisor y
receptor, la velocidad de transmisin, el tamao de los paquetes de datos, los
mensajes de conexin y desconexin y de dar paso al otro en el intercambio de
informacin, voltajes utilizados, etc.). De entre el gran nmero de protocolos de
comunicacin serie reconocidos por la inmensidad variedad de dispositivos
electrnicos del mercado, los que nos interesan conocer son los que el ATmega328P
es capaz de comprender y por tanto, los que podr utilizar para contactar con esa
variedad de perifricos. En este sentido, los estndares ms importantes son:

I
2
C (Inter-integrated Circuit, tambin conocido con el nombre de TWI de TWo-wIre,
literalmente dos cables en ingls): es un sistema muy utilizado en la industria
principalmente para comunicar circuitos integrados entre s. Su principal
caracterstica es que utiliza dos lneas para transmitir la informacin: una (llamada
SDA) sirve para transferir los datos (los 0s y los 1s) y la otra (llamada lnea SCL)
sirve para enviar la seal de reloj. En realidad se necesitaran dos lneas ms: la de
alimentacin y la de tierra comn, pero estas ya se presuponen existentes en el
circuito. En la figura 2.6 se muestran las seales de las lneas SDA y SCL
correspondientes a este tipo de protocolo de comunicacin.


Figura 2.6 Estructura logia bsica I
2
C
II. MARCO TEORICO

37

Por seal de reloj se entiende una seal binaria de una frecuencia peridica
muy precisa que sirve para coordinar y sincronizar los elementos integrantes de una
comunicacin (es decir, los emisores y receptores) de forma que todos sepan cuando
empieza, cunto dura y cuando acaba la transferencia de informacin. En hojas
tcnicas y diagramas a la seal de reloj en general se le suele describir como CLK
(del ingls clock).

Cada dispositivo conectado al bus I
2
C tiene una direccin nica que lo
identifica respecto el resto de dispositivos, y que puede estar configurado como
maestro o como esclavo. Un dispositivo maestro es el que inicia la transmisin de
datos y adems genera la seal de reloj, pero no es necesario que el maestro sea
siempre el mismo dispositivo: esta caracterstica se la pueden ir intercambiando
ordenadamente los dispositivos que tengan esa capacidad.


Figura 2.7 Estructura bsica I
2
C

Tal como se muestra en el diagrama de la figura 2.7, para funcionar
correctamente tanto la lnea SDA como la SCL necesitan estar conectadas
mediante una resistencia pull-up a la fuente de alimentacin comn, la cual puede
proveer un voltaje generalmente de 5V o 3.3V (aunque sistemas con otros voltajes
pueden ser posibles).
La velocidad de transferencia de datos es de 100 Kbits por segundo en el
modo estndar (aunque tambin se permiten velocidades de hasta 3.4 Mbit/s). No
obstante, al haber una nica lnea de datos, la transmisin de informacin es half
II. MARCO TEORICO

38

dplex (es decir, la comunicacin solo se puede establecer en un sentido al mismo
tiempo) por lo que en el momento que un dispositivo empiece a recibir un mensaje,
tendr que esperar a que el emisor deje de transmitir para poder responderle.
SPI (Serial Pripherial Interface): al igual que el sistema I
2
C, el sistema de
comunicacin SPI es un estndar que permite controlar (a cortas distancias) casi
cualquier dispositivo electrnico digital que acepte un flujo de bits serie conectado al
bus SPI puede ser maestro en ingls, master o esclavo en ingls, slave-,
donde el primero es el que inicia la transmisin de datos y adems genera la seal
de reloj (aunque, como con I
2
C, con SPI tampoco es necesario que el maestro sea
siempre el mismo dispositivo) y el segundo se limita a responder.
La mayor diferencia entre el protocolo SPI y el I
2
C es que el primero requiere
de cuatro lneas (cables) en vez de dos. Una lnea (llamada normalmente SCK)
enva a todos los dispositivos la seal de reloj generada por el maestro actual;
(llamada normalmente SS) es la utilizada por ese maestro para elegir en cada
momento con que dispositivo esclavo se quiere comunicar de entre los varios que
puedan estar conectados (ya que solo pueden transferir datos con un solo esclavo a
la vez); otra (llamada normalmente MOSI) es la lnea utilizada para enviar datos -0s
y 1s- desde el maestro hacia el esclavo elegido; y la otra (llamada normalmente
MISO) es la utilizada para enviar los datos en sentido contrario: la respuesta de ese
esclavo al maestro. Es fcil ver que, al haber dos lneas para los datos la transmisin
de datos es full dplex (es decir, que la informacin puede ser transportada en
ambos sentidos a la vez).
En las siguientes figuras se muestra el esquema de lneas de comunicacin
existentes entre un maestro y un esclavo y entre un maestro y tres esclavos
respectivamente. Se puede observar que, para el caso de la existencia de varios
esclavos es necesario utilizar una lnea SS diferente por cada una de ellos, ya que
esta lnea es la que sirve para activar el esclavo concreto que en cada momento el
maestro desee utilizar (esto no pasa con las lneas de reloj, MOSI y MISO, que
son compartidas por todos los dispositivos). Tcnicamente hablando, el esclavo que
II. MARCO TEORICO

39

reciba por su lnea SS un valor de voltaje BAJO ser el que est seleccionado en ese
momento por el maestro, y los que reciban el valor ALTO no lo estarn.


Figura 2.8 Estructura bsica SPI
Como se puede ver en la Figura 2.8, el protocolo SPI respecto el I
2
C tiene la
desventaja de exigir al microcontrolador dedicar muchos ms pines de E/S a la
comunicacin externa. En cambio, como ventaja podemos destacar que es ms
rpido y consume menos energa que I
2
C.
La disposicin de pines del microcontrolador ATmega328P, los pines
correspondientes a las lneas I
2
C SDA y SCL son los nmeros 27 y 28,
respectivamente, y los pines correspondientes a las lneas SPI SS, MOSI, MISO y
SCK son los nmeros 16, 17, 18 y 19, respectivamente. Si se necesitaran ms lneas
SS (por que haya ms de un dispositivo esclavo conectado en nuestro circuito), se
podra utilizar cualquier otro pin E/S siempre que respete el convenio de poner el
valor de su voltaje de salida a BAJO cuando se desee trabajar con el dispositivo
esclavo asociado y poner a ALTO el resto de los pines SS.



II. MARCO TEORICO

40

2.3.5 El Chip ATmega16U2

La conexin USB de la placa Arduino, adems de servir como alimentacin elctrica,
sobre todo es un medio para poder transmitir datos entre nuestro computador y la
placa, y viceversa. Este trfico de informacin que se realiza entre ambos aparatos
se logra gracias al protocolo de USB, un protocolo de tipo serie que tanto como
nuestro computador como la placa Arduino son capaces de entender y manejar. No
obstante el protocolo USB es demasiado complejo para que el microcontrolador
ATmega328P pueda comprenderlo por s mismo sin ayuda, ya que l puede
comunicarse con el exterior mediante protocolos mucho ms sencillos tcnicamente
como son el I
2
C o el SPI y pocos ms. Por tanto, es necesario que la placa disponga
de un elemento traductor que facilite al ATmega328P (concretamente, al
receptor/transmisor serie de tipo TTL-UART que lleva incorporado) la manipulacin
de la informacin transferida por USB sin que este tenga que conocer los entresijos
de dicho protocolo.

Figura 2.9 ATmega16U2

II. MARCO TEORICO

41

La placa Arduino UNO R3 dispone de un chip que realiza esta funcin de
traductor del protocolo USB a un protocolo serie ms sencillo (y viceversa). Ese chip
es ATmega16U2 (figura 2.9). El ATmega16U2 es todo un microcontrolador en si
mismo (con su propia CPU, con su propia memoria - tiene por ejemplo 16 Kbytes de
memoria flash para su uso interno, de ah su nombre -, etc.) y por tanto podra
realizar muchas ms tareas que no solo la traduccin del protocolo USB. De hecho
es tcnicamente posible desprogramarlo para que haga otras cosas y convertir asi la
placa Arduino en virtualmente cualquier tipo de dispositivo USB conectado a nuestro
computador (un teclado, un ratn, un dispositivo MIDI). No obstante, por defecto el
ATmega16U2 que viene incluido en la placa Arduino viene ya con el firmware pre-
programado para realizar exclusivamente la funcin interprete al ATmega328P y ya
est.
Este firmware es software libre por lo que se puede acceder a su cdigo
fuente y tambin est disponible su correspondiente fichero .hex, dentro del
conjunto de ficheros descargados, junto con el entorno de desarrollo oficial de
Arduino (concretamente, dentro de la carpeta firmwares dentro de hardware).
En modelos de la placa Arduino anteriores al UNO (como el modelo NG,
Diecimila o el Duemilanove) el chip ATmega16U2 no vena: en su lugar apareca un
circuito conversor de USB a serie del fabricante FTDI, concretamente el FT232RL.
Una ventaja de ver sustituido el FT232RL por el ATmega16U2 es el precio. Otra
ventaja es tener la posibilidad (si somos usuarios avanzados, tal como hemos
comentado ya) de reprogramar el ATmega16U2 para que en vez de funcionar como
un simple conversor USB-SERIE pueda disimular ser cualquier otro dispositivo USB,
que, por ejemplo, con el FT232RL no podemos porque est pensado para ser tan
solo una funcin para la que fue construido.
El ATmega16U2 viene acompaado en la placa Arduino por un reloj oscilador
de cristal, de uso exclusivo para l, que sirve para mantener la sincronizacin con la
comunicacin USB.

II. MARCO TEORICO

42

2.3.6 Las Entradas y Salidas Digitales.

La placa Arduino dispone de 14 pines-hembra de entradas o salidas (segn lo
convenga) digitales, numeradas desde la 0 hasta la 13. Es aqu donde conectaremos
nuestros sensores para que la placa pueda recibir datos del entorno, y tambin
donde conectaremos los actuadores para que la placa pueda enviarles las ordenes
pertinentes, adems de poder conectar cualquier otro componente que necesite
comunicarse con la placa de alguna manera, a veces a estos pines-hembra digitales
de propsito general se les llama pines GPIO (de General Purpose Input/Output).
Todos estos pines-hembra digitales funcionan a 5 volts, pueden proveer un
mximo de 40 mA y disponen de una resistencia pull up interna de entre 20 K y
50K que inicialmente esta desconectada (salvo que nosotros indiquemos lo
contrario mediante conexin software).
Hay que tener en cuenta, no obstante, que aun que cada pin individual pueda
proporcionar hasta 40 mA como mximo en realidad, internamente la placa agrupa
los pines digitales de tal forma que tan solo pueda aportar 100 mA a la vez el
conjunto de los pines nmero 0, 1, 2, 3 y 4, y 100 mA ms el resto de los pines (del 5
al 13). Esto quiere decir que como mucho podramos tener 10 pines ofreciendo 20
mA a la vez.

2.3.7 Las entradas analgicas

La placa Arduino dispone de 6 entradas analgicas (en forma de pines-
hembra etiquetados como "A0", "A1"... hasta "A5") que pueden recibir voltajes dentro
de un rango de valores continuos de entre 0 y 5 V. No obstante, la electrnica de la
placa tan solo puede trabajar con valores digitales, por lo que es necesaria una
conversin previa del valor analgico recibido a un valor digital lo ms aproximado
posible. Esta se realiza mediante un circuito conversor analgico/digital incorporado
en la propia placa.

II. MARCO TEORICO

43

El circuito conversor es de 6 canales (uno por cada entrada) y cada cana
dispone de 10 bits (los llamados "bits de resolucin") para guardar el valor del voltaje
convertido digitalmente.

En general, la cantidad de bits de resolucin que tiene un determinado
conversor analgico/digital es lo que marca en gran medida el grado de precisin
conseguida en la conversin de seal analgica a digital, ya que cuantos ms bits de
resolucin tenga, ms fiel ser la transformacin. Por ejemplo, en el caso concreto
del conversor incorporado en la placa Arduino, si contamos el nmero de
combinaciones de 0s y 1s que se pueden obtener con 10 posiciones, vemos que hay
un mximo de 2
10
(1024) valores diferentes posibles. Por tanto, la placa Arduino
puede distinguir para el voltaje digital desde el valor 0 hasta el valor 1023. Si el
conversor tuviera por ejemplo 20 bits de resolucin, la variedad de valores digitales
que podra distinguir sera muchsimo ms grande (2
20
= 1048576) y podra afinar la
precisin mucho ms.

Esto es fcil verlo si dividimos el rango analgico de entrada (5 V - 0V = 5 V
entre el nmero mximo posible de valores digitales (1024). Obtendremos que cada
valor digital corresponde a una "ventana" analgica de aproximadamente 5V/1024=5
mV. En otras palabras: todos los valores analgicos dentro de cada rango de 5 mV
(desde 0 a 5 V) se "colapsan" sin distincin en un nico valor digital (desde 0 a
1023). As pues, no podremos distinguir valores analgicos distanciados por menos
de 5 mV.

En muchos de nuestros proyectos ya nos es suficiente este grado de
precisin, pero en otros puede que no. Si el conversor analgico/digital tuviera ms
bits de resolucin, el resultado de la divisin rango_analgico_entrada/nmero_
valores_digitales sera menor, y por tanto la conversin sera ms rigurosa. Pero
como no se pueden aumentar los bits de resolucin del conversor de la placa, si
II. MARCO TEORICO

44

queremos ms exactitud se ha de optar por otra solucin: en vez de aumentar el
denominador de la divisin anterior, se puede reducir su numerador (es decir, el
rango analgico de entrada, o ms especficamente, su lmite superior -por defecto
igual a 5 V-, ya que el inferior es 0). Este lmite superior en la documentacin oficial
se suele nombrar como "voltaje de referencia".

La manera prctica y concreta de reducir el voltaje de referencia del conversor
analgico/digital de la placa Arduino no la podemos explicar todava porque an nos
faltan los conocimientos necesarios para poder llevar a cabo todo el proceso.

Por ltimo, decir que estos pines-hembra de entrada analgica tienen tambin
toda la funcionalidad de los pines de entrada-salida digitales. Es decir, que si en
algn momento necesitamos ms pines-hembra digitales ms all de los 14 que la
placa Arduino ofrece (del 0 al 13), los 6 pines-hembra analgicos pueden ser usados
como unos pines-hembra digitales ms (numerndose entonces del 14 al 19) sin
ninguna distincin. Enseguida, a manera de resumen en la tabla 2.5 podrn
visualizar las principales caractersticas de nuestro microcontrolador receptor.

Tabla 2.5 Caractersticas tcnicas de Arduino.
Parmetro Dato
Voltaje operativo 5 V
Voltaje de entrada recomendado 7-12 V
Voltaje de entrada lmite 6-20 V
Pines de entrada y salida digital 14 (6 proporcionan PWM)
Pines de entrada analgica 6
Intensidad de corriente 40 mA
Memoria Flash 32KB (2KB reservados para el bootloader)
SRAM 2 KB
EEPROM 1 KB
Frecuencia de reloj 16 MHz

II. MARCO TEORICO

45

2.3.8 Otros Usos De Los Pines-Hembra De La Placa

Existen determinados pines-hembra de entrada/salida digitales, que adems de su
funcin estndar, tienen otras funciones especializadas. Por ejemplo:

Pin 0 (RX) y pin 1 (TX): permiten que el microcontrolador ATmega328P pueda
recibir directamente datos en serie (por el pin RX) o transmitirlos (por el pin TX) sin
pasar por la conversin USB-Serie que realiza el chip ATmega16U2. Es decir, estos
pines posibilitan la comunicacin sin intermediarios de dispositivos externos con el
receptor/transmisor serie (de tipo TTL-UART) que incorpora el propio ATmega328P.
De todas maneras, estos pines estn internamente conectados (mediante
resistencias de 1 K) al chip ATmega16U2, por lo que los datos disponibles en el
USB tambin lo estarn en estos pines.

Hay que aclarar que en la placa estn incrustados un par de LEDs etiquetados
como RX y TX, pero que, a pesar de su nombre, no se encienden cuando se
reciben o transmiten datos de los pines 0 y 1, sino solamente cuando se reciben o
transmiten datos provenientes de la conexin USB a travs del chip ATmega16U2.

Pines 2 y 3: se pueden usar, con la ayuda de programacin software, para gestionar
interrupciones. No obstante, este tema es relativamente avanzado y no lo
abordaremos en este libro.

Pines 10 (SS), 11 (MOSI), 12 (MISO) y 13 (SCK): se pueden usar para conectar
algn dispositivo con el que se quiera llevar a cabo comunicaciones mediante el
protocolo SPI. Estudiaremos casos concretos ms adelante.

Pin 13: este pin est conectado directamente a un LED incrustado en la placa
(identificado con la etiqueta "L") de forma que si el valor del voltaje recibido por este
pin es ALTO (HIGH), el LED se encender, y si dicho valor es BAJO (LOW), el LED
II. MARCO TEORICO

46

se apagar. Es una manera sencilla, y rpida de detectar seales de entradas
externas sin necesidad de disponer de ningn componente extra.

Tambin existen un par de pines-hembra de entrada analgica que tienen una
funcin extra adems de la habitual:

Pines A4 (SDA) y A5 (SCL): se pueden usar para conectar algn dispositivo con el
que se quiera llevar a cabo comunicaciones mediante el protocolo l2C/TWI. La placa
Arduino ofrece (por una simple cuestin de comodidad y ergonoma) una duplicacin
de estos dos pines-hembra en los dos ltimos pines-hembra tras el pin "AREF", los
cuales estn sin etiquetar porque no hay ms espacio fsico.

Finalmente, a lo largo de la placa existen diferentes pines-hembra no
comentados todava que no funcionan ni como salidas ni como entradas porque
tienen un uso muy especfico y concreto:

Pin AREF: ofrece un voltaje de referencia externo para poder aumentar la precisin
de las entradas analgicas. Estudiaremos su uso prctico en el captulo 6.

Pin RESET: si el voltaje de este pin se establece a valor BAJO (LOW), el
microcontrolador se reiniciar y se pondr en marcha el bootloader. Para realizar
esta misma funcin, la placa Arduino ya dispone de un botn, pero este pin ofrece la
posibilidad de aadir otro botn de reinicio a placas supletorias (es decir, placas que
se conectan encima de la placa Arduino para ampliarla y complementarla), las cuales
por su colocacin puedan ocultar o bloquear el botn de la placa Arduino.

Pin IOREF: en realidad este pin es una duplicacin regulada del pin "Vin". Su funcin
es indicar a las placas supletorias conectadas a nuestra placa Arduino el voltaje al
que trabajan los pines de entrada/salida de esta, para que las placas supletorias se
II. MARCO TEORICO

47

adapten automticamente a ese voltaje de trabajo (que en el caso del modelo UNO
ya sabemos que es 5 V).

Pin sin utilizar: justo el pin a continuacin del IOREF, el cual est sin etiquetar,
actualmente no se utiliza para nada, pero se reserva para un posible uso futuro.

Una vez conocidos todos los pines-hembra de la placa Arduino UNO, es muy
interesante observar qu correspondencia existe entre cada uno de ellos y las
patillas microcontrolador ATmega328P. Porque en realidad, la mayora de estos
pines-hembra lo que hacen es simplemente ofrecer de una forma fcil y cmoda una
conexin directa a esas patillas, y poco ms.

En la figura 2.10 vemos el esquemtico del Hardware del equipo:

Figura 2.10 Esquema Hardware de la placa Arduino Uno.

II. MARCO TEORICO

48

2.3.9 Arduino Mega 2560
Placa basada en el microcontrolador ATmega2560. Como caractersticas ms
destacables diremos que tiene 54 pines de entrada/salida digitales (de los cuales 14
pueden ser usados como salidas analgicas PWM), 16 entradas analgicas y 4
receptores/transmisores serie TTL-UART. Consta de una memoria Flash de 256
Kilobytes (de los cuales 8 estn reservados para el bootloader), una memoria SRAM
de 8 KB y una EEPROM de 4 KB. Su voltaje de trabajo es igual al del modelo UNO:
5V.
En la seccin correspondiente a esta placa dentro de la web oficial de Arduino
podemos descargarnos los ficheros del diseo esquemtico de la placa en PDF, los
ficheros del diseo de la PCB en el formato propio del programa EAGLE y una
imagen ilustrativa del mapeado de los pines del microcontrolador con relacin a los
pines de la placa. Tambin nos podemos descargar la documentacin oficial del
microcontrolador ATmega2560.
La placa Arduino Mega tiene tres puertos adicionales de serie: Serial1 en los
pines 19 (RX) y 18 (TX), Serial2 en los pines 17 (RX) y 16 (TX), Serial3 en los pines
15 (RX) y 14 (TX). Para utilizar estos pines para comunicarse con el ordenador
personal, necesitars un adaptador USB adicional a serie, ya que no estn
conectados al adaptador USB-Serie de la placa Arduino Mega.

Figura 2.11 Puertos seriales del Arduino MEGA
II. MARCO TEORICO

49

2.4 Qu Es Un IDE?

Un programa es un conjunto concreto de instrucciones, ordenadas y agrupadas de
forma adecuada y sin ambigedades que pretende obtener un resultado
determinado. Cuando decimos que un microcontrolador es "programable", estamos
diciendo que permite grabar en su memoria de forma permanente (hasta que
regrabemos de nuevo si es necesario) el programa que deseemos que dicho
microcontrolador ejecute. Si no introducimos ningn programa en la memoria del
microcontrolador, este no sabr qu hacer.

Las siglas IDE vienen de Integrated Development Environment, lo que
traducido a nuestro idioma significa Entorno de Desarrollo Integrado. Esto es
simplemente una forma de llamar al conjunto de herramientas software que permite a
los programadores poder desarrollar (es decir, bsicamente escribir y probar) sus
propios programas con comodidad. En el caso de Arduino, necesitamos un IDE que
nos permita escribir y editar nuestro programa (tambin llamado "sketch" en el
mundo de Arduino), que nos permita comprobar que no hayamos cometido ningn
error y que adems nos permita, cuando ya estemos seguros de que el sketch es
correcto, grabarlo en la memoria del microcontrolador de la placa Arduino para que
este se convierta a partir de entonces en el ejecutor autnomo de dicho programa.

Para poder empezar a desarrollar nuestros propios sketches (o probar alguno
que tengamos a mano) debemos instalar en nuestro computador el IDE que nos
proporcione el proyecto Arduino.

2.4.1 El Serial Monitor y Otras Terminales Serie.

El "Serial monitor" es una ventana del IDE que nos permite desde nuestro
computador enviar y recibir datos textuales a la placa Arduino usando el cable USB
(ms exactamente, mediante una conexin serie). Para enviar datos, simplemente
II. MARCO TEORICO

50

hay que escribir el texto deseado en la caja de texto que aparece en su parte
superior y clicar en el botn "Send" (o pulsar Enter). Aunque, evidentemente, no
servir de nada este envo si la placa no est programada con un sketch que sea
capaz de obtener estos datos y procesarlos. Por otro lado, los datos recibidos
provenientes de la placa sern mostrados en la seccin central del "Serial monitor",
tal como se muestra en la figura 2.12.


Figura 2.12 Monitor Serial

Es importante elegir mediante la caja desplegable de la parte inferior derecha
del "Serial monitor" la misma velocidad de transmisin (en bits/s, tambin llamados
"baudios") que la que se haya especificado en el sketch ejecutado en la placa,
porque si no, los caracteres transferidos no sern reconocidos correctamente y la
comunicacin no tendr sentido.
Tambin es importante recordar que en sistemas MacOSX y Linux la placa
Arduino UNO se auto resetea (es decir, recomienza a ejecutar el sketch desde el
II. MARCO TEORICO

51

principio) cada vez que abrimos el "Serial monitor" y conectamos con ella. Esto con
la placa Leonardo no ocurre.
No solo mediante el "Serial monitor" podemos comunicarnos mediante una
conexin serie (a travs de USB) con la placa. Se puede utilizar cualquier otro
programa que permita enviar y recibir datos a travs de conexiones de este tipo.
Estos programas se suelen denominar "terminales serie". En los repositorios de
Ubuntu y Fedora (y de la mayora de distribuciones Linux) podemos encontrar varios,
como "gtkterm", "cutecom", "picocom" o "minicom", entre otros. El "Serial monitor" es
una ventana del IDE que nos permite desde nuestro computador enviar y recibir
datos textuales a la placa Arduino usando el cable USB (ms exactamente, mediante
una conexin serie). Para enviar datos, simplemente hay que escribir el texto
deseado en la caja de texto que aparece en su parte superioi y clicar en el botn
"Send" (o pulsar Enter). Aunque, evidentemente, no servir de nada este envo si la
placa no est programada con un sketch que sea capaz de obtener estos datos y
procesarlos. Por otro lado, los datos recibidos provenientes de la placa sern
mostrados en la seccin central del "Serial monitor".

Es importante elegir mediante la caja desplegable de la parte inferior derech;
del "Serial monitor" la misma velocidad de transmisin (en bits/s, tambin llamado:
"baudios") que la que se haya especificado en el sketch ejecutado en la placa,
porque si no, los caracteres transferidos no sern reconocidos correctamente y I;
comunicacin no tendr sentido.

Tambin es importante recordar que en sistemas MacOSX y Linux la plac;
Arduino UNO se auto resetea (es decir, recomienza a ejecutar el sketch desde e
principio) cada vez que abrimos el "Serial monitor" y conectamos con ella. Esto con I;
placa Leonardo no ocurre.
No solo mediante el "Serial monitor" podemos comunicarnos mediante un;
conexin serie (a travs de USB) con la placa. Se puede utilizar cualquier otrc
II. MARCO TEORICO

52

programa que permita enviar y recibir datos a travs de conexiones de este tipo
Estos programas se suelen denominar "terminales serie". En los repositorios de
Ubuntu y Fedora (y de la mayora de distribuciones Linux) podemos encontrar varios
como "gtkterm", "cutecom", "picocom" o "minicom", entre otros.

2.5 Xbee Shields

Adems de las placas Arduino propiamente dichas, tambin existen los llamados
shields (en ingls significa escudo) no es ms que una placa de circuito impreso
que se coloca en la parte superior de la placa de Arduino y se conecta a ella
mediante el acoplamiento de sus pines sin necesidad de ningn cable. Su funcin es
actuar como placas supletorias, ampliando las capacidades y complementando la
funcionalidad de la placa Arduino base de una forma ms compacta y estable.
Dependiendo el modelo, incluso se pueden apilar varios shields uno encima
de otro. Esto depender de si el shield inferior ofrece pines-hembra para poder
acoplarlos a los pines sobresalientes del dorso del shield superior.
Normalmente, los shields comparten las lneas GND, 5 volts (0 3.3 Volts)
RESET o AREF con la placa de Arduino, y adems suelen monopolizar el uso de
algunos pines de entrada/salida para su propia comunicacin con ella, por lo que
estos quedan inutilizados para cualquier otro uso. Por ejemplo, si se acoplan varios
shields uno sobre otroy todos se comunican mediante SPI con la placa Arduino,
todos ellos podrn utilizar sin problemas los pines comunes correspondientes a las
lneas MISO, MOSI y SCLK, pero cada una de ellos deber usan un pin diferente
como la lnea CS.
Por otro lado, hay que tener en cuenta los requerimientos de alimentacin
elctrica que necesitan los shields. Ya sabemos que una placa Arduino recibe
alrededor de 500 mA (ya sea mediante conexin USB o mediante conexin Jack
externa), por lo que la corriente que queda para el funcionamiento de un posible
shield es pequea. Ejemplos de shields que consumen mucho (de hasta 300 mA)
son los que tienen pantallas LCD o los que proporcionan conectividad Wi-Fi.
II. MARCO TEORICO

53

Tambin hay que tener en cuenta si un shield determinado necesita una tensin de
3.3 V.
Existen literalmente centenares de shields construidos por la comunidad
compatibles con la placa UNO que le aportan un plus de versatilidad, enseguida se
hablara un poco sobre uno de ellos que se utiliz en la elaboracin de este proyecto.

2.5.1 Arduino Wireless SD Shield

Este shield est pensado para permitir a una placa Arduino UNO poderse comunicar
inalmbricamente mediante el uso de un mdulo Xbee o similar. Esto permite
establecer un enlace con otro dispositivo Xbee a una distancia de hasta unos 100
metros en interior y de hasta unos 300 metros en exterior con lnea de visin directa.
Igual que ocurre con el resto de shields oficiales, una vez conectado este
shield sobre la placa UNO gracias a la ristra de pines que encaja perfectamente
arriba y abajo, para nuestros circuitos utilizaremos a partir de entonces las entradas y
salidas ofrecidas por los pines-hembra de este shield. Estas entradas y salidas tienen
exactamente la misma disposicin y funcionalidad que las de la placa UNO e, incluso
si fuese necesario, se podra conectar sin problemas un segundo shield en la parte
superior de este shield.

Este shields dispone de un conmutador etiquetado como Serial Select que
sirve para determinar cmo se comunicara el mdulo Xbee con la placa Arduino
sobre la que se encuentra. Si el conmutador est colocado en la posicin Micro, los
datos recibidos por el mdulo Xbee llegaran sin intermediarios al microcontrolador
(seal RX) y los datos enviados desde el microcontrolador (seal TX) serna
transmitidos tanto hacia el modulo como hacia el posible conmutador que est
conectado va USB. No obstante, en esa posicin el ATmega328P no podr ser
programado a travs del USB.
Si el conmutador est colocado en la posicin USB, el mdulo Xbee se
comunicara directamente con el chip ATmega16U2 (suponiendo que estamos
II. MARCO TEORICO

54

usando la placa UNO) ignorando completamente la presencia del microcontrolador
ATmega328P. En esta posicin, el mdulo Xbee ser capaz de comunicarse
directamente con un conmutador conectado va USB para poder ser configurado y
utilizado con total independencia del resto de elementos de la placa Arduino. No
obstante, para que el modo USB pueda funcionar correctamente, hay que tener la
precaucin de programar previamente el microcontrolador ATmega328P con un
cdigo Arduino con sus funciones setup() y loop.


Figura 2.13 Arduino Wireless SD Shield

El shield mostrado en la figura 2.13 tambin incorpora un zcalo para colocar
una tarjeta microSD, la cual se podr utilizar mediante la librera de programacin
SD, que viene por defecto en el leguaje Arduino. Para poder comunicarse con esta
tarjeta, la placa Arduino UNO utiliza el protocolo SPI, empleando para ello como
pines SS el nmero 4, adems de los pines 11,12 y 13. Esto quiere decir que estos
cuatro pines del shield no se podrn utilizar para otra cosa y por lo tanto, disponemos
de 4 entradas/salidas digitales menos.




II. MARCO TEORICO

55

2.5.2 Caractersticas de las tarjetas SD

Secure Digital (SD) es un formato de tarjeta de memoria no voltil diseada para ser
usada en dispositivos porttiles (telfonos mviles, cmaras digitales, computadores
porttiles, etc.) cuya especificacin es mantenida por la SD Card Association
(https://www.sdcard.org), entidad que engloba muchos fabricantes de hardware.
El estndar SD incluye 4 "familias", las cuales son las siguientes (por orden
cronolgico de aparicin): las tarjetas originales (SDSC -Standard capacity-); las
tarjetas de alta capacidad (SDHC -High capacity- que permiten almacenar hasta 32
Gbytes); las tarjetas de capacidad extendida (SDXC -Extended capacity- que
permiten almacenar hasta 2048 GBytes); y las tarjetas que combinan
almacenamiento de datos con funciones de entrada/salida (SDIO).
Los dispositivos que alojan las tarjetas SD siempre son compatibles "hacia
atrs" (es decir: si el dispositivo es compatible con SCXC, tambin lo ser con SCHC
y SDSC, por ejemplo). No obstante, cada una de estas familias redefine sus
conexiones internas, por lo que una tarjeta SCXC (por ejemplo) no puede ser
utilizada dentro de dispositivos que no sean explcitamente compatibles con esa
familia en concreto.
Desgraciadamente, las tarjetas SDXC se comercializan pre-formateadas con
el sistema de ficheros privativo y patentado exFAT de Microsoft, por lo que algunos
dispositivos es posible que no sean capaces de leer su contenido. En estos casos,
para que estas tarjetas sean reconocidas, se deben formatear con otro sistema de
ficheros, generalmente FAT32. De hecho, la mayora de tarjetas SD de las otras
familias se suelen adquirir en cualquier tienda local de electrnica ya formateadas en
el sistema FAT32. El FAT32 es el sistema de ficheros ms extendido en tarjetas SD
debido a que la gran mayora de aparatos electrnicos que utilizan este tipo de
tarjetas (cmaras, mviles, etc.) son capaces de reconocer este formato sin
problemas.

II. MARCO TEORICO

56

Si necesitamos formatear una tarjeta SD en el sistema FAT32 o bien FAT16 (bien
porque la adquirimos sin formato o bien porque le queremos quitar el que tiene)
debemos conectarla mediante un lector de tarjetas apropiado a un computador para
que este la reconozca como un dispositivo de almacenamiento ms. Una vez
reconocida, el proceso concreto a seguir depender del sistema operativo instalado
en el computador y de las aplicaciones especializadas proporcionadas por ste. De
todas formas, desde la SD Card Association recomiendan usar la utilidad de
formateo desarrollada por ellos mismos (solo disponible para sistemas Windows y
Mac OS X).

Figura 2.14 Memoria MicroSD

Las formas fsicas con las que se comercializan las cuatro familias son tres:
"SD", "miniSD" y "microSD", tal como se puede ver en la ilustracin de la figura 2.14.
En general (salvo alguna excepcin aislada), existen combinaciones de todas las
familias con todas las formas. En el mercado podemos encontrar adaptadores que
permiten el uso de una tarjeta ms pequea en un zcalo grande y tambin
dispositivos USB que contienen zcalos de mltiples tamaos para poder insertar all
tarjetas SD (y de otros formatos) y posibilitar que en un computador las pueda leer, si
es que este no lleva ya incorporados estos zcalos de fbrica.

Por otro lado, la velocidad mnima garantizada de transferencia de datos viene
definida por la "clase" de la tarjeta (la cual puede ser de cualquier familia). As,
encontramos tarjetas de Clase 2 (2 MBytes/s), de Clase 4 (4 MBytes/s), de Clase 6
(6 MBytes/s) o de Clase 10 (10 MBytes/s). La velocidad mxima puede variar
bastante entre distintas tarjetas: el modo Ultra-High Speed (UHS) -implementado en
II. MARCO TEORICO

57

algunas tarjetas SDHC y en casi todas las SDXC-, permite velocidades tericas de
hasta aproximadamente 100 MBytes/s en su versin "I" y de hasta aproximadamente
300 MBytes/s y en su versin "II", siempre y cuando el dispositivo donde se aloje la
tarjeta en cuestin sea capaz de gestionar estas velocidades tambin.
Como la mayora de los formatos de tarjeta de memoria, el SD est cubierto
por numerosas patentes y marcas registradas, y solo se puede licenciar a travs de
la SD Card Association. Para solucionar este problema, un mtodo comn es utilizar
el modo SPI/MMC (que las tarjetas SD implementan siempre) para emular el
comportamiento de las antiguas tarjetas MultiMediaCard. Concretamente, en este
modo algunos de los pines de la tarjeta son usados como las lneas MOSI, MISO,
SCK y SS del protocolo SPI (adems de usar otros pines para conexiones a
alimentacin, tierra o nada). De esta forma se puede utilizar una conexin que,
aunque ms lenta, es compatible con los puertos SPI de muchos microcontroladores.
Otros modos de transferencia soportados por las tarjetas SD son el llamado modo
"un-bit" (propietario) y el modo "cuatro-bit" (que soporta transferencias paralelas de
cuatro bits, tambin propietario), los cuales utilizan los pines de la tarjeta de otra
forma.

Figura 2.15 Configuracin de las memorias SD y MicroSD
II. MARCO TEORICO

58

2.6 LCD grfico de 128x64
La mayora de los LCDs grficos usan un controlador como el KS0108 (o
compatible). Cada controlador tiene una memoria de 512 bytes interna y por lo tanto
permite controlar un display de 64x64 pxeles. El truco que usan los diplays ms
grandes es usar un controlador por cada fraccin de la pantalla, es decir, un display
de 128x64 tiene 2 controladores, un display de 196x64 tiene 3 controladores, y uno
de 128x128 tiene 4 controladores. En la figura 2.16 podemos ver el diagrama a
bloques correspondiente asi como tambin la imagen fsica del mismo en la figura
2.18.

Figura 2.16 Diagrama a bloques del LCD 128X64


Figura 2.17 LCD grafico 128X64
II. MARCO TEORICO

59

Cada controlador es independiente, es decir, no transmiten informacin entre
ellos. Para elegir a qu controlador hablarle, se usan dos lneas de control, llamadas
CS1 y CS2 (CS = Chip Select). Bsicamente acta como una "direccin" de 2 bits,
que elige a cul de los 4 controladores posibles se desea hablar. El controlador no
tiene generador interno de fuentes, por lo que si se desea escribir un texto, ser
necesario almacenar los pxeles de cada carcter en un microcontrolador o memoria
externa. En la tabla 2.6 se hace la descripcin de cada uno de los pines de nuestro
GLCD 128X64
Tabla 2.6 Descripcin de Pines
Pin No. Symbol Level Description
1 Vdd 5.0 V Supply voltage for logic and LCD (+)
2 Vss 0 V Ground
3 V0 - Operating voltage for LCD (variable)
4 ~ 11 DB0 ~ DB7 H/L Data bit 0~7
12 CS1 L Chip select signal for IC1
13 CS2 L Chip select signal for IC2
14 /RES L Reset signal
15 R/W H/L H: read (MUP< module),L: write (MPU >module)
16 D/I H/L H: data, L: instruction code
17 E H, H L Chip enable signal
18 VEE - Operating voltage for LCD (variable)
19 A 4.2 V Backlight power supply
20 K 0 V Backlight power supply

La mayora de los LCDs poseen internamente un generador de tensin negativa,
necesario para manejar los segmentos propiamente dichos. Para controlar el
contraste, es necesario usar un preset de 20 K, conectado entre VEE y VDD (en los
extremos) y la pata del medio a V0. Las patas A y K estn conectadas a un LED
interno, deberan ser conectadas a 5V y 0V correspondientemente, con una
resistencia de 100-200 en serie para asegurarse de que el LED est protegido. El
siguiente diagrama de la figura 2.18 muestra como alimentar el LCD y controlar el
contraste del mismo.
II. MARCO TEORICO

60


Figura 2.18 Configuracin para Alimentar el GLCD 128X64

2.7 Sensor De Corriente. Descripcin

El sensor de corriente es un dispositivo capaz de detectar la presencia de corriente
elctrica (una lnea de alimentacin para el caso del sistema de control en estudio).
Una vez detectada dicha corriente, el sensor transforma la medida de corriente en
una tensin; la cual es proporcional y representativa de la primera. Luego, este
sensor enva esta seal representativa a su salida, la cual se emplear para enviar la
seal a la unidad de procesamiento, para su respectivo anlisis.

Para poder seleccionar el componente adecuado se emplearn cuadros
comparativos entre los posibles componentes que se pueden emplear. Los posibles
componentes que se pueden emplear se muestran en la tabla 3.

Tabla 2.7 Comparativa entre diferentes sensores de corriente.
Tipo de sensor Shunt de
corriente
Transformador
de corriente
Bobina de
Rogowski
Sensor de
Efecto Hall
Consumo de potencia Alto Bajo Bajo Bajo
Variacin de la salida
con respecto a la
Temperatura
Medio Bajo Muy bajo Medio
Linealidad dentro del
rango de medicin
Muy
buena
Buena Buena Buena
Costo Muy bajo Medio Bajo Bajo
Problema de error de
desplazamiento
Si No No Si
Problema de
saturacin
e histresis
No No No Si
Aislamiento elctrico No Si No Si
Capacidad de
medicin de altas
corrientes
Muy mala Buena Buena Buena
II. MARCO TEORICO

61

Con la informacin del cuadro se podra concluir que la opcin que se elegira sera
la del sensor bobina de Rogowski. Sin embargo, no se encontr una fuente que
proporcionara informacin completa y pertinente acerca de las caractersticas que
podra poseer un dispositivo de este tipo (por ejemplo, una hoja tcnica de uno que
se venda en el mercado), ya que, en todos los documentos encontrados, la propia
persona realizaba la construccin de esta bobina. Por esta razn, se descart esta
tecnologa.
Otra posible tecnologa a emplear era el transformador de corriente. Sin
embargo, la desventaja que presenta es que podra introducir ruido al sistema. Por
otro lado, los sensores de efecto Hall resultan ser tambin muy buenos para
emplearse en este tipo de mediciones, ya que en el mercado se pueden encontrar
sensores de este tipo que poseen internamente elementos que minimizan las
desventajas que comnmente presentan (las que se mostraron en la tabla). Un
ejemplo de ello es el sensor ACS712 de Allegro MicroSystems.
Este sensor, como se mencion, contiene elementos que minimizan las
desventajas que poseera uno tpico de este tipo, y a un bajo precio. Por ello, se
concluye que esta tecnologa sera mejor que la del transformador de corriente, ya
que posee un bajo precio, no introduce ruido y minimiza sus desventajas. En
consecuencia, se escogi para el diseo del sistema a este sensor, el cual ser
descrito a continuacin.

2.7.1 Caractersticas Del Sensor De Corriente ACS712

Enseguida se muestran algunas de las principales caractersticas de nuestro sensor
de corriente:

9 Provee de una econmica y precisa solucin para realizar mediciones de
corriente elctrica alterna, ya que presenta un bajo costo.
9 Su presentacin es un circuito integrado, el cual ocupa un espacio bien
reducido.
II. MARCO TEORICO

62

9 No requiere de una resistencia externa para realizar la medicin, simplemente
se coloca la lnea de paso de la corriente por los pines indicados.
9 Presenta un rango de medicin ptima de hasta 30 amperios alternos, el cual
es un rango suficiente para el lmite de consumo que tiene el sistema de
control.
9 Presenta una sensibilidad de 185mV/A, por lo que se tiene un valor de voltaje
de salida menor a 1 voltio continuo en el peor caso (cuando se consume mil
vatios). Gracias a ello, esta salida se podra conectar directamente a la
entrada del siguiente elemento del sistema (la unidad de procesamiento), ya
que se tiene una seal adecuada (un voltaje entre cero y cinco voltios).
9 Posee en uno de sus pines la posibilidad de implementar un filtro pasabajos,
con la finalidad de eliminar el ruido, pero sin provocar una indeseable
atenuacin en su salida, la cual se producira si se implementara dicho filtro en
el pin de salida directamente.
9 Presenta una etapa para minimizar el error de desplazamiento indeseado y
una etapa que se llama tcnica de estabilizacin por interruptores, las cuales
logran producir un preciso y proporcional voltaje de salida.
El diagrama de bloques de la figura 2.19 de este sensor se muestra a continuacin:









Figura 2.19 Diagrama de bloques funcional del sensor de corriente ACS712.
III. DESARROLLO

63








CAPTULO III
DESARROLLO

III. DESARROLLO

64

CAPITULO III. DESARROLLO

En este captulo se detalla el procedimiento que sirvi para poder implementar este
proyecto, mostrando los aspectos fundamentales as como las pruebas llevadas a
cabo que fueron base de la experimentacin y objeto de mejora para la innovacin
de este sistema inalmbrico.
Inicialmente se pens en un sistema completamente autnomo capaz de
monitorear inalmbricamente el consumo elctrico de cualquier dispositivo
electrnico conectado a la red domstica, capaz de almacenar informacin y poderla
proyectar de manera fcil y sencilla. As como poder observar estos datos de manera
remota y local. Enseguida plasmare el procedimiento que nos llev a crear un
sistema tal como se plante y se requiri.

3.1 Diseo de la lgica de programacin del PIC16F877A

La implementacin de un microcontrolador como lo es el PIC16F877A fue pensado
para crear un sistema de transmisin sencillo, econmico y verstil. Este tipo de
microcontroladores tiene caractersticas que fundamentalmente se basan en un
convertidor analgico digital de 10 bits de resolucin, as como de un puerto serial y
paralelo capaz de transmitir datos e informacin de manera eficiente.
Nuestro sistema de monitoreo se le adapto una pantalla grafica con el fin de
presentar de manera local la informacin de forma ms detallada y presentable
posible, todo esto haciendo uso del puerto paralelo del microcontrolador y las
libreras existentes para su implementacin.
El sistema fue diseado para realizar una transmisin semi-duplex en la cual
el receptor declara estar listo para realizar sus funciones. En caso contrario, el
transmisor podr alertar al usuario que no fue capaz de realizar la conexin y
transmisin de datos, dando oportunidad al sistema de volver a realizar un nuevo
intento.
III. DESARROLLO

65

El sistema fue creado para medir dos magnitudes, por lo que se configuraron 2
canales del convertidor analgico digital con una resolucin de 10 bits, que
trabajando de manera casi simultnea, en lapsos de tiempo muy cortos se pudieron
obtener datos inters de manera muy sencilla y prctica. Para poder calcular la
resolucin en voltaje se utiliz la siguiente ecuacin:

Rcsolucion =
I
IN
2
N
- 1


En este caso no fue necesario utilizar algn voltaje de referencia, pues no se
sensaron diferencias de potencial superiores a los 5 volts, mismos que tambin
fueron usados para alimentar nuestro microcontrolador.
De la ecuacin, se determin una resolucin de 4.88mV por cada una de las
cuentas de los 1023 valores otorgados por el convertidor, de esta manera,
aseguramos que nuestro transmisor ser confiable y preciso.
Fue importante considerar los tiempos de retardo generados en la lectura de
datos, en la transmisin y presentacin de los mismos, pues para el microcontrolador
le es imposible trabajar de manera simultnea, generando retrasos y errores en la
recepcin.
Enseguida, en la figura 3.1 se muestra el diagrama a bloques correspondiente
al transmisor donde plasmare a grandes rasgos y de manera concreta la lgica
utilizada para implementar esta etapa.
III. DESARROLLO

66


Figura 3.1 Diagrama de flujo de la etapa de transmisin
III. DESARROLLO

67

3.2 Hardware. Diseo del Transmisor.

En base al diagrama de flujo anterior y a los requerimientos del sistema nos dimos a
la tarea de disear e implementar un sistema bsico, que fuese prctico y
relativamente costeable para el usuario, como ya se ha mencionado anteriormente.
Enseguida se muestra el diagrama, donde podemos observar la conexin del
Xbee junto con el explorador con regulacin de voltaje, el cual se encarga de acoplar
los niveles de los lgicos tanto del microcontrolador como del Xbee, que es de 5
Volts y 3.3 Volts, respectivamente. Es importante mencionar que para efecto de
pruebas y simulacin se implementaron dos potencimetros para variar los voltajes a
la entrada de los canales del ADC los cuales simularon los sensores de voltaje y
corriente.

Figura 3.2 Diagrama de prueba del transmisor.

Adems, tambin se incluye la pantalla LCD grafica de 128X64 para la
presentacin de datos conectada de manera paralela al microcontrolador. Se incluy
III. DESARROLLO

68

un led indicador para mostrar al usuario el instante en que el microcontrolador est
tratando de establecer conexin con el receptor.
Esto es, de manera sencilla como se conform el transmisor, utilizando un
simple microcontrolador PIC16F874.

3.3 Programacin. Transmisor con PIC16F877A

La empresa Labcenter Electronics, ha desarrollado una excelente herramienta que
permite simular circuitos electrnicos adems de desarrollar PCBs a partir de
diagramas elctricos, layouts y footprints. ISIS Proteus ha incursionado directamente
en la simulacin siendo de gran ayuda para la elaboracin de este proyecto de tesis.
Enseguida se realizara una descripcin paso a paso, de cmo fue
estructurndose el programa, que posteriormente sirvieron para hacer la simulacin y
realizar las primeras pruebas, el programa fue probado por etapas para poder
evaluar individualmente cada una de ellas.
El IDE de programacin que se utilizo fue el CCS C Compiler, el cual por aos
ha sido utilizado por alumnos de ingeniera y maestra, permitiendo incursionar en la
programacin de microcontroladores PIC de Microchip. El lenguaje C, que siendo
adaptado a microcontroladores genero una gran revolucin en la forma de generar
proyectos e innovar sistemas existentes mejorndolos de manera significativa.

3.4 Transmisor. Descripcin Del Programa Fuente.

Como se puede observar, y como en cualquier otro programa o lenguaje es
necesario definir las libreras que se utilizaran para nuestro microcontrolador
PIC16F877A, tambin la correspondiente para la pantalla LCD grafica HDM64GS12
y su respectiva librera para los grficos. Aqu es donde la comunicacin serial ser
configurada en base los requerimientos del sistema, donde definiremos los baudios
(velocidad de transmisin), los pines para realizar la transmisin y recepcin de datos
as como si es necesaria la habilitacin del bit de paridad.

III. DESARROLLO

69

//**********************DEFINICION DE LIBRERIAS**********************

#include <16F877A.h>
#include <HDM64GS12.C>
#include <GRAPHICS.C>
#include <math.h>
#device adc=10
#fuses HS,NOWDT,PUT
#use delay(clock=20000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

Las variables globales sern tomadas en cuenta en la memoria del microcontrolador
en toda la ejecucin del programa por lo que es importante identificar aquellas que
no necesiten cargarse de manera permanente en la memoria para poder ahorrar
recursos del microcontrolador.

//*************************VARIABLES GLOBALES************************

char rcvchar=0;

Una parte importante del proyecto fue la elaboracin de grficos para la presentacin
de datos utilizando el microcontrolador PIC16F877. Inicialmente se plane realizar la
presentacin con alguna imagen que fuese generada utilizando la pantalla grafica de
128X64 pixeles haciendo referencia a los transmisores utilizados.
Primeramente, se seleccion la imagen que necesitamos proyectar, en este
caso una imagen cercana a la resolucin que puede proyectar como mximo nuestro
LCD, enseguida se muestra la figura 3.3.


Figura 3.3 Logo utilizado para crear
Imagen para LCD grafico
III. DESARROLLO

70


LCD Assistant es una herramienta utilizada para generar matrices tomando
como base imgenes monocromticas (blanco y negro) que pueden usarse en
arreglos en programacin para poder generar grficos. La imagen hace referencia al
programa que utilizaremos. Enseguida se muestra en la figura 3.4 el programa
utilizado.

Figura 3.4 Programa gestor de imgenes LCD Assistant

Haciendo uso de Paint de Windows, guardamos nuestra imagen como mapa
de bits monocromtico (ver figura 3.5) para obtener una imagen en blanco y negro,
de tal manera que podamos trabajar con ella con nuestro programa LCD Assistant.


Figura 3.5 Extensin, mapa de bits monocromtico

III. DESARROLLO

71

El resultado debe ser tal y como se muestra en la figura 3.6


Figura 3.6 Imagen monocromtica.

Si fuese necesario disminuir el tamao de la imagen, podrn hacerlo con algn
editor sin ningn problema ya que trabajaremos con una resolucin igual o menor a
128X64. Una vez que la imagen es del tamao adecuado podremos usar el
programa LCD Assistant para generar la matriz que finalmente utilizaremos en la
programacin.
Selecciona la imagen, la resolucin (128X64), selecciona la orientacin (en
este caso ser horizontal), la terminacin del pixelado (pequeo) y por ultimo graba
la salida para que se pueda generar el cdigo de la matriz. La ventana debe
mostrarse de la siguiente manera (ver figura 3.7).

Figura 3.7 Configuracin de LCD Assistant.

III. DESARROLLO

72

Al grabar la salida, automticamente se generara un documento con extensin .txt
donde se encontrara el cdigo correspondiente, tal y como se muestra enseguida:

//******************************IMAGENES*****************************
//----------------------------Imagen Xbee----------------------------

const int8 xbeepic[64][16] = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x87,
0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x1F, 0xF7,
0xE0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x34, 0x1F, 0xE3, 0xC0, 0x00, 0x00, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x7F, 0xE0, 0xC0,
0x07, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE9, 0xCF, 0xC8, 0x00, 0x07, 0xF0, 0x7E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7B, 0xFF, 0xCF, 0x00, 0x07,
0xF0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x3F, 0xFF, 0xCE, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x7F, 0xFE, 0x7C, 0x00, 0x03, 0xF1,
0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7F,
0xFE, 0xE0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0xC0, 0x00, 0x03, 0xFB, 0xF0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F,
0x80, 0x00, 0x01, 0xFB, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFE, 0x0F, 0x80, 0x00, 0x01, 0xFF, 0xE0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x0C, 0x70,
0xF0, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0xFC, 0x0C, 0xFD, 0xF0, 0x01, 0xFF, 0x80, 0x70, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x1D, 0xFF, 0xC0,
III. DESARROLLO

73

0x00, 0xFD, 0x80, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0F, 0xFF, 0x7E, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x90, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x3F, 0xC0, 0x00,
0xFE, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
0xFF, 0xF8, 0x1F, 0xC0, 0x00, 0xFE, 0x01, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x06, 0x00, 0x7E,
0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
0xF0, 0x00, 0x23, 0x80, 0x7F, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x21, 0xC1, 0xFF, 0x05,
0x7E, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0,
0x00, 0x31, 0xE1, 0xBF, 0x09, 0x01, 0x06, 0x01, 0x06, 0x01, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x33, 0xE3, 0xBF, 0x10, 0xF1,
0x08, 0xF1, 0x08, 0xF1, 0x00, 0x00, 0x00, 0x2F, 0xFF, 0xC0, 0x00,
0x1B, 0xF7, 0xFF, 0x91, 0x09, 0x13, 0x09, 0x13, 0x09, 0x00, 0x00,
0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xF7, 0xFF, 0xA2, 0x09, 0x24,
0x09, 0x24, 0x09, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x0F,
0xEF, 0xDF, 0xA4, 0x0A, 0x48, 0x13, 0x48, 0x12, 0x00, 0x00, 0x00,
0x01, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0x9F, 0xC8, 0x12, 0x90, 0x12,
0x90, 0x12, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xE0, 0x0F, 0xDF,
0x9F, 0x90, 0x14, 0xA0, 0x24, 0xA0, 0x24, 0x00, 0x00, 0x00, 0x10,
0x7F, 0xFF, 0xC0, 0x0F, 0xFF, 0x1F, 0x20, 0x25, 0x3F, 0xE5, 0x3F,
0xC8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x3F, 0xBE, 0x0F,
0x20, 0x2A, 0x00, 0x0A, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x0F,
0xFF, 0xE0, 0x7F, 0x7E, 0x0E, 0x60, 0x4A, 0x7F, 0xF2, 0x7F, 0xF0,
0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x7F, 0xFC, 0x0E, 0x60,
0x94, 0x80, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0xFF,
0xE0, 0x7E, 0xF8, 0x0C, 0xE0, 0xA5, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x03, 0xFF, 0xE0, 0xFD, 0xF8, 0x09, 0xE1, 0x29,
0x01, 0xC9, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x81, 0xFF, 0xE1,
0xDF, 0xF0, 0x09, 0xF2, 0x4A, 0x02, 0x42, 0x02, 0x40, 0x00, 0x00,
0x00, 0x00, 0xC1, 0xFF, 0xE3, 0xFB, 0xE0, 0x11, 0xF4, 0x92, 0x04,
0x92, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x63, 0xFF, 0xE7, 0xFF,
0xE0, 0x23, 0xF9, 0x12, 0x09, 0x12, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x33, 0xFF, 0xEF, 0xF7, 0xC0, 0x21, 0xE2, 0x11, 0xF2, 0x11,
0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xFF, 0xFF, 0xEF, 0xC0,
0x40, 0x04, 0x10, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xF8, 0x07, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xDF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x7E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
III. DESARROLLO

74

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00
};

Para poder desarrollar una comunicacin half-duplex, se hizo uso de
interrupciones de tal manera que el microcontrolador pudiera detectar la respuesta
del receptor. #INT_RDA puede ser habilitado y deshabilitado en ciertas partes del
programa en el cual nos interesa que realice alguna accin en especifica en base a
la informacin recibida como es el caso.

//****************INTERRUPCIONES COMUNICACIN SERIAL*****************

#INT_RDA
void serial_isr()
{
if(kbhit())
{
rcvchar = getc();
}
}

La impresin del grfico, como es el caso de la matriz no es ms que un
arreglo que debe de drsele un acomodo para que pueda ser mostrado en el GLCD
III. DESARROLLO

75

monocromtico. Esta subrutina ser llamada cada vez que se quiera imprimir el
grafico de presentacin.

//**********************IMPRESION DE GRAFICOS************************

void glcd_imagen1()
{
char i,j;
signed char k;
for( i = 0 ; i < 64 ; i ++ )
{
for( j = 0 ; j < 16 ; j ++)
{
for(k=7;k>-1;k--)
{
if( bit_test(xbeepic[i][j] ,7-k ))
glcd_pixel( j*8+k,i, ON );

}
}
}
}

//***************************PRINCIPAL*******************************
void main()
{

Enseguida se muestran las variables locales que se utilizaran en el resto del
programa o parcialmente en algunas de las subrutinas, en ellas se alojan valores del
Convertidor Analgico Digital as como otros valores relacionados a la operacin
para la conversin de unidades o movimiento de grficos.

//**************************VARIABLES LOCALES***********************

const long int escala= 1023;
const float v_max= 5.0;
float voltaje, corriente;
float anterior1=0,anterior2 = 32;
float anterior3=0,anterior4= 32;
float anterior5=0;
III. DESARROLLO

76

float y1cor, y1vol, mulVI;
long int V, I;
int LH=32;
int LL=48;
int q;

Los letreros, tambin son alojados en vectores o arreglos. De esta forma se
podrn disponer de ellos cuantas veces sean necesario. Desafortunadamente cada
uno de estos son alojados en una parte de la memoria ROM, por lo que se tiene que
hacer una planeacin sobre aquellos que sern necesarios para la operacin.

//*****************************LETREROS******************************

char ADC0[10],ADC1[10],ADC2[10],ADC3[10],ADC4[10],ADC5[10];
char text1[]="Monitor de Corriente";
char text2[]="Kwh";
char text3[]="Presiona Boton Para";
char text4[]="Iniciar Conexion";
char text5[]="No Fue Posible";
char text6[]="Hacer Conexion";
char text7[]="CONECTANDO";


La configuracin del ADC se hizo de tal manera que pudiramos utilizar 2
canales de los 3 disponibles, en este caso se habilitaron los AN0, AN1 y AN3, pues
no hay una instruccin que sea tan especfica para incluir solo 2 de ellos. Tambin,
uno de los pines del puerto E fue habilitado como salida para uno el led indicador.

//*************************CONFIGURACION ADC*************************

setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
set_tris_e(0b00000001);

Igual que en un LCD convencional es necesario, indicarle al microcontrolador
que empezaremos a utilizar un dispositivo que estar conectado de manera paralela
III. DESARROLLO

77

al PIC16F877A. Es indispensable esta instruccin para poder generar cualquier
imagen.

//*************************INICIALIZACION GLCD***********************

glcd_init(on);
glcd_fillScreen(off);


Tras inicializar el GLCD, podemos proceder a imprimir la primer imagen, en
este caso la imagen que se destin para la presentacin del transmisor, seguido de
un retardo que nos permitir visualizar la imagen por 4 segundos, que posteriormente
el microcontrolador generara un borrado general del lcd grfico.

//*********************IMPRESION DEL PRIMER GRAFICO******************

glcd_imagen1();
delay_ms(4000);
glcd_fillScreen(off);


A manera de mejorar la presentacin, se introdujeron rectngulos que se
ubicaron de tal forma que formaran un margen sobre la pantalla GLCD, la instruccin
para esto se dispone de la siguiente manera, glcd_rect(X1, Y1, X2, Y2,
relleno, contorno).
Se podr activar o no, tanto el relleno como el contorno de la imagen que se
haya generado por lo que debe tener en cuenta estos parmetros al generar un
rectngulo.
Posteriormente, se utilizaron los primeros textos (text3, text4) para generar la
pantalla de presentacin del transmisor.

//*************************MARCO EXTERIOR MENU***********************

glcd_rect(0, 0, 127, 63, off,on);
glcd_rect(2, 2, 125, 61, off,on);
III. DESARROLLO

78

glcd_text57(5, 20, text3, 1, on);
glcd_text57(15, 30, text4, 1, on);
delay_ms(1000);

Al iniciar el proceso de conexin, se tomaron en cuenta tres cosas:
1. Que el usuario pudiese controlar el momento en que desee conectarse,
implementando un switch conectado a alguno de los puertos.
2. El tiempo de sincronizacin que ambos microcontroladores dispondran para
realizar la transmisin y recepcin de datos, respectivamente. El cual segn
mediciones fue de 20 segundos aproximadamente.
3. Se consider la distancia y por supuesto las limitaciones que esto ocasiona,
como los fallos de conexin, de tal manera que el emisor de datos puede
realizar los intentos que sean necesarios para sincronizarse adecuadamente,
siempre que el usuario as lo requiera.
En esta etapa del programa se habilitaron las interrupciones para realizar la
comunicacin serial (semi-duplex) en cada uno de los 25 intentos de conexin donde
se hizo uso de un carcter especial el cual fungi como clave o aviso, en este caso
@, que el receptor lo interpretara como la seal de inicializacin.
//*********************INICIA PROCESO DE CONEXION********************

ESPERA:
if(input_state(PIN_E0)==0)
{
glcd_fillScreen(off);
glcd_rect(0, 0, 127, 63, off,on);
glcd_rect(2, 2, 125, 61, off,on);

for (q=0; q <= 25; q++)
{
glcd_rect(8, 23, 120, 40, on,on);
glcd_text57(10, 25, text7, 2, off);
output_high(PIN_E2);
delay_ms(250);
glcd_rect(8, 23, 120, 40, on,off);
glcd_text57(10, 25, text7, 2, on);
output_low(PIN_E2);
III. DESARROLLO

79

delay_ms(250);
putc('@');
enable_interrupts(int_rda);
enable_interrupts(global);

Al inicializarse el receptor, este fue programado para responder con el mismo
carcter especial @ para avisarle al receptor que este, se encuentra listo para
recibir los datos. Y por el contrario, el emisor al recibir el carcter especial, estar
listo para enviar los datos obtenidos en el Convertidor Analgico digital (ADC).

//************************CONEXION REALIZADA*************************

if (rcvchar == 64)
{
delay_ms(100);
disable_interrupts(int_rda);
disable_interrupts(global);

glcd_fillScreen(off);
glcd_text57(4, 4, text3, 1, off);
glcd_text57(22, 53, text4, 1, off);
glcd_text57(4, 4, text1, 1, on);

glcd_rect(10, 14, 18, 50, off,on);
glcd_rect(0, 0, 127, 63, off,on);
glcd_rect(2, 2, 125, 61, off,on);
glcd_rect(42, 14, 50, 50, off,on);

Una vez que ambos microcontroladores se sincronizaron correctamente,
nuestro microcontrolador PIC16F877 empezara a leer los voltajes de los canales 0 y
1, destinados a convertir los voltajes obtenidos de los sensores de corriente y voltaje
respectivamente.

//*****************LECTURA Y TRANSMISION DE DATOS CH1****************

for(;;)
{
set_adc_channel(0);
delay_ms(1);
V = read_adc();
printf("%Lu\n\r",V);
putc('a');
III. DESARROLLO

80

delay_ms(499);
voltaje = (V*v_max)/escala;
y1vol = -((voltaje*LH)/5)+LL;

Una vez obtenidos los datos de la conversin del canal 0, se dise una
interfaz grfica para la presentacin visual de los datos. Se introdujeron algunos
arreglos para evitar el parpadeo de la pantalla.

//****************************GRAFICOS CH1***************************

if(voltaje!=anterior1 && y1vol!=anterior2)
{
sprintf(ADC0,"%1.2f", anterior1);
sprintf(ADC1,"%1.2f", voltaje);
glcd_text57(4, 53, ADC0, 1, off);
glcd_text57(4, 53, ADC1, 1, on);
glcd_rect(12,anterior2,16, 48, on,off);
glcd_rect(12, y1vol, 16, 48, on, on);
}
anterior1=voltaje;
anterior2=y1vol;



Por ltimo, se configuro el canal 1 y se presentaron los datos de manera muy
similar al canal 0. En ambos canales se dispuso de un retardo de 500 ms para
generar un tiempo certidumbre y fidelidad en la transmisin, de tal manera que no
generara errores en la recepcin de datos.

//******************LECTURA Y TRANSMISION DE DATOS CH2***************

set_adc_channel(1);
delay_ms(1);
I = read_adc();
printf("%Lu \n\r",I);
putc('b');
delay_ms(499);
corriente = (I*v_max)/escala;
y1cor = -((corriente*LH)/5)+LL;

//***************************GRAFICOS CH2****************************
III. DESARROLLO

81


if(corriente!=anterior3&&y1cor!=anterior4)
{
sprintf(ADC2,"%1.2f", anterior3);
sprintf(ADC3,"%1.2f", corriente);
glcd_text57(36, 53, ADC2, 1, off);
glcd_text57(36, 53, ADC3, 1, on);
glcd_rect(44,anterior4,48,48, on,off);
glcd_rect(44, y1cor, 48, 48, on,on);
}
anterior3=corriente;
anterior4=y1cor;

Una vez obtenidos los datos, se realizaron los clculos matemticos para
multiplicar el voltaje y la corriente, para poder obtener la potencia aparente para el
caso de la CA o real en el caso de la CD.

//*************************MULTIPLICACION VXI************************

mulVI = (voltaje)*(corriente);
if(mulVI!=anterior5)
{
sprintf(ADC4,"%1.2f", anterior5);
sprintf(ADC5,"%1.2f", mulVI);
glcd_text57(75, 45, text2, 2, on);
glcd_text57(57, 20, ADC4, 2, off);
glcd_text57(57, 20, ADC5, 2, on);
}
anterior5=mulVI;
}
}
}

Si por alguna razn, el transmisor no puede hacer contacto con el receptor, el
microcontrolador est programado para notificar que esta fuera del rea de conexin,
y ofrecer al usuario intentar nuevamente sincronizar el sistema.

//*************************NO SE PUEDO CONECTAR**********************

if(rcvchar != 64)
{
glcd_fillScreen(off);
III. DESARROLLO

82

glcd_rect(0, 0, 127, 63, off,on);
glcd_rect(2, 2, 125, 61, off,on);
glcd_text57(22, 25, text5, 1, on);
glcd_text57(22, 35, text6, 1, on);
delay_ms(500);
if(input(PIN_B0) == 0){goto ESPERA;}
}
} else {goto ESPERA;}
}

3.5 Configuracin De Puertos Seriales Virtuales

Con las ltimas tendencias y el avance de la tecnologa informtica, tenemos a
la mano instrumentos de virtualizacin que agilizan y simplifican los proyectos
electrnicos.
Tal es el caso del Virtual Serial Port Driver (VSPD), un software que permite
emular mltiples puertos RS232(hasta 254 pares), podemos activar 2 puertos
virtuales y conectarlos entre s, para hacer uso individualmente y conectar 2
aplicaciones todo en el mismo ordenador, en la imagen 3.8 podemos observar el
entorno del programa utilizado.


Figura 3.8 Virtual Serial Port Driver

III. DESARROLLO

83

Para efectos de nuestro proyecto, utilizaremos un par de puertos virtuales. En
la siguiente imagen se muestran los puertos que deseamos instalar virtualmente en
nuestro sistema, en nuestro caso COM1 y COM2 (ver imagen 3.9).


Figura 3.9 Seleccionando puertos seriales.

Al presionar ADD PAIR, automticamente se instalaran y se conectaran
entre s, los dos puertos creados virtualmente, tal y como se muestra en la figura
3.10.

Figura 3.10 Puertos seriales instalados virtualmente.
III. DESARROLLO

84

Una vez instalados, procederemos a configurar nuestro programa Terminal
v1.9b que servir para introducir datos al microcontrolador por el pin RX teniendo
en cuenta que se debe configurar el puerto tal como indica la imagen 3.11.


9 COM Port: 1
9 Baud Rate: 19200
9 Data Bits: 8
9 Parity: None.
9 Stop Bits: 1
9 Handshaking: None


Figura 3.11 Terminal V1.9b

Al presionar Connect deber de reflejarse esta conexin en el Virtual Serial
Port Driver con la configuracin que definimos en la figura 3.11, de la siguiente
manera (ver figura 3.12):

Figura 3.12 COM 1 configurado e instalado
III. DESARROLLO

85

De la misma forma, para ISIS Proteus configuramos el puerto serial, con la
misma configuracin que utilizamos en el programa Terminal v1.9, tal como se
muestra en la figura 3.13.

Figura 3.13 Configuracin de ISIS Proteus

A diferencia del Terminal v1.9, nuestro programa de simulacin ISIS Proteus se
conectara al puerto COM 2.
Por ltimo, tambin ser necesario configurar la terminal virtual de ISIS
Proteus con la misma configuracin, con la cual se podrn leer los datos transmitidos
por nuestro microcontrolador PIC16F877, tal como se muestra en la figura 3.14.

Figura 3.14 ISIS Proteus configurado.
III. DESARROLLO

86

3.6 Simulacin del Transmisor

Enseguida se mostrar el circuito que fue utilizado para realizar la simulacin, para
ello utilizamos el ISIS Proteus. Iremos describiendo cada parte del programa y las
herramientas que se utilizaron en el diseo del transmisor.
Es importante mencionar que todas estas herramientas jugaron un papel
importante antes de realizar la implementacin fsica del mismo, pues nos
permitieron realizar pruebas aun cuando no se tena fsicamente el diseo y los
materiales necesarios para hacerlo.


Figura 3.15 Circuito utilizado en ISIS Proteus

R
D
0
R
D
6
R
D
5
R
D
4
R
D
3
R
D
7
R
D
2
R
D
1
V
C
C
G
N
D
C
S
1
C
S
2
D
I
R
W
E
R
S
T
V
C
C
CS1
CS2
DI
RW
E
RST
RD0
RD1
RD2
RD3
RD4
RD5
RD6
RD7
C
S
1
1
C
S
2
2
G
N
D
3
V
C
C
4
V
0
5
D
I
6
R
/
W
7
E
8
D
B
0
9
D
B
1
1
0
D
B
2
1
1
D
B
3
1
2
D
B
4
1
3
D
B
5
1
4
D
B
6
1
5
D
B
7
1
6
R
S
T
1
7
-
V
o
u
t
1
8
LCD2
LGM12641BS1R
1
0
0
%
V
1k
Vcc
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC16F877
R1
1k
D1
LED-BLUE
E
R
R
O
R
T
X
D
3
R
X
D
2
C
T
S
8
R
T
S
7
D
S
R
6
D
T
R
4
D
C
D
1
R
I
9
P1
COMPIM
2
2
%
I
1k
RXD
RTS
TXD
CTS
III. DESARROLLO

87

En la imagen 3.15 se puede observar que se dispusieron de dos canales del
Convertidor Analgico-Digital utilizados para poder sensar el voltaje y corriente en
CA. En este caso el arreglo hecho entre las resistencias y potencimetros fue
diseado para poder introducir voltajes de un rango de 0V a 5V. Tambin se
implement un switch para poder indicarle al microcontrolador cuando empezar a
transmitir datos, pues desde luego vimos la necesidad de controlar este momento en
particular. Adems, se agreg la pantalla LCD grafica de 128X64 conectada de
manera paralela a nuestro PIC16F877 as como una terminal virtual conectada al pin
de Transmisin de datos (TX) y un puerto serial para introducir datos a nuestro
microcontrolador. Para poder realizar simulaciones de recepcin y transmisin de
datos se utilizaron dos programas bsicos y elementales como lo son, Virtual Serial
Port Driver y Terminal V1.9.

3.6.1 Generando Los Primeros Grficos.

Al iniciar la simulacin, pudimos observar cmo se desplegaron los primeros
grficos sobre la cual trabajamos anteriormente para obtener la matriz y que
posteriormente utilizamos para generar un vector para poder plasmarlo en nuestro
GLCD. En la imagen 3.16 podemos ver los resultados obtenidos.

Figura 3.16 Primer Grafico Generado Por Microcontrolador

Despus de 4 segundos, tal como se dispuso en el programa, el
microcontrolador PIC16F877 limpi la pantalla para para generar el segundo grfico,
correspondiente al men de Stand By, de tal manera que est queda en espera de
III. DESARROLLO

88

que se presione el switch de inicio, cumplindose una de las principales
condicionantes del sistema. En la figura 3.17 se muestra el men de espera.







Figura 3.17 Pantalla en Modo Stand by

3.6.2 Iniciando La Transmisin De Datos.

Cabe sealar que nuestro microcontrolador no transmitir ningn dato hasta
que el switch de inicio sea presionado por el usuario. Una vez presionado, el
transmisor intentara establecer conexin con el receptor, mandando 25 caracteres en
intervalos de tiempo de un segundo, tal como se muestra en la figura 3.18.


Figura 3.18 Subrutina de conexin
III. DESARROLLO

89

En la figura anterior podemos observar que a manera de indicador se le
agreg un led, el cual fue destinado para mostrar visualmente al usuario esta parte
esencial del proceso de conexin entre transmisor y receptor, acompaado de un
grfico interactivo. Para poder leer los datos emitidos por el microcontrolador
utilizamos la Terminal Virtual de nuestro simulador, que fue una herramienta de gran
ayuda para poner a punto esta parte del proceso.

3.6.3 Conexin Establecida.

Para poder simular esta parte del proceso de conexin, se utilizaron dos
programas muy sencillos pero muy eficientes (Virtual Serial Port Driver y Terminal
vq.9b) como ya lo observamos anteriormente. El programa principal de nuestro
microcontrolador PIC16F877A fue diseado para generar un tren datos o caracteres
especiales como lo es el @ para establecer la conexin con el receptor, pero
tambin se dispusieron de interrupciones que fueron habilitadas para poder recibir la
respuesta del mismo. En la figura 3.19 podemos visualizar la manera en que
simulamos esta parte del proceso.


Figura 3.19 Introduciendo respuesta de receptor
III. DESARROLLO

90

3.6.4 Transmitiendo Datos.

Una vez que el receptor contesto al llamado del transmisor, est empezara a
enviar una serie de datos correspondientes a la conversin analgica-digital de los
canales 0 y 1, hecha por nuestro microcontrolador PIC16F877A. Adems, casi de
manera simultnea presentara los datos de manera grfica por medio de nuestro
GLCD. En la imagen muestra de manera visual lo que anteriormente se describi.



Figura 3.20 Transmisor emitiendo datos.


III. DESARROLLO

91

3.7 Diseo de la lgica de programacin del ARDUINO MEGA.

La idea de utilizar un microcontrolador ATmega 2560 como receptor, naci de la
necesidad de implementar nuevas plataformas y experimentar con los nuevos
microcontroladores de gama media-alta los cuales se han vuelto bastante populares
entre los desarrolladores, pues estos en particular han sido montados sobre una
placa que permite al usuario programar y utilizar la placa casi de manera simultnea
mientras desarrolla algn prototipo y experimenta con los shields que brindan un plus
en al proyecto en particular.
Nuestro receptor fue equipado con un Shield SD Wireless con el fin de poder
obtener datos y guardarlos en el mismo sistema receptor. No menos importante, fue
la incorporacin de un circuito RTC (Real Time Control) utilizando el puerto I
2
C de
nuestro Arduino Mega, circuito imprescindible para poder obtener los horarios de la
adquisicin de los datos obtenidos inalmbricamente. La incorporacin de la tarjeta
SD al sistema y la habilidad de nuestro microcontrolador de crear archivos .txt y .cvs
nos permiti ordenar cada uno de los datos obtenidos mientras est los guardaba en
nuestra extensa memoria, en este caso de 1GB.
Por otro lado, se hizo uso de caracteres especiales en toda la transmisin de
datos, tanto para voltaje como para corriente, de tal manera que el receptor pudiese
ubicar donde empezaba un tren de datos correspondiente a cada uno de los canales
de transmisin. Con la incorporacin de estos caracteres evitamos obtener datos
errneos o incluso revolverlos.
Enseguida, nos daremos a la tarea de definir el diagrama a bloques que se
utiliz para poder desarrollar el receptor. Es importante mencionar que el diseo se
enfoc totalmente a la recepcin y gestin de los datos para poder ser almacenados
y posteriormente presentados en alguna grafica de Excel.

III. DESARROLLO

92


Figura 3.21 Lgica de Programacin del Receptor.
III. DESARROLLO

93

3.7.1 Hardware. Diseo del receptor

Realmente el trabajo de diseo no fue tan extenso, como lo fue para el transmisor,
pues solo dispusimos de dos placas que el propio fabricante elabor, en este caso la
placa base del microcontrolador Arduino Mega 2560 y el Shield SD Wireless,
enseguida les muestro el diagrama elctrico.


Figura 3.22 Diagrama del receptor

III. DESARROLLO

94

En la figura 3.21 pudieron observar, solo agregamos el modulo SD Wireless Shield y
el RTC a manera de referencia. Posteriormente se agregaran los diagramas
correspondientes a los anexos de la presente tesis.

3.7.2 Programacin. Receptor con Arduino MEGA

Como hemos observado a lo largo de los ltimos aos, Atmel ha incursionado de
manera importante en el rea de desarrollo y diseo electrnico. Procurando
construir microcontroladores verstiles y con interfaces de programacin bastante
slidas con las virtudes que un software y hardware libres pueden generar.
Enseguida, se proporcionare el cdigo de programacin utilizado en nuestro
receptor. Las primeras pruebas fueron realizadas en un Arduino UNO,
posteriormente se tuvo que migrar el cdigo a un microcontrolador ms grande,
pues el nmero de salidas comenzaron a ser insuficientes conforme se le fue
agregando nuevas herramientas o dispositivos.

3.7.3 Receptor. Descripcin Del Programa Fuente.

En la primera parte de nuestro programa, al igual que en el transmisor, se definieron
las libreras utilizadas para la configuracin de los diferentes dispositivos
relacionados con los protocolos de comunicacin y almacenaje de datos, tal y como
se puede observar enseguida.

#include <SD.h>
#include <stdio.h>
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
//-------------------------------------------------------------------
III. DESARROLLO

95

En el siguiente arreglo se dimensiona el tamao del dato que se recibir, en
este caso se seleccion el nmero 4, pues como mximo recibiremos 1023 datos
provenientes del transmisor.

char string[4]={0}; //Arreglo que dimensiona el tamao del dato a
recibir.

Todas las variables que utilizamos a lo largo del proceso en la ejecucin del
programa de recepcin, se inicializaron con cero, para evitar introducir datos
errneos.

float dato = 0;
int Indx = 0; //ndice del arreglo SerInString[] entrante.
int OutIndx = 0; //ndice del arreglo SerInString[] saliente.
//-------------------------------------------------------------------

int sa=0, sb=0;
int incomingByte = 0;
int CS_pin = 4;
int pow_pin = 8;

En el Setup del programa, definimos la velocidad de comunicacin serial, por
default escribimos la misma que inicialmente utilizamos en el transmisor (19200
Baudios). Por otro lado, tambin configuramos el protocolo de comunicacin I2C para
poder utilizar el RTC que tendr la tarea de controlar el tiempo del dispositivo, as
como todas las variables en las que se almacenaron cada una de las variables
relacionadas.

void setup()
{
Wire.begin();
Serial.begin(19200);
III. DESARROLLO

96

//-----------------------------CONFIG. TIME--------------------------
byte second = 0; //0-59
byte minute = 41; //0-59
byte hour = 11; //0-23
byte weekDay = 5; //1-7
byte monthDay = 27; //1-31
byte month = 6; //1-12
byte year = 13; //0-99

Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //stop Oscillator

Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));

Wire.write(zero); //start

Wire.endTransmission();

//-------------------------------------------------------------------
Segn se defini en el diagrama a bloques del receptor, el sistema debe ser
capaz de detectar la memoria SD del datalogger, pues es una pieza indispensable en
la adquisicin y gestin de datos, as mismo se incluyeron unas recomendaciones
que deber tomar en cuenta el usuario en caso de no ser detectada o mal insertada,
mismas que aparecern en el monitor serial.

Serial.println("\nInitializing Card..."); //CS Pin is an output
pinMode(CS_pin, OUTPUT); //Initialize Card
III. DESARROLLO

97

if (!SD.begin(CS_pin))
{
Serial.println("Initialization failed. Things to check:");
Serial.println("* Is a card is inserted?");
Serial.println("* Is your wiring correct?");
Serial.println("* Did you change the chip Select pin to match
your shield or module?");
return;
} else {
Serial.println("Wiring is correct and a card is present.");}

//--------------------Creacin de archivo en Excel-------------------

Despus de que el sistema reviso la conexin y correcta instalacin de la memoria
SD sobre el shield. El receptor se da a la tarea de crear un archivo de nombre LOG,
que puede ser con extensin .CSV o .TXT, para generar una tabla de Excel o un
archivo de texto estndar, respectivamente. Para el caso de los archivos con
extensin .CSV se pueden utilizar comillas para separar los datos por columnas, tal
como se muestra enseguida.

File logFile = SD.open("LOG.csv", FILE_WRITE);
if (logFile)
{
logFile.print("VOLTAJE"); logFile.print(" , ");
Serial.print("VOLTAJE"); Serial.print(" ");

logFile.print("HORA"); logFile.print(" , ");
Serial.print("HORA"); Serial.print(" ");

logFile.print("FECHA"); logFile.print(" , ");
Serial.print("FECHA"); Serial.print(" ");

III. DESARROLLO

98

logFile.print("CORRIENTE"); logFile.print(" , ");
Serial.print("CORRIENTE"); Serial.print(" ");

logFile.println("HORA");
Serial.println("HORA");

logFile.close();
}
else
{
Serial.println("Couldn't open log file");
}
}
//---------------------Ciclo principal del programa------------------

Aqu inicia el programa principal a ejecutarse, donde el receptor espera la llegada del
carcter especial, en este caso @ identificado como 64, al detectar el carcter, el
programa pasa a la subrutina, donde se ejecuta todo el proceso de organizacin y
gestin de datos.

void loop()
{
if (Serial.available())
{
incomingByte = Serial.read();
Serial.print(incomingByte);
if(incomingByte == 64)
{
Serial.print("@");
subrutina();
}
else {incomingByte = 0;}
III. DESARROLLO

99

}
}
//-------------------------------------------------------------------

En esta seccin del programa, se gener una subrutina en la cual se utiliz un ciclo
FOR infinito, el cual fue utilizado para poder recolectar los datos recibidos por el
puerto serial (RX), posteriormente se implement un arreglo para separar, clasificar e
identificar cules son los pertenecientes al voltaje o corriente.

void subrutina()
{
for(;;){

//----------------------LECTURA PRIMERA VARIABLE---------------------
if (Serial.available())
{
sb = sa = Serial.read();


//---------------------IMPRESION PRIMERA VARIABLE--------------------
if((Indx > 0 && sa == 97)||(Indx > 0 && sb == 98))
{
for(OutIndx=0; OutIndx < Indx; OutIndx ++)
{
Serial.print(string[OutIndx]);
dato = atol(string);
}
if(sa==97) {Voltaje();}
if(sb==98) {Corriente();}
OutIndx = 0;
Indx = 0;
sa = 0;
sb = 0;
III. DESARROLLO

100

}
else
{
string[Indx] = sa;
Indx++;
}

}
}
}
//----------CONVERT DECIMAL NUMBERS TO BINARY CODED NUMBERS----------
byte decToBcd(byte val){
return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
Finalmente, se utiliz una subrutina para voltaje como para corriente, ambas
trabajan bajo la misma lgica de programacin. Al inicio de cada una de las
subrutinas se configuro el protocolo de comunicacin para poder extraer los datos del
tiempo de nuestro RTC va I2C como ya se mencion anteriormente. Aqu nuestro
microcontrolador realiza varias actividades casi de manera simultnea pues imprime
los datos correspondientes de cada magnitud acompaadas de la fecha y hora.

//----------------------IMPRESION VOLTAJE/HORA-----------------------
void Voltaje(){

Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
III. DESARROLLO

101


Wire.requestFrom(DS1307_ADDRESS, 7);

int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time

//print the date EG 3/1/11 23:59:59

File logFile = SD.open("LOG.txt", FILE_WRITE);
if(logFile)
{
logFile.print(dato);
logFile.print(" , ");
logFile.print(" ");Serial.print(" ");
logFile.print(hour);
Serial.print(hour);
logFile.print(":");
Serial.print(":");
logFile.print(minute);
Serial.print(minute);
logFile.print(":");
Serial.print(":");
logFile.print(second);
Serial.print(second);
logFile.print(" , ");
Serial.print(" ");
}
logFile.close();
}
//---------------------IMPRESION CORRIENTE/HORA----------------------
void Corriente(){

III. DESARROLLO

102

Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();

Wire.requestFrom(DS1307_ADDRESS, 7);

int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());

//print the date EG 3/1/11 23:59:59
File logFile = SD.open("LOG.txt", FILE_WRITE);
if(logFile)
{
logFile.print(" , ");
logFile.print(dato);
logFile.print(" , ");
logFile.print(" ");Serial.print(" ");
logFile.print(hour);
Serial.print(hour);
logFile.print(":");
Serial.print(":");
logFile.print(minute);
Serial.print(minute);
logFile.print(":");
Serial.print(":");
logFile.print(second);
Serial.print(second);
logFile.print(" , ");
III. DESARROLLO

103

logFile.println();
Serial.println();

Serial.println();

if(hour==0 && minute==0 && second==0)
{
File logFile = SD.open("LOG.txt", FILE_WRITE);
if(logFile)
{
logFile.println();
Serial.println();
logFile.print(" , , ");
Serial.print(" ");
logFile.print(monthDay);
Serial.print(monthDay);
logFile.print("/");
Serial.print("/");
logFile.print(month);
Serial.print(month);
logFile.print("/");
Serial.print("/");
logFile.print(year);
logFile.print(" , "); Serial.print(year);
logFile.println();
Serial.println();
}
logFile.close();
}

}
logFile.close();
}
IV. RESULTADOS

104







CAPTULO IV
RESULTADOS















IV. RESULTADOS

105

CAPITULO IV. RESULTADOS

En este captulo se documentan los resultados obtenidos en base a la
implementacin del proyecto de investigacin. Inicialmente se mostrarn las primeros
grficos generadas por nuestra pantalla GLCD, la cual como ya se coment tambin
presentara los datos de voltaje y corriente, gestionados por el microcontrolador
PIC16F874.
Posteriormente se presentaran los datos obtenidos por nuestro Arduino Mega,
que mediante las tablas de excel generadas automticamente y en base a los datos
almacenados en la memoria microSD, se presentaran como resultado las grficas
reales obtenidas.

4.1 Presentacin de los primeros grficos.

La elaboracin de los grficos fue una de las etapas ms laboriosas, incluso
ms que la de transmisin y gestin de datos. Se probaron varias libreras que
mostraron limitantes al crear grficos complejos, pues alguna de ellas no podan
combinar ilustraciones y presentar datos de manera simultnea. Adems como se
observ, tambin fue necesario buscar el programa adecuado para generar la matriz
del grafico as como el ciclo de programacin capaz de crear adecuadamente la
imagen sobre pantalla, el primer grafico se puede observar en la figura 4.1.








Figura 4.1 Generacin del primer grfico.

IV. RESULTADOS

106

4.2 Transmisin de los primeros datos

Posteriormente, el transmisor muestra una pantalla, donde el microcontrolador
queda en la espera de que el usuario presione el botn, el cual al ser accionado est
iniciara con la subrutina de enlace y conexin.








Figura 4.2 Pantalla de espera

En la figura 4.2 se puede observar que de manera indefinida el transmisor
muestra la leyenda Presiona Botn Para Iniciar Conexin, de tal manera que est
no puede iniciar o salir del men por s solo.
Al presionar el botn, nuestro microcontrolador PIC16F877 ejecuta la
subrutina encargada de realizar la conexin. En esta etapa el transmisor fue
programado para enviar 25 signos especiales definidos por @ hacia el receptor de
datos.







Figura 4.3 Subrutina de conexin y enlace.
IV. RESULTADOS

107

En la Figura 4.3 podemos observar en la pantalla grafica la subrutina creada
para representar y mostrar al usuario el momento en que intenta hacer contacto con
el receptor, por medio de la pantalla grafica as como un led indicador.
Una vez que tanto transmisor y receptor realizaron una conexin satisfactoria,
el transmisor mostr localmente los datos, tanto para corriente como voltaje, as
como el valor equivalente a la potencia consumida por el dispositivo monitoreado, en
la figura 4.4 podemos observar la pantalla generada y los resultados grficos
obtenidos.

Figura 4.4 Transmisin de datos

Como tambin lo comentamos, el receptor puede estar fuera del rea de
alcance del transmisor, por lo que tras veinticinco intentos el microcontrolador PIC es
capaz de realizar varios intentos de enlace, que por supuesto el usuario tiene bajo su
control. En la figura 4.5 mostramos la pantalla donde el transmisor ofrece al usuario
repetir la subrutina de conexin, mediante la leyenda No fue posible hacer
conexin.
IV. RESULTADOS

108


Figura 4.5 Subrutina de reconexin.

4.3 Gestin De Datos. Receptor

Como ya se defini en el diagrama de flujo, el receptor fue diseado para recibir,
gestionar y guardar los datos que el mismo transmisor enva y genera. Nuestro
Arduino Mega fue programado para responder al llamado del transmisor siempre y
cuando est se encuentre dentro del radio de alcance de nuestro Xbee. Se defini un
tipo de comunicacin semi-duplex pues, nuestro Arduino Mega fue programado para
responder con el mismo carcter recibido, con lo cual aseguramos que ambos
mantendrn una ptima comunicacin.

4.3.1 Inicializacin de memoria microSD

Antes de que nuestro receptor iniciara la gestin de datos, nos aseguramos de que
nuestro circuito pudiese detectar e inicializar la memoria microSD que se instal
sobre el shield SD Wireless, de tal manera que se dise una subrutina capaz de
detectar la memoria en el socket. Si por alguna razn est no se encontrar bien
instalada o ausente, el programa puede avisar al usuario sobre este tipo fallos u
omisiones segn sea el caso. En la figura 4.5 y 4.6 se muestran un par de imgenes
del monitor serial con las notificaciones correspondientes.
IV. RESULTADOS

109


Figura 4.6 Inicializacin correcta, tarjeta presente.

Figura 4.7 Inicializacin incorrecta, tarjeta ausente o conexin errnea.


4.3.2 Recepcin de datos.

En esta parte del proceso es el ms importante de todo el proyecto, pues en esta
etapa administramos y guardamos todos los datos generados por el transmisor de
manera cronolgica. Enseguida, se muestra en la figura 4.7 cmo el sistema receptor
presenta los datos en el monitor serial, posteriormente se presentaran las grficas
generadas y las tablas de datos correspondientes en las tablas de Excel.
IV. RESULTADOS

110


Figura 4.8 Recepcin de datos en Monitor Serial

Como ya observamos en la figura 4.7, el monitor serial es una herramienta muy til
para poder visualizar los datos que estamos recibiendo va inalmbrica. Otra de las
tareas asignadas al receptor fue que est pudiese imprimirle a cada dato la fecha y
hora que posteriormente utilizaremos para graficar ambas magnitudes, es decir,
voltaje y corriente con respecto al tiempo.

4.3.3 Generacin de graficas en Excel.

Cuando el usuario lo desee, podr extraer la tarjeta microSD del shield, y mirar los
datos que se han guardado por algn tiempo definido por el mismo en nuestro
documento Excel. En la figura 4.8 podemos ver como se acomodaron los datos en el
archivo Excel mismos que fueron utilizados para generar tablas y graficas dinmicas
para observar el comportamiento del dispositivo consumidor.

IV. RESULTADOS

111


4.9 Datos en Excel
En la figura 4.9 podemos observar los primeros datos obtenidos de una prueba
simulada, sin sensores, utilizando solamente un par de potencimetros emulando las
variaciones del voltaje y corriente.


4.10 Grafica de datos obtenidos
0
200
400
600
800
1000
1200


1
1
:
5
0
:
4
1


1
1
:
5
0
:
4
9


1
1
:
5
0
:
5
8


1
1
:
5
1
:
1
4


1
1
:
5
1
:
2
0


1
1
:
5
1
:
2
8


1
1
:
5
1
:
3
5


1
1
:
5
1
:
4
2


1
1
:
5
1
:
5


1
1
:
5
1
:
5
7


1
1
:
5
2
:
1


1
1
:
5
2
:
1
7


1
1
:
5
2
:
2
5


1
1
:
5
2
:
3
2


1
1
:
5
2
:
4


1
1
:
5
2
:
4
7


1
1
:
5
2
:
5
4


1
1
:
5
2
:
7


1
1
:
5
3
:
1
4


1
1
:
5
3
:
2
1


1
1
:
5
3
:
2
9


1
1
:
5
3
:
3
6


1
1
:
5
3
:
4
3


1
1
:
5
3
:
5
0


1
1
:
5
3
:
5
8
M
a
g
n
i
t
u
d

Datalogger
Grafica de datos obtenidos
VOLTAGE
CURRENT
V. CONCLUSIONES

112












CAPTULO V
CONCLUSIONES












VI. CONCLUSIONES

113

CAPTULO V. CONCLUSIONES


El Sistema de monitoreo inalmbrico de consumo elctrico con microcontrolador
resulto una alternativa de bajo coste para poder realizar mediciones de consumo
energtico. Por otro lado, la gran versatilidad del sistema permite monitorear e
inclusive controlar cualquier variable que el usuario o futuro diseador disponga.
La tecnologa en los ltimos aos ha sido un aliado muy importante en el
desarrollo de sistemas electrnicos autnomos capaces de gestionar, guardar e
inclusive transmitir la informacin de mltiples formas a gran distancia.
La necesidad de mantener y controlar los gastos de nuestras casa o compaa
han llevado a diferentes compaas a implementar sistemas similares, en algunos
casos de manera satisfactoria, en otros no tanto. Desafortunadamente las polticas
ambientales en pases subdesarrollados no han sido prioridad y la implementacin
de planes de ahorro de energa integral por parte de las empresas suministradoras
no han sido prioridad.
Las bases elementales del proyecto fueron elaboradas y diseadas para poder
expandir e implementar nuevos dispositivos que mejoren las prestaciones del mismo.
Se logr establecer una red inalmbrica half-duplexs para la transmisin de datos, la
creacin de una interfaz grfica local para el transmisor, as como un datalogger para
guardar los datos, todo esto haciendo uso de microcontroladores Atmel y Microchip.
El objetivo de utilizar dos diferentes microcontroladores es mostrar la
versatilidad de estos dispositivos, pues a pesar de trabajar con dos medios de
programacin diferentes, con esto queda demostrado que pueden trabajar en
conjunto agregando las caractersticas y prestaciones al proyecto que cada uno
puede otorgar.
Con este proyecto sentamos un gran precedente y confo firmemente en
despertar el inters de todos aquellos estudiantes o investigadores que deseen
trabajar en el rea de la domtica, que sin duda en el futuro tendr un espacio un
espacio para su desarrollo.

VI. REFERENCIAS

114












CAPTULO VI
REFERENCIAS BIBLIOGRFICAS


















VI. REFERENCIAS

115

CAPTULO VI. REFERENCIAS BIBLIOGRFICAS

[1] Faludi, R. (2011). Building Wireless Sensor Networks. Sebastopol, CA:
OReilly.
[2] Karvinen, K. & Karvinen, T. (2011). Make: Arduino Bots and Gadgets. (1er
Ed.). Sebastopol, CA: OReilly.
[3] Igoe, T. (2007). Making Things Talk. (1
er
Ed.). Sebastopol, CA: OReilly.
[4] Margolis, M. (2011). (1
er
Ed.). Arduino Cookbook. Sebastopol, CA: OReilly.
[5] Evans, B. W. (2007). (1
er
Ed.). Arduino Programming Notebook. San
Francisco, CA: Creative Commons.
[6] Olsson, T. (2008). (1
er
Ed.). Open Software. Fashionable prototyping and
werable computing using the Arduino. San Francisco, CA: Creative Commons.
[7] Evans, B. (2010). (1
er
Ed.). Beginning Arduino Programming. San Francisco,
CA: Creative Commons.
[8] Jonathan O. & Hugs B. (2009). (1
er
Ed.). Practical Arduino. New York, NY:
Apress.
[9] A thermocouple datalogger based on the Arduino platform. Recuperado de:
http://lukemiller.org/index.php/2010/08/a-thermocouple-datalogger-based-on-
the-arduino- platform/
[10] DIY Amp / Watt Hour Volt Meter Arduino. Recuperado de:
http://www.instructables.com/id/DIY-Amp-Hour-Meter-Arduino/?ALLSTEPS.
[11] Puerto serie virtual VSPD y COMPIM con Proteus. Recuperado de:
http://perso.wanadoo.es/pictob/rs232virtual.htm
[12] Manejo de pantallas GLCD. Recuperado de:
http://www.icabots.com/foro/index.php?topic=131.0
[13] Cmo hacer funcionar una pantalla GLCD?. Recuperado de:
http://www.todopic.com.ar/foros/index.php?topic=12167.0;wap2
[14] Librera de grficos para GLCD K0108. Recuperado de:
http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/ccs-
libreria-de-graficos-para-glcd-k0108/
VI. REFERENCIAS

116

[15] MicroSD example library SD datalogger. Recuperado de:
http://forum.arduino.cc/index.php?topic=125783.0
[16] Writing header to .csv SD file. Recuperado de:
http://forum.arduino.cc/index.php?PHPSESSID=7439295b50b5fb08efd0a1bdf1
60ea0a&topic=125919.0
[17] Interfacing RTC & serial EEPROM using i2c bus, with ATmega128.
Recuperado de: http://www.dharmanitech.com/2008/08/interfacing-rtc-serial-
eeprom-using-i2c.html
[18] SD card module and stackable SD card shield. Recuperado de: http://arduino-
info.wikispaces.com/SD-Cards
[19] Un reloj con el DS1307 RTC. Recuperado de:
http://www.hispavila.com/3ds/atmega/ds1307reloj.html
[20] How to get DS1307 hour in AM/PM format easily?. Recuperado de:
http://forum.arduino.cc/index.php?topic=22029.0




















ANEXOS

117

ANEXO A
Principales caractersticas del microcontrolador PIC16F877A









































ANEXOS

118

Diagrama de bloques del Microcontrolador Microchip PIC16F877A


ANEXOS

119


ANEXO B

Principales caractersticas del microcontrolador ATmega2560















































ANEXOS

120

Diagrama a bloques del microcontrolador ATmega2560



















































ANEXOS

121

ANEXO C

Diagrama a electrnico del Arduino SD Wireless Shield.


























ANEXO D

Diagrama a electrnico Real Time Control (DS1307)





ANEXOS

122

ANEXO E

Principales caractersticas RTC DS1338/1338

















































ANEXO D
ANEXOS

123


Principales caractersticas de la pantalla grafica KS0108.


















































ANEXO E
ANEXOS

124


Principales caractersticas del sensor de corriente ACS712.


















































Diagrama a bloques del sensor de corriente ACS712.
ANEXOS

125

Você também pode gostar