Depuis la pandémie Covid, la qualité de l'air a été classée comme un enjeu prioritaire. En effet, dans une salle mal ventilée, une concentration de dioxyde de carbone dépassant 1000 PPM peut provoquer des symptômes tels que la fatigue et le manque d'attention. Surtout en hiver, la température extérieure est plus basse et les gens ouvrent rarement les fenêtres pour la ventilation. En plus, nous devons porter des masques dans les salles. Dans cet environnement fermé, la concentration de CO2 sera plus élevée. Une concentration excessive de dioxyde de carbone affecte notre apprentissage et notre santé globale, de sorte que la détection de la concentration de dioxyde de carbone est également particulièrement importante.
A travers de ce contexte, le projet CapCO2 est établi. Ce projet consiste à réaliser un prototype d’acquisition de la concentration de CO2 dans une salle de cours afin d'avertir les gens si la concentration de CO2 est passée de 1000 PPM. Il s’agit d’un projet d’élève ingénieur d’année 5 dans le domaine IoT se déroulant sur le premier semestre de l’année scolaire 2021-2022.
Le système à réaliser doit être autonome, basse consommation et fonctionner en temps réel à l’aide des capteurs. Après l’acquisition des données, le système doit les afficher sur un écran et aussi les transmettre via un réseau sans fil LoRaWAN vers un serveur distant afin de les visualiser sur l’interface web Node-Red.
A partir de ce système, les étudiants et les professeurs peuvent observer l’évolution de l’air au sein de la salle de cours. Ils peuvent connaître la concentration de CO2, la température, l’humidité de la salle. D’après ces données, ils peuvent aérer la salle de temps en temps.
Architecture globaleAvant de commencer à coder, nous décidons d’abord notre architecture globale du système.
Voici l’architecture globale de notre système:
Comme cette architecture montre, notre système permet de:
- mesurer la température de la salle
- mesurer l’humidité de la salle
- mesurer la concentration de CO2 de la salle
- afficher les données sur un écran OLED
- avertir les gens à aérer la salle lorsque la concentration dépasse de 1000 PPM à l’aide des LEDs
- visualiser les données sur une interface web Node-Red via les modes de transmission en LoRa et MQTT.
Pour réussir à réaliser le projet, il faut avoir des connaissances suivant:
- Programmation de microcontrôleurs (Langage C) dans IDE Arduino
- Savoir lire une fiche technique et en extraire les données les plus importantes
- Savoir utiliser la plateforme The Things Network et node-red
- Savoir choisir des capteurs
A travers de cette architecture globale, nous avons réalisé deux prototypes qui sont basés sur les différents microcontrôleurs.
Prototype 1
Le premier prototype que nous avons réalisé est basé sur le module ESP32. Ce prototype à beaucoup évolué entre le premier et la version finale. Pour bien reproduire ce prototype, il faut installer les librairies dans Arduino IDE: DHT, Wire, Wifi, Lora, PubSubClient, Adafruit_Sensor, Adafruit_GFX et Adafruit_SSD1306. Il faut aussi bien choisir Board en DOIT ESP32 DEVKIT V1.
Au début, le prototype était simplement composé du module ESP32, du capteur CO2 et un écran OLED. Il nous permet de tester le fonctionnement du capteur et l'écran en comparant la valeur affiche sur l'écran et le terminal du PC.
Après cela, nous avons programmé le protocole de transmission MQTT en utilisant le Wi-Fi afin de transférer et visualiser les données à l'interface Web Node-Red.
Une fois cette étape validée, nous avons décidé d'ajouter un capteur DHT11 qui permet de mesurer la température et l'humidité. Et nous vérifions leur fonctionnement en comparant la valeur affiche sur écran et l'interface web pour assurer l'envoie et la réception des données.
Ensuite, nous ajoutons le module LoRa dans notre prototype. Et nous ajoutons une partie récepteur qui sont composés par un module ESP32 et un module Lora. Puis, nous envoyons les données en mode point to point (P2P). Et la partie récepteur va utiliser MQTT pour envoyer les données reçues vers l'interface web Node-Red.
Prototype 2
Le deuxième prototype que nous avons réalisé est basé sur le module The Things Networks Uno (TTN Uno) qui intègre un module Microchip LoRaWAN.
Pour ce prototype, il faut installer les librairies dans Arduino IDE: TheThingsNetwork, Wire, DHT, Adafruit_GFX et Adafruit_SSD1306. Et il faut choisir le board en Arduino Leonardo (pas Arduino Uno).
Comme le premier prototype, tout d'abord nous avons programmé le capteur CO2 et l'écran OLED sur TTN Uno. Après la vérification de fonctionnement, nous configurons The things gateway pour recevoir les données envoyé vers en utilisant LoRaWAN. Et nous configurons le cloud The Things Network afin de le lier avec le gateway en utilisant WiFi.
Après ces configurations dans la console de TTN, on peut visualiser les live data qui comportent les données sous format de json. Pour les configurations en détailles, on écrit dans la partie software.
A l’aide de plugin intégré MQTT, on peut transformer les données dans le node-red et générer un dashboard.
Ensuite, nous ajoutons la capteur DHT11 pour mesurer la température et l'humidité. Et nous les vérifions en comparant les valeurs sur l'écran et l'interface web Node-Red.
Les prototypages sous labdec nous ont permis de tester le fonctionnement global (initialisation, lecture, envoie message via LoRa, visualisation sur web Node-red). A l'issue de cette phase de prototypage, le schéma électrique de chaque prototype a été réalisé afin de préparer l’étape de conception du PCB.
HardwareAvant de réaliser le schéma PCB, nous devons réaliser d’abord un schéma électronique. Dans ce schéma, nous créons les composants que nous allons utiliser dans le système, puis nous relions ces composants avec le microcontrôleur selon le montage de labdec.
Prototype 1
Au lieu de souder directement les capteurs au PCB, nous utilisons des connecteurs Header pour faciliter la connexion et la maintenance de capteurs et des autres composantes. Au côté gauche de ESP32, nous connectons les leds, le capteur d’humidité et de la température DHT11 et le capteur de la concentration de CO2. Au-dessus de nucléo, nous avons mis un connecteur pour la carte WISOL à relier l’antenne transmission Sigfox. Du côté droit, ce sont le module LoRa et l'écran OLED. Tous les capteurs et le module LoRa sont alimentés par la carte ESP32 avec 3.3 Volte, sauf le capteur de la concentration de CO2 est alimenté par 5 Volte avec le pin Vin d’ESP32.
Voici la connexion précise de chaque capteur:
- Led verte :
- pin court -> GND
- pin long -> D32
- Led rouge :
- pin court -> GND
- pin long -> D33
- OLED :
- GND -> GND
- VCC -> 3V3
- SCL -> D22
- SDA -> D21
- DHT :
- GND -> GND
- VCC -> 3V3
- IO -> D25
- Capteur CO2 :
- GND -> GND
- VCC -> Vin
- Data -> D35
- LoRa :
- DIO0 -> D34
- VDD -> D34
- GND -> GND
- ANT -> un fil électrique de longueur 8.6cm pour la fréquence 868 MHz
- MISO -> D19
- MOSI -> D23
- SCL -> D18
- NSS -> D9
- RESET -> D14
Après, nous avons mis à jour le PCB depuis le schéma électronique, et nous relions les composants sans les croiser.
Cette organisation du placement des composantes permet d’optimiser la taille de notre produit avec une dimension de 55.2 mm x 92.8 mm.
Par ailleurs, en tant que le module LoRa n’a pas de connecteur à brancher, nous avons aussi réalisé un PCB et souder les connecteurs Header de ce module, cela nous permet de maintenir, brancher, débrancher facilement.
Or la taille du connecteur de LoRa est plus petite que la taille du connecteur header de 2.54 mm, nous avons ajouté donc les vias (ce qui relient le circuit vert et le circuit rouge ). Le circuit vert et le circuit rouge ne sont pas de la même largeur, les vias permettent donc d’éviter le débord de de circuit dans le cas si la largeur de circuit est unique.
Voici les produits final du prototype 1:
Prototype 2
Identiquement pour le prototype 2, le capteur de la concentration de CO2 doit être alimenté par le pin 5V de la carte TTN Uno, le pin Vin des autres capteurs doit être relié avec le pin 3.3V de la carte.
Voici la connexion précise de chaque capteur:
- Led verte :
- pin court -> GND
- pin long -> 12
- Led rouge :
- pin court -> GND
- pin long -> 13
- OLED :
- GND -> GND
- VCC -> 3V3
- SCL -> SCL
- SDA -> SDA
- DHT :
- GND -> GND
- VCC -> 3V3
- IO -> 6
- Capteur CO2 :
- GND -> GND
- VCC -> 5V
- Data -> A0
Après, nous avons mis à jour le PCB depuis le schéma électronique, et nous relions les composants sans les croiser.
Or la carte TTN Uno ne peut pas être soudé directement sur le PCB, nous n’avons donc tracé que les pins nécessaires sur le PCB.
Nous avons soudé les fils électriques au lieu des connecteurs Header pour la connexion entre le PCB et TTN Uno. Par contre, nous pourrions aussi réduire l’écart entre les connecteurs pour TTN Uno, puis souder les connecteurs mâles à connecter le PCB avec TTN Uno.
L’alimentation de notre produit final est par le secteur, cela permet d’éviter le changement de batterie. Le capteur est collé sur le côté extérieur de la boîte pour mesurer les valeurs plus précises. Pareil pour le capteur de CO2, le trou du même côté est pour n'évite pas l’infrarouge du capteur. Les leds sont mises sur la couverture de la boite pour bien signaler le niveau de la concentration de CO2.
SoftwareNous détaillons ici la partie software pour les deux prototypes. Pour réaliser la partie software de notre système, nous devons configurer le gateway, le cloud TTN et l'interface web Node-Red afin d'établir un moyen de transmission des données.
The Things Networketlegateway
Pour associer le cloud The Things Network avec The Things gateway, tout d’abord, nous devons nous inscrire sur le site TTN et ajouter le gateway en cliquant sur “add gateway”.
Après, nous entrons un gateway ID (supérieur à 6 caractères) et choisissons le plan de fréquence ci-dessous:
Puis nous cliquons sur creat gateway afin de finaliser l'inscription.
Dans overview de gateway, nous cliquons sur API keys puis nous cliquons sur add API key et choisissons le droit ci-dessous afin de générer sa propre clé de API. Ensuite nous enregistrons et copions cette clé générée.
Après nous avons appuyé 5 secondes sur le RESET de gateway pour initialiser le gateway, puis nous le connectons sur l’adresse 192.168.84.1 pour associer les informations à enregistrer dans le gateway. Et nous entrons dans le gateway ID que nous avons créé et connectons avec un WiFi. Pour la partie Account server nous tapons https://eu1.cloud.thethings.network et la clé générée.
L'application
Pour recevoir les données d'un capteur, il faut créer une application sur TTN. Donc tout d'abord nous entrons dans Application, puis nous cliquons add application et définissons l' ID du capteur.
Ensuite dans end devices, nous cliquons add end device et remplirons comme la figure ci-dessous:
Après nous copions AppEUI et AppKey générés dans le code pour finir l'enregistrement de board TTN Uno.
Et nous devons aussi définir le formateur du message. Donc nous entrons dans payload formatters, et définissons le format comme la figure ci-dessous:
Comme nous utilisons le protocole MQTT pour transmettre les données vers l'interface web Node-Red, nous entrons donc dans l'onglet intégration, puis MQTT. Ensuite nous copions Public address et username. Et nous générons une clé api.
Interface Web Node-Red
Pour utiliser le node-red, nous devons taper dans le terminal de notre PC les commandes suivants:
- sudo apt install build-essential
- bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
- sudo apt update -y && sudo apt install mosquitto mosquitto-clients -y
- node-red
Ensuite, pour ouvrir l'interface sur notre PC, nous devons taper dans le navigateur: http://<ip>:1880
Dans l’interface de node-red, nous cliquons sur l'icône en haut à droite, puis cliquons sur Manage palette, et nous tapons node-red-dashboard pour l'installer.
Ensuite nous importons le fichier flows.json.
Après l'importe du fichier, nous cliquons sur l'icône # (MQTT) pour remplir le server par public address copié et dans security, nous tapons username et la clé api générée.
Puis nous démarrons en cliquant Deploy, pour visualiser le dashboard, nous modifions l’adresse ip par http://<ip>:1880/ui
En même temps, dans la partie code CO2_P2P_Receiver nous devons modifier ssid et password par le SSID et le mot de passe de notre propre WiFi, et remplace mqtt_server par notre propre adresse IP.
Une fois que le protocole de transmission est configuré, le PCB est réalisé et les composants sont reliés sur le PCB, nous commençons à démarrer notre prototype en branchant la prise. Pour savoir si la transmission des messages a bien fonctionné, nous pouvons observer dans le cloud TTN et vérifier que nous avons bien reçu les messages.
En plus, nous observons aussi dans l'interface Node-Red toutes les données que nous avons obtenues dans le messages reçus par TTN. Dans cette interface, nous pouvons voir la concentration de CO2, l'humidité et la température de la salle.
A cause de l'épidémie, les matériaux arrivent assez tard, donc nous avons moins de temps pour faire ce projet. Pendant le projet, nous avons rencontré des difficultés sur les nouvelles connaissances: le protocole LoRaWAN, la nouvelle plateforme The Things Network et node-red, mais nous apprécions le projet et nous avons fait des progrès au sein du projet. Et à la fin, nous avons bien établi deux prototypes qui permettent de surveiller la concentration de CO2 de la salle de cours et les visualiser sur l'interface web Node-Red via LoRaWAN et MQTT, basé sur ESP32 et TNN Uno.
Comments
Please log in or sign up to comment.