|
Como parte de mi Trabajo de Fin de Grado sobre drones y sensorización, en Medialab_ LPWAN, se me dio a conocer la tecnología de LoRaWAN. Con ella, entendí rápidamente el potencial de trabajar en un sensor de calidad de aire que montar en un drone de long range para ser usado como plataforma móvil y medir a kilómetros de distancia atmósferas hostiles en caso de accidente donde fuese peligroso enviar a un equipo de personas. Como resultado, nació el sensor on-board que os voy a mostrar como un nodo conectado por LoRa, sincronizable con The Things Network, que montarle al drone que construí sin que la cobertura fuese un factor limitante.
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 HelTec CubeCell HTCC-AB01 (Una placa de muy bajo consumo con LoRa implementado y que soporta recarga con panel solar y gestión de batería)
Cambios realizados para añadirle, además, un sensor CCS811 (Sensor de partículas volátiles)
Carcasa a medida para encapsular todos los componentes a un tamaño similar al de la batería del drone (Envase + Recipiente)
Ejemplo de ensamblaje:
Warning
Hacen falta seis tornillos M3 para fijar el ensamblado y dos bridas para ajustarlo al frame del drone
Lista de componentes ↩️
| Componente | Modelo |
|---|---|
| Placa | CubeCell HTCC-AB01 |
| Sensor atmosférico | BME280 |
| Sensor de partículas volátiles | CCS811 |
| Batería | LiPo 1S 300mAh |
| Carcasa | A medida (archivo inlcuido) |
Lista de conexiones ↩️
| BME280 | CCS811 | LiPo | CubeCell |
|---|---|---|---|
SDA |
SDA |
- | SDA |
SCL |
SCL |
- | SCL |
VIN |
- | - | VEXT |
GND |
GND |
- | GND |
| - | VCC |
- | VDD |
| - | WAK |
- | GPIO0 |
| - | - | Con Bat |
Con Bat |
En una protoboard se ve de la siguienta forma:
Note
Teniendo en cuenta que el programa hace uso del deep sleep de la CubeCell, el sensor BME280 se pone en sleep entre mensajes gracias a que el pin VEXT se puede gobernar (HIGH/LOW), mientras que el CCS811, por su uso de agentes químicos para obtener las medidas, se conecta al pin VDD estático (incluso en deep sleep aporta corriente), y es el pin GPIO0,conectado al pin WAK del sensor, el que emite una señal digital (HIGH/LOW) el que lo echa a sleep
Flujograma (¡Simplificado!) ↩️
graph TD;
A[Encender] -->|1| B(Conectarse a una red LoRaWAN)
B -->|2| C(Obtener las medidas de la batería y de los sensores BME y CCS)
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
En esta sección, se da una descripción breve a cómo está distribuido el código entre los archivos en medialablpwan/droneloraminiairqualitystation/main/src/, donde el código está disponible para flashear o editar:
main.cpp
/*
Algoritmo completo
*/credentials.h
/*
Claves OTAA para sincronizarse en TTN
*/Un análisis más en profundidad viene dado en el propio código ya que cada función está explicada con comentarios.
En esta sección se listan los ejemplos de código oficiales de HelTec usados para adaptar el proyecto original a los objetivos de éste y si han sido finalmente útiles:
LoRaWAN ¡Hola, Mundo!
LoRaWAN CCS811
LoRaWAN multisensor
LoRaWAN BMP280
CCS811 Test (CCS811.h)
CCS Example (Adafruit_CCS811.h)
BME280 Example
Experimento de implementación ↩️
El ensamblaje final ha quedado de la siguiente manera:
http://4f566df1fed52c6e7fd5f661f64ae3eb.balena-devices.com:8080/d/1bwgnfzgk/heltec-cubecell-bme280-ccs811?orgId=1&from=now-30m&to=now&refresh=30s
Licencia ↩️
Este proyecto está licenciado bajo la GPL-3.0 license. Contiene código de alexcorvis84/mini-lora-weatherstation
Contacto ↩️
Important
Responderemos amablemente a dudas y leeremos sugerencias:
Más información sobre nuestras actividades:
Autores: Daniel Rodríguez Moya, Iván Graña y el grupo de trabajo de MediaLab_ LPWAN
Instrucciones sobre como desplegar paneles de Grafana en el siguiente repo medialablpwan/documentacion. ↩