SENSOR COOPER V3.2 - MEDIALAB_ LPWAN: SENSOR ULTRASÓNICO CONECTADO POR LORA PARA MEDIR EL NIVEL DE AGUA DEL ARROYO DE SAN MIGUEL
Introducción ↩️
En homenaje a Martin Cooper, inventor del teléfono móvil en 1973 y Premio Princesa de Asturias 2009, y Arlene Harris y su visión del Internet de las Personas, en MediaLab LPWAN quisimos desarrollar un dispositivo IoT que pudiese mejorar la calidad del campus de la Escuela Politécnica de Ingeniería de Gijón. Como resultado, la idea del Sensor Cooper nació como un nodo conectado por LoRa, sincronizable con The Things Network, que pudiese quedar midiendo el nivel de agua del Arroyo de San Miguel sin ninguna necesidad de hacerle mantenimientos.
Con estos sensores, el objetivo es monitorizar la posibilidad de una inundación en el Edificio Polivalente durante la temporada de lluvias intensas. Específicamente, en 2018, una gran inundación tuvo lugar dejando inservible multitud de equipamiento valorado en decenas de miles de euros que estaban siendo usados por los estudiantes durante las prácticas de laboratorio de diversas asignaturas. Por ello, ésta es una situación que no podemos dejar que se repita:
En este repositorio, encontrarás todos los archivos y guías educativas necesarias para entender con totalidad e incluso tomarte la libertad creativa de mejorar este proyecto. Las carpetas y archivos han sido llamados con nombres que se explican a ellos mismos para hacer la navegación más intuitiva.
Características principales ↩️
-
Desarrollado usando la LilyGO LoRa32 OLED v2.1_1.6 (Una placa basada en ESP32 con LoRa implementado y que soporta recarga con panel solar y gestión de batería)
-
Cambios realizados para JSN-SR04T (Sensor ultrasónico de distancia)
Warning
Este sensor es extremádamente sensible a perturbaciones físicas. Estate seguro de alinearlo perfectamente de forma perpendicular con la superficie donde rebote el haz y de tener visión directa a ella
-
Tasa dinámica de transmisión de datos: el intervalo de envío cambia automáticamente su valor entre 20 y 40 minutos en función de la desviación típica de las últimas 5 medidas enviadas a TTN. (Por OTAA,
payload_formatter.json
es una sugerencia de cómo decodificar los bytes enviados)
-
PCB a medida
Tip
Considera soldar conectores hembra para pines para que los componentes se puedan conectar y desconectar de forma simple en caso de tener que hacer una reparación
-
Carcasa a medida para encajar todos los componentes de la forma más eficiente (Recipiente + Soporte del panel solar + Protector del conector USB)
Ejemplo de ensamblaje:
Warning
Es muy recomendable emplear filamento de impresión 3D de PETG de color claro para sobrevivir a la radiación solar y a las deformaciones plásticas. Una tórica es una buena opción para fijar y estabilizar el sensor dentro de la campana. Hacen falta cuatro tornillos M3 para fijar el ensamblado
Lista de tareas ↩️
La lista siguiente enumera todas las tareas que conforman el proceso de investigación del proyecto y si se han completado de forma estricta:
- Entendimiento total de la placa de desarrollo y sus pines
- Algunos pines son conflictivos debido a la falta de documentación del fabricante, por
- lo que aún se están haciendo pruebas
-
Entendimiento total del modo de trabajo del sensor y modos alternativos
-
Implementación por código del sensor
-
Implementación por código de LoRa
-
Implementación por código del modo de bajo consumo
-
Componentes para el modo de bajo consumo
- Se está intentando implementar un transistor para dejar sin 5V de alimentación al
- sensor durante el deep sleep, pero está siendo "retorcido"
- Diseño de la PCB
- Ya que el hardware para el modo de bajo consumo aún no se ha implementado con
- éxito, la PCB debe esperar
-
Modelado 3D de la carcasa
-
Aplicación para visualizar los datos
Lista de componentes ↩️
Componente | Modelo |
---|---|
Placa | LilyGO LoRa32 OLED v2.1_1.6 |
Sensor de distancia | JSN-SR04T |
MOSFET Canal-N | - |
Resistencia | 2k2 |
Batería | 18650 |
Panel solar | SYP-S0606 |
PCB | A medida (archivo incluido) |
Carcasa | A medida (archivo inlcuido) |
Lista de conexiones ↩️
JSN-SR04T | Transistor | Resistor | 18650 Shield | SYP-S0606 | LilyGO |
---|---|---|---|---|---|
trigger |
- | - | - | - | 13 |
echo |
- | - | - | - | 12 |
5v |
S |
- | - | - | - |
GND |
- | indiferente |
- | - | GND |
- | G |
indiferente |
- | - | 15 |
- | D |
- | - | - | 5V |
- | - | - | USB-In |
USB-Out |
- |
- | - | - | USB-Out |
- | USB-In |
Esbozado se ve de la siguienta forma:
Caution
El modelo de placa usado en el boceto de encima es una TTGO T3 v1.3, pero sus pines corresponden con los de la v2.1_1.6
Flujograma (¡Simplificado!) ↩️
graph TD;
A[Encender] -->|1| B(Despertarse si se está en deep sleep)
B -->|2| C(Obtener la medida de la distancia y batería)
C -->|3| D(Mandar los bytes a TTN)
D -->|4| E(Temporizar la tasa de transmisión de datos)
E -->|5| F(Ir a deep sleep)
F -->|6| B
Archivos de código ↩️
En esta sección, se da una descripción breve a cómo está distribuido el código entre los archivos en medialablpwan/lorawaterlevelmonitoring/main/
, donde el código está disponible para flashear o editar:
main.ino
/* Definición de funciones globales Variables a ser almacenadas en la memoria RTC Funciones 'setup()' y 'loop()' */
sensor.ino
/* Funciones y variables necesarias para hacer funcionar el sensor */
ddc.ino
/* Funciones y variables para la implementación de la tasa dinámica de transferencia de datos */
sleep.ino
/* Funciones para activar el modo deep sleep de la ESP32 */
ttn.ino
/* Funciones de la librería LMIC */
configuration.h
/* Macros de los sensores y opciones ON/OFF */
credentials.h
/* Claves OTAA para la sincronización en TTN */
lmic_project_config.h
/* Banda de frecuencia LoRa y selector del chip de radio */
Un análisis más en profundidad viene dado en el propio código ya que cada función está explicada con comentarios.
Tip
Los archivos más importantes a editar son sensor.ino
, donde se puede implementar cualquier sensor, y configuration.h
, donde se declaran las macros de los periféricos
Caution
Se necesita código adicional para implementar I/O por I2C. Las funciones para hacerlo funcionar están en el proyecto original en TTGO-PAXCOUNTER-LoRa32-V2.1-TTN/main/main.ino
Librerías ↩️
-
Librería de placas de LilyGO (Copiar el link en la tab de
Preferences
y escogerTTGO LoRa32 OLED
comoBoard
en Arduino IDE): https://github.com/Xinyuan-LilyGO/LilyGo-LoRa-Series/blob/master/boards/t3_s3_v1_x.json -
LMIC (Copia los contenidos del archivo del proyecto
main/lmic_project_config.h
al archivo de la libreríaarduino-lmic/project_config/lmic_project_config.h
y desmarca la banda de frecuencia correspondiente a tu región. ¡El sketch siempre busca la configuración de región en la carpeta de la librería!): https://github.com/mcci-catena/arduino-lmic -
QuickMedianLib (Para obtener medidas de distancia más sólidas): https://github.com/luisllamasbinaburo/Arduino-QuickMedian
-
ESP sleep (Para reducir el consumo de la batería): https://github.com/pycom/pycom-esp-idf/blob/master/components/esp32/include/esp_sleep.h
Note
Otras librerías, como la librería SPI, son descargables de forma fácil desde Arduino IDE
Experimento de despliegue ↩️
Accede al panel de Grafana1 por medio de este código QR o el link de debajo:
Licencia ↩️
Este proyecto está licenciado bajo la GPL-3.0 license. Contiene código de rwanrooy/TTGO-PAXCOUNTER-LoRa32-V2.1-TTN
Contacto ↩️
Autores: Daniel Rodríguez Moya, Óscar Gijón, Ramón Rubio y el grupo de trabajo de MediaLab_ LPWAN
Footnotes
-
Instrucciones sobre como desplegar paneles de Grafana en el siguiente repo
medialablpwan/documentacion
. ↩