IMA3/IMA4 2020/2022 P11 : Différence entre versions
(→Calendrier prévisionnel) |
(→Réalisation du Projet) |
||
Ligne 120 : | Ligne 120 : | ||
=Réalisation du Projet= | =Réalisation du Projet= | ||
+ | |||
+ | == Projet S7== | ||
+ | |||
+ | ===Récupération et transmission des données des capteurs=== | ||
+ | Nous nous sommes d’abord penché sur une transmission des données via Lora entre deux cartes, et non à la balise LoRa de Polytech. L’objectif de notre travail était que le capteur DHT11 recueille les valeurs de température et d’humidité, les fournisse à la carte émettrice, qui transmettra les données via LoRa. La carte réceptrice recevrait les données, et les transmettrait via la liaison série au PC, grâce au câble d’alimentation USB. | ||
+ | Le code implémenté sur les cartes a été développé sur l’IDE STM32Cube. | ||
+ | |||
+ | Le véritable enjeu de ce semestre était la familiarisation avec l’environnement de développement et les cartes. Pour cela, nous nous sommes concentrés sur la compréhension d’un exemple de code existant de "Ping Pong" entre deux cartes via LoRa utilisant un HAL (hardware abstraction layer). | ||
+ | |||
+ | Nous avons modifié le code afin de pouvoir envoyer une trame personnalisée, puis nous avons réalisé une partie pour la carte émettrice, et une partie pour la carte réceptrice, qui envoie ensuite la trame sur la liaison série. | ||
+ | Il a donc fallu définir un format de données avant la transmission. Pour cela, nous avons choisi d’utiliser le format suivant, stockée dans une chaîne de caractères: | ||
+ | line = {T:xx.x,H:xx.x} sizeof(line) = 15 octets | ||
+ | |||
+ | Cette trame ne contenait pour le moment que des données statiques définies préalablement. Nous avons donc ensuite commencé à nous occuper de l’implémentation d’un code permettant la lecture du capteur DHT11. Pour cela, nous avons utilisé la bibliothèque STM32 dédiée (un autre HAL). Un problème de taille s’est mesuré à nous : faire en sorte qu’il n’y ait pas de conflit entre les configuration du capteur, du shield LoRa, et de la liaison série. | ||
+ | Même s’il n’utilise électriquement pas tous les PINS du micro-contrôleur, le shield Lora occupe physiquement toutes les broches de la carte. Nous avons donc commencé par récupérer les données du capteur sans le Shield et les transmettre en série. Cela a fonctionné mais nous avons rencontré 2 problèmes : | ||
+ | les données capteurs (T° et Humidité) ne présentaient aucune précision au-delà de la partie entière (précision au dixième selon le constructeur) | ||
+ | impossible de récupérer les données sur une autre broche analogique autre que A1, malgré les modifications en conséquence du code (définition d’un autre PIN pour la variable DHT_PIN) | ||
+ | |||
+ | Après étude du schematic du Shield Mbed, nous avons remarqué que le shield proposait l’accès à deux broches analogiques de la carte A4 et A5. | ||
+ | |||
=Documents Rendus= | =Documents Rendus= |
Version du 5 mai 2022 à 21:53
Sommaire
Présentation générale
Parmi les sujets disponibles, nous avons choisi le projet "Mise en place d'un réseau de capteurs dans les salles de Polytech", qui consiste en la conception d'un réseau de capteurs de température et de qualité de l'air communicants via le réseau LoRa. Notre groupe est constitué de quatre élèves de la filière Systèmes Embarqués: Yanis Lacroix, Florian Vallée, Haitam Blgrim et Abdelillah El Khotri. Lors de la première partie en troisième année, le groupe était aussi aidé par Fidele-M'bouke. Il est encadré par Mr.Thomas Vantroys.
Contexte
La qualité de l'air est une information importante à avoir, surtout étant donné les conditions sanitaires actuelles. La loi impose une contrôle de la qualité de l'air intérieur dans les établissements primaires et secondaires, mais aucune loi n'impose le contrôle dans les établissements d'études supérieures (du moins pas d'ici 2023).
Les seuils réglementaires ne sont pas toujours respectés dans les salles de classe, cela peut nuire à la santé et à l'efficacité des élèves ; il est important d'avoir une vue globale des données, pour pouvoir réagir en conséquence.
Enfin, avoir un historique des données permettrait d'être en mesure de réguler certains problèmes de flux dans l'école.
Description
Le réseau de capteur est un ensemble de capteurs individuels, qui communiquent tous avec une balise LoRa présente dans l'école, qui s'occupe de transmettre les données à un serveur applicatif via IP. Une fois les données recueillies et stockées, elles seront affichées sur une page web.
Objectifs
Offrir la possibilité de contrôler, superviser des données physiques, principalement sur la qualité de l’air, récupérées en temps réel dans les salles de classe de Polytech dans le but d’alerter les utilisateurs de l’école.
Analyse du projet
Premier prototype
Lors de notre 3ème année, nous avions simplifié le cahier des charges. Notre projet est constitué de cinq blocs différents :
- Recueillir et traiter les données
- Transmettre les données
- Traduire les données
- Stocker les données
- Afficher les données
Pour recueillir les données, nous avons utilisé une carte Arduino, servant à recueillir les informations fournies par le capteur de température SHT15. A l'aide de la bibliothèque spécifique au capteur, nous avons pu, à l'aide de deux fonctions, obtenir les valeurs de température et d'humidité.
Pour transmettre les données, nous avons dû nous limiter à la liaison série, principalement pour des raisons matérielles et de temps. Le paramétrage était plutôt simple, en précisant le baudrate sur le code Arduino et en utilisant la fonction "Serial", les données sont envoyées sur le port série.
Pour traduire les données, nous avons utilisé un code Python qui lit sur le port série, ne prend que les bits correspondants aux données de température et d'humidité, et le range dans un tableau. On a ajouté dans ce tableau la date d'acquisition, avant de recopier le tableau dans un fichier CSV qui a servi dans la partie suivante.
Pour stocker les données, nous avons donc utilisé un fichier CSV, qui contenait les valeurs de température, d'humidité et de date d'acquisition.
Pour afficher les données, nous avons choisi d'utiliser du php servant à afficher les valeurs dans le fichier CSV.
Plusieurs problèmes sont à relever dans cette première version du projet : - La carte STM32 était imposée dans le cahier des charges et non au choix de l'équipe de projet; - La liaison série n'est pas le moyen de communication imposé, il s'agit du LoRa - L'utilisation d'une base de données SQL est plus adaptée qu'un fichier CSV
Ainsi, l'objectif du second semestre de projet était de résoudre ces problèmes.
Préparation du projet
Maintenant que le premier prototype a été décrit, nous allons mettre à jour le cahier des charges et rappeler les différents "blocs" du projet.
Cahier des charges
Le projet se découpe en 5 grandes parties :
- Recueillir et traiter les données
- Transmettre les données
- Traduire les données
- Stocker les données
- Afficher les données
Voyons ce que chaque bloc doit être capable de réaliser.
1.Recueillir et traiter les données
Pour recueillir les données, nous avons utilisé deux capteurs de température et d'humidité différents. Pour pouvoir acquérir les informations, les capteurs doivent être reliés à un microcontrôleur, ici la STM32 imposée.
2.Transmettre les données
Pour la transmission, un shield LoRa est connecté à la carte STM32. Le LoRa est un moyen de communication
Les données sont envoyées du module LoRa de la carte vers une balise LoRa (installée au préalable par un ancien groupe de projet), qui elle même communique au serveur applicatif via Ethernet.
3.Traduire les données
Une fois les données reçues sur le serveur applicatif, elles sont traduites par un code Python. En effet, il faut repérer et extraire les données issues de la trame Ethernet, puis extraire les données de la trame LoRa encapsulée. Le code Python, grâce à une bibliothèque, peut lire sur le port Ethernet et ainsi extraire uniquement les informations pertinentes. Le code Python sert aussi à faire le lien avec la partie suivante, qui est le stockage de données : il permet de créer une base de données, et de stocker les valeurs obtenues dedans.
4.Stocker les données
Pour stocker les données, le plus pertinent était de prendre une base de données SQL, et ce pour plusieurs raisons :
- La possibilité de faire des requêtes, ce qui facilite l'affichage
- SQL apporte une couche de sécurité minimale, contrairement à un fichier CSV
Cette base de donnée est créée à partir du fichier Python grâce à la bibliothèque xxxx.
5.Afficher les données
L'affichage se fait sur une page html contenant du code php, qui permet de lire les données dans la base SQL et de les afficher dans des tableaux, des graphiques, et permet aussi d'afficher des messages d'erreur ou des valeurs en couleurs pour signaler tout non respect des normes indiquées.
Choix techniques : matériel et logiciel
Partie S7
Acquisition :
- 2x Carte STM32L152RE
- Capteur de température et d'humidité
- Une Breadboard
- Un PC
Partie S8
- Pack STMicroelectronics Lora LF band sensor and Gateway contenant 2 éléments principaux :
- une carte de développement STM32 Nucleo-L073RZ couplée à une Expansion Board de chez RisingHF composée de 4 capteurs intégrés (humidité, température, pression, magnétomètre) et d’un module d’émission Lora
- une carte STM32 Nucleo-F746ZG couplée à une Gateway Expansion Board Lora (une balise Lora)
Calendrier prévisionnel
Projet S8
Réalisation du Projet
Projet S7
Récupération et transmission des données des capteurs
Nous nous sommes d’abord penché sur une transmission des données via Lora entre deux cartes, et non à la balise LoRa de Polytech. L’objectif de notre travail était que le capteur DHT11 recueille les valeurs de température et d’humidité, les fournisse à la carte émettrice, qui transmettra les données via LoRa. La carte réceptrice recevrait les données, et les transmettrait via la liaison série au PC, grâce au câble d’alimentation USB. Le code implémenté sur les cartes a été développé sur l’IDE STM32Cube.
Le véritable enjeu de ce semestre était la familiarisation avec l’environnement de développement et les cartes. Pour cela, nous nous sommes concentrés sur la compréhension d’un exemple de code existant de "Ping Pong" entre deux cartes via LoRa utilisant un HAL (hardware abstraction layer).
Nous avons modifié le code afin de pouvoir envoyer une trame personnalisée, puis nous avons réalisé une partie pour la carte émettrice, et une partie pour la carte réceptrice, qui envoie ensuite la trame sur la liaison série. Il a donc fallu définir un format de données avant la transmission. Pour cela, nous avons choisi d’utiliser le format suivant, stockée dans une chaîne de caractères: line = {T:xx.x,H:xx.x} sizeof(line) = 15 octets
Cette trame ne contenait pour le moment que des données statiques définies préalablement. Nous avons donc ensuite commencé à nous occuper de l’implémentation d’un code permettant la lecture du capteur DHT11. Pour cela, nous avons utilisé la bibliothèque STM32 dédiée (un autre HAL). Un problème de taille s’est mesuré à nous : faire en sorte qu’il n’y ait pas de conflit entre les configuration du capteur, du shield LoRa, et de la liaison série. Même s’il n’utilise électriquement pas tous les PINS du micro-contrôleur, le shield Lora occupe physiquement toutes les broches de la carte. Nous avons donc commencé par récupérer les données du capteur sans le Shield et les transmettre en série. Cela a fonctionné mais nous avons rencontré 2 problèmes : les données capteurs (T° et Humidité) ne présentaient aucune précision au-delà de la partie entière (précision au dixième selon le constructeur) impossible de récupérer les données sur une autre broche analogique autre que A1, malgré les modifications en conséquence du code (définition d’un autre PIN pour la variable DHT_PIN)
Après étude du schematic du Shield Mbed, nous avons remarqué que le shield proposait l’accès à deux broches analogiques de la carte A4 et A5.