Está en la página 1de 47

Design, implementation and programming of

an IoT module with LoRa communication


technology to provide security services

Trabajo Fin de Grado


realizado en la
Escola Tècnica d’Enginyeria de Telecomunicació de Barcelona
Universitat Politècnica de Catalunya
por
Alex Santı́n Batanero

En cumplimiento parcial
de los requisitos para el Grado en
Ingenierı́a Electrónica de Telecomunicación INGENIERÍA

Director: Luis Javier de la Cruz Llopis


Barcelona, Junio 2022
Índice
Índice de figuras 4

Í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

2. Estado del arte de la tecnologı́a utilizada 11


2.1. SoC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2. LoRa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Wifi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4. MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3. Diseño del sistema 14


3.1. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.1. Material utilizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.2. Esquemas eléctricos . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.1. Configuración de los módulos LoRa . . . . . . . . . . . . . . . . . . 19
3.2.2. Programación de los chips ESP32 . . . . . . . . . . . . . . . . . . . 20
3.2.3. Modos de reposo del chip ESP32 . . . . . . . . . . . . . . . . . . . 22
3.2.4. Protocolo de comunicación y respuesta de los actuadores . . . . . . 22
3.2.5. Sistema MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

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

Revisión Fecha Propósito


0 30/05/2022 Creación del documento
1 09/06/2022 Primera revisión
2 15/06/2022 Segunda revisión
3 20/06/2022 Revisión final

LISTA DE DISTRIBUCIÓN DEL DOCUMENTO

Nombre e-mail
Alex Santı́n Batanero alex.santin@estudiantat.upc.edu
Luis Javier de la Cruz Llopis luis.delacruz@upc.edu

Escrito por: Revisado y aprobado por:


Fecha 20/06/2022 Fecha 20/06/2022
Nombre Alex Santı́n Batanero Nombre Luis Javier de la Cruz Llopis
Cargo Autor del proyecto Cargo Supervisor del proyecto

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.

Figura 1: Esquema del proyecto

1.2. Requerimientos y especificaciones


Para poder realizar este proyecto han sido necesarios ciertos requerimientos:
- Conocimientos básicos de electrónica, tanto para la parte inicial del diseño como
para la verificación de su correcto funcionamiento.
- Conocimiento sobre lenguajes de programación e IDE (Integrated Development En-
vironment), concretamente C++ y PlatformIO.
- Conocimiento sobre circuitos y tecnologı́as de telecomunicaciones, especialmente
LoRa, Wifi y MQTT.

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.

1.3. Contexto y alcance


El proyecto es nuevo de este año y ha sido creado a partir de ideas comunes entre el autor
y el supervisor. Tanto el alcance, como su desarrollo, se han realizado de manera cı́clica e
iterativa, empezando por el eje central del proyecto y añadiendo cada vez más contenido
sobre este.
Ese eje central fue la idea de llevar a cabo una comunicación LoRa entre dos chips ESP32.
Posteriormente, se añadió el desarrollo de ambas placas, la emisora y la receptora, con sus
respectivos sensores y actuadores. Para finalizar, como contenido adicional optativo, se
añadió la creación de un módulo de alimentación para el emisor, de tal manera que este
fuese autónomo y comunicación MQTT en el receptor, para ası́ poder notificar al usuario
remotamente.

1.4. Plan de trabajo, hitos e incidencias


La fase inicial del proyecto consistió en la búsqueda del material adecuado para crear
las dos placas y el sistema de baterı́a. Inicialmente, se planteó realizar varias comandas
de material, pero al final se realizó un único encargo de material con tal de facilitar la
compra de este a través de la UPC. A continuación, se hizo el diseño de ambos circuitos,
teniendo en cuenta la posible implementación del sistema de baterı́a en la placa emisora.
Una vez recibido el material se implementó el diseño de ambas placas, teniendo en cuenta
tanto la parte de hardware como la parte de software (programación de las placas ESP32
y configuración de los módulos LoRa). Además, se verificó el correcto funcionamiento del
sistema mediante diferentes pruebas y test.
Para finalizar, se implementó el sistema de baterı́a en el emisor, la comunicación MQTT
en el receptor y se validó el correcto funcionamiento del sistema completo. También,
se realizó un análisis de prestaciones del sistema, haciendo énfasis en la distancia de
transmisión en un entorno urbano y en el consumo de la placa emisora.
El único incidente que ha habido durante el proyecto fue el retraso en la llegada del
material debido al proceso burocrático necesario para comprar el material a través de la

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

Tabla 1: Hitos del proyecto

1.5. Diagrama de Gantt

Figura 2: Diagrama de Gantt

Investigación sobre el material: 22/02/2022 - 15/03/2022


Diseño del sistema: 08/03/2022 - 07/04/2022
Investigación sobre la programación: 12/04/2022 - 02/05/2022
Implementación del sistema completo: 03/05/2022 - 16/05/2022
Análisis del consumo: 17/05/2022 - 24/05/2022
Comunicación MQTT: 19/05/2022 - 27/05/2022
Verificación del sistema: 24/05/2022 - 08/06/2022
Documentación (Propuesta y Plan de Trabajo): 14/02/2022 - 01/03/2022
Documentación (Revisión Crı́tica): 01/04/2022 - 12/04/2022
Documentación (Memoria Final): 30/05/2022 - 20/06/2022

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.

Figura 5: Ejemplo del protocolo MQTT

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.

3.1.1. Material utilizado


Para realizar este proyecto se ha utilizado el siguiente material:
- SoC (ESP32-DevKitC V4)
- Sensor PIR (HC-SR501)
- Sensor Magnético (KY-025)
- Zumbador (KY-006)
- Relé (KY-019)
- Módulo LoRa (E22-900T22D, Antena, E15-USB-T2)
- Sistema de alimentación (Baterı́a, Panel Solar, MT3608, TP4056)
ESP32-DevKitC V4
El SoC utilizado tiene un total de 39 pines de conexión con diversas funcionalidades, de las
cuales destacan, para este proyecto, los pines de alimentación a 3.3V y a 5V, los pines de
comunicación UART, los pines de LED PWM y los pines GPIO. Además, el propio sistema
tiene diversas funciones, las cuales le permiten entrar en modo de bajo consumo (sleep)
y activarse solo cuando sea necesario su funcionamiento, ideal para sistemas autónomos
como la placa emisora.
HC-SR501
El sensor HC-SR501 es un sensor PIR de bajo consumo basado en el circuito integrado
BISS0001. Este sensor es capaz de detectar la luz infrarroja en movimiento, es decir, solo
realizará una detección si detecta algún movimiento de radiación infrarroja.
El HC-SR501 tiene un rango de actuación de entre 90º y 110º, gracias a la lente de
Fresnel que se sitúa delante del sensor PIR. La versión utilizada en este proyecto tiene
2 parámetros ajustables: la distancia de detección y el intervalo de tiempo de alarma.
Ambos parámetros son ajustables mediante dos potenciómetros de fácil acceso situados
en el lateral del módulo.
Posee tres pines de conexión, dos destinados a la alimentación y el tercero para el valor
de salida, el nivel alto indica una detección. Una vez el módulo hace una detección este

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.

Figura 6: Material utilizado

Para más información sobre el material consultar el apéndice A.

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.

Figura 7: Esquemático del emisor

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.

Figura 8: Esquemático del receptor

Como el sistema receptor va a realizar transmisiones de datos usando MQTT, mediante


Wifi, se ha diseñado para que esté conectado directamente a la alimentación a través del
micro-USB del chip ESP32. También, cabe mencionar que el circuito externo que activa
el relé en este caso es un LED.

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.

3.2.1. Configuración de los módulos LoRa


Para realizar dicha configuración, se han usado los adaptadores que permiten conectar
directamente el módulo LoRa al ordenador (e15-usb-t2) y el programa de configuración
adecuado para los módulos LoRa E22-900T22D (Apendice B.1).
El módulo LoRa utilizado tiene un total de 4 modos de funcionamiento, los cuales varı́an
en función del voltaje que les llegue a los pines M0 y M1.

Figura 9: Modos de operación del módulo LoRa [16]

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.

Figura 10: Adaptador en modo configuración

Posteriormente, al entrar en el programa de configuración simplemente se introducen los


diversos parámetros a configurar. Para este proyecto, el único parámetro de configuración
que se ha modificado ha sido la dirección, se ha pasado a la dirección 8.

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.

Figura 11: Programa de configuración del módulo LoRa

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.

3.2.2. Programación de los chips ESP32


La programación de los chips ESP32 se ha realizado utilizando PlatformIO a través de
VSC (Visual Studio Code) y mediante el framework de Arduino.
Se han diseñado dos programas, uno para el emisor y otro para el receptor. Su proceso
de trabajo es el siguiente:
1. El emisor está en modo sleep hasta que es despertado por uno de los dos sensores.

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.

Figura 12: Diagrama de flujo de la programación asociada a los chips ESP32

En el proceso de trabajo explicado anteriormente, cabe destacar el hecho de esperar un


minuto para determinar si el otro sensor está detectando o no. Esto se implementó de
esta manera debido a que el chip ESP32 solamente puede ser despertado por un sensor, de
tal manera que es incapaz de distinguir el estado del otro sensor. El sistema de espera se
diseñó para poder saber si el otro sensor está detectando o no y consecuentemente enviar
el correspondiente mensaje al receptor.
El código asociado a ambos sensores se ha implementado mediante el uso de interrup-
ciones, de tal manera que sea el propio sensor el cual se comunique con el código, evitando
ası́ hacer sondeos para ver en qué estado está el sensor, una alternativa poco eficiente.
El código de ambos chips está adjunto en el apéndice B.3.

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.

Figura 13: Modos de reposo del chip ESP32 [17]

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.

3.2.4. Protocolo de comunicación y respuesta de los actuadores


Se ha diseñado un protocolo de comunicación basado en pesos, de tal manera que la
detección por parte del sensor magnético tiene un valor de uno y la del PIR un valor de
dos. Para ası́ poder distinguir desde el punto de vista del receptor que sensores están
realizando una detección.

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

Tabla 2: Sistema de comunicación entre emisor y receptor

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

Tabla 3: Modos de actuación de la placa receptora

3.2.5. Sistema MQTT


Para la implementación del sistema MQTT ha sido necesario descargar un programa que
realizase la función de broker, en este caso se ha utilizado Mosquitto [18] (Apéndice
B.1). También ha sido necesario conectar la placa receptora al Wifi para poder enviar los
mensajes al broker.
Además, desde el móvil empleando una aplicación de mensajes MQTT es posible conec-
tarse al broker en cuestión y ver lo que sucede con el sistema a través de los dos topics
que hay definidos (”/alex/room/pir ” y ”/alex/room/magnetic”).

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.

Figura 14: Placa emisora y placa receptora

La implementación de mayor dificultad fue el sistema de baterı́a, ya que los componentes


utilizados no tenı́an conectores compatibles con la protoboard y se tuvo que realizar la
conexión a partir de soldaduras y regletas.

Figura 15: Placa emisora con el sistema de alimentación

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)

El resto de códigos asociados a los test, debidamente comentados, están en el apéndice


B.2.

4.3. Análisis de prestaciones


A partir del sistema completo, ya verificado, se han realizado diversos análisis para validar
sus prestaciones. En este caso, por una parte, se ha analizado la distancia máxima de
transmisión entre placas en un entorno urbano y, por otro lado, el consumo de la placa
emisora.

4.3.1. Distancia de transmisión en un entorno urbano


Este análisis se ha realizado transmitiendo datos desde la placa emisora cuando las dis-
tancias eran de 10m, 20m, 50m, 100m, 200m, 300m, en un entorno urbano. La distancia
máxima corresponde, aproximadamente, a un total de tres manzanas en la ciudad donde
resido.
Todas las transmisiones mencionadas se llevaron a cabo de forma exitosa.

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

Tabla 4: Consumo (mW)

Esta tabla se ha creado a partir de un análisis de la corriente de los diversos componentes


utilizando un multı́metro en sus diversos estados, exceptuando el módulo LoRa y el ESP32
que se han utilizado los valores indicados en los datasheets, ya que no ha sido posible
realizar una medición adecuada mediante el multı́metro.

Tiempo diario en los diversos estados (s)


Dispositivo Sleep/RX Standby/RX Activado/TX
Sensor magnético 86370 29.99999967 0.00000033
Sensor PIR 86370 29 1
Chip ESP32 86370 - 30
Módulo LoRa 86370 29.99965 0.00035

Tabla 5: Tiempo diario en los diversos estados (s)

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.

Consumo diario (mW·h)


Sensor magnético 180.576
Sensor PIR 19.2004
Chip ESP32 65.538
Módulo LoRa 871.2
Total 1136.5144

Tabla 6: Consumo diario (mW·h)

(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]

A.1.2. Sensor magnético


Un sensor magnético es un sensor que reacciona al campo magnético. A partir de esta
definición, demasiado amplia, podemos identificar dos tipos de sensores: los interruptores
magnéticos y los sensores de Efecto Hall:
- Los interruptores magnéticos, también denominados reed switch, actúan como in-
terruptores en función del campo magnético. Se basan en una cápsula con dos
barras ferromagnéticas superpuestas, de tal manera que cuando se acerca un campo
magnético con suficiente fuerza, las dos barras se juntan dejando pasar la corriente
a través de ellas. Una vez se aleja el campo magnético, las dos barras dejan de estar
en contacto. [25]

Figura 16: Funcionamiento de un interruptor magnético

- 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]

A.2. Discusión sobre los sensores PIR


Se planteó el uso de varios sensores PIR entre los cuales destacan el HC-SR501 y el
HC-SR505.

HC-SR501 versus HC-SR505


Caracterı́stica HC-SR501 HC-SR505
Voltaje alimentación 4.5V a 12V DC 4.5V a 20V DC
Voltaje de salida (detección) 3.3V 3.3V
Distancia de detección 3m a 7m 3m
Ángulo de detección 90º a 110º 100º
Intervalo de tiempo de alarma 5s a 5min 8s
Consumo de corriente en reposo 50uA 60uA

Tabla 7: Comparativa de los sensores PIR

[29] [30] [31]

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.

A.3. Discusión sobre los sensores magnéticos


Durante la búsqueda de información se planteó el uso de tres sensores magnéticos difer-
entes, dos interruptores magnéticos (KY-025, KY-021) y un sensor de efecto Hall (KY-
035). [32]
Finalmente, se decidió utilizar el KY-025 debido a que posee un potenciómetro regu-
lador, para ası́ poder adaptar la sensibilidad del interruptor al campo magnético utilizado.
Además, tiene dos pines de salida, uno digital y otro analógico, aunque finalmente para
este proyecto solo se ha usado el pin de salida digital.

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)

B.2. Códigos de los diversos test


B.2.1. Test del sensor magnético
1 // Libraries
2 # include < Arduino .h >
3
4 // Variables
5 int KY_025_analog = 4;
6 int KY_025_digital = 25;
7
8 // Initialize
9 void setup () {
10 Serial . begin (9600) ;
11 pinMode ( KY_025_analog , INPUT ) ;
12 pinMode ( KY_025_digital , INPUT ) ;
13 }
14
15 void loop () {
16 // Value reading
17 int analogVal = analogRead ( KY_025_analog ) ;
18 int digitalVal = digitalRead ( KY_025_digital ) ;
19 Serial . print ( analogVal ) ;
20 Serial . print ( " - " ) ;
21 Serial . println ( digitalVal ) ;
22 delay (500) ;
23 }
Algoritmo 2: Test del sensor magnético

B.2.2. Test del sensor PIR


1 // Libraries
2 # include < Arduino .h >
3

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

B.2.3. Test del zumbador


1 // Libraries
2 # include < Arduino .h >
3 # include < Tone32 .h >
4
5 // Variables
6 int buzzer_pin = 5;
7 int buzzer_channel = 0;
8

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é

B.2.5. Test de comunicación LoRa (placa - ordenador)


1 // Libraries
2 # include < Arduino .h >
3 // Variables
4 String message = " default " ;
5 int i = 0;
6
7 // Initialize
8 void setup () {
9 Serial . begin (9600) ;
10 Serial . println ( " Waiting a message " ) ;
11 delay (500) ;
12 Serial2 . begin (9600) ; // LoRa communication pins
13 }
14
15 void loop () {
16 // Recieve and show the message
17 while ( i == 0) {
18 if ( Serial2 . available () ) {
19 message = ( Serial2 . read () ) ;
20 Serial . println ( message ) ;
21 i = 1;
22 }
23 }
24 i = 0;
25 message = " default " ;
26 delay (500) ;
27 }
Algoritmo 6: Test de comunicación LoRa (placa - ordenador)

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

B.2.7. Test de interrupciones con los sensores magnético y PIR


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 = 0;
9
10 // Functions ( Magnetic - PIR )
11 void IRAM_ATTR magnetic_detect () {
12 if ( i == 0) {
13 Serial . println ( " Magnetic detection . " ) ;
14 delay (500) ;
15 i = 1;
16 count +=1;
17 delay (500) ;
18 }
19 }
20 void IRAM_ATTR PIR_detect () {
21 if ( j == 0) {
22 Serial . println ( " PIR detection . " ) ;

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

12 // Functions ( Magnetic - PIR )


13 void IRAM_ATTR magnetic_detect () {
14 if ( i == 0) {
15 Serial . println ( " Magnetic detection . " ) ;
16 delay (500) ;
17 i = 1;
18 count +=1;
19 delay (500) ;
20 }
21 }
22 void IRAM_ATTR PIR_detect () {
23 if ( j == 0) {
24 Serial . println ( " PIR detection . " ) ;
25 delay (500) ;
26 j = 1;
27 count +=2;
28 delay (500) ;
29 }
30 sleep (3) ; // PIR sensor minimum time between detections (3 seconds )
31 }
32
33 // Initialize
34 void setup () {
35 Serial . begin (9600) ;
36 delay (500) ;
37 pinMode ( magnetic_pin , INPUT ) ; // Magnetic pin
38 pinMode ( PIR_pin , INPUT ) ; // PIR pin
39 Serial2 . begin (9600) ; // LoRa communication pins
40 delay (500) ;
41

42 e s p _ s l e e p _ e n a b l e _ e x t 0 _ w a k e u p ( GPIO_NUM_25 ,1) ; // Magnetic Wake - Up


43 gp io _w ak eu p_ en ab le ( GPIO_NUM_26 , G P I O _ I N T R _ H I G H _ L E V E L ) ; // PIR Wake - Up
44 e s p _ s l e e p _ e n a b l e _ g p i o _ w a k e u p () ; // Enable GPIO Wake - Up
45 }
46
47 void loop () {
48 Serial . println ( " Going to light - sleep now " ) ;
49 delay (500) ;
50
51 e s p _ l i g h t _ s l e e p _ s t a r t () ; // Sleep

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

47 while ( WiFi . status () != WL_CONNECTED ) {


48 delay (500) ;
49 Serial . print ( " . " ) ;
50 }
51
52 randomSeed ( micros () ) ;
53

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

122 void loop () {


123 // Recieve and show the message
124 while ( i == 0) {
125 if ( Serial2 . available () ) {
126 message = ( Serial2 . read () ) ;
127 Serial . println ( message ) ;
128 i = 1;
129 }
130 }
131
132 // Actuators in Action
133 if ( message == Mag_PIR ) {
134
135 digitalWrite ( rele_pin , HIGH ) ; // Activated
136 tone ( buzzer_pin , NOTE_C6 , 1000 , buzzer_channel ) ; // High Tone
137 noTone ( buzzer_pin , buzzer_channel ) ;
138
139 }
140 else if ( message == PIR ) {
141
142 digitalWrite ( rele_pin , HIGH ) ; // Activated
143 tone ( buzzer_pin , NOTE_C5 , 1000 , buzzer_channel ) ; // Intermediate
Tone
144 noTone ( buzzer_pin , buzzer_channel ) ;
145
146
147 }
148 else if ( message == Mag ) {
149
150 tone ( buzzer_pin , NOTE_C4 , 1000 , buzzer_channel ) ; // Low Tone
151 noTone ( buzzer_pin , buzzer_channel ) ;
152
153 }
154
155 // Connection MQTT and Publish
156 if (! client . connected () ) {
157 reconnect () ;
158 }
159 // Desconnection MQTT

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

También podría gustarte