Memoria TFG
Memoria TFG
En cumplimiento parcial
de los requisitos para el Grado en
Ingenierı́a Electrónica de Telecomunicación INGENIERÍA
Índice de algoritmos 4
Índice de tablas 4
1. Introducción 8
1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2. Requerimientos y especificaciones . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Contexto y alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4. Plan de trabajo, hitos e incidencias . . . . . . . . . . . . . . . . . . . . . . 9
1.5. Diagrama de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4. Resultados 24
4.1. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2. Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3. Análisis de prestaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.1. Distancia de transmisión en un entorno urbano . . . . . . . . . . . 26
4.3.2. Consumo de energı́a de la placa emisora . . . . . . . . . . . . . . . 27
5. Conclusiones 29
5.1. Anotaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.1. Electrónica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.2. Informática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.3. Telemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6. Trabajo futuro 31
2
Referencias 32
Apéndice 34
A. Hardware 34
A.1. Información sobre los dispositivos electrónicos . . . . . . . . . . . . . . . . 34
A.1.1. Sensor PIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A.1.2. Sensor magnético . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A.1.3. Zumbador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
A.1.4. Relé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
A.2. Discusión sobre los sensores PIR . . . . . . . . . . . . . . . . . . . . . . . . 35
A.3. Discusión sobre los sensores magnéticos . . . . . . . . . . . . . . . . . . . . 35
A.4. Datasheets de los componentes utilizados . . . . . . . . . . . . . . . . . . . 36
B. Software 37
B.1. Software asociado al módulo LoRa y al broker MQTT . . . . . . . . . . . . 37
B.2. Códigos de los diversos test . . . . . . . . . . . . . . . . . . . . . . . . . . 37
B.2.1. Test del sensor magnético . . . . . . . . . . . . . . . . . . . . . . . 37
B.2.2. Test del sensor PIR . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
B.2.3. Test del zumbador . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
B.2.4. Test del relé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
B.2.5. Test de comunicación LoRa (placa - ordenador) . . . . . . . . . . . 39
B.2.6. Test de sondeo con el sensor magnético . . . . . . . . . . . . . . . . 40
B.2.7. Test de interrupciones con los sensores magnético y PIR . . . . . . 40
B.3. Códigos de los chips ESP32 . . . . . . . . . . . . . . . . . . . . . . . . . . 42
B.3.1. Código de la placa emisora . . . . . . . . . . . . . . . . . . . . . . . 42
B.3.2. Código de la placa receptora . . . . . . . . . . . . . . . . . . . . . . 44
3
Índice de figuras
1. Esquema del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2. Diagrama de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3. Estructura de red LoRaWAN . . . . . . . . . . . . . . . . . . . . . . . . . 12
4. Ejemplo de red Wifi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5. Ejemplo del protocolo MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 13
6. Material utilizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7. Esquemático del emisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8. Esquemático del receptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9. Modos de operación del módulo LoRa . . . . . . . . . . . . . . . . . . . . . 19
10. Adaptador en modo configuración . . . . . . . . . . . . . . . . . . . . . . . 19
11. Programa de configuración del módulo LoRa . . . . . . . . . . . . . . . . . 20
12. Diagrama de flujo de la programación asociada a los chips ESP32 . . . . . 21
13. Modos de reposo del chip ESP32 . . . . . . . . . . . . . . . . . . . . . . . 22
14. Placa emisora y placa receptora . . . . . . . . . . . . . . . . . . . . . . . . 24
15. Placa emisora con el sistema de alimentación . . . . . . . . . . . . . . . . . 24
16. Funcionamiento de un interruptor magnético . . . . . . . . . . . . . . . . . 34
Índice de algoritmos
1. Test de comunicación LoRa (ordenador - placa) . . . . . . . . . . . . . . . 26
2. Test del sensor magnético . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3. Test del sensor PIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4. Test del zumbador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5. Test del relé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6. Test de comunicación LoRa (placa - ordenador) . . . . . . . . . . . . . . . 39
7. Test de sondeo con el sensor magnético . . . . . . . . . . . . . . . . . . . . 40
8. Test de interrupciones con los sensores magnético y PIR . . . . . . . . . . 40
9. Código de la placa emisora . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
10. Código de la placa receptora . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Índice de tablas
1. Hitos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. Sistema de comunicación entre emisor y receptor . . . . . . . . . . . . . . . 23
3. Modos de actuación de la placa receptora . . . . . . . . . . . . . . . . . . . 23
4. Consumo (mW) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5. Tiempo diario en los diversos estados (s) . . . . . . . . . . . . . . . . . . . 27
6. Consumo diario (mW·h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7. Comparativa de los sensores PIR . . . . . . . . . . . . . . . . . . . . . . . 35
4
Abreviaturas
CPU Central Processing Unit
ESP-IDF Espressif’s official IoT Development Framework
GPIO General Purpose Input/Output
IDE Integrated Development Environment
IoT Internet of Things
LED Light-Emitting Diode
LiPo Polı́mero de Litio
LoRa Long Range
LPWAN Low Power Wide Area Network
MQTT Message Queuing Telemetry Transport
PIR Passive Infrared
PWM Pulse Width Modulation
RAM Random Access Memory
SoC System on Chip
TTL Transistor Transistor Logic
UART Universal Asynchronous Receiver-Transmitter
UPC Universitat Politècnica de Catalunya
USB Universal Serial Bus
VSC Visual Studio Code
WECA Wireless Ethernet Compatibility Alliance
5
Resumen
Esta tesis consiste en el diseño de un módulo IoT con comunicación LoRa, este módulo
tiene el objetivo de ser un sistema de alarma capaz detectar intrusos en viviendas parti-
culares. Para realizar este módulo se han diseñado dos placas comunicadas entre sı́, de tal
manera que una tenga integrados los sensores detectores de intrusos y la otra, actuadores
para avisar al propietario de la vivienda.
Se ha llevado a cabo todo el diseño, su implementación y su programación de tal manera
que sea una alarma funcional a bajo coste, haciendo hincapié en el bajo consumo de la
placa emisora y en los sistemas de comunicación, entre placas con tecnologı́a LoRa y entre
placa receptora y usuario mediante el uso del protocolo de comunicación MQTT.
Posteriormente, se ha verificado el correcto funcionamiento de las placas y todos sus
componentes. Además, se han sugerido futuras mejoras para hacer el sistema más eficiente
y robusto.
6
Historial de revisiones y registro de aprobación
Nombre e-mail
Alex Santı́n Batanero [email protected]
Luis Javier de la Cruz Llopis [email protected]
7
1. Introducción
A dı́a de hoy la tecnologı́a avanza a pasos agigantados y desde hace unos pocos años
tenemos a nuestra disposición tecnologı́as de bajo coste, las cuales permiten realizar una
gran variedad de proyectos. Estas tecnologı́as son los chips SoC (System on Chip) y los
sistemas embebidos, los cuales permiten hacer proyectos de bajo coste centrados en una
única tarea o varias tareas simples. Además, junto a las tecnologı́as de comunicación de
bajo consumo, como por ejemplo LoRa (Long Range), se pueden llevar a cabo proyectos
muy útiles como el realizado en esta tesis.
El proyecto realizado consiste en el diseño, implementación y programación de un módulo
de IoT con comunicación LoRa, con la finalidad de proveer un servicio de seguridad a
clientes particulares, los cuales quieran proteger sus viviendas frente a intrusos.
1.1. Objetivo
El objetivo de este proyecto consiste en crear un sistema de alarma basado en dos circuitos,
uno emisor y otro receptor. De tal manera que a partir de la activación de uno de los
sensores del circuito emisor se envı́e una señal, mediante comunicación LoRa, al circuito
receptor y éste notifique al usuario mediante los actuadores que tiene incorporados. Aparte
de este objetivo principal, también hay dos objetivos opcionales los cuales consisten en
crear un sistema de alimentación para la placa emisora y comunicarse desde el receptor
mediante MQTT (Message Queuing Telemetry Transport) con el usuario.
8
Además de conocimiento más especı́fico sobre los diversos elementos de los circuitos:
- ESP32: SoC de bajo coste y consumo de energı́a, es el eje central de ambas placas.
- LoRa: tecnologı́a de comunicación inalámbrica de bajo consumo.
- Wifi: tecnologı́a de comunicación inalámbrica de red de área local.
- MQTT: protocolo de comunicación basado en publicaciones y suscripciones.
- Sensor magnético: detector de presencia de campo magnético.
- Sensor PIR (Passive Infrared ): detector de radiación infrarroja.
- Zumbador: actuador que emite sonidos/zumbidos.
- Relé: actuador que funciona a modo de interruptor.
9
UPC. Sin embargo, no ha habido ningún problema en poder completar todos los aspectos
del proyecto ya que, se aprovecharon ese par de semanas para ir avanzando en tareas de
investigación acerca de la programación, tanto del módulo LoRa, como del ESP32.
Hitos
Tı́tulo Entregable Fecha (semana)
Búsqueda material Comanda de material 14 - 20 Marzo
Diseño del sistema Esquemáticos (emisor - receptor) 4 - 10 Abril
Implementación del sistema Circuitos en las protoboards 9 - 15 Mayo
Sistema de baterı́a Circuito en la protoboard 16 - 22 Mayo
Cálculo del consumo Informe 23 - 29 Mayo
Comunicación MQTT Programa 23 - 29 Mayo
Verificación del sistema Demostración del funcionamiento 30 - 5 Mayo/Junio
10
2. Estado del arte de la tecnologı́a utilizada
Para poder realizar el proyecto se han utilizado diversas tecnologı́as bastante actuales, de
la cuales en este apartado se realizará una breve introducción de cada una.
2.1. SoC
Un SoC es un único chip el cual integra los componentes necesarios para el funcionamiento
de un ordenador, como por ejemplo: CPU, memoria RAM, pines Input/Output, módulo
de comunicación Wifi, etc. Debido a ello se suelen utilizar en sistemas embebidos llevando
a cabo actividades especı́ficas a bajo coste.
Aparte de tener un bajo coste monetario y de energı́a, ya que no necesitan grandes can-
tidades de ella para funcionar, son ideales para realizar proyectos debido a su pequeño
tamaño y fácil portabilidad. Actualmente, son usados en diversas industrias como, por
ejemplo, la industria de los teléfonos móviles.
Se utilizan para realizar tareas concretas y repetitivas, dejando que funcionen a partir
de los inputs de componentes conectados y comandos programados sin necesidad de una
interacción activa con el usuario.
Para más información sobre el tema se adjuntan un par de referencias web, tanto sobre
los SoC como sobre los sistemas embebidos. [1] [2] [3]
2.2. LoRa
LoRa es una tecnologı́a de comunicación inalámbrica de tipo LPWAN (Low Power Wide
Area Network ), esto significa que se centra en transmisiones a grandes distancias de
paquetes de datos pequeños a una velocidad reducida. Además, es de bajo coste y bajo
consumo ideal para aplicaciones IoT.
La arquitectura LoRa (LoRaWAN) trabaja en el nivel red, aunque para este proyecto solo
se utilizará su nivel fı́sico. Este nivel emplea la modulación chirp spread spectrum para
realizar las transmisiones de datos.
Las redes LoRa, normalmente, se suelen usar con varios dispositivos finales (end-device)
y gateways los cuales se comunican entre sı́ para efectuar las acciones indicadas desde
el servidor red. En este proyecto, no se ha empleado ni un servidor de red central ni
gateways, simplemente se ha llevado a cabo una conexión entre dos end-devices.
11
Figura 3: Estructura de red LoRaWAN
En este ejemplo de estructura de red LoRa se puede observar un total de seis end-devices
los cuales se comunican con los diferentes gateways que tienen a su alcance, se puede
observar que si un end-device tiene a su alcance dos gateways se comunicará con ambos.
Posteriormente, la información que llega a los gateways es transmitida al servidor red y
gestionada a través de una aplicación.
También existe el proceso inverso, de tal manera que desde la aplicación se envı́e infor-
mación concreta a los diferentes end-devices.
Para más información sobre el LoRa, su arquitectura y el tipo de modulación se adjuntan
varias referencias. [4] [5] [6] [7]
2.3. Wifi
La tecnologı́a Wifi permite realizar la interconexión de manera inalámbrica de varios dis-
positivos electrónicos entre sı́ y con Internet. Fue diseñado por Wifi Alliance, previamente
conocidos como WECA, siguiendo el estándar IEEE 802.11, estándar relacionado con las
redes inalámbricas de área local.
Debido a ello, el Wifi es una red inalámbrica de área local y consta principalmente de dos
elementos: el adaptador inalámbrico y el access point.
- El adaptador inalámbrico es un componente que va en cada uno de los dispositivos en
los cuales queremos que haya Wifi y se utiliza para poder enviar y recibir información
desde el access point.
- El access point es el dispositivo que gestiona la información que se intercambian
localmente los otros aparatos electrónicos y es el dispositivo electrónico que está
conectado mediante ethernet a Internet.
12
Figura 4: Ejemplo de red Wifi
En este ejemplo se puede observar un esquema de una red Wifi, el cual consta de un access
point y un total de tres dispositivos conectados de manera inalámbrica.
Para más información sobre el Wifi y el estándar IEEE 802.11 se adjuntan varias refer-
encias. [8] [9] [10] [11]
2.4. MQTT
MQTT es un protocolo de comunicación entre máquinas que se basa en un sistema de
publicación y suscripción. Trabaja a nivel de aplicación y actualmente está gestionado
por OASIS, una asociación sin ánimo de lucro centrada en crear estándares abiertos
relacionados con IoT, ciberseguridad, blockchain, entre otros.
MQTT se basa en un sistema de publicación-suscripción y una arquitectura de cliente-
servidor, de tal manera que cuando un cliente contacta con el servidor (broker ) puede
decidir si publicar o suscribirse a diferentes topics. De este modo se pueden publicar
mensajes en topics concretos o recibir a través del broker las publicaciones que hacen
otros dispositivos en los topics a los que se está suscrito.
En este ejemplo se puede observar como dos clientes se suscriben al topic A y un cliente
al topic B, de tal manera que cuando el cuarto cliente, situado abajo a la derecha, publica
un mensaje en el topic A solo los dos clientes suscritos a ese topic reciben el mensaje por
parte del broker.
Para más información sobre MQTT se adjuntan varias referencias. [12] [13]
13
3. Diseño del sistema
En este apartado se explicará en profundidad como se ha realizado el sistema, haciendo
énfasis en el hardware utilizado y en el software necesario para su correcto funcionamiento.
3.1. Hardware
Esta sección está destinada a la parte fı́sica y de diseño del proyecto, debido a esto se
explicará el diverso material utilizado, además de los esquemas eléctricos de ambas placas.
14
esperará el intervalo de tiempo de alarma, ajustado mediante el potenciómetro, antes de
realizar la transmisión de la detección al pin de salida.
Como notas adicionales, cabe mencionar que cuando se alimenta el sensor por primera
vez, los primeros 60 segundos está en proceso de inicialización y no podrá efectuar detec-
ciones. Además, existen diversas versiones con más parámetros ajustables, por ejemplo,
una versión incluye un jumper que te permite cambiar entre dos modos: disparo único y
modo ráfaga. [14]
KY-025
El módulo KY-025 está formado principalmente por un reed switch y el comparador dual
LM393 que le permite procesar la señal dando a las salidas dos valores, uno analógico y otro
digital. Además, cuenta con dos leds que permiten saber si está conectado correctamente
a la fuente de alimentación (LED rojo) y si está el reed switch cerrado (LED verde).
Tiene un total de cuatro pines de salida, dos para la alimentación y otros dos para las
salidas analógica y digital.
KY-006
Para este proyecto se ha utilizado un zumbador piezoeléctrico pasivo, ya que al ser pasivo
se le puede introducir a través del software el tono al que debe zumbar mediante los pines
LED PWM del ESP32, hecho que será útil para diferenciar avisos. Al ser piezoeléctrico
no es necesario emplear electrónica adicional para conectarlo al chip.
KY-019
Para este proyecto se ha utilizado un relé, el cual permite activar circuitos eléctricos con
una carga máxima en AC de 10A y 250VAC y una carga máxima en DC de 10A y 30VDC.
Módulo LoRa
El módulo LoRa está formado por el conjunto de tres componentes, el propio módulo de
comunicación, la antena necesaria para transmitir/recibir los datos y el adaptador USB
a TTL, para poder conectar el dispositivo con el ordenador.
Se ha utilizado el módulo LoRa E22-900T22D, un módulo de altas prestaciones basado
en el circuito integrado SX1262 del fabricante Semtech. El módulo trabaja entre los
850.125MHz - 930.125MHz, esto es ideal, ya que en Europa la banda frecuencial disponible
para aplicaciones de baja potencia es de los 868 MHz a los 870 MHz.[15] Además, posee
una potencia de 22dBm y puede realizar envı́os hasta los 5km. Para poder usar ade-
cuadamente este módulo es necesario incorporar una antena, puesto que no viene con una
incorporada y es indispensable para su correcto funcionamiento.
El dispositivo tiene diversos parámetros configurables y de fácil configuración gracias a
un programa de software creado por el propio fabricante del módulo.
15
Sistema de alimentación autónomo
El sistema de alimentación autónomo se ha diseñado a partir de una baterı́a de polı́mero
de litio recargable de 3.7V y un panel solar de 5V. Para poder cargar la baterı́a a partir
del panel solar es necesario utilizar un módulo de carga, para este proyecto se ha utilizado
un TP4056 el cual a partir de una entrada de 5V puede llegar a recargar baterı́as hasta
de 4.2V y posee dos leds, de tal manera que indica de forma visual si la baterı́a ya esta
cargada (LED azul) o se está cargando (LED rojo).
Además, ha sido necesario incluir un módulo elevador de voltaje (MT3608) que aumentase
el voltaje suministrado por la baterı́a de 3.7V a 5V, para alimentar el circuito de la placa
emisora.
16
3.1.2. Esquemas eléctricos
En este proyecto se ha realizado el diseño de dos placas, una placa emisora y una placa
receptora.
Aparte de los componentes previamente explicados, no ha sido necesario el uso de muchos
componentes adicionales, como resistencias y condensadores, ya que los módulos se han
elegido muy cuidadosamente pensando en un fácil diseño y posterior implementación.
Placa emisora
La placa emisora está formada por el chip ESP32, el módulo de comunicación LoRa y los
sensores que realizan las detecciones, además del sistema de baterı́a que permite que la
placa sea autónoma.
Como se puede observar en el esquemático, casi todos los componentes tienen conexión
directa con la placa, a excepción del módulo LoRa. El cual tiene un pin en el aire debido
a que no se utiliza, los pines de comunicación serie (Rx-Tx) están conectados mediante un
sistema de Pull-Up para asegurar la correcta transmisión de los datos y los pines M0-M1,
los cuales modifican el modo de funcionamiento, están conectados a masa lo cual implica
modo de trabajo normal.
17
En la parte inferior izquierda del esquemático, se observa el sistema de alimentación
autónomo mediante baterı́a, el cual también ha sido de fácil diseño a partir de los com-
ponentes seleccionados.
Placa receptora
El receptor está formado por el chip ESP32, el módulo de comunicación LoRa y los dos
actuadores.
18
3.2. Software
En el proyecto también se ha utilizado software, tanto para controlar el funcionamiento
de los chips ESP32 del emisor y el receptor, como para realizar la configuración de ambos
módulos LoRa.
En este caso para realizar la configuración es necesario conectar el módulo LoRa al orde-
nador en modo configuración (M1=1, M0=0), al utilizar el adaptador e15-usb-t2 cambiar
al modo de configuración es muy sencillo, ya que únicamente se ha de retirar el jumper
asociado al pin M1.
19
Debido a que durante todo el proyecto se utilizará el modo normal de operación y se harán
transmisiones transparentes, es decir, todos los dispositivos estarán siempre en escucha a
menos que transmitan y las transmisiones serán recibidas por todos los dispositivos que
tengan la misma dirección y canal. Es necesario configurar ambos módulos LoRa con la
misma dirección y canal, además de conectar los pines M0 y M1 a masa en ambas placas.
Se usó únicamente el modo normal de los módulos LoRa para facilitar la implementación
de ambas placas. De tal manera que los pines M0 y M1 estuviesen siempre en masa, facil-
itando ası́ tanto la conexión fı́sica como la programación de ambos chips. Posteriormente,
en el análisis de prestaciones se observará que este hecho ha sido crı́tico en el consumo de
la placa emisora.
También, cabe destacar que la configuración de ambos módulos LoRa es muy completa,
lo cual permite una gran variedad de posibles aplicaciones y proyectos.
20
2. Una vez despierto espera un minuto para ver si el otro sensor que no lo ha despertado
detecta alguna presencia.
3. Al transcurrir este minuto o cuando el segundo sensor realiza una detección, se
transmite la información al receptor, pasa un periodo de espera y la placa vuelve al
modo reposo.
4. El receptor, que siempre está activo a la espera del mensaje del emisor, al recibir el
mensaje actúa en consecuencia a partir del zumbador y el relé.
5. Para finalizar, el receptor realiza la comunicación, mediante MQTT, con el usuario
y se vuelve a poner a la espera del mensaje del emisor.
21
3.2.3. Modos de reposo del chip ESP32
Para realizar este proceso ha sido necesario utilizar ciertas funciones concretas del chip
ESP32 que involucran a sus modos de funcionamiento y sus diferentes tipos de modo
reposo.
De entre los diversos modos de reposo disponibles, el light-sleep ha sido la opción elegida,
ya que tiene un consumo bastante bajo y se conservan las diversas variables del código una
vez la placa se pone en modo reposo, es decir, los datos de la memoria no se eliminan al
entrar en modo reposo. Al contrario que sucede con el modo deep-sleep, la otra alternativa
que se estuvo planteando.
22
Sistema de comunicación
Sensor PIR Sensor magnético Código transmitido
No detecta No detecta Emisor en modo reposo, no hay transmisión
No detecta Detecta 1
Detecta No detecta 2
Detecta Detecta 3
Además, en función de estos valores los actuadores actúan de manera diferente, ası́ el
usuario puede distinguir que está sucediendo y la gravedad de la situación.
Modos de actuación
Código recibido Zumbador Relé
1 Zumbido grave Desactivado
2 Zumbido intermedio Activado
3 Zumbido agudo Activado
23
4. Resultados
En este apartado, se tratará tanto la implementación del diseño como la validación de este,
mediante los test de componentes y se realizará un análisis de prestaciones del sistema.
4.1. Implementación
La implementación de ambas placas se realizó de manera escalonada, de tal manera que se
validase el correcto funcionamiento de cada uno de los diferentes dispositivos por separado
antes de realizar la implementación final.
Durante este proceso no hubo ninguna complicación, ya que mediante el uso de las pro-
toboards, cables y cables dupont todo se conectó de forma fácil y sencilla, tanto para la
placa emisora como para la receptora.
24
Para validar que las conexiones estuvieran bien hechas se utilizó el multı́metro. Como se
puede observar en la figura 15 el conexionado entre módulo de carga, baterı́a y elevador de
voltaje está realizado con dos regletas, de tal manera que se pueda realizar la sustitución
de baterı́as de forma fácil y cómoda.
Como notas adicionales, cabe destacar que la implementación del sistema de baterı́a
tiene ciertos fallos, ya que al soldar los conectores del panel solar con el módulo de carga
estos están siempre conectados, lo cual, es un problema durante la fase de prototipado
y verificación, debido a que aunque no se estén haciendo pruebas el panel solar sigue
alimentando el módulo de carga. Como solución temporal a este problema, cuando el
sistema de baterı́a no se utiliza, se mantiene guardado en una caja de tal manera que el
panel solar no pueda alimentar el módulo de carga.
4.2. Test
Como se ha mencionado en el apartado anterior, los diversos dispositivos se verificaron
minuciosamente para asegurar su correcto funcionamiento. Se empezó por los dispositivos
por separado y posteriormente se realizaron conexiones más complejas con varios módulos
hasta realizar el montaje final. Cada uno de los test hechos tiene su propio código asociado.
- Test del sensor magnético.
- Test del sensor PIR.
- Test del zumbador.
- Test del relé.
- Test de comunicación LoRa (ordenador - placa).
- Test de comunicación LoRa (placa - ordenador).
- Test de sondeo con el sensor magnético.
- Test de interrupciones con los sensores magnético y PIR.
El test más importante que se realizó fue la comunicación LoRa (ordenador-placa). Ya
que este test se utilizó para ver cómo adecuar el código de ambas placas para poder llevar
a cabo la comunicación de los módulos LoRa.
El test se basaba en conectar un módulo LoRa directamente al ordenador, usando el
adaptador, y mediante una herramienta de monitoreo de puerto serie se enviaban datos
al otro módulo LoRa, que estaba conectado a un chip ESP32 debidamente programado.
Una vez verificado que el módulo LoRa del chip ESP32 recibı́a los datos, se hizo el mismo
procedimiento a la inversa.
25
1 # include < Arduino .h >
2
3 String mensaje = " default " ;
4 int i = 0;
5
6 void setup () {
7 Serial . begin (9600) ;
8 dealy (500) ;
9 Serial . println ( mensaje ) ;
10 Serial2 . begin (9600) ;
11 Serial . println ( " Waiting a message " ) ;
12 }
13
14 void loop () {
15 while ( i = = 0) {
16 if ( Serial2 . available () ) {
17 mensaje = Serial2 . read () ;
18 Serial . println ( mensaje ) ;
19 i = 1;
20 }
21 }
22 i = 0;
23 mensaje = " default "
24 }
Algoritmo 1: Test de comunicación LoRa (ordenador - placa)
26
4.3.2. Consumo de energı́a de la placa emisora
Este análisis de consumo se ha hecho teniendo en cuenta la actual baterı́a incorporada en
el sistema (baterı́a de LiPo de 3.7V y 1100mAh), los diversos módulos acoplados al chip
ESP32 (sensores, módulo de comunicación) y suponiendo que el sistema realiza un total
de diez detecciones en un mes, ya que en función de las detecciones realizadas el consumo
variará. También, cabe destacar que todo el análisis se ha realizado sin tener en cuenta
que la placa solar está simultáneamente recargando la baterı́a.
Consumo (mW)
Dispositivo Voltaje de alimentación Sleep/RX Standby/RX Activado/TX
Sensor magnético 3.3V 7.524 7.524 9.405
Sensor PIR 5V 0.8 0.8 2.25
Chip ESP32 3.3V 2.64 - 264
Módulo LoRa 3.3V 36.3 36.3 462
La tabla del tiempo diario se ha creado a partir del tiempo que pasan en cada estado los
componentes durante una ejecución y extrapolando estos datos a partir de la suposición
inicial de tener diez detecciones en un mes.
27
A partir de las tablas anteriores se ha podido obtener el consumo diario de los diferentes
componentes y por consecuencia la duración de la baterı́a en dı́as.
(3.7V ∗ 1100mAh)
Duracion bateria = = 3.5811 dias ≈ 3 dias 14 horas (1)
1136.5144mW h
El análisis nos demuestra que el sistema actual es de bajas prestaciones porque la duración
de la baterı́a es de, aproximadamente, 3 dı́as y 14 horas.
Si se cambiase la baterı́a utilizada por una baterı́a recargable de LiPo de 3.7V y 4700mAh
la duración de esta serı́a de, aproximadamente, 15 dı́as y 7 horas, mejorando ası́ sustan-
cialmente el tiempo de vida del sistema.
(3.7V ∗ 4700mAh)
Duracion bateria = = 15.3012 dias ≈ 15 dias 7 horas (2)
1136.5144mW h
Pese a ello, un tiempo de vida de 15 dı́as y 7 horas para un sistema autónomo de bajo
consumo sigue siendo inadecuado, es por ello que se deberı́a realizar un cambio en el
diseño del circuito, ajustando tanto el módulo LoRa como el sensor magnético, ya que
según el análisis realizado son los dos componentes con un consumo más elevado (Tabla
6).
28
5. Conclusiones
Se ha cumplido el objetivo inicial de crear un sistema de alarma funcional y además, se
han podido realizar las dos ampliaciones adicionales, tanto el sistema de alimentación
autónomo como la comunicación entre receptor y usuario mediante MQTT.
También, se ha podido validar mediante un análisis de prestaciones las caracterı́sticas
actuales del sistema y sus puntos más mediocres, como la duración de la baterı́a de la
placa emisora.
Pese a ello, diversas partes del proyecto se pueden mejorar y ampliar, haciendo que este
sistema de alarma funcional sea mucho más robusto y adaptable a diferentes aplicaciones.
5.1. Anotaciones
Para finalizar con el apartado de conclusiones, en estas anotaciones se menciona diverso
material bibliográfico que podrı́a servir de ayuda a alguien ajeno al ámbito técnico a
comprender con más facilidad este proyecto.
Se ha subdividido el diverso material bibliográfico en tres categorı́as:
- Electrónica
- Informática
- Telemática
5.1.1. Electrónica
Para poder realizar el diseño y la implementación de ambas placas han sido necesarios
conocimientos básicos en electrónica tanto teóricos como prácticos. Desde saber como
se comportan tanto el voltaje como la corriente en diversos circuitos, a conceptos más
prácticos como el uso de instrumentos de medida, como por ejemplo el multı́metro para
medir las diversas tensiones y corrientes de los circuitos. Se recomienda el siguiente libro:
Circuits i dispositius electrònics: fonaments d’electrònica. [19]
Este libro es muy completo y es una buena opción para aprender conceptos básicos de
electrónica.
5.1.2. Informática
Dentro del ámbito de la informática se destaca la parte de la programación, ya que es lo
que se ha utilizado para poder controlar de forma adecuada los chips ESP32 de ambas
placas.
Dentro de la programación hay diversos lenguajes, en este proyecto se ha empleado
C++, pese a ello mi conocimiento sobre C++ no es muy avanzado, pero gracias a mi
conocimiento en C y diversa documentación de Espressif Systems, empresa desarrolladora
de los chips ESP32, se ha podido realizar correctamente la programación de estos chips.
29
Es por ello que se recomienda un libro sobre C. Tanto el C como el C++ tienen una sintaxis
bastante similar, de tal manera que el libro de C puede ser una alternativa válida, todo
y que no ideal. También, se proporciona el enlace a la página web de Espressif Systems
donde hay bastante información acerca del chip ESP32 utilizado.
Programación en C: metodologı́a, algoritmos y estructuras de datos. [20]
ESP-IDF Programming Guide [21]
5.1.3. Telemática
Una parte importante del proyecto ha sido la comunicación entre ambas placas, que se
ha realizado utilizando módulos LoRa. Además de la comunicación MQTT entre la placa
receptora y el usuario.
Se recomienda la siguiente bibliografı́a:
Data communications and networking. 5th ed. [22]
LoRaWAN™ 1.0.3 Specification [23]
La primera referencia trata sobre diversos aspectos de las tecnologı́as de telecomunicación,
en cambio, la segunda se centra exclusivamente en la tecnologı́a LoRa.
30
6. Trabajo futuro
Como se ha mencionado previamente en el apartado de conclusiones, este proyecto puede
ser mejorado de tal manera que el sistema sea mucho más robusto y adaptable.
Una serie de posibles mejoras y ampliaciones, por si se decide seguir adelante mejorando
el proyecto, serı́an las siguientes:
Sistema de baterı́a: rediseñar el sistema de baterı́a de tal manera que la carga de
la baterı́a sea lo más óptima posible, al igual que añadir diferentes elementos de
seguridad, tanto para proteger los diferentes componentes, como para hacer más
robusta la carga y descarga de la baterı́a.
Sensores: cambiar el sensor magnético por uno con mejores prestaciones, ya que es
uno de los componentes que más consumo tiene.
Comunicación (receptor - emisor): comunicarse desde la placa receptora con la placa
emisora, de tal manera que está pueda activar ciertos actuadores para inhabilitar al
intruso.
LoRa: profundizar más en los diversos parámetros configurables de los módulos
LoRa, de tal manera que se pueda pasar de modo deep sleep a modo activo re-
duciendo ası́ el consumo de este cuando la placa está en modo reposo.
MQTT: mejorar la infraestructura del MQTT situando el broker en una red externa
de tal manera que se pueda acceder a ella desde cualquier red.
31
Referencias
[1] Profesional Review. Qué es un soc y cuáles son sus caracterı́sticas principales.
[2] Inc. Fundación Wikimedia. System on a chip.
[3] Inc. Fundación Wikimedia. Sistema embebido.
[4] CATSENSORS Sensores e instrumentación industrial. Tecnologı́a lora y lorawan.
[5] Inc. Fundación Wikimedia. Lorawan.
[6] Digitalilusion S.L. Lorawan.
[7] Inc. Fundación Wikimedia. Chirp spread spectrum.
[8] Inc. Fundación Wikimedia. Wifi.
[9] SoftwareLab.org. ¿qué es wifi, qué significa y para qué sirve?
[10] ADSLzone. Qué es el wifi y cómo funciona para conectar todo a internet.
[11] Inc. Fundación Wikimedia. Ieee 802.11.
[12] Inc. Fundación Wikimedia. Mqtt.
[13] Luis Llamas. ¿qué es mqtt? su importancia como protocolo iot.
[14] Punto Flotante S.A. 2017. Hc-sr501 pir sensor infrarrojo de movimiento.
[15] BOE. Orden iet/787/2013, de 25 de abril, por la que se aprueba el cuadro nacional
de atribución de frecuencias.
[16] Ltd. Chengdu Ebyte Electronic Technology Co. E22-900t22d user manual.
[17] Espressif Systems. Esp32 series datasheet.
[18] Inc. Eclipse Foundation. Eclipse mosquitto™ an open source mqtt broker.
[19] R. Prat, L.; Bragós. Circuits i dispositius electrònics: fonaments d’electrònica. 2a
ed. Edicions UPC, Barcelona, 2002.
[20] I. Joyanes, L.; Zahonero. Programación en C: metodologı́a, algoritmos y estructuras
de datos. 2a ed. McGraw-Hill, Madrid, 2005.
[21] Espressif Systems. Esp-idf programming guide.
[22] B.A. Forouzan. Data communications and networking. 5th ed. McGraw-Hill, New
York, 2013.
[23] LoRa Alliance Technical Committee. Lorawan™ 1.0.3 specification.
[24] Inc. Fundación Wikimedia. Sensor infrarrojo pasivo.
[25] Shoptronica S.L. ¿qué son los interruptores magnéticos reed-switch?
[26] Inc. Fundación Wikimedia. Sensor de efecto hall.
[27] Inc. Fundación Wikimedia. Zumbador.
32
[28] Inc. Fundación Wikimedia. Relé.
[29] Unit Electronics. Sensores de movimiento pir hc-sr501 / hc-sr505 / hy3612 / am312.
[30] MPJA. Hc-sr501 pir motion detector.
[31] Elecrow. Datasheet hc-sr50 mini pir motion sensor.
[32] Unit Electronics. Comparación entre interruptores magnéticos ky-021, ky-025,ky-024
y ky-35.
33
Apéndice
A. Hardware
A.1. Información sobre los dispositivos electrónicos
A.1.1. Sensor PIR
Un sensor infrarrojo pasivo (o sensor PIR) es un sensor electrónico que mide la luz infrar-
roja radiada de los objetos situados en su campo de visión. [24]
- Los sensores de efecto Hall, por otra parte, permiten medir el campo magnético a
partir del efecto Hall, siendo capaces de realizar mediciones de campo magnético y
por consecuencia identificar cuando hay campo magnético y cuando no. [26]
34
A.1.3. Zumbador
Un zumbador es un transductor electroacústico que produce un sonido o zumbido de un
mismo tono, sirve como mecanismo de señalización o aviso. [27]
A.1.4. Relé
El relé es un dispositivo electromagnético. Funciona como un interruptor controlado por
un circuito eléctrico, en el que se acciona un juego de contactos que permiten abrir o
cerrar otros circuitos eléctricos independientes. [28]
Como se puede observar en la tabla ambos son muy similares entre sı́ es por ello que
se decidió utilizar el HC-SR501, ya que su corriente en reposo es menor y el tiempo de
retardo entre detección y transmisión se puede ajustar para que sea menor.
35
A.4. Datasheets de los componentes utilizados
Enlaces de descarga y páginas web de los diferentes datasheets de los componentes uti-
lizados.
https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_
en.pdf
(ESP32-DevKitC V4)
https://www.mpja.com/download/31227sc.pdf (HC-SR501)
https://datasheetspdf.com/pdf-file/1402036/Joy-IT/KY-025/1 (KY-025)
https://datasheet-pdf.com/PDF/KY-006-Datasheet-Joy-IT-1402021 (KY-006)
https://datasheetspdf.com/pdf-file/1402030/Joy-IT/KY-019/1 (KY-019)
https://www.ebyte.com/en/product-view-news.html?id=1117 (E22-900T22D)
https://www.olimex.com/Products/Breadboarding/BB-PWR-3608/resources/MT3608.
pdf (MT3608)
http://www.tp4056.com/d/tp4056.pdf (TP4056)
36
B. Software
B.1. Software asociado al módulo LoRa y al broker MQTT
Páginas web del programa de configuración del módulo LoRa y del broker MQTT.
https://www.ebyte.com/en/data-download.html?page=2&id=446&cid=31#load
(Configuration software RF-Setting(E22-E90(SL)))
https://mosquitto.org/download/ (Mosquitto)
4 // Variables
5 const int PIR_pin = 25;
6 int pinStateCurrent = LOW ;
7 int pinStatePrevious = LOW ;
8 int count = 0;
9
10 // Initialize
11 void setup () {
37
12 Serial . begin (9600) ;
13 pinMode ( PIR_pin , INPUT ) ;
14 }
15
16 void loop () {
17 // Detect change of status
18 pinStatePrevious = pinStateCurrent ;
19 pinStateCurrent = digitalRead ( PIR_pin ) ;
20 if ( pinStatePrevious == LOW && pinStateCurrent == HIGH ) {
21 Serial . println ( " Motion detected . " ) ;
22 count ++;
23 }
24 if ( pinStatePrevious == HIGH && pinStateCurrent == LOW ) {
25 Serial . println ( " Motion stopped . " ) ;
26 Serial . println ( count ) ;
27 }
28 }
Algoritmo 3: Test del sensor PIR
9 // Initialize
10 void setup () {
11 Serial . begin (9600) ;
12 pinMode ( buzzer_pin , OUTPUT ) ;
13 }
14
15 void loop () {
16 Serial . println ( " Start " ) ;
17 // Testing four different tones
18 tone ( buzzer_pin , NOTE_C3 , 500 , buzzer_channel ) ;
19 noTone ( buzzer_pin , buzzer_channel ) ;
20 delay (500) ;
21 tone ( buzzer_pin , NOTE_C4 , 500 , buzzer_channel ) ;
22 noTone ( buzzer_pin , buzzer_channel ) ;
23 delay (500) ;
24 tone ( buzzer_pin , NOTE_C5 , 500 , buzzer_channel ) ;
25 noTone ( buzzer_pin , buzzer_channel ) ;
26 delay (500) ;
27 tone ( buzzer_pin , NOTE_C6 , 500 , buzzer_channel ) ;
28 noTone ( buzzer_pin , buzzer_channel ) ;
29 delay (500) ;
30 }
Algoritmo 4: Test del zumbador
38
B.2.4. Test del relé
1 // Libraries
2 # include < Arduino .h >
3
4 // Variables
5 int rele_pin = 25;
6
7 // Initialize
8 void setup () {
9 Serial . begin (9600) ;
10 pinMode ( rele_pin , OUTPUT ) ;
11 }
12
13 void loop () {
14 digitalWrite ( rele_pin , HIGH ) ; // " Normally Open " is now connected
through
15 delay (1000) ;
16 digitalWrite ( rele_pin , LOW ) ; // " Normally Closed " is now connected
through
17 delay (1000) ;
18 }
Algoritmo 5: Test del relé
39
B.2.6. Test de sondeo con el sensor magnético
1 // Libraries
2 # include < Arduino .h >
3
4 // Variables
5 int magnetic_pin = GPIO_NUM_25 ;
6 int count = 0;
7
8 // Initialize
9 void setup () {
10 Serial . begin (9600) ;
11 delay (500) ;
12 pinMode ( magnetic_pin , INPUT ) ; // Magnetic pin
13 Serial2 . begin (9600) ; // LoRa communication pins
14 delay (500) ;
15 }
16
17 void loop () {
18 int digitalVal = digitalRead ( magnetic_pin ) ; // read the magnetic
sensor
19 if ( digitalVal == 1) {
20 count ++;
21 Serial2 . println ( count ) ; // send count to the other LoRa module
22 delay (500) ;
23 }
24 delay (500) ;
25 }
Algoritmo 7: Test de sondeo con el sensor magnético
40
23 delay (500) ;
24 j = 1;
25 count +=2;
26 delay (500) ;
27 }
28 sleep (3) ; // PIR sensor minimum time between detections (3 seconds )
29 }
30
31 // Initialize
32 void setup () {
33 Serial . begin (9600) ;
34 delay (500) ;
35 pinMode ( magnetic_pin , INPUT ) ; // Magnetic pin
36 pinMode ( PIR_pin , INPUT ) ; // PIR pin
37 Serial2 . begin (9600) ; // LoRa communication pins
38 delay (500) ;
39 }
40
41 void loop () {
42 i = 0;
43 j = 0;
44 count = 0;
45
46 // Attach Interrupt
47 attachInterrupt ( magnetic_pin , magnetic_detect , RISING ) ;
48 attachInterrupt ( PIR_pin , PIR_detect , RISING ) ;
49
50 // Detach Interrupt after 1 Minute or PIR detection or Magnetic
detection
51 static uint32_t lastMillis = 0;
52 if (( millis () - lastMillis > 60000) or i == 1 or j == 1) {
53 lastMillis = millis () ;
54 detachInterrupt ( magnetic_pin ) ;
55 detachInterrupt ( PIR_pin ) ;
56 Serial2 . println ( count ) ; // send count to the other LoRa module
57 Serial . println ( " Interrupt Detached ! " ) ;
58 sleep (1) ;
59 }
60 }
Algoritmo 8: Test de interrupciones con los sensores magnético y PIR
41
B.3. Códigos de los chips ESP32
B.3.1. Código de la placa emisora
1 // Libraries
2 # include < Arduino .h >
3
4 // Variables
5 int magnetic_pin = GPIO_NUM_25 ;
6 int PIR_pin = GPIO_NUM_26 ;
7 int count = 0; // Message ( Weight magnetic 1 - Weight PIR 2)
8 int i ,j , k = 0;
9
10 e s p _ s l e e p _ w a k e u p _ c a u s e _ t wakeup_reason ;
11
42
52 Serial . println ( " This will be printed when the system wake ’s up " ) ; //
Wake - Up
53 sleep (2) ;
54 i = 0;
55 j = 0;
56 k = 0;
57 count = 0;
58
59 wakeup_reason = e s p _ s l e e p _ g e t _ w a k e u p _ c a u s e () ; // Cause Wake - Up
60 switch ( wakeup_reason )
61 {
62 case E S P _ S L E E P _ W A K E U P _ E X T 0 :
63 Serial . println ( " Wakeup caused by external signal using RTC_IO -
Magnetic " ) ;
64 count +=1;
65 attachInterrupt ( PIR_pin , PIR_detect , RISING ) ; // Attach PIR
Interrupt
66 sleep (1) ;
67 break ;
68
69 case E S P _ S L E E P _ W A K E U P _ G P I O :
70 Serial . println ( " Wakeup caused by GPIO - PIR " ) ;
71 count +=2;
72 sleep (5) ;
73 attachInterrupt ( magnetic_pin , magnetic_detect , RISING ) ; // Attach
Magnetic Interrupt
74 break ;
75
76 default : break ;
77 }
78
79 // Detach Interrupt after 1 Minute or PIR detection or Magnetic
detection
80 uint32_t lastMillis = millis () ;
81 while ( k == 0) {
82 if ((( millis () - lastMillis ) > 60000) or i == 1 or j == 1) {
83 detachInterrupt ( magnetic_pin ) ;
84 detachInterrupt ( PIR_pin ) ;
85 Serial2 . write ( count ) ; // send count to the other LoRa module
86 Serial . println ( " Interrupt Detached ! " ) ;
87 sleep (5) ;
88 k = 1;
89 }
90 }
91 sleep (20) ;
92 }
Algoritmo 9: Código de la placa emisora
43
B.3.2. Código de la placa receptora
1 // Libraries
2 # include < Arduino .h >
3 # include < Tone32 .h >
4 # include < WiFi .h >
5 # include < PubSubClient .h >
6
7 // Variables
8 # ifndef STA_SSID
9
10 # define STA_SSID " ...... " // Wifi Name
11 # define STA_PSK " ...... " // Wifi Password
12
13 # define MQTT_SERVER " ...... " // Broker IP
14 # define MQTT_PORT 1883
15 # define MQTT_CLIENT_ID " MQTT_ Client _ESP32 "
16
17 // The two topics ( Magnetic / PIR )
18 # define TOPIC_MAGNETIC " / alex / room / magnetic "
19 # define TOPIC_PIR " / alex / room / pir "
20
21 # endif
22
23 WiFiClient espClient ;
24 PubSubClient client ( espClient ) ;
25 String Mag = " 1 " ;
26 String PIR = " 2 " ;
27 String Mag_PIR = " 3 " ;
28 String message = " default " ;
29
30 int rele_pin = 26;
31 int buzzer_pin = 5;
32 int buzzer_channel = 0;
33
34 int i = 0;
35 int k = 0;
36
37 // Function : connect to the Wifi
38 void setup_wifi () {
39
40 Serial . println () ;
41 Serial . print ( " Connecting to " ) ;
42 Serial . println ( STA_SSID ) ;
43
44 WiFi . mode ( WIFI_STA ) ;
45 WiFi . begin ( STA_SSID , STA_PSK ) ;
46
44
54 Serial . println ( " " ) ;
55 Serial . println ( " WiFi connected " ) ;
56 Serial . println ( " IP address : " ) ;
57 Serial . println ( WiFi . localIP () ) ;
58 }
59
60 // Function : MQTT connection and Publish the new message
61 void reconnect () {
62
63 k = 0;
64
65 while ( k == 0) {
66
67 // Loop until we ’ re reconnected
68 while (! client . connected () ) {
69 Serial . print ( " Attempting MQTT connection ... " ) ;
70
71 // Create a random client ID
72 String clientId = MQTT_CLIENT_ID ;
73 clientId += String ( random (0 xffff ) , HEX ) ;
74
75 // Attempt to connect
76 if ( client . connect ( clientId . c_str () ) ) {
77 Serial . println ( " connected " ) ;
78
79 // Publish the message
80 if ( message == Mag_PIR ) {
81 client . publish ( TOPIC_PIR ,(( String ) " PIR_Activated " ) . c_str () ) ;
82 client . publish ( TOPIC_MAGNETIC ,(( String ) " Ma gne ti c_ Ac ti va te d " ) .
c_str () ) ;
83 }
84 else if ( message == PIR ) {
85 client . publish ( TOPIC_PIR ,(( String ) " PIR_Activated " ) . c_str () ) ;
86 client . publish ( TOPIC_MAGNETIC ,(( String ) " M a g n e t i c _ D e a c t i v a t e d " )
. c_str () ) ;
87 }
88 else if ( message == Mag ) {
89 client . publish ( TOPIC_PIR ,(( String ) " PIR_Deactivated " ) . c_str () ) ;
90 client . publish ( TOPIC_MAGNETIC ,(( String ) " Ma gne ti c_ Ac ti va te d " ) .
c_str () ) ;
91 }
92 k = 1;
93 Serial . println ( " Message Published " ) ;
94 }
95 else {
96 Serial . print ( " failed , rc = " ) ;
97 Serial . print ( client . state () ) ;
98 Serial . println ( " try again in 5 seconds " ) ;
99 // Wait 5 seconds before retrying
100 delay (5000) ;
101 }
102 }
103 }
104 }
105
45
106 // Initialize
107 void setup () {
108 Serial . begin (9600) ;
109 delay (500) ;
110
111 pinMode ( buzzer_pin , OUTPUT ) ; // Buzzer pin
112 pinMode ( rele_pin , OUTPUT ) ; // Rele pin
113 delay (500) ;
114
115 setup_wifi () ; // Wifi connection
116 client . setServer ( MQTT_SERVER , MQTT_PORT ) ; // MQTT server
117
118 Serial . println ( " Waiting a message " ) ;
119 Serial2 . begin (9600) ; // LoRa communication pins
120 }
121
46
160 client . disconnect () ;
161
162 sleep (2) ;
163 digitalWrite ( rele_pin , LOW ) ; // Deactivated
164 i = 0;
165 message = " default " ;
166 delay (500) ;
167 }
Algoritmo 10: Código de la placa receptora
47