AAM20
AAM20
AAM20
Facultad de Ingenierı́a
Tutor
Dr. Ing. Leonardo Steinfeld . . . . . . . . . . . Universidad de la República
Tribunal
Mag. Ing. Sebastián Fernández . . . . . . . . Universidad de la República
Dr. Ing. Germán Fierro . . . . . . . . . . . . . . . Universidad de la República
Mag. Ing. Gabriel Gómez . . . . . . . . . . . . . Universidad de la República
Dr. Ing. Leonardo Steinfeld . . . . . . . . . . . Universidad de la República
Montevideo
lunes 21 septiembre, 2020
Control Inteligente de Luminaria LED, Emilio Albarracı́n, Tomás Arrivillaga, Fe-
lipe Morán.
iv
Glosario
PCB: Printed Circuit Board (del inglés), placa con circuito impreso.
PWM: Pulse Width Modulation (del inglés), modulación por ancho de pul-
so.
TTN: The Things Network (del inglés), plataforma que provee servidores
de red y permite crear aplicaciones para redes LoRaWAN.
WDT: Watch Dog Timer (del inglés) perro guardian. Mecanismo de seguri-
dad que provoca un reset del sistema en casa de que este se haya bloqueado.
vi
Tabla de contenidos
Agradecimientos I
Resumen III
Glosario V
1. Introducción 1
1.1. Contexto y motivación . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Trabajos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1. Proyecto de Sistemas Embebidos para Tiempo Real . . . . 4
1.4.2. Proyecto de Redes de Sensores Inalámbricos . . . . . . . . . 5
1.5. Descripción de los capı́tulos . . . . . . . . . . . . . . . . . . . . . . 6
3. Descripción de la solución 17
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2. Sistema completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3. Controlador: módulos constitutivos . . . . . . . . . . . . . . . . . . 18
3.4. Modos de funcionamiento . . . . . . . . . . . . . . . . . . . . . . . 19
3.5. Lista de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4. Hardware 23
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2. Módulos hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.1. Circuito de alimentación . . . . . . . . . . . . . . . . . . . . 23
4.2.2. Placa MCU . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.3. LoRa transceiver . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.4. Circuito Fotosensible . . . . . . . . . . . . . . . . . . . . . . 27
Tabla de contenidos
5. Software embebido 45
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2. Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3. Descripción del bucle principal . . . . . . . . . . . . . . . . . . . . 48
5.4. Descripción de la implementación de los modos . . . . . . . . . . . 50
5.5. Implementación del reloj astronómico . . . . . . . . . . . . . . . . 52
5.6. Manejo de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.6.1. Consideraciones de diseño . . . . . . . . . . . . . . . . . . . 53
5.6.2. Aspectos de implementación . . . . . . . . . . . . . . . . . . 55
5.7. Codificación de comandos . . . . . . . . . . . . . . . . . . . . . . . 58
5.8. Comunicación LoRa . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.8.1. Comunicación UART para el manejo del LoRa transceiver . 62
5.8.2. El controlador como dispositivo end-point clase A . . . . . 63
5.8.3. Respuestas a comandos . . . . . . . . . . . . . . . . . . . . 63
5.9. Obtención de medidas eléctricas del circuito de medida de consumo 64
6. Pruebas 67
6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2. Pruebas de software . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2.1. Reloj astronómico . . . . . . . . . . . . . . . . . . . . . . . 68
6.2.2. Manejo de eventos . . . . . . . . . . . . . . . . . . . . . . . 69
6.2.3. Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2.4. Interpretación de lecturas del circuito de medida de consumo 70
6.3. Pruebas modulares de hardware fuera del PCB . . . . . . . . . . . 71
6.3.1. Circuito de alimentación . . . . . . . . . . . . . . . . . . . . 71
6.3.2. LoRa transceiver . . . . . . . . . . . . . . . . . . . . . . . . 71
6.3.3. Circuito fotosensible . . . . . . . . . . . . . . . . . . . . . . 76
6.3.4. Circuito de acondicionamiento . . . . . . . . . . . . . . . . 76
6.3.5. Circuito On/Off . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3.6. Circuito de medida de consumo . . . . . . . . . . . . . . . . 78
6.4. Pruebas modulares de hardware en el PCB . . . . . . . . . . . . . 82
6.4.1. Circuito de alimentación . . . . . . . . . . . . . . . . . . . . 82
6.4.2. LoRa transceiver . . . . . . . . . . . . . . . . . . . . . . . . 82
6.4.3. Circuito fotosensible . . . . . . . . . . . . . . . . . . . . . . 82
6.4.4. Circuito de acondicionamiento . . . . . . . . . . . . . . . . 82
6.4.5. Circuito On/Off . . . . . . . . . . . . . . . . . . . . . . . . 82
6.4.6. Circuito de medida de consumo . . . . . . . . . . . . . . . . 83
6.5. Pruebas finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
viii
Tabla de contenidos
7. Conclusiones 87
7.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.2. Análisis general del desarrollo del proyecto . . . . . . . . . . . . . . 87
7.3. Evaluación de los resultados respecto al alcance del proyecto . . . . 88
7.4. Conclusión final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.5. Trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Referencias 131
ix
Tabla de contenidos
x
Capı́tulo 1
Introducción
1
https://montevideo.gub.uy/institucional/dependencias/tecnologia-para-ciudades-
inteligentes
2
1.2. Objetivo general
1.3. Alcance
Se abarcarán las siguientes funcionalidades:
3
Capı́tulo 1. Introducción
4
1.4. Trabajos Relacionados
Esta primera versión del software fue desarrollada con el objetivo de servir
como base a la versión final a utilizar para el proyecto de fin de carrera. A su
vez, la interfaz sisem shell se utilizó en etapas avanzadas del proyecto para realizar
pruebas del funcionamiento del controlador. Esto es debido a la simplicidad que
supone dicha comunicación en comparación con la comunicación inalámbrica vı́a
LoRaWAN (la cual debe manejar la versión final del controlador).
Figura 1.1: Diagrama de la red LoRaWAN con las subredes IEE 802.15.4.
5
Capı́tulo 1. Introducción
Capı́tulo 4: Hardware
En este capı́tulo se presentan los componentes utilizados para conformar
los módulos hardware, ası́ como la topologı́a de los circuitos que contienen
tales componentes. Adicionalmente, se explican las razones por las cuales
estos componentes logran cumplir los objetivos planteados para cada módu-
lo. Finalmente se desarrolla sobre la interconexión entre los módulos y las
caracterı́sticas fı́sicas del controlador. En particular, se explican algunas de-
cisiones de diseño y se muestra el producto final.
6
1.5. Descripción de los capı́tulos
Capı́tulo 6: Pruebas
En este capı́tulo se describen las pruebas realizadas tanto para los módu-
los de software como para los módulos hardware, en las diferentes etapas
planteadas. Finalmente se adjuntan dos videos que muestran pruebas de
funcionamiento del controlador.
Capı́tulo 7: Conclusiones
En este capı́tulo se realiza un análisis general del desarrollo del proyecto. A su
vez, se evalúan los resultados obtenidos con respecto a los objetivos definidos
en el alcance del proyecto (sección 1.3) y se realiza una conclusión final. Por
último, se plantean mejoras al controlador y ampliaciones al proyecto que se
podrı́an realizar en trabajos futuros.
7
Esta página ha sido intencionalmente dejada en blanco.
Capı́tulo 2
2.1. Introducción
Las luminarias a controlar en este proyecto cuentan con un driver 1-10V y un
receptáculo ANSI136.41, que hacen posible que el controlador se comunique con la
luminaria para encenderla, apagarla o dimerizarla. Por otra parte, el controlador se
comunica de forma inalámbrica con el Servidor Central para recibir los comandos
de control. En este proyecto se utiliza la tecnologı́a de comunicación inalámbrica
LoRaWAN, la cual es idónea para redes del largo alcance y baja potencia.
En este capı́tulo se describe la forma de controlar la luminaria a través de su
receptáculo ANSI136.41 compatible con el protocolo 1-10V. A su vez, se describen
conceptos básicos sobre la tecnologı́a de comunicación inalámbrica LoRaWAN. Es-
te capı́tulo no contiene información acerca del controlador diseñado en el presente
proyecto. No obstante, se recomienda fuertemente la lectura de este capı́tulo para
facilitar la comprensión de algunos aspectos del proyecto.
es lineal. Para poder usar 1-10V, las luminarias con drivers compatibles tienen
receptáculos donde las señales “+” y “-” están accesibles. Es importante destacar
que con este protocolo se puede manejar el nivel de luz mientras la luminaria está
encendida, pero no se puede apagar la luminaria. Para lograr esto hace falta cortar
la alimentación de la luminaria con un sistema auxiliar.
10
2.2. Luminarias LED y sus drivers
Figura 2.2: Esquema de receptáculo para luminarias viales según el estándar ANSI C136.41
11
Capı́tulo 2. Tecnologı́as utilizadas en el proyecto
LoRa (Long Range) es una técnica de modulación que se destaca por permitir
el desarrollo de redes de largo alcance y baja potencia (LPWAN, Low-Power Wide-
Area Network), patentado por la empresa Semtech [10]. Sin embargo, la desventaja
de esta técnica es el bajo ancho de banda que puede manejar, que se traduce en
poca información que puede transmitir por mensaje. Por su parte, LoRaWAN es un
protocolo de red para redes de largo alcance y baja potencia, ideado para trabajar
con LoRa. Las frecuencias de comunicación que esta tecnologı́a maneja pertenecen
a bandas de uso libre.
12
2.3. Tecnologı́a de comunicación LoRaWAN
13
Capı́tulo 2. Tecnologı́as utilizadas en el proyecto
Figura 2.6: Diagrama de posibles intercambios de mensajes en LoRaWAN, según clases. Clase
A en la izquierda, clase B en el medio y clase C en la derecha
Gateways
Los gateways son los encargados de recibir la información de los dispositivos
end-point de forma inalámbrica utilizando la modulación LoRa y enviarla al ser-
vidor de red a través de internet. También hacen el camino inverso: reciben los
mensajes del servidor de red a través de internet y los envı́an a los dispositivos
end-point.
Servidores de Red
Los servidores de red establecen la comunicación entre las aplicaciones y los
gateways. En caso de un mensaje de uplink recibido por un gateway, el servidor de
red es quien envı́a este paquete a la aplicación correspondiente. En redes con más
de un gateway, es posible que el uplink de un end-point llegue a varios gateways; en
este caso el servidor de red elimina los mensajes duplicados recibidos por distintos
gateways. Si una aplicación quisiera comunicarse con un dispositivo end-point,
el servidor de red es quien se encarga de hacer llegar el mensaje de downlink
al gateway correspondiente. El gateway correspondiente es aquel con el cual las
comunicaciones del dispositivo end-point tienen mejor calidad de señal.
Es importante destacar que los servidores de red no tienen acceso al contenido
de los mensajes (payload) ya que este se encuentra encriptado, sino que solo tienen
acceso a la información acerca de la procedencia y el destino del mensaje.
Aplicaciones
Las aplicaciones reciben los mensajes de uplink y son los generadores de men-
sajes de downlink. Estas pueden decodificar y acceder a la información de los
paquetes, a diferencia de los servidores de red. Están programadas para actuar en
14
2.3. Tecnologı́a de comunicación LoRaWAN
base a la información de los paquetes que recibe. Por ejemplo, puede mostrar los
datos en una interfaz gráfica, enviarlos a una base de datos, etc.
15
Esta página ha sido intencionalmente dejada en blanco.
Capı́tulo 3
Descripción de la solución
3.1. Introducción
En vista de los requerimientos explicitados en el alcance de proyecto (sección
1.3), se desarrolló una solución que pretende cumplir con todos ellos. Esta solución
refiere al diseño de un controlador de luminaria de alumbrado público como parte
de un sistema más amplio. Este sistema está conformado por el Servidor Central,
una infraestructura de comunicación inalámbrica LoRaWAN, el controlador y una
luminaria.
En este capı́tulo se describe brevemente el sistema completo y se da un primer
acercamiento al controlador diseñado. El controlador está compuesto por varios
módulos hardware, los cuales son descritos de forma somera en este capı́tulo para
luego ser detallados en el capı́tulo 4. A su vez, el presente capı́tulo describe los
modos de funcionamiento del controlador ası́ como los comandos que este recibe,
enviados desde el Servidor Central.
18
3.4. Modos de funcionamiento
Plan horario
Reloj astronómico
Fotocélula
19
Capı́tulo 3. Descripción de la solución
20
3.5. Lista de comandos
A continuación se listan los distintos comandos que se pueden usar para con-
trolar y monitorear la luminaria. Los comandos se presentan clasificados por modo,
aunque todos los comandos son recibidos en todos los modos. Es decir, el criterio
de clasificación es en cuál modo tiene efecto el comando. 1
Comandos generales:
DIR EVENT DT: el controlador responde con todos los eventos cargados
actualmente en el plan horario indicado por DT. DT puede ser WD (del
inglés Weekday) para el plan de entre semana, WE (del inglés Weekend)
para el plan de fin de semana o SE (del inglés Sun Events) para el plan del
modo Reloj Astronómico. Los eventos están identificados con un “número
identificador de evento” (ID). Para cada evento se detalla el ID, la hora y el
nivel de luz.
21
Capı́tulo 3. Descripción de la solución
Modo directo:
SET DIM XX: fija la salida 1-10V del controlador al nivel ZZ, donde ZZ es
el múltiplo de 5 más cercano a XX (el cual debe ser un número del 0 al 100).
Esto quiere decir que si XX es igual a 23, la salida 1-10V del controlador
será de nivel 25 %, es decir 2,5 V. Si XX es menor a 10 se apaga la luminaria
(equivalente a SET OFF). Si XX es igual a 100, la salida 1-10V será 10 V
(equivalente a SET ON).
RES EVENT DT: elimina todos los eventos del plan horario correspondiente
a WD o WE según sea DT.
22
Capı́tulo 4
Hardware
4.1. Introducción
El controlador posee diversos módulos hardware interconectados entre sı́, cada
uno con funciones determinadas, tal como se explicó en el capı́tulo 3. Para tener
suficiente espacio para albergar a todos ellos el controlador cuenta con tres placas
de circuitos impresos (PCBs, del inglés Printed Circuit Board). Los PCBs fueron
diseñados utilizando el programa Eagle [14], y fueron fabricados por la empresa
PCBWay [15].
En este capı́tulo se presentan los componentes utilizados para conformar los
módulos hardware, ası́ como la topologı́a de los circuitos que contienen tales com-
ponentes. Adicionalmente, se explican las razones por las cuales estos componentes
logran cumplir los objetivos planteados para cada módulo. Finalmente se desarrolla
sobre la interconexión entre los módulos y las caracterı́sticas fı́sicas del controlador.
En particular, se explican algunas decisiones de diseño y se muestra el producto
final.
24
4.2. Módulos hardware
funciones trigonométricas (ver sección 5.5). Cuando se intentó realizar estos cálcu-
los se observó que la memoria del microcontrolador no era suficiente; la falta de
multiplicador hardware del mismo hace que un programa que realice operaciones
como las mencionadas sea muy grande. Por lo tanto, se optó por trabajar con la
placa de desarrollo MSP-EXP432P401R ya que es la que fue proporcionada por
el tutor del proyecto [19]. Esta placa posee el microcontrolador MSP432P401R,
el cual tiene multiplicador hardware y cumple con los requerimientos de nuestro
software.
La placa de desarrollo MSP-EXP432P401R brindó la posibilidad de desarrollar
la primera versión del firmware. Sin embargo, es necesario que la placa a usar en
el controlador sea del menor tamaño posible, ası́ el ensamble posterior de todos los
módulos hardware permite que el controlador entre en la caja de protección IP66
compatible con el conector ANSI C136.41. Por lo tanto, se decidió utilizar como
placa MCU la placa de desarrollo MSP432 Clicker del fabricante MikroElektronika
[20]. La misma se puede observar en la figura 4.3. La figura 4.4 muestra la diferencia
en tamaño de las dos placas mencionadas.
25
Capı́tulo 4. Hardware
Además de ser más compacta, la placa MSP432 Clicker puede ser conectada
fácilmente con otras placas del mismo fabricante mediante su conexión MikroBus.
Esto es importante puesto que MikroElektronika ofrece un módulo LoRa transcei-
ver con esta conexión llamado LoRa 2 Click [21]. La facilidad que supone conectar
ambas placas y trabajar con ellas fue la razón principal que llevó al grupo a deci-
dirse por ellas.
El LoRa 2 Click es una placa que tiene como objetivo facilitar el desarrollo de
aplicaciones que usen el chip RN2903 del fabricante Microchip [22]. El RN2903,
que es el componente principal del Lora 2 Click, está conformado por un trans-
ceiver SX1276 del fabricante Semtech y un microcontrolador PIC18LF46K22 del
fabricante Microchip [23] [24]. El microcontrolador del RN2903 cumple la función
de brindar la posibilidad de comunicarse mediante comandos UART con el trans-
ceiver SX1276, facilitando su uso. Cuando se usa el RN2903 como parte de un
dispositivo end-point permite que el dispositivo funcione en clase A o clase C1 .
Para el presente proyecto el RN2903 fue configurado para que el controlador sea
un dispositivo end-point clase A.
1
Por defecto el RN2903 funciona en clase A. Para poder utilizarlo en clase C, es nece-
sario actualizar su firmware al menos a la versión 1.05.
26
4.2. Módulos hardware
Los comandos UART que utiliza el RN2903 se dividen en tres grupos: sys, mac
y radio. Los comandos sys están vinculados a las acciones sobre el sistema mismo.
Por ejemplo, permiten consultar la versión del software del chip o reiniciarlo. Los
comandos mac inciden sobre la red LoRaWAN a la que se conectó el dispositivo.
Por ejemplo, permiten activarse en la red, definir ventanas de recepción (en caso
de trabajar en clase A) o transmitir un mensaje. Los comandos radio son aquellos
con los que se puede modificar los parámetros de funcionamiento del SX1276. Por
ejemplo, permiten modificar la potencia de transmisión y la banda de frecuencia
a utilizar, entre otros. Para más información sobre el uso del chip RN2903 y la
sintaxis de los comandos, referirse a la documentación del integrado [22].
27
Capı́tulo 4. Hardware
28
4.2. Módulos hardware
29
Capı́tulo 4. Hardware
ciclo de trabajo de 100 % es necesaria una etapa de amplificación luego del filtrado,
10
con factor de amplificación 3,3 « 3,03.
El circuito de acondicionamiento consta entonces de dos etapas:
30
4.2. Módulos hardware
31
Capı́tulo 4. Hardware
32
4.2. Módulos hardware
Tensión RMS.
Corriente RMS.
Potencia activa.
Potencia reactiva.
Potencia aparente.
Factor de potencia.
Para lograrlo, este chip toma medidas de tensión entre sus pines VINP y VINN
(bornes de RSEN SE ) y corriente que pasa entre IP+ e IP-. A partir del muestreo
de tensión y corriente, el ACS71020 calcula las magnitudes eléctricas que reporta.
Figura 4.13: Foto del chip ACS71020 y diagrama del circuito de medida de consumo utilizado.
33
Capı́tulo 4. Hardware
34
4.3. Interconexión entre módulos y caracterı́sticas fı́sicas del controlador
desea escribir. Luego el MCU inicia otra escritura a la dirección del chip, quien
recibirá los datos y los almacenará en el registro que corresponde.
Luego de un reset el chip adquiere una slave address según el voltaje que haya
en los pines DIO 0 y DIO 1 en ese momento2 . Sin embargo, es posible adjudicar
al chip una slave address fija escribiendo en el registro 0x1F. Para el presente
proyecto, la dirección fue fijada en 0x45 usando este procedimiento.
Por otra parte, la figura 4.16 muestra el intercambio de mensajes en el bus I 2 C
al realizar una lectura. Al igual que en la escritura, el MCU comienza el proceso
escribiendo en la dirección del ACS71020 (Slave Address), la dirección del registro
del chip que se desea leer. Luego el MCU inicia una lectura a la dirección del chip,
quien responderá con los datos almacenados en el registro interno que se desea
leer.
Los datos que se obtienen al realizar una lectura a un registro están representa-
dos en punto fijo, y en caso de que la magnitud pueda ser negativa es representada
en punto fijo y complemento a dos. Cada magnitud presenta una cantidad diferente
de bits fraccionales, por lo que luego de realizada una lectura es necesario operar
con los datos obtenidos para tenerlos representados en punto flotante.
35
Capı́tulo 4. Hardware
El controlador cuenta con una base con un conector compatible con el estándar
ANSI C136.41. La base es 2213871-2 del fabricante TE Connectivity y se puede
apreciar en la figura 4.17 (a). Adicionalmente, el controlador tiene una tapa de pro-
tección para sus componente electrónicos que también cumple con dicho estándar.
Esta tapa es 1-2306130-1 de TE Connectivity (figura 4.17 (b)).
La figura 4.18 muestra una ilustración del controlador, sin tapa ni componentes
electrónicos. Los PCBs que contienen los componentes electrónicos son circulares
y tienen un diámetro ligeramente menor al de la base del controlador, de modo de
maximizar el área disponible en cada PCB.
36
4.3. Interconexión entre módulos y caracterı́sticas fı́sicas del controlador
Figura 4.18: Esquema en tres dimensiones del controlador, sin tapa ni componentes electróni-
cos.
El controlador tiene tres PCBs distintos, que se conectan entre sı́ usando co-
nectores tipo “flex” para compartir señales. Los módulos hardware fueron ubicados
en los distintos PCBs como se muestra en la figura 4.19. Por otra parte, cada PCB
posee 3 huecos de aproximadamente 4 mm formando los vértices de un triángulo
isósceles. A través de estos huecos se pasan tornillos y cubriendo los tornillos se
colocan separadores plásticos de 25 mm de altura.
A los efectos de esta documentación los PCBs se llamarán placa inferior, placa
media y placa superior. A continuación se describe brevemente cada una de ellas.
En el apéndice B se muestran imágenes de los esquemáticos y layouts de los tres
PCBs desarrollados en Eagle. Cabe destacar que la placa inferior tal como se
muestra en este capı́tulo presenta un error de diseño, el cual se descubrió en la
etapa de pruebas. Esto generó que la misma deba ser corregida, por lo que se
realizaron pequeñas modificaciones sobre el PCB (no se mandó a fabricar un nuevo
PCB). Se desarrolla sobre este tema en la sección 6.4.6.
Placa inferior
La placa inferior posee las terminales en las cuales se conectan los contactos
de la base ANSI C136.41. Además, contiene el circuito de medida de consumo y
el circuito On/Off. En la figura 4.20 se muestran fotos de la placa inferior.
Placa media
La placa media contiene el circuito de alimentación y el circuito de acondicio-
namiento. En la figura 4.21 se muestran fotos de la placa media.
Placa superior
La placa superior contiene el circuito fotosensible, el MCU y el LoRa Trans-
ceiver. En la figura 4.22 se muestran fotos de la placa superior.
37
Capı́tulo 4. Hardware
38
4.3. Interconexión entre módulos y caracterı́sticas fı́sicas del controlador
39
Capı́tulo 4. Hardware
40
4.3. Interconexión entre módulos y caracterı́sticas fı́sicas del controlador
Figura 4.25: Foto del controlador de costado sin tapa, en la cual se aprecian los contactos de
la base compatible ANSIC136.41.
41
Capı́tulo 4. Hardware
42
4.3. Interconexión entre módulos y caracterı́sticas fı́sicas del controlador
Figura 4.29: Foto del controlador conectado a la luminaria Taurus-36, desde arriba.
43
Esta página ha sido intencionalmente dejada en blanco.
Capı́tulo 5
Software embebido
5.1. Introducción
La unidad central del controlador es el módulo llamado placa MCU, el cual
posee al microcontrolador MSP432P401R. El desarrollo del software embebido que
permita al MCU cumplir con todos los objetivos explicitados en el alcance es una
parte fundamental del proyecto. Este se realizó utilizando el entorno de desarrollo
integrado CCS (Code Composer Studio) de Texas Instruments, programando en
el lenguaje C [30]. La arquitectura de software utilizada es round robin con inte-
rrupciones. El software consta de diversos módulos, algunos de los cuales contienen
funciones que levantan las banderas que se evalúan en el bucle principal.
En este capı́tulo se describe el software del controlador. En particular, se listan
los módulos y se describen de forma somera, se detalla el bucle principal y se es-
pecifica la implementación de los modos de funcionamiento. Además, se describen
más en detalle algunos aspectos importantes del software. Estos son: la implemen-
tación del reloj astronómico, el manejo de eventos, la codificación de comandos,
la comunicación LoRaWAN y la obtención de medidas eléctricas del circuito de
medida de consumo.
El software del proyecto con su correspondiente documentación Doxygen se
encuentra en el repositorio de git del proyecto 1 .
5.2. Módulos
La figura 5.1 muestra el diagrama de módulos de software del controlador,
en el cual también se incluyen los periféricos del MCU utilizados y los módulos
hardware con los que estos periféricos se comunican. Los módulos coloreados en
azul refieren a software independiente de hardware, los coloreados en rojo son
los módulos dependientes de hardware, los bloques en amarillo son periféricos del
MCU y los bloques en verde representan los módulos hardware. Cada módulo en
el diagrama hace uso de los módulos y bloques inmediatamente debajo de ellos.
1
https://gitlab.com/TomasArrivillaga/columint
Capı́tulo 5. Software embebido
46
5.2. Módulos
sun equation: el propósito del módulo sun equation es obtener las horas de
amanecer y atardecer de cada dı́a. Provee funciones que realizan los cálculos
para obtener dichas horas a partir de una fecha y una latitud dada. Necesita
conocer la fecha actual, la cual obtiene del módulo timer.
47
Capı́tulo 5. Software embebido
48
5.3. Descripción del bucle principal
49
Capı́tulo 5. Software embebido
Modo Directo:
El modo Directo consiste únicamente en ejecutar los comandos que llegan desde
el transceiver al MCU vı́a UART. En este estado no se realizan procesos ni se toman
decisiones, más allá de la ejecución directa de los comandos.
Modos Reloj Astronómico y Plan Horario:
Los modos Reloj Astronómico y Plan Horario funcionan en base a eventos con
horas de ocurrencia prefijadas y tienen la opción de tomar en cuenta la información
proveniente de la fotocélula. En caso de activar dicha opción la información de
la fotocélula es la de mayor jerarquı́a para la toma de decisiones en las horas
de sol (especı́ficamente entre el amanecer y el atardecer calculados por el reloj
astronómico). En la noche la información de la fotocélula no es tenida en cuenta
en ningún caso. Puede verse en la figura 5.3 el diagrama de flujo correspondiente a
estos dos modos. Cabe destacar que el proceso que responde a la pregunta “¿Debo
prender o apagar la luz según la fotocélula?” tiene su propio funcionamiento, el
cual será desarrollado en la descripción del modo Fotocélula.
50
5.4. Descripción de la implementación de los modos
Figura 5.3: Diagrama de flujo de los modos Reloj Astronómico y Plan Horario.
Modo Fotocélula:
En este modo se controla la luminaria únicamente según el nivel del luz que
incide sobre la fotocélula. Para saber si hay suficiente luz ambiente se toman los
valores de tensión del circuito fotosensible cada un segundo. Al llegar un nuevo
minuto, los sesenta valores son promediados y el promedio es comparado contra un
umbral de luz y un umbral de oscuridad. Estos valores umbral están predefinidos.
Si la tensión supera el umbral de luz significa que hay suficiente luz ambiente
como para apagar la luminaria. Si por el contrario la tensión está por debajo
del umbral de oscuridad, se interpreta que no hay suficiente luz en el ambiente y
la luminaria debe estar prendida. Si el promedio es menor que el umbral de luz
pero mayor al umbral de oscuridad la luminaria debe permanecer como estaba.
Esta histéresis tiene como objetivo eliminar la posibilidad de que la luminaria sea
encendida y apagada en minutos sucesivos, situación que podrı́a suceder en caso
de tener un único umbral de comparación. En la figura 5.4 se muestra un esquema
representando los distintos niveles de tensión, según son intepretados por el MCU
51
Capı́tulo 5. Software embebido
donde:
δ : es la declinación solar.
52
5.6. Manejo de eventos
Luego de un reset, las dos listas del modo Plan Horario coinciden con la
lista del modo Reloj Astronómico. Esto significa que las listas tendrán dos
eventos: uno que representa el amanecer y otro el atardecer.
Al pasar de un modo no basado en eventos (modos Directo y Fotocélula) a un
modo con eventos (modos Plan Horario y Reloj Astronómico) es necesario
actualizar la salida de la luminaria tras el cambio de modo. Concretamente,
se pone la luminaria al nivel de luz indicado por el evento pasado más re-
ciente perteneciente a la lista del modo con eventos. Si la lista está vacı́a, se
53
Capı́tulo 5. Software embebido
considera que hubo un error por parte del usuario y la luminaria se enciende
por si dicho error se cometió en la noche.
Cada vez que inicia un nuevo dı́a, se actualizan los eventos de la lista co-
rrespondiente al Reloj Astronómico.
En la figura 5.5 se muestra una situación ejemplo que pretende ilustrar algunas
de las decisiones de diseño mencionadas anteriormente. En este ejemplo se pasa
del modo Directo al modo Reloj Astronómico con uso de fotocélula. Por un lado,
si la opción de tomar en cuenta la medida de la fotocélula estuviera desactivada,
al cambiar de modo la luminaria deberı́a mantenerse apagada ya que el evento
pasado más cercano es el amanecer. No obstante, como dicha función está activada,
la luminaria se prende. Esto es porque la fotocélula capta poca luz, y en este modo
54
5.6. Manejo de eventos
Figura 5.5: Ejemplo de la respuesta del controlador ante un cambio de modo. Los porcentajes
en el centro de la barra representan los niveles de dimerización de la luminaria.
55
Capı́tulo 5. Software embebido
Figura 5.6: Evolución del arreglo de eventos del fin de semana con una secuencia de comandos.
56
5.6. Manejo de eventos
se muestra en la figura 5.7. En ese momento, llega un comando SET DIM 40,
por lo que el controlador pasa a modo Directo, poniendo la luminaria al 40 %
de su intensidad. No se ingresan nuevos comandos al controlador hasta las 16:00,
por lo que permanece en modo directo y con la luminaria al 40 %. A dicha hora,
se ingresa el comando SET MODE 2, lo cual lleva al controlador nuevamente al
modo Plan Horario. Al cambiar de modo, volviendo al Plan Horario, se recalcula
el ID del próximo evento. En este caso, el evento próximo cambió mientras el
controlador se encontraba en modo directo, por lo que recalcular el ID del próximo
evento es fundamental. Adicionalmente, según el último evento en el plan horario
la luminaria deberı́a estar al 70 % a las 16:00. Por lo tanto, al cambiar de modo
se debe ajustar el nivel de luz de la luminaria, cambiando de 40 % a 70 %. En la
figura 5.8 puede verse el estado de la luminaria tras el cambio de modo.
57
Capı́tulo 5. Software embebido
SET ON: este comando se envı́a como un byte, conteniendo en sus 5 MSB
el identificador de comando 0x00. Al recibir este comando, el MCU no envı́a
respuesta.
SET OFF: este comando se envı́a como un byte, conteniendo solo el identifi-
cador de comando 0x01. Al recibir este comando, el MCU no envı́a respuesta.
58
5.7. Codificación de comandos
Figura 5.10: Diagrama del formato de cada evento, en respuesta a un DIR EVENT.
59
Capı́tulo 5. Software embebido
60
5.7. Codificación de comandos
Se presenta en la tabla 5.1 un resumen de los comandos, con los datos extras
que se deben enviar y sus respuestas.
61
Capı́tulo 5. Software embebido
mac join OTAA : intenta activarse frente a una aplicación vı́a OTAA
usando los valores establecidos con el comando mac set ‘param’ ‘value’.
El módulo LoRa (software) también recibe mensajes enviados por el chip. Estos
pueden ser una confirmación de un comando ejecutado correcta o incorrectamen-
te, o downlinks desde la aplicación. Con respecto a las confirmaciones, cuando se
le manda un mensaje al RN2903 con un comando, el RN2903 responde con el
resultado de haber ejecutado ese comando. Aunque la mayorı́a de las respuestas
son simples como “ok”, algunos comandos tienen resultados que proveen más in-
formación sobre el resultado. Por ejemplo, el comando mac tx ‘type’ ‘portno’
‘payload’ devuelve como resultado: “ok”, “invalid param”, “not joined”, “busy”,
entre otros. En cuanto a los downlinks, el chip RN2903 envı́a por UART mac rx
‘payload’ cuando recibe un mensaje desde la aplicación (‘payload’ es el mensaje
que recibió desde la aplicación).
62
5.8. Comunicación LoRa
63
Capı́tulo 5. Software embebido
Voltaje (vrms): para obtener el voltaje se lee el registro 0x20. Los 15 LSB de
los 32 leı́dos corresponden al voltaje. Este es representado como un número
en punto fijo sin signo de 15 bits, con 15 bits fraccionarios. Este número
(entre 0 y 1) debe ser multiplicado por la tensión de fondo de escala para
obtener el valor de tensión deseado (en volt). La tensión de fondo de escala es
aquella tensión que deberı́a haber entre “L” y “N” para que hayan 275mV en
los pines VINN y VINP del ACS71020. Es importante notar que es necesario
enmascarar el byte 1 (B1 ) de manera de resetear el bit 15, pues este no forma
parte de la lectura de tensión. Entonces, el dato se obtiene a partir de la
lectura como se muestra a continuación:
pB1 &7F hq ˆ 28 ` B0
VRM S “ ˆ VF E , (5.2)
215
donde VF E representa la tensión de fondo de escala, que vale 535 V para el
presente proyecto.
64
5.9. Obtención de medidas eléctricas del circuito de medida de consumo
escala es la máxima corriente que puede ser medida por el ACS71020, y para
la versión del chip utilizada en el presente proyecto (ACS71020KMABTR-
030B3-I2C) esta corriente es de 30A. Es importante notar que es necesario
enmascarar el byte 3 (B1 ) de manera de resetear el bit 31, pues este no forma
parte de la lectura de tensión. Entonces, el dato se obtiene a partir de la
lectura como se muestra a continuación:
B1 ˆ 28 ` B0
P avg “ ˆ PF E . (5.4)
215
Si el bit 16 es 1 la potencia será negativa y el dato se obtiene de la siguiente
manera:
r!pB1 ˆ 28 ` B0 qs ` 1
P avg “ ´ ˆ PF E , (5.5)
215
donde el operador ! representa la negación de todos los bits.
B1 ˆ 28 ` B0
S“ ˆ SF E , (5.6)
215
65
Capı́tulo 5. Software embebido
B1 ˆ 28 ` B0
Q“ ˆ QF E , (5.7)
215
pB1 &07hq ˆ 28 ` B0
FP “ (5.8)
29
Si el bit 10 es 1 el factor de potencia será negativo y el dato se obtiene de
la siguiente manera:
!rpB1 &07hq ˆ 28 ` B0 s ` 1
FP “ (5.9)
29
donde el operador ! representa la negación de todos los bits.
66
Capı́tulo 6
Pruebas
6.1. Introducción
En el presente proyecto las pruebas fueron realizadas siguiendo una estrategia
marcada: modularización y validación. Esta estrategia consiste en separar lo que se
desea probar en módulos independientes, de manera de llevar a cabo evaluaciones
individuales de dichos módulos. La idea detrás de este procedimiento de secciona-
miento es estudiar y validar módulos de manera sencilla, antes de integrarlos al
sistema completo. Dicho procedimiento es aplicado tanto para el hardware como
para el software. En el caso particular del hardware los módulos fueron valida-
dos inicialmente fuera de los PCBs finales, para ser luego soldados y probados en
dichos PCBs.
Para algunas pruebas se hizo uso de la interfaz de comunicación desarrolla-
da para el trabajo de Sistemas Embebidos para Tiempo Real (mencionado en la
sección 1.4) conocida como sisem shell. Esta interfaz de comunicación hace que el
controlador pueda recibir comandos en forma directa desde una PC vı́a UART.
Dichos comandos son cadenas de caracteres ASCII que son interpretadas por el
controlador para actuar en consecuencia. Estas cadenas de caracteres corresponden
a los comandos sin codificar, por ejemplo “SET OFF”.
En este capı́tulo se describen las pruebas realizadas tanto para los módulos
de software como para los módulos hardware, en las diferentes etapas planteadas.
Finalmente se adjuntan dos videos que muestran pruebas de funcionamiento del
controlador.
Figura 6.1: Gráfica que muestra el error en el cálculo del amanecer del módulo sun equation
en función de la fecha para el año 2021.
68
6.2. Pruebas de software
Figura 6.2: Gráfica que muestra el error en el cálculo del atardecer del módulo sun equation
en función de la fecha para el año 2021.
6.2.3. Decoder
La verificación de funcionamiento del módulo decoder fue realizada usando
CCS. Como se mencionó antes, la función principal del decoder es extraer la in-
formación de un comando codificado y proporcionársela a la función del módulo
control que corresponda. Esta información puede ser una hora (en el caso de un
69
Capı́tulo 6. Pruebas
Por otro lado, algunos de los comandos son consultas de variables del controla-
dor, por lo que es necesario enviar una respuesta. Éstas también deben codificarse
(como se explicó en la sección 5.7), y la tarea de codificarlas recae sobre el módulo
decoder. Para probar el correcto funcionamiento de la codificación de respuestas,
se enviaron comandos vı́a UART que esperan respuesta. Luego se compararon las
respuestas obtenidas con las esperadas. En la figura 6.4 se muestra gráficamente
el recorrido por los módulos de un comando y su respectiva respuesta. En verde
se muestra el camino del comando y en rojo el de la respuesta a ese comando. Es
importante aclarar que esta prueba se realizó con la etapa de decodificación ya
validada. Tras verificar que las respuestas eran las esperadas en todos los casos
probados, se tomó como validado el módulo decoder.
Figura 6.4: Ejemplo de prueba de la codificación de respuestas hecha por el módulo decoder.
70
6.3. Pruebas modulares de hardware fuera del PCB
71
Capı́tulo 6. Pruebas
Como se mencionó en la sección 2.3.2, este proyecto utiliza The Things Network
para tener acceso a un servidor de red y crear una aplicación 1 . Como paso previo
es necesario registrar el gateway que se va a utilizar ante TTN. Una vez creada
la aplicación, se procedió a habilitar la posibilidad de que se activen dispositivos
end-point. Esta habilitación implica la definición de los parámetros necesarios pa-
ra la activación vı́a OTAA del dispositivo end-point en la aplicación (DEV EUI,
APP EUI y APP KEY). Entonces, se establecieron estos parámetros en el LoRa
transceiver utilizando el comando “mac set param value” y se procuró la acti-
vación del mismo mediante el comando “mac join OTAA”. Desde la plataforma
TTN se constató que se habı́a recibido el Join Request, y que la activación se habı́a
realizado con éxito.
TTN cuenta con una consola que muestra el historial de los mensajes que son
compartidos entre la aplicación y los dispositivos end-point. A su vez, la consola
permite el envı́o de downlinks. Por otra parte, TTN posee un decodificador pro-
gramable en lenguaje JavaScript, el cual genera salidas en formato JSON según
1
Para crear la aplicación se siguieron los pasos que se explican en https://www.
thethingsnetwork.org/docs/
72
6.3. Pruebas modulares de hardware fuera del PCB
los mensajes que recibe. Estas salidas son usadas para las integraciones con otras
herramientas.
La integración que se utiliza para la visualización de datos en estas pruebas
es la plataforma Ubidots. El propósito de esta plataforma es proveer una forma
fácil de mostrar los datos de los mensajes de uplink que envı́an los dispositivos
end-point. Ubidots ofrece múltiples “widgets” para mostrar los datos, como por
ejemplo un termómetro pensado para mostrar temperaturas o una baterı́a para
mostrar niveles de baterı́a en un dispositivo. A su vez, estos “widgets” pueden
ser representaciones más complejas, como histogramas o gráficas que muestren la
evolución de una variable en el tiempo. Un ejemplo de un “widget” de termómetro
se puede apreciar en la figura 6.6. Más allá de estos “widgets” predefinidos, Ubidots
también ofrece un HTML CANVAS que permite usar código de HTML, CSS y
Javascript para que el usuario cree su propio “widget”.
73
Capı́tulo 6. Pruebas
por el usuario y las envı́a como downlink en la siguiente ventana de recepción del
dispositivo end-point. Cabe destacar que para utilizar esta consola se debe cono-
cer el comando a enviar en su formato codificado. Es por esta razón que se creó
un programa en Octave, llamado encoder, que toma como entrada el comando en
su versión decodificada y devuelve su versión codificada, para ser ingresada en la
consola de TTN. El mismo se encuentra en el repositorio de git del proyecto 2 .
Con respecto a los uplinks, cuando el LoRa transceiver envı́a un mensaje a
la aplicación TTN, el decoder de TTN recibe dicho mensaje, ası́ como el número
de puerto al cual fue enviado. Como se explicó en la sección 5.8.3, se programó el
controlador para que envı́e las respuestas a cada tipo de comando en un puerto de-
terminado. Por ejemplo, las respuestas del controlador al comando “GET MODE”
las envı́a al puerto 20, mientras que las respuestas a “GET MOMENT” las envı́a
al puerto 21. De esta manera, desde la aplicación en TTN se conoce qué comando
generó la respuesta recibida. Para estas pruebas, se programó el decoder de TTN
para crear la variable “Datos”, la cual es la concatenación del número de puerto
(Port) y los bytes del mensaje (Bytes). Luego, se da dicha variable como salida
hacia Ubidots. En la figura 6.8 se representa esquemáticamente con un ejemplo
este funcionamiento del decoder de TTN.
Es importante destacar que TTN limita el tamaño de la variable Datos a
un máximo de 8 bytes. Por lo tanto, las respuestas que envı́a el controlador que
pueden superar este tamaño se dividen en más de un mensaje, cada uno enviado
a un puerto especı́fico. Estos comandos son DIR EVENT WD y DIR EVENT
WE, los cuales generan una respuesta de tamaño 3 bytes por evento. Por ejemplo,
si el arreglo correspondiente a WD tiene 3 eventos la respuesta del controlador
necesita 9 bytes para enviar su información, lo cual supera el tamaño que puede
2
https://gitlab.com/TomasArrivillaga/columint
74
6.3. Pruebas modulares de hardware fuera del PCB
75
Capı́tulo 6. Pruebas
coded a los comandos que recibe. Se verificó desde Ubidots que la decodificación
de uplinks se realiza de forma correcta. En la figura 6.9 se muestra el tablero de
Ubidots generado en esta prueba, luego de enviar desde TTN al LoRa transceiver
todos los comandos que generan respuestas.
76
6.3. Pruebas modulares de hardware fuera del PCB
77
Capı́tulo 6. Pruebas
Figura 6.11: Señales obtenidas en la simulación Spice. Vpin en azul y VRLY en rojo.
78
6.3. Pruebas modulares de hardware fuera del PCB
figura 6.14. Es importante aclarar que, una vez más, la topologı́a del circuito es la
recomendada por el fabricante en la hoja de datos.
Figura 6.14: Esquemático del circuito utilizado para realizar las pruebas del ACS71020 con el
ASEK71020.
Fuente: realización propia, basado en un esquema presente en la hoja de datos
del ACS71020.
Tensión (V).
79
Capı́tulo 6. Pruebas
80
6.3. Pruebas modulares de hardware fuera del PCB
Se puede ver en las tablas que las medidas de potencia aparente, reactiva y
factor de potencia no son consistentes en ningún caso. Por ejemplo, en el caso de
bombilla encendida de potencia nominal 100 W, el valor de potencia reactiva es
a veces cercano a 10 VAR y a veces nula. La situación es similar para las otras
bombillas. Por otra parte, para las bombillas de potencia nominal 75 W y 40 W,
las medidas de potencia aparente son en algunos casos menores en módulo que la
potencia activa. El grupo desconoce la causa de dichas inconsistencias.
81
Capı́tulo 6. Pruebas
82
6.4. Pruebas modulares de hardware en el PCB
se desea prender la luminaria y debe abrir este contacto cuando se desea apagarla.
Teniendo en cuenta que tras un reset el controlador indica que la luminaria debe
estar apagada, inmediatamente después de alimentar al controlador no debe haber
continuidad. Efectivamente se corroboró esto y se procedió a enviar el comando
SET ON haciendo uso del sisem shell. Luego, se comprobó que sı́ habı́a continuidad
entre Lı́nea y Carga. Adicionalmente se enviaron comandos de dimerización entre
10 % y 100 % y como era esperado la continuidad siguió existiendo. Por último se
enviaron comandos de dimerización entre 0 % y 9 % y se perdió esta continuidad.
Por lo tanto se validó este módulo.
Una vez realizadas las pruebas de validación de los circuitos de alimentación,
acondicionamiento y On/Off, se consideró seguro conectar el controlador a la lu-
minaria. Entonces, se conectó el controlador a la luminaria y se enviaron diversos
comandos usando el sisem shell, obteniendo resultados satisfactorios. Se comprobó
el manejo del encendido, apagado y dimerizado de la luminaria.
83
Capı́tulo 6. Pruebas
Figura 6.15: Diagrama que muestra la conexión del circuito de medida de consumo previo al
ajuste realizado. Se muestra en azul el bucle de corriente consumida por la luminaria.
Figura 6.16: Diagrama que muestra la conexión del circuito de medida de consumo luego del
ajuste realizado. Se muestra en azul el bucle de corriente consumida por la luminaria.
84
6.4. Pruebas modulares de hardware en el PCB
85
Capı́tulo 6. Pruebas
3
https://youtu.be/123EwKuBNvw
4
https://youtu.be/x6nTDueM2KA
86
Capı́tulo 7
Conclusiones
7.1. Introducción
En este capı́tulo se realiza un análisis general del desarrollo del proyecto. A su
vez, se evalúan los resultados obtenidos con respecto a los objetivos definidos en el
alcance del proyecto (sección 1.3) y se realiza una conclusión final. Por último, se
plantean mejoras al controlador y ampliaciones al proyecto que se podrı́an realizar
en trabajos futuros.
88
7.3. Evaluación de los resultados respecto al alcance del proyecto
89
Capı́tulo 7. Conclusiones
90
7.4. Conclusión final
91
Capı́tulo 7. Conclusiones
92
7.5. Trabajos futuros
vı́a LoRaWAN. Para lograrlo, se deberı́a utilizar algunos de los pines libres de la
placa MCU para configurar una UART y comunicarse con un transceiver capaz
de recibir los datos de los sensores. También serı́a necesario asignar un puerto
de comunicación LoRaWAN para cada tipo de dato obtenido de los sensores. En
el trabajo presentado en la sección 1.4.2 se encuentra un ejemplo de una subred
IEEE 802.15.4/6lowpan, cuyo nodo raı́z se comunica vı́a UART con una placa con
MCU y transceiver LoRa. El nodo raı́z reporta vı́a UART los datos que recibe de
los sensores, para que estos sean enviados a un servidor remoto vı́a LoRaWAN.
Como segundo ejemplo de ampliación del proyecto, se puede desarrollar una apli-
cación web o móvil que sirva de interfaz gráfica entre el usuario y el controlador,
facilitando el envı́o de comandos.
93
Esta página ha sido intencionalmente dejada en blanco.
Apéndice A
hoja de datos del ACS71020 se deduce que la corriente que consume este
chip está acotada superiormente por 14,0 mA.
Circuito fotosensible: para hallar una cota superior en la corriente consumida
por el circuito fotosensible, se toma el valor más pequeño de resistencia que
puede presentar el fotorresistor (500 Ω). Entonces, la corriente que consume
el circuito fotosensible está acotada superiormente por 0,3 mA ( 10k 3,3 V
Ω`500 Ω ).
Circuito On/Off: para hallar una cota superior en la corriente consumida por
el circuito On/Off se considera que la caı́da de tensión en la resistencia es la
máxima posible: 3,3 V. En esta situación, el valor de la corriente consumida
es 194,0 mA ( 3,3 V
17 Ω ), lo cual es una cota superior para el consumo real de
este módulo.
La tabla A.1 resume los resultados anteriores.
96
Como la fuente MPM-10-12 puede entregar 850 mA a 12 V (10,2 W)y en el
peor caso se necesitarı́a 344,8 mA (4,14 W), esta fuente cumple con los requisitos.
97
Esta página ha sido intencionalmente dejada en blanco.
Apéndice B
100
B.2. Placa media
101
Apéndice B. Esquemáticos y Layouts de PCBs
102
B.3. Placa superior
103
Apéndice B. Esquemáticos y Layouts de PCBs
104
Apéndice C
C.1.2. CSS:
#image background {
f o n t ´ f a m i l y : " Arial " ;
f o n t ´ s i z e : 20 px ;
h e i g h t : 500 px ;
w i d t h : 500 px ;
}
#MODE, #PHC, #DIM LEVEL {
margin: 0;
l e f t : 270 px ;
position: absolute ;
}
Apéndice C. Codigo utilizado para Widgets de Ubidots
C.1.3. Javascript:
var $bg = $ ( ’# image_background ’ ) ;
var $ t e x t = $ ( ’# image_background_text ’ ) ;
var TOKEN = ’BBFF - pNFBDWwdIZRS4wrWfHLQ8D4y6VGMOt ’ ;
var SUM ID = ’5 ec6e5c00ff4c37282a5e887 ’ ;
var port ;
var sum , suma ;
var bytes = [ ] ;
var l a s t V a l u e = null ;
function byteDecoder ( ) {
var r e v b y t e s = [ ] ;
var i =0;
sum=suma ;
while ( sum>256){
r e v b y t e s [ i ] = sum %256;
sum= sum ´ r e v b y t e s [ i ] ;
sum= sum / 2 5 6 ;
i ++;
}
b y t e s=r e v b y t e s . r e v e r s e ( ) ;
p o r t=sum ;
}
function changeText ( ) {
var d i m l v l = b y t e s [ 0 ] ;
var mode = b y t e s [ 1 ] & 0 x03 ;
var phc = ( b y t e s [ 1 ] & 0 x04 ) >> 2 ;
i f ( p o r t == 2 0 ) {
document . getElementById ( ’MODE ’ ) . i n n e r T e x t = mode ;
document . getElementById ( ’PHC ’ ) . i n n e r T e x t = phc ;
106
C.2. Widget : Result of DIR EVENT WD
function g e t L a s t V a l u e ( v a r i a b l e I d , token ) {
var u r l = ’https :// industrial .api. ubidots .com/api/v1 .6/ variables /’
+ v a r i a b l e I d + ’/ values ’ ;
$ . g e t ( u r l , { token : token , p a g e s i z e : 1 } , function ( r e s ) {
i f ( l a s t V a l u e === null | | r e s . r e s u l t s [ 0 ] . v a l u e !== l a s t V a l u e ) {
lastValue = res . r e s u l t s [ 0 ] . value ;
suma=l a s t V a l u e
}
});
}
s e t I n t e r v a l ( function ( ) {
g e t L a s t V a l u e (SUM ID , TOKEN) ;
byteDecoder ( ) ;
i f ( p o r t == 2 0 ) {
changeText ( ) ;
}
} , 2000);
</div>
C.2.2. CSS:
#image background {
f o n t ´ f a m i l y : " Arial " ;
f o n t ´ s i z e : 20 px ;
h e i g h t : 512 px ;
w i d t h : 512 px ;
o v e r f l o w ´ y : auto ;
}
107
Apéndice C. Codigo utilizado para Widgets de Ubidots
#WE s{
margin: 0;
l e f t : 20 px ;
t o p : 30 px ;
}
#WE 1,#WE 2,#WE 3{
margin: 0;
l e f t : 30 px ;
}
#WE 1{
t o p : 50 px ;
}
#WE 2{
t o p : 150 px ;
}
#WE 3{
t o p : 250 px ;
}
C.2.3. Javascript:
var $bg = $ ( ’# image_background ’ ) ;
var $ t e x t = $ ( ’# image_background_text ’ ) ;
var TOKEN = ’BBFF - pNFBDWwdIZRS4wrWfHLQ8D4y6VGMOt ’ ;
var SUM ID = ’5 ec6e5c00ff4c37282a5e887 ’ ;
var port ;
var sum , suma ;
var bytes = [ ] ;
var l a s t V a l u e = null ;
function byteDecoder ( ) {
var i =0;
sum=suma ;
var r e v b y t e s = [ ] ;
while ( sum>256){
r e v b y t e s [ i ] = sum %256;
sum= sum ´ r e v b y t e s [ i ] ;
sum= sum / 2 5 6 ;
i ++;
}
b y t e s=r e v b y t e s . r e v e r s e ( ) ;
p o r t=sum ;
}
function changeText ( ) {
var EventTime = [ ] ;
108
C.2. Widget : Result of DIR EVENT WD
var EventID = [ ] ;
var EventDim = [ ] ;
var eventQty ;
var j =0;
i f ( suma < 4 2 9 4 9 6 7 2 9 5 ) {
eventQty =1;
} else {
eventQty =2;
}
var k=0;
while ( k<eventQty ) {
EventTime [ k ]=( b y t e s [ 3 ∗ k]<<3) | ( b y t e s [ 3 ∗ k+1] >>5);
EventID [ k]= b y t e s [ ( 3 ∗ k )+1] & 0 x 1 f ;
EventDim [ k]= b y t e s [ ( 3 ∗ k ) + 2 ] ;
k++;
}
var t e x t o="" ;
f o r ( j =0; j <eventQty ; j ++){
t e x t o=t e x t o + " Evento_ " + EventID [ j ] +" Hora: " +
Math . f l o o r ( EventTime [ j ] / 6 0 ) +":" + EventTime [ j ] %60 +
" Dim: " + EventDim [ j ] +’\n’ ;
}
i f ( p o r t == 6 ) {
document . getElementById ( ’WE_1 ’ ) . i n n e r T e x t = t e x t o ;
}
i f ( p o r t == 7 ) {
document . getElementById ( ’WE_2 ’ ) . i n n e r T e x t = texto ;
}
i f ( p o r t == 8 ) {
document . getElementById ( ’WE_3 ’ ) . i n n e r T e x t = texto
}
}
function g e t L a s t V a l u e ( v a r i a b l e I d , token ) {
var u r l = ’https :// industrial .api. ubidots .com/api/v1 .6/ variables /’
+ v a r i a b l e I d + ’/ values ’ ;
$ . g e t ( u r l , { token : token , p a g e s i z e : 1 } , function ( r e s ) {
i f ( l a s t V a l u e === null | | r e s . r e s u l t s [ 0 ] . v a l u e !== l a s t V a l u e ) {
lastValue = res . r e s u l t s [ 0 ] . value ;
suma=l a s t V a l u e ;
}
});
}
s e t I n t e r v a l ( function ( ) {
109
Apéndice C. Codigo utilizado para Widgets de Ubidots
g e t L a s t V a l u e (SUM ID , TOKEN) ;
byteDecoder ( ) ;
i f ( p o r t >= 6 && port <=10){
changeText ( ) ;
}
} ,1000);
C.3.2. CSS:
#image background {
f o n t ´ f a m i l y : " Arial " ;
f o n t ´ s i z e : 20 px ;
h e i g h t : 500 px ;
w i d t h : 500 px ;
}
#FECHA, #HORA {
margin: 0;
l e f t : 270 px ;
position: absolute ;
}
#FECHA s , #HORA s{
margin: 0;
l e f t : 20 px ;
position: absolute ;
}
#FECHA, #FECHA s {
t o p : 50 px ;
}
#HORA, #HORA s {
t o p : 100 px ;
}
C.3.3. Javascript:
var $bg = $ ( ’# image_background ’ ) ;
110
C.3. Widget : Result of GET MOMENT
var $ t e x t = $ ( ’# image_background_text ’ ) ;
var TOKEN = ’BBFF - pNFBDWwdIZRS4wrWfHLQ8D4y6VGMOt ’ ;
var SUM ID = ’5 ec6e5c00ff4c37282a5e887 ’ ;
var port ;
var sum , suma ;
var bytes = [ ] ;
var l a s t V a l u e = null ;
function byteDecoder ( ) {
var r e v b y t e s = [ ] ;
var i =0;
sum=suma ;
while ( sum>256){
r e v b y t e s [ i ] = sum %256;
sum= sum ´ r e v b y t e s [ i ] ;
sum= sum / 2 5 6 ;
i ++;
}
b y t e s=r e v b y t e s . r e v e r s e ( ) ;
p o r t=sum ;
}
function changeText ( ) {
var s e c o n d s = ( b y t e s [0] < <9)+( b y t e s [1] < <1)+(( b y t e s [ 2 ] & 0 x80 ) > >7)
var y e a r = ( ( b y t e s [ 2 ] & 0 x7e )>>1) + 2 0 0 0 ;
var day = ( ( ( b y t e s [ 2 ] & 0 x01)<<8)+ b y t e s [ 3 ] ) + 1 ;
// calculo de hora a partir de segundos .
var a u x s e c o n d s = s e c o n d s ;
var a u x m i n u t e s = Math . f l o o r ( s e c o n d s / 6 0 ) ;
var aux hour = Math . f l o o r ( a u x m i n u t e s / 6 0 ) ;
var s e c o n d s = aux seconds ´ ( aux minutes ∗ 6 0 ) ;
var minutes = a u x m i n u t e s ´ ( aux hour ∗ 6 0 ) ;
var hour = aux hour ;
111
Apéndice C. Codigo utilizado para Widgets de Ubidots
}
day = aux day ;
i f ( p o r t == 2 1 ) {
document . getElementById ( ’FECHA ’ ) . i n n e r T e x t = day +’/’ + ( i +1) + ’/’ + y e a r ;
document . getElementById ( ’HORA ’ ) . i n n e r T e x t = hour + ’:’
+ minutes + ’:’ + s e c o n d s ;
}
}
function g e t L a s t V a l u e ( v a r i a b l e I d , token ) {
var u r l = ’https :// industrial .api. ubidots .com/api/v1 .6/ variables /’
+ v a r i a b l e I d + ’/ values ’ ;
$ . g e t ( u r l , { token : token , p a g e s i z e : 1 } , function ( r e s ) {
i f ( l a s t V a l u e === null | | r e s . r e s u l t s [ 0 ] . v a l u e !== l a s t V a l u e ) {
lastValue = res . r e s u l t s [ 0 ] . value ;
suma=l a s t V a l u e
}
});
}
s e t I n t e r v a l ( function ( ) {
g e t L a s t V a l u e (SUM ID , TOKEN) ;
byteDecoder ( ) ;
i f ( p o r t == 2 1 ) {
changeText ( ) ;
}
} , 1000);
</div>
C.4.2. CSS:
#image background {
112
C.4. Widget : Result of DIR EVENT WE
C.4.3. Javascript:
var $bg = $ ( ’# image_background ’ ) ;
var $ t e x t = $ ( ’# image_background_text ’ ) ;
var TOKEN = ’BBFF - pNFBDWwdIZRS4wrWfHLQ8D4y6VGMOt ’ ;
var SUM ID = ’5 ec6e5c00ff4c37282a5e887 ’ ;
var port ;
var sum , suma ;
var bytes = [ ] ;
var l a s t V a l u e = null ;
function byteDecoder ( ) {
var i =0;
sum=suma ;
var r e v b y t e s = [ ] ;
while ( sum>256){
r e v b y t e s [ i ] = sum %256;
sum= sum ´ r e v b y t e s [ i ] ;
sum= sum / 2 5 6 ;
i ++;
}
113
Apéndice C. Codigo utilizado para Widgets de Ubidots
b y t e s=r e v b y t e s . r e v e r s e ( ) ;
p o r t=sum ;
}
function changeText ( ) {
var EventTime = [ ] ;
var EventID = [ ] ;
var EventDim = [ ] ;
var eventQty ;
var j =0;
i f ( suma < 4 2 9 4 9 6 7 2 9 5 ) {
eventQty =1;
} else {
eventQty =2;
}
var k=0;
while ( k<eventQty ) {
EventTime [ k ]=( b y t e s [ 3 ∗ k]<<3) | ( b y t e s [ 3 ∗ k+1] >>5);
EventID [ k]= b y t e s [ ( 3 ∗ k )+1] & 0 x 1 f ;
EventDim [ k]= b y t e s [ ( 3 ∗ k ) + 2 ] ;
k++;
}
var t e x t o="" ;
f o r ( j =0; j <eventQty ; j ++){
t e x t o=t e x t o + " Evento_ " + EventID [ j ] +" Hora: " +
Math . f l o o r ( EventTime [ j ] / 6 0 ) +":" +
EventTime [ j ] %60 + " Dim: " + EventDim [ j ] +’\n’ ;
}
i f ( p o r t == 1 ) {
document . getElementById ( ’WE_1 ’ ) . i n n e r T e x t = t e x t o ;
// document . getElementById (’WE_2 ’). innerText = "";
// document . getElementById (’WE_3 ’). innerText = "";
}
i f ( p o r t == 2 ) {
document . getElementById ( ’WE_2 ’ ) . i n n e r T e x t = texto ;
}
i f ( p o r t == 3 ) {
document . getElementById ( ’WE_3 ’ ) . i n n e r T e x t = texto
}
}
function g e t L a s t V a l u e ( v a r i a b l e I d , token ) {
var u r l = ’https :// industrial .api. ubidots .com/api/v1 .6/ variables /’
+ v a r i a b l e I d + ’/ values ’ ;
114
C.5. Widget : Result of DIR EVENT SE
s e t I n t e r v a l ( function ( ) {
g e t L a s t V a l u e (SUM ID , TOKEN) ;
byteDecoder ( ) ;
i f ( p o r t >= 1 && port <=5){
changeText ( ) ;
}
} ,1000);
</div>
C.5.2. CSS:
#image background {
f o n t ´ f a m i l y : " Arial " ;
f o n t ´ s i z e : 20 px ;
h e i g h t : 512 px ;
w i d t h : 512 px ;
o v e r f l o w ´ y : auto ;
}
#WE s{
margin: 0;
l e f t : 20 px ;
t o p : 30 px ;
}
#WE 1,#WE 2,#WE 3{
115
Apéndice C. Codigo utilizado para Widgets de Ubidots
margin: 0;
l e f t : 30 px ;
}
#WE 1{
t o p : 50 px ;
}
#WE 2{
t o p : 150 px ;
}
#WE 3{
t o p : 250 px ;
}
C.5.3. Javascript:
var $bg = $ ( ’# image_background ’ ) ;
var $ t e x t = $ ( ’# image_background_text ’ ) ;
var TOKEN = ’BBFF - pNFBDWwdIZRS4wrWfHLQ8D4y6VGMOt ’ ;
var SUM ID = ’5 ec6e5c00ff4c37282a5e887 ’ ;
var port ;
var sum , suma ;
var revbytes =[];
var bytes = [ ] ;
var l a s t V a l u e = null ;
function byteDecoder ( ) {
var i =0;
sum=suma ;
while ( sum>256){
r e v b y t e s [ i ] = sum %256;
sum= sum ´ r e v b y t e s [ i ] ;
sum= sum / 2 5 6 ;
i ++;
}
b y t e s=r e v b y t e s . r e v e r s e ( ) ;
p o r t=sum ;
}
function changeText ( ) {
var EventTime = [ ] ;
var EventID = [ ] ;
var EventDim = [ ] ;
var eventQty ;
var j =0;
i f ( b y t e s [ 4 ] === null ) {
116
C.5. Widget : Result of DIR EVENT SE
eventQty =1;
} e l s e i f ( b y t e s [ 6 ] === null ) {
eventQty =2;
} else {
eventQty =2;
}
var k=0;
while ( k<eventQty ) {
EventTime [ k ]=( b y t e s [ 3 ∗ k]<<3) | ( b y t e s [ 3 ∗ k+1] >>5);
EventID [ k]= b y t e s [ ( 3 ∗ k )+1] & 0 x 1 f ;
EventDim [ k]= b y t e s [ ( 3 ∗ k ) + 2 ] ;
k++;
}
var t e x t o="" ;
f o r ( j =0; j <k ; j ++){
t e x t o=t e x t o + " Evento_ " + EventID [ j ] +" Hora: "
+ Math . f l o o r ( EventTime [ j ] / 6 0 ) +":" + EventTime [ j ] %60
+ " Dim: " + EventDim [ j ] +’\n’ ;
}
i f ( p o r t == 1 1 ) {
document . getElementById ( ’WE_1 ’ ) . i n n e r T e x t = t e x t o ;
document . getElementById ( ’WE_2 ’ ) . i n n e r T e x t = "" ;
document . getElementById ( ’WE_3 ’ ) . i n n e r T e x t = "" ;
}
i f ( p o r t == 1 2 ) {
document . getElementById ( ’WE_2 ’ ) . i n n e r T e x t = texto ;
}
i f ( p o r t == 1 3 ) {
document . getElementById ( ’WE_3 ’ ) . i n n e r T e x t = texto
}
function g e t L a s t V a l u e ( v a r i a b l e I d , token ) {
var u r l = ’https :// industrial .api. ubidots .com/api/v1 .6/ variables /’
+ v a r i a b l e I d + ’/ values ’ ;
$ . g e t ( u r l , { token : token , p a g e s i z e : 1 } , function ( r e s ) {
i f ( l a s t V a l u e === null | | r e s . r e s u l t s [ 0 ] . v a l u e !== l a s t V a l u e ) {
lastValue = res . r e s u l t s [ 0 ] . value ;
suma=l a s t V a l u e ;
}
});
117
Apéndice C. Codigo utilizado para Widgets de Ubidots
s e t I n t e r v a l ( function ( ) {
g e t L a s t V a l u e (SUM ID , TOKEN) ;
byteDecoder ( ) ;
i f ( p o r t >= 11 && port <=15){
changeText ( ) ;
}
} , 2000);
C.6.2. CSS:
#image background {
f o n t ´ f a m i l y : " Arial " ;
f o n t ´ s i z e : 20 px ;
h e i g h t : 500 px ;
w i d t h : 500 px ;
}
#VOLT, #CURR, #ACT POW, #REAP POW, #APP POW, #PFACTOR{
margin: 0;
l e f t : 400 px ;
position: absolute ;
}
#VOLT s , #CURR s , #ACT POW s, #REAP POW s, #APP POW s , #PFACTOR s{
margin: 0;
l e f t : 20 px ;
position: absolute ;
118
C.6. Widget : Electric Measures
}
#VOLT, #VOLT s {
t o p : 50 px ;
}
#CURR, #CURR s {
t o p : 100 px ;
}
#ACT POW, #ACT POW s {
t o p : 150 px ;
}
#REAP POW, #REAP POW s {
t o p : 200 px ;
}
#APP POW, #APP POW s {
t o p : 250 px ;
}
#PFACTOR, #PFACTOR s {
t o p : 300 px ;
}
C.6.3. Javascript:
var $bg = $ ( ’# image_background ’ ) ;
var $ t e x t = $ ( ’# image_background_text ’ ) ;
var TOKEN = ’BBFF - pNFBDWwdIZRS4wrWfHLQ8D4y6VGMOt ’ ;
var SUM ID = ’5 ec6e5c00ff4c37282a5e887 ’ ;
var port ;
var sum , suma ;
var bytes = [ ] ;
var l a s t V a l u e = null ;
function byteDecoder ( ) {
var r e v b y t e s = [ ] ;
var i =0;
sum=suma ;
while ( sum>256){
r e v b y t e s [ i ] = sum %256;
sum= sum ´ r e v b y t e s [ i ] ;
sum= sum / 2 5 6 ;
i ++;
}
b y t e s=r e v b y t e s . r e v e r s e ( ) ;
p o r t=sum ;
}
function changeText ( ) {
119
Apéndice C. Codigo utilizado para Widgets de Ubidots
switch ( p o r t ) {
case 2 2 :
var v o l t =(( b y t e s [0] < <8)+( b y t e s [ 1 ] ) ) / 1 0 ;
document . getElementById ( ’VOLT ’ ) . i n n e r T e x t = v o l t + " V" ;
break ;
case 2 3 :
var c u r r =(( b y t e s [0] < <8)+( b y t e s [ 1 ] ) ) / 1 0 ;
document . getElementById ( ’CURR ’ ) . i n n e r T e x t = c u r r + " mA" ;
break ;
case 2 4 :
var actpwr =(( b y t e s [0] < <8)+( b y t e s [ 1 ] ) ) / 1 0 ;
document . getElementById ( ’ACT_POW ’ ) . i n n e r T e x t = actpwr + " W" ;
break ;
case 2 5 :
var reapwr =(( b y t e s [0] < <8)+( b y t e s [ 1 ] ) ) / 1 0 ;
document . getElementById ( ’REAP_POW ’ ) . i n n e r T e x t = reapwr + " VAr" ;
break ;
case 2 6 :
var apppwr =(( b y t e s [0] < <8)+( b y t e s [ 1 ] ) ) / 1 0 ;
document . getElementById ( ’APP_POW ’ ) . i n n e r T e x t = apppwr + " VA" ;
break ;
case 2 7 :
var p f a c t o r =(( b y t e s [0] < <8)+( b y t e s [ 1 ] ) ) / 1 0 0 ;
document . getElementById ( ’PFACTOR ’ ) . i n n e r T e x t = p f a c t o r ;
break ;
}
}
function g e t L a s t V a l u e ( v a r i a b l e I d , token ) {
var u r l = ’https :// industrial .api. ubidots .com/api/v1 .6/ variables /’
+ v a r i a b l e I d + ’/ values ’ ;
$ . g e t ( u r l , { token : token , p a g e s i z e : 1 } , function ( r e s ) {
i f ( l a s t V a l u e === null | | r e s . r e s u l t s [ 0 ] . v a l u e !== l a s t V a l u e ) {
lastValue = res . r e s u l t s [ 0 ] . value ;
suma=l a s t V a l u e
}
});
}
s e t I n t e r v a l ( function ( ) {
g e t L a s t V a l u e (SUM ID , TOKEN) ;
byteDecoder ( ) ;
i f ( p o r t >= 22 && p o r t <=27){
changeText ( ) ;
}
120
C.6. Widget : Electric Measures
} , 2000);
121
Esta página ha sido intencionalmente dejada en blanco.
Apéndice D
En las figuras D.1, D.2, D.3, D.4 y D.5 se muestran las imágenes obtenidas en
osciloscopio para los valores de ciclo de trabajo 0, 25, 50, 75 y 100 respectivamente,
en las pruebas de la sección 6.3.4.
Apéndice D. Imágenes del osciloscopio obtenidas en las pruebas de la sección
6.3.4
(a) PWM
Figura D.1: PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle 0 % y en la
figura (b) se aprecia la salida 0-10V acorde. Esta salida es de valor 111 mV en promedio, como
se aprecia en la parte inferior izquierda de la imagen.
124
(a) PWM
Figura D.2: PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle 25 % y en la
figura (b) se aprecia la salida 0-10V acorde. Esta salida es de valor 2,51 V en promedio, como
se aprecia en la parte inferior izquierda de la imagen.
125
Apéndice D. Imágenes del osciloscopio obtenidas en las pruebas de la sección
6.3.4
(a) PWM
Figura D.3: PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle 50 % y en la
figura (b) se aprecia la salida 0-10V acorde. Esta salida es de valor 4,99 V en promedio, como
se aprecia en la parte inferior izquierda de la imagen.
126
(a) PWM
Figura D.4: PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle 75 % y en la
figura (b) se aprecia la salida 0-10V acorde. Esta salida es de valor 7,46 V en promedio, como
se aprecia en la parte inferior izquierda de la imagen.
127
Apéndice D. Imágenes del osciloscopio obtenidas en las pruebas de la sección
6.3.4
(a) PWM
Figura D.5: PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle 100 % y en la
figura (b) se aprecia la salida 0-10V acorde. Esta salida es de valor 9,90 V en promedio, como
se aprecia en la parte inferior izquierda de la imagen.
128
Apéndice E
Figura E.1: Esquemático de propuesta de diseño propio del circuito de medida de consumo.
Apéndice E. Propuesta de diseño propio de circuito de medida de consumo
řN ´1
n“0 V n ˆ In
P “
N
a
Q“ S2 ´ P 2
P
|P F | “
|S|
130
Referencias
132
Referencias
[35] Tektelic. KONA Micro IoT, Gateway Enterprise LoRaWAN R Gateway for
Mission Critical Deployments. 2020.
133
Esta página ha sido intencionalmente dejada en blanco.
Índice de tablas
6.1. Gráfica que muestra el error en el cálculo del amanecer del módulo
sun equation en función de la fecha para el año 2021. . . . . . . . . 68
6.2. Gráfica que muestra el error en el cálculo del atardecer del módulo
sun equation en función de la fecha para el año 2021. . . . . . . . . 69
6.3. Ejemplo de prueba de la decodificación hecha por el módulo decoder. 70
6.4. Ejemplo de prueba de la codificación de respuestas hecha por el
módulo decoder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.5. Tektelic Kona Micro Gateway . . . . . . . . . . . . . . . . . . . . . 72
6.6. Widget termómetro de Ubidots . . . . . . . . . . . . . . . . . . . . 73
6.7. Tablero en Ubidots sin datos en sus widgets. . . . . . . . . . . . . 74
6.8. Diagrama del funcionamiento del decoder de TTN. . . . . . . . . . 75
6.9. Tablero en Ubidots con datos en sus widgets. . . . . . . . . . . . . 76
6.10. Esquemático del circuito simulado en Spice. . . . . . . . . . . . . . 77
138
Índice de figuras
D.1. PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle
0 % y en la figura (b) se aprecia la salida 0-10V acorde. Esta salida
es de valor 111 mV en promedio, como se aprecia en la parte inferior
izquierda de la imagen. . . . . . . . . . . . . . . . . . . . . . . . . . 124
D.2. PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle
25 % y en la figura (b) se aprecia la salida 0-10V acorde. Esta salida
es de valor 2,51 V en promedio, como se aprecia en la parte inferior
izquierda de la imagen. . . . . . . . . . . . . . . . . . . . . . . . . . 125
D.3. PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle
50 % y en la figura (b) se aprecia la salida 0-10V acorde. Esta salida
es de valor 4,99 V en promedio, como se aprecia en la parte inferior
izquierda de la imagen. . . . . . . . . . . . . . . . . . . . . . . . . . 126
D.4. PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle
75 % y en la figura (b) se aprecia la salida 0-10V acorde. Esta salida
es de valor 7,46 V en promedio, como se aprecia en la parte inferior
izquierda de la imagen. . . . . . . . . . . . . . . . . . . . . . . . . . 127
D.5. PWM y 0-10V: en la figura (a) se aprecia el PWM con duty cycle
100 % y en la figura (b) se aprecia la salida 0-10V acorde. Esta salida
es de valor 9,90 V en promedio, como se aprecia en la parte inferior
izquierda de la imagen. . . . . . . . . . . . . . . . . . . . . . . . . . 128
139
Esta es la última página.
Compilado el lunes 21 septiembre, 2020.
http://iie.fing.edu.uy/