Ballon météo connecté par LoRa

De Ensiwiki
Aller à : navigation, rechercher


Project schedule.png
Titre du projet Ballon météo connecté par LoRa
Cadre Projets Réseaux Mobiles et Avancés

Équipe Pierre BEJEAN,Roy Paulin Justo NGUETSOP KENFACK DJOUAKA, Rosetta PAGLIUCA, Leonardo SEVERI
Encadrants Franck Rousseau


Objectif

Le but du projet est de recueillir et visualiser en temps réel des données météorologiques mesurées par un ballon-sonde. Un ballon-sonde est un dispositif radio largement utilisé dans le domaine de la météorologie afin de pouvoir faire divers relevés des paramètres relatif à l'état réel de l'athmosphère. Les observations jouent un rôle essentiel dans la prévision du temps puisqu'elles octroyent la possibilité de recalibrer les modéles de prévisions en y entrant un état présent. Toutefois, dans le cas des radiosondages, les dispositifs sont coûteux et, du fait d'une émission radio, peu sécurisés. Notre travail consiste à amorcer une mise en réseau des données afin de pouvoir avancer vers une sécurisation des données et plus particuliérement de la position du dispositif afin d'éviter les vols de capteurs pouvant coûter relativement cher. Le travail s'oriente surtout sur la partie charge utile transportée par le ballon (capteurs) plus que sur son lancement. Le but est de configurer correctement le dispositif afin de pouvoir recueillir en temps réel les données de température et d'humidité mesurée puis de les envoyer par des protocoles réseaux jusqu'à une application faisant des tracés en temps réel également.

Composants

Configuration hardware avec STM32L073RZ, sx1272mb2das et DHT11
  • STM32L073RZ Nucleo
  • LoRa Shield (sx1272mb2das)
  • Capteur de température et Capteur d’humidité DHT11
  • Alimentation 5V
  • Ordinateur (pour la mise en place)


Architecture

ArchitectureBallon.png

Dans un réseau où la couche physique est basée sur LoRa, le protocole de communication et l’architecture s’appellent LoRaWan. Dans ce réseau, chaque noeud est associé à n'importe quel gateway, mais les données associées à un noeud sont transmises à de nombreux gateways par la suite envoyées sur un serveur cloud. Dans cette situation, nous avons utilisé The Thing Network. Ainsi toutes les communications sont effectuées par un outil dynamique d’adresse (DevAddr) 32 bits desquels 7 bits sont fixés et 25 assignés aux clés de sécurités entre le système et TTN (OTTA Activation). De plus, dans ce protocole il est possible d’utiliser une option: le Adaptive Data Rate, servant à optimiser les taux de données. Cependant, nous l’avons désactivée car il n’est recommandé que pour les systèmes non-static, donc nous l'avons placé sur DR_5.

LoRa payload

Field size Description
1 bit DHT Data Validity (1 = true)
15 bits Frame ID
2 bytes DHT Temperature
2 bytes DHT Humidity
2 bytes onBoard Temperature

Tutoriels

Matériels

  • Faire un compte sur The Things Network, puis y créer une application et ajouter un système. Gardez à l’esprit l’EUI de l’application qui a été créé (on le trouve dans les options).
    Commissioning.h exemple
    TheThingsNetwork Device Configuration
  • Télécharger notre projet: code
  • Compiler et flasher le code source du firmware
    • Modifier Projects/Multi/Applications/LoRa/End_Node/inc/Commissioning.h:
      • Paramétrer la définition de LORAWAN_APPLICATION_EUI conformément à la valeur générée par TTN.
      • Créer également une LORAWAN_APPLICATION_KEY en éditant celle déjà présente dans le dossier pour la remplacer par celle présente dans la section des paramètres de TTN.
      • Pour des raisons de simplicité, il est possible de faire de même pour la LORAWAN_DEVICE_EUI en changeant la valeur de STATIC_DEVICE_EUI à 1.Toutefois, si vous êtes familiers avec le langage de programmation C, il est fortement recommandé de garder le device eui comme non statique. Lire la valeur au cours de l’exécution en utilisant un débogueur et stopper à lora.c:579 affichant la valeur du tableau DevEui (par exemple en utilisant p/x *(uint64_t *)DevEui mais tout en inversant l’ordre des octects s’affichant). Il n’y a pas de maniére triviale de procéder car chaque composantes possède son propre eui.
    • Faire cd Projects/Multi/Applications/LoRa/End_Node/gcc/STM32L073RZ-Nucleo et utiliser la commande make. Cela nécessite les binaires “make” et “arm-none-eabi-*”. Pour un système Debian, le deuxième se trouve dans le package gcc-arm-none-eabi.


JP5 configuration pour alimentation par USB
  • Connecter la carte STM32L073RZ (dans sa configuration par défaut) à l’ordinateur via un câble USB. L’ordinateur va reconnaître la présence d’un appareil de stockage. Copier le fichier .bin généré à l’intérieur de cet appareil. Une fois la copie effectuée, l’appareil va redémarrer. Lorsque le flash est terminé il est possible de débrancher le câble USB.


  • Assembler le hardware en changeant le power jumper (JP5) de U5V à E5V et brancher l'alimentation externe en suivant les schémas fournis par ST.
Alimentation externe: le fil violet sera connecté à un source 5V tandis que le fil vert à la masse
Nucleopin.jpeg


  • Ajouter le Lora Shield sx1272mb2das et le capteur DHT (nous avons utilisé un DHT 11 mais il ne donne pas une précision à la décimale, vous pouvez utiliser un DHT22 à la place) en connectant la broche + à la +3.3V de la carte (identifié par VDD). La broche - a la broche du sol et la broche Data à la PC12.

DHT11DHT11 connection

  • Dans l'idée d'envoyer le dispositif dans un cas réel, il faudra connecter le dispositif à un ballon d'hélium et vérifier par le calcul la vitesse d'ascension et l'altitude théorique d'éclatement du ballon.

Application

  • Télécharger et installer l’application pour visualiser les données (le répertoire App): en lançant en tant que super utilisateur le script INSTALL.sh, lorsque nécessaire, insérer dans Application ID celle que vous avez choisi à l’inscription de TheThingsNetwork et copiez la Application key en bas de la page principale de votre application.
Appkey.png
  • Démarrer le client en éxécutant startloraapp.sh. Remarquez que vous pouvez voir vos anciennes données même si vous ne faîtes pas cette opération (vous n’avez uniquement besoin que le serveur web apache soit fonctionnel, mais vous ne pourrez pas récupérer les packets du dispositif), puis rendez vous sur [[1]] pour visualiser les données.
  • Exécuter uninstallloraapp.sh afin de supprimer l’application et les données.

Gestion du projet

Difficultés

La première idée que nous avions était plus complexe: nous voulions créer un ballon météorologique pour récupérer l'humidité et la température en altitude mais également la localisation du ballon grâce à un système GPS nous permettant de tracer des données météorologiques utiles et diverses. Pour ce faire nous avions choisi d'utiliser une carte STM32L152RE et une I-NUCLEO-LRWAN1, mais par la suite nous avons découvert une incompatibilité des deux puisque pour la carte il n'y avait pas de pilotes UART. Nous avons alors changé pour une STM32L073RZ avec une carte sx1272mb2das et réussi à les faire fonctionner.

Par la suite, nous avons dû faire face à un autre problème: le projet du GPS téléchargé depuis le site officiel STM ne fonctionne pas. Après l’avoir modifié, nous sommes parvenus à rendre le module fonctionnel tout en modifiant également son comportement afin de renvoyer des données autrement que par le port COM, mais malheureusement, en dépit de nombreuses tentatives, nous ne sommes pas parvenus à faire fonctionner LoRa et le GPS ensemble probablement du fait des configurations hardware trop différentes. Ainsi, nous avons décidé de supprimer la fonctionnalité de récupérer les coordonnées du ballon, mais on peut toujours obtenir une position approximative à l’aide d’une triangulation de la position des gateways en utilisant la valeur rssi ou le timestamp. Il existe également des projets modifiés et réduits pour le GPS possédant une fonction SystemClock_config compatible avec le projet LoRa End_Node.

Perspectives d'avenir: améliorations

  • Trouver une solution pour l'incompatibilité entre le GPS et LoRa. Ici, nous avons créé un backend et un frontend très flexible. En ce qui concerne la partie backend, il sera nécessaire de changer la fonction parse_payload, dans le but d'intégrer de nouvelles données reçues par The Things Network
  • Utiliser une DHT22 afin de récupérer les températures et humidités dans le but d'avoir une précision décimale (bien que notre code dans DHT11_by_us.c soit compatible également avec cette version de l'appareil)

Ressources