P26 Réseau de capteurs de pollution : Différence entre versions

De Wiki de Projets IMA
(Planning)
(Semaine 3 (du 22/01/2018 au 28/01/2018))
Ligne 241 : Ligne 241 :
  
 
===Semaine 3 (du 22/01/2018 au 28/01/2018)===
 
===Semaine 3 (du 22/01/2018 au 28/01/2018)===
 +
 +
=====Suite du travail sur le ''schematic'' de la carte=====
 +
Cette semaine, j'ai commencé par poursuivre le ''schematic'' de la carte électronique sous ''Altium''. J'ai pour cela téléchargé et consulté les différentes datasheets des composants. Cela m'a permis d'établir une liste de points/questions à aborder avec mes tuteurs, parmi lesquels l'obtention de références manquantes de composants, comment effectuer la connexion/déconnexions entre les différents éléments du schéma etc. J'ai aussi créé la partie ''PCB'' de la carte sous ''Altium'' pour commencer à entrer la configuration des règles à respecter et d'ores et déjà créer des plans de masse.
 +
 +
=====Suite du travail sur l'application Android=====
 +
J'ai également poursuivi le travail sur l'application Android pour la communication en Bluetooth. En effet, l'application a été créée à partir d'un projet d'exemple généré automatiquement, j'ai donc d'abord nettoyé un peu le code qui ne servirait pas ou plus.
 +
 +
La carte comportera plusieurs capteurs, il est donc important de pouvoir afficher et récupérer plusieurs ''caractéristiques'' du service de pollution. J'ai donc dans ce but ajouté une liste des éléments sur la page d'accueil et affiché les deux caractéristiques principales pour le moment, le niveau de particules et la batterie restante. Le bluetooth Low-Energy sous Android est fait de telle manière que seule une action de lecture ou d'écriture est possible à la fois. Cela signifie surtout que pour pouvoir obtenir les valeurs des deux caractéristiques citées précédemment, il faut mettre en place une file d'attente (ou ''queue'' en anglais) pour que les actions soient effectuées les unes à la suite des autres. Il existe différents types de files d'attentes sous Java ou Android, j'ai pour ma part employé une liste de type FIFO (''First In First Out''). La ''LinkedList'' de Java convient parfaitement dans ce cas-ci.
 +
 +
J'ai aussi travaillé sur les notifications. J'ai d'abord commencé par modifier le programme du module bluetooth, pour lui faire envoyer des mises à jour des valeurs des capteurs. Il est possible, sous Android, de souscrire à des notifications pour être tenu au courant des changements de valeurs des capteurs. Il est pour cela nécessaire d'indiquer que l'on souhaite recevoir les notifications et il faut donner une valeur à un ''descripteur'' particulier (les ''descripteurs'' permettent d'ajouter des configurations sur les caractéristiques). Je n'ai malheureusement pas encore réussi à observer de réception des notifications.
 +
 
===Semaine 4 (du 29/01/2018 au 04/02/2018)===
 
===Semaine 4 (du 29/01/2018 au 04/02/2018)===
 
===Semaine 5 (du 05/02/2018 au 11/02/2018)===
 
===Semaine 5 (du 05/02/2018 au 11/02/2018)===

Version du 31 janvier 2018 à 10:04

Etudiante : Marianne Butaye
Encadrants : Alexandre Boé, Xavier Redon & Thomas Vantroys

Présentation générale du projet

Actuellement, seuls deux capteurs de pollution sont présents sur la métropole, un à Lille et l'autre à Fives. Une carte de pollution de la zone est générée à partir de ces deux capteurs et d'un algorithme tenant en compte les déplacements des nuages. L'objectif serait de pouvoir avoir une carte de la pollution en temps réel dont les données seraient obtenues à partir d'objets connectés. Chaque personne se déplaçant avec un de ces objets contribuerait à fournir des informations pour compléter la carte de pollution.

L'objet connecté prendrait la forme d'une carte portative, qui pourrait être attachée sur un brassard ou un vélo. La carte portative enverrait des relevés par bluetooth à un téléphone Android, qui lui-même les enverrait ensuite par la 3G à une base de données. Il sera également possible d'effectuer ces transmissions par une puce LORA, au choix de l'utilisateur.

La carte électronique sera composée au minimum d'un capteur de particules, d'un micro-contrôleur, d'une puce bluetooth et d'une puce LORA. On pourrait éventuellement rajouter d'autres capteurs comme un capteur de pression atmosphérique, un accéléromètre etc.

Cahier des charges

Tâches à réaliser

Ce projet se découpe en différentes parties :

  • Mini état de l'art
  • Réalisation de la carte électronique
    • Programmation
    • Réalisation du montage & tests
    • Design sur ordinateur
    • Gravure & soudage
  • Application Android
  • Base de données

Matériel fourni

  • 1 boîte en plastique pour stocker le matériel
  • 1 câble USB/mini USB
  • 1 carte STM32F401RE nucleo
  • 1 shield Bluetooth nucleo (BLE IDB04A1)
  • 1 kit d'évaluation ST microelectronics. La carte possède une puce Bluetooth et un STM32 ainsi que des capteurs divers. Une application Android est disponible sur le site de ST microelectronics.
  • 1 téléphone Android LG G4C
  • 2 capteurs de particules
  • 1 board pour passer du câble à des PINs
  • Des convertisseurs 3.3V -> 5V
  • 1 SensorTile Module (STM32 + bluetooth + capteurs + antenne)
  • 1 module GPS programmable DS-GPM
  • des câbles MM et FF

Planning

Répartition du travail effectué
Tâche Sous-tâche Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5 Semaine 6 Semaine 7
Réunion avec les encadrants x x
État de l'art x
Carte électronique Programmation du micro-contrôleur x x
Réalisation du montage & tests
Design sur ordinateur x x x
Gravure & soudage
Application Android x x
Base de données

Avancement du projet

Semaine 1 (du 08/01/2018 au 14/01/2018)

Je commence par rencontrer mes encadrants de projet afin d'établir le contexte et les objectifs de celui-ci, de récupérer le matériel et le travail déjà commencé auparavant.

La première chose à faire est de réaliser un mini état de l'art, pour mieux s'approprier le sujet.

État de l'art

Les équipements pour mesurer la pollution étant trop chers et donc réservés aux experts, les micro-capteurs de pollution ont fait leur apparition. Ceux-ci sont plus légers, portables, peu chers, faciles à utiliser et connectés. Les capteurs de particules fonctionnent par détection optique par diode laser. On aspire d'abord l'air par un ventilateur, qui circule ensuite dans une chambre de détection. La chambre permet de séparer les particules pour ne garder que les plus fines (les plus dangereuses). Le flux d'air chargé de particules traverse ensuite le signal optique émis par une diode laser dont le faisceau est diffracté par une lentille. Un photodétecteur placé face au faisceau émis recueille les baisses de luminosité liées au passage des particules. Il compte leur nombre par plages de tailles. À partir du débit de l'air, on peut remonter à une concentration en nombre puis en masse.

On repère plusieurs types de capteurs de pollution : les stations connectées et les capteurs nomades.

Dans les stations connectées, on retrouve les produits Footbot et Koto Air. La première mesure tous les niveaux de pollution, tandis que la seconde n'en mesure pas autant mais relève aussi l'humidité, la température, la luminosité et le niveau de bruit.

Ce projet est de la catégorie des capteurs nomades. On trouve dans cette catégorie le capteur français Flow de la société PlumeLabs, l'Atmo tube, Clarity, un capteur chinois et le Tzoa. Ces capteurs relèvent la plupart différentes pollutions, telles que les particules fines, le monoxyde d'azote, le monoxyde de carbone, l'ozone et les composés organiques volatiles (provenant de la pollution intérieure : moquettes, peintures, colles, plantes etc.). Certains embarquent aussi d'autres capteurs pour par exemple mesurer la température, l'humidité etc. Ces capteurs nomades ont pour principe de relever et traiter les données par le capteur, puis ensuite de les transmettre à une application mobile. Certains ont même vocation à les transmettre à une base de données selon le principe du "crowdsourcing", où les données récoltées sont partagées entre tous les utilisateurs; c'est le cas des capteurs Flow et Clarity.

Enfin, on trouve des capteurs nomades avec une forme un peu plus originale, comme c'est le cas des pulls réalisés par Nikolas Beltel, designer du groupe Aerochromics; ces pulls changent de couleur en fonction du taux de pollution pour des pollutions telles que les particules fines, le monoxyde de carbone ou encore la radioactivité.

Connexion bluetooth entre la carte STM32 et le téléphone

J'ai ensuite abordé en premier la connexion entre la carte STM32 et le téléphone, n'ayant pas encore eu une partie du matériel (le capteur de particules entre autres).

La carte STM32 est programmable grâce à un IDE disponible sur le site de MBed. Cet IDE est disponible en deux versions : en ligne ou à télécharger. J'ai décidé d'utiliser la version en ligne, celle-ci étant facile d'accès. Il suffit de créer un programme en ligne et de le compiler. Le fichier binaire ainsi créé est ensuite automatiquement téléchargé par le navigateur, et un drag&drop sur la carte STM32 (branchée par USB à l'ordinateur) permet de la reprogrammer.

La carte nécessite l'ajout d'un shield bluetooth pour la communication. On utilise ici le modèle BLE IDB04A1, un modèle aujourd'hui obsolète, ce qui a posé quelques problèmes pour la connexion à la carte. Le site de MBed a en effet beaucoup d'exemples et librairies disponibles en ligne, mais les projets BLE_HeartRate_IDB0XA1 et BLE_HeartRate_IDB04A1 ne fonctionnent pas avec ce modèle. Cette version-ci par contre fonctionne en partie. J'ai ainsi pu établir une connexion partielle, en suivant ces instructions puis celles-ci pour la partie Android.

Il s'est avéré que même l'exemple fonctionnant partiellement posait problème lors de l'initialisation du module Bluetooth. Un déboggage manuel a permis de déterminer exactement d'où venait l'erreur : le problème se produit lors de l'initialisation de la communication SPI entre les deux objets. Le problème vient en fait de l'utilisation de la LED : il n'est pas possible de l'utiliser en même temps que le shield Bluetooth. Il faut, pour résoudre ce problème, connecter deux PINs ensemble (le 11 et le 31 du côté CN10 de la carte) par un jumper.

STM32 et shield bluetooth après connexion des PINS 11 et 31

Une fois le problème résolu, on peut voir s'afficher la configuration du module au démarrage de celui-ci sur un terminal connecté en série à la carte.

Une application Android est disponible pour tester les exemples. J'ai ainsi téléchargé l'application STM BLE Profiles sur le Play store. Le dispositif est reconnu et je peux accéder aux informations programmées dans la carte et transmises par Bluetooth.

Un service de l'application Android STM BLE Profiles transmis par la carte

L'intallation d'Android Studio étant particulièrement longue, je n'ai pas encore pu tester la connexion par Bluetooth avec une application Android se connectant aux services que j'ai créé dans le programme de la carte.

Semaine 2 (du 15/01/2018 au 21/01/2018)

Programmation du capteur de particules

Le capteur de particules est le SEN0177. On peut le connecter à un micro-contrôleur par 4 fils : VCC (5V), GND, TX et RX. Ce capteur est livré avec une carte adaptateur pour passer du connecteur à des PINs traditionnels. Il fonctionne selon une trame préétablie que l'on peut récupérer sur le site du constructeur (voir la bibliographie). On y trouve également un programme d'exemple pour Arduino que je me suis chargée de transcrire pour le faire fonctionner sur l'environnement de développement MBed.

Connexion du capteur de particules SEN0177 à la carte STM32

Une chose importante est de ne pas se tromper sur le branchement des fils : le RX de l'adaptateur doit être connecté au TX de la STM32 et son TX au RX de la STM32. Il a aussi fallu faire attention à ne pas mettre trop de printf dans le code du programme : en effet, ceux-ci ralentissent le programme et on peut ainsi ne récupérer aucune donnée par la connexion série même si le programme est correct. Enfin, une dernière difficulté a été de trouver les bons noms des PINs à utiliser dans le programme; il est ainsi nécessaire de n'utiliser que les noms des PINs en vert ou en bleu du Pinout.

Pour récupérer les valeurs des particules fines de type 1.0, 2.5 et 10, il faut commencer par détecter si on a bien le début de la trame en liaison série, c'est-à-dire 0x42 suivi de 0x4D. On pourra ensuite trouver les valeurs dans les données reçues.

Dans les bâtiments de l'école, j'obtiens les valeurs de pollution suivantes, qui sont assez faibles.

PM1.0: 2 ug/m3
PM2.5: 5 ug/m3
PM10: 6 ug/m3
PM1.0: 3 ug/m3 PM2.5: 5 ug/m3 PM10: 5 ug/m3
PM1.0: 3 ug/m3 PM2.5: 5 ug/m3 PM10: 5 ug/m3
PM1.0: 3 ug/m3 PM2.5: 5 ug/m3 PM10: 5 ug/m3
PM1.0: 4 ug/m3 PM2.5: 6 ug/m3 PM10: 6 ug/m3

Le capteur contient un ventilateur qui aspire les particules et une sortie d'air, il ne faut donc pas les obstruer pour obtenir de bonnes valeurs.

Programmation du module GPS

Je ne peux pas programmer le véritable module GPS pour le moment car celui-ci est trop petit. C'est pour cela que j'ai effectué la programmation du module en utilisant un autre module à taille plus grande en attendant de pouvoir réaliser la carte. Le module obtenu est un DS-GPM. Celui-ci fonctionne sous une tension allant de 7 à 16V, je vais donc le connecter à une pile 9V.

Les GPS sont en général connectés par des liaisons classiques : séries avec RX et TX, SPI ou I2C. Ce module fonctionne en I2C, on va donc brancher 4 PINs : VCC(7->16V), GND, SDA et SDL.

Connexion du module GPS DS-GPM à la carte STM32

De même, le site du constructeur permet le téléchargement d'un programme d'exemple Arduino et de la Datasheet. Les valeurs du GPS sont facilement récupérables : les données sont contenues dans 112 registres. Il suffit de récupérer ceux souhaités. L'interface I2C sur MBed permet également de récupérer d'un seul coup la totalité des registres.

Ce capteur ne fonctionne pas en intérieur. J'ai réussi à lire les registres mais étant en intérieur, je n'ai pas pu obtenir de valeurs exploitables.

Création du schematic de la carte sous Altium Designer

J'ai reçu la liste du matériel disponible entre temps, ainsi qu'une librairie pour Altium contenant certains composants déjà réalisés. J'ai ainsi commencé par faire ceux qui manquaient puis par réaliser un début de schéma.

Pour le composant Sensor Tile (ou ultra low power DSP STM32L476JGY6), qui contient à la fois un micro-contrôleur STM32, un module bluetooth et des capteurs divers, j'ai dû consulter le peu de datasheet existant puis me référer à la datasheet du composant STM32L476.

Pins et fonctions du composant Sensor Tile
Connexion par Bluetooth entre STM32 + module bluetooth et téléphone Android

J'ai également poursuivi le travail sur la connexion par Bluetooth. Maintenant que la carte est capable de transmettre des données, j'ai créé une application Android capable de communiquer en BLE (Bluetooth Low Energy). J'ai d'abord commencé par télécharger des applications existantes sur le Play Store pour essayer de détecter la combinaison carte + module bluetooth.

J'ai notamment découvert par expérimentations que le nom de l'application ne doit pas dépasser 14 caractères ni ne contenir d'espaces, ou que les dernières versions de librairies mbed ne permettaient pas au module BLE de fonctionner correctement. Il est donc important de ne pas mettre à jour les librairies lors de l'importation du projet, et de ne pas oublier de connecter le jumper (voir semaine 1).

Une fois l'appareil Pollution détecté dans la liste des appareils connectés en Bluetooth, il est possible de le sélectionner et d'afficher la liste des services qu'il publie. En effet, chaque appareil bluetooth publie des services. Un service regroupe des caractéristiques qui vont bien ensemble. Ces caractéristiques peuvent ensuite être de type lecture, écriture ou les deux. Pour les caractéristiques que l'on peut lire, on peut ainsi obtenir la ou les valeurs associées. Par exemple, pour un service Service Pollution, on pourrait avoir une caractéristique Niveau de pollution ainsi qu'une autre Niveau d'humidité.

Après de nombreux essais, j'ai enfin réussi à détecter le service de pollution envoyé par la carte. C'est probablement grâce à l'ajout de l'adresse 0xFFFF dans la liste de diffusion des services, ce qui semble avoir mis à jour le cache . La carte peut en effet annoncer les services qu'elle contient. Cela n'est pas obligatoire pour que le bluetooth fonctionne mais permet de donner une bonne indication du fonctionnement de l'application. L'adresse 0xFFFF est réservée au développement.

J'ai enfin créé ma propre application Android par la suite pour récupérer correctement la valeur de la pollution. Celle-ci est par défaut considérée comme de l'hexadécimal, or nous souhaitons obtenir un entier. J'ai aussi ajouté le service de niveau de batterie (utile pour un objet connecté qui fonctionnera possiblement sur piles ou autres et dont on voudra vérifier la durée de vie) et le service d'information sur l'appareil (ici, la carte électronique).

Semaine 3 (du 22/01/2018 au 28/01/2018)

Suite du travail sur le schematic de la carte

Cette semaine, j'ai commencé par poursuivre le schematic de la carte électronique sous Altium. J'ai pour cela téléchargé et consulté les différentes datasheets des composants. Cela m'a permis d'établir une liste de points/questions à aborder avec mes tuteurs, parmi lesquels l'obtention de références manquantes de composants, comment effectuer la connexion/déconnexions entre les différents éléments du schéma etc. J'ai aussi créé la partie PCB de la carte sous Altium pour commencer à entrer la configuration des règles à respecter et d'ores et déjà créer des plans de masse.

Suite du travail sur l'application Android

J'ai également poursuivi le travail sur l'application Android pour la communication en Bluetooth. En effet, l'application a été créée à partir d'un projet d'exemple généré automatiquement, j'ai donc d'abord nettoyé un peu le code qui ne servirait pas ou plus.

La carte comportera plusieurs capteurs, il est donc important de pouvoir afficher et récupérer plusieurs caractéristiques du service de pollution. J'ai donc dans ce but ajouté une liste des éléments sur la page d'accueil et affiché les deux caractéristiques principales pour le moment, le niveau de particules et la batterie restante. Le bluetooth Low-Energy sous Android est fait de telle manière que seule une action de lecture ou d'écriture est possible à la fois. Cela signifie surtout que pour pouvoir obtenir les valeurs des deux caractéristiques citées précédemment, il faut mettre en place une file d'attente (ou queue en anglais) pour que les actions soient effectuées les unes à la suite des autres. Il existe différents types de files d'attentes sous Java ou Android, j'ai pour ma part employé une liste de type FIFO (First In First Out). La LinkedList de Java convient parfaitement dans ce cas-ci.

J'ai aussi travaillé sur les notifications. J'ai d'abord commencé par modifier le programme du module bluetooth, pour lui faire envoyer des mises à jour des valeurs des capteurs. Il est possible, sous Android, de souscrire à des notifications pour être tenu au courant des changements de valeurs des capteurs. Il est pour cela nécessaire d'indiquer que l'on souhaite recevoir les notifications et il faut donner une valeur à un descripteur particulier (les descripteurs permettent d'ajouter des configurations sur les caractéristiques). Je n'ai malheureusement pas encore réussi à observer de réception des notifications.

Semaine 4 (du 29/01/2018 au 04/02/2018)

Semaine 5 (du 05/02/2018 au 11/02/2018)

Semaine 6 (du 12/02/2018 au 18/02/2018)

Semaine 7 (du 19/02/2018 au 25/02/2018)

Bibliographie

Annexes