Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Mesure des niveaux de CO2 alias le multiplicateur de somnolence

Composants et fournitures

Andium Anduino WiFi
× 1
Arduino Due
× 1
capteur de co2
× 1

Applications et services en ligne

Arduino IDE
Adafruit IO

À propos de ce projet

Motivation

Avez-vous déjà eu du mal à tenir une réunion l'après-midi ? Vous ne pouvez pas arrêter de bâiller ? Dormir pendant vos 3 heures de cours ? Non, je ne vous vends pas de supplément énergétique. Vous n'avez probablement pas assez dormi la nuit dernière, pas la plupart d'entre nous. Mais votre somnolence n'est peut-être pas entièrement de votre faute ! Une mauvaise ventilation et des niveaux élevés de dioxyde de carbone pourraient vous rendre somnolent !

En utilisant ce capteur de CO2 NDIR, vous pouvez mesurer avec précision les niveaux de CO2 et lire les valeurs à l'aide d'une simple interface série UART. Les capteurs de CO2 conventionnels consommaient beaucoup d'énergie et prenaient du temps pour réchauffer la lampe avant d'être amorcés pour effectuer une lecture. Maintenant, en utilisant un détecteur LED et infrarouge, vous pouvez mesurer avec précision les gaz à l'aide de ce capteur de 3,3 V qui tire moins de 1,5 mA en moyenne. Il utilise la dispersion optique et quelques autres sorcelleries, consultez la fiche technique de Cozir pour plus de détails, c'est impressionnant.

Mise en route

Alors, de quoi ai-je besoin pour commencer à mesurer le « facteur de sommeil » de ma cabine de bureau ?

  • Arduino Due ou Zero
  • Bouclier AnduinoWiFi
  • Capteur de CO2 Cozir
  • Quelques cavaliers pour connecter et alimenter le capteur.

Les connexions pour celui-ci sont simples, le capteur a 10 broches mais vous n'aurez besoin d'en câbler que 4.

En utilisant le Due, connectez 3.3v à 3V3, GND à Ground, Rx(DIO19) à Tx et Tx(DIO18) à Rx. Assurez-vous d'avoir "croisé" les fils UART et rappelez-vous que vous ne pouvez pas utiliser Tx(DIO1) et Rx(DIO0) à moins que vous ne souhaitiez renoncer à utiliser le terme série pour surveiller vos lectures. J'ai utilisé Serial1 pour le capteur bien que vous puissiez utiliser l'un des trois UART restants.

** Si vous souhaitez contourner l'Arduino pour l'instant et tester l'envoi de commandes directement au capteur, ouvrez simplement le mastic ou votre terme série préféré et connectez-vous à 9600 bauds, 8 bits, sans parité, 1 bit d'arrêt. Vous devrez peut-être activer l'envoi de '/r/n' à chaque soumission d'ascii.**

***Ce capteur est 3,3 v TTL donc assurez-vous d'utiliser un décaleur logique si les communications proviennent d'une source 5v***

Étalonnage du capteur

Il existe plusieurs façons de calibrer le capteur de CO2. L'un des meilleurs moyens consiste à saturer le capteur dans un gaz connu (azote) qui ne contient pas de dioxyde de carbone. Cela générera une lecture de zéro connue. Si vous n'avez pas d'azote autour, vous pouvez également calibrer assez précisément en utilisant de l'air frais. Alors prends tes lunettes de soleil, on part en excursion.

Lorsque vous êtes à l'extérieur, vous souhaiterez exécuter l'exemple de croquis ci-dessous et décommenter

 calibreFreshAir();  

dans la routine Setup(). Cela envoie la commande 'G' via série au capteur demandant...

étalonnage! Maintenant, ce n'est pas parfait, car je ne sais pas exactement quelles sont les conditions actuelles de concentration de CO2 au 14ème étage ici à New York (peut-être un peu plus élevé ici que la moyenne "terrestre" à Hawaï). Mais étant donné que nos seuils de détection physique des différences dans l'environnement se situent dans l'ordre de 1 000 ppm, je pense que nous sommes assez sûrs d'utiliser cette lecture d'air frais de 450 ppm comme point d'étalonnage pour mesurer nos salles de conférence et nos salles de classe.

char buffer[20] ={0}; entier c =0; void setup() { Serial.begin(9600); while(!Série){}; Serial1.begin(9600); while(!Série){}; Serial.println("Commencer à lire les niveaux de CO2"); //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //calibrerAirFresh(); } boucle vide() { délai (10000); c =Requête("Z"); Serial.print("CO2 :");Serial.println(c); Serial.println(""); } int Request(char* s) { buffer[0] ='\0'; entier idx =0; Commande(s) ; retard (250); while(Serial1.available()) { buffer[idx++] =Serial1.read(); } tampon[idx] ='\0'; uint16_t rv =0 ; switch(buffer[1]) { case 'T' :rv =atoi(&buffer[5]); if (tampon[4] ==1) rv +=1000; Pause; par défaut :rv =atoi(&buffer[2]); Pause; } retourne rv; } void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibreFreshAir() { return Request("G"); } void setOperatingMode(uint8_t mode) { sprintf(buffer, "K %u", mode); Commande (tampon); }  

Notez également rapidement les deux instructions #define en haut du croquis. Lorsque vous déballerez votre capteur pour la première fois, vous devrez peut-être le configurer à l'aide de setOperatingMode(). Cette esquisse est conçue pour fonctionner en mode interrogation. Si vous avez réussi l'étalonnage et que vous lisez les niveaux de CO2 sur le terminal, vous êtes prêt à passer à la publication dans le cloud. Connectons-nous à Adafruit IO et commençons à visualiser les données.

Publication des métriques de CO2 dans le cloud

Si vous ne vous êtes pas encore connecté à Adafruit IO à l'aide d'anduinoWiFi, consultez cet article de projet qui va commencer. Il couvre tous les détails que je vais passer sous silence ici. Voici le croquis pour commencer à publier vos niveaux de CO2 chaque minute.

#include  #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // Paramètres WiFi #define WLAN_SSID "YOUR_SSID" #define WLAN_PASS "YOUR_PASSWD" // Adafruit IO #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "YOUR_AIO_USERNAME" #define AIO_KEY "YOUR_AIO_KEY" Client WiFiClient ; Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); /****************************** Flux ****************** *********************/ // Configuration du flux pour le co2 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/co2"); /*Créer une instance de l'AnduinoLCD */ AnduinoLCD LCD =AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, 13); statique int co2 =0; int statique co2Prev =0 ; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char buffer[20] ={0}; void setup() { Serial.begin(115200); retard (3000); Serial1.begin(9600); //Connectez-vous au WiFi et à Adafruit.IO connectToWiFi(); connectToAdafruit(); //Initialisation de l'écran LCD LCD.begin(); LCDinit(); //Étalonnage du CO2 et configuration initiale //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //calibrerAirFresh(); } void loop() { // ping adafruit io plusieurs fois pour s'assurer que nous restons connectés if(! mqtt.ping(3)) { // se reconnecter à adafruit io if(! mqtt.connected()) connect(); } // Récupérer la lecture co2 actuelle co2 =Request("Z"); //convertit int temp en tableau de caractères char b[20]; Chaîne str; str=Chaîne(co2) ; for(int i=0; i=0) mqtt.disconnect(); Serial.println(F("Nouvelle tentative de connexion...")); retard (5000); } Serial.println(F("Adafruit IO connecté !")); } void displayCo2(int co2, int co2Prev) { //efface la valeur périmée LCD.setTextColor(ST7735_BLACK); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor (40,60); LCD.setTextSize(3); LCD.print(co2Prev); LCD.setTextSize(1); LCD.print("ppm"); //Imprimer la nouvelle valeur LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor (40,60); LCD.setTextSize(3); LCD.print(co2); LCD.setTextSize(1); LCD.print("ppm"); } void connectToWiFi() { // Se connecter au point d'accès WiFi. retard(10) ; Serial.print(F("Connexion à ")); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() !=WL_CONNECTED) { delay(500); Serial.print(F(".")); } Serial.println(F("WiFi connecté !")); } void connectToAdafruit() { // se connecte à adafruit io connect(); } void LCDinit() { LCD.setBacklight(ON); LCD.fillScreen(ST7735_BLACK); //efface l'écran LCD.showBanner(); //charge Andium Banner LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(0,40); LCD.print("CO2:"); } uint16_t Request(char* s) { buffer[0] ='\0'; entier idx =0; //envoyer la demande de commande 'Z' pour la ou les commandes CO2 ; retard (250); while(Serial1.available()) { buffer[idx++] =Serial1.read(); } tampon[idx] ='\0'; uint16_t rv =0 ; rv =atoi(&buffer[2]); retour rv; } void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibreFreshAir() { return Request("G"); } void setOperatingMode(uint8_t mode) { sprintf(buffer, "K %u", mode); Commande (tampon); }  

C'est ça!

Cette chose est super sensible, vous pouvez presque suivre les niveaux d'occupation de la pièce en fonction de la concentration de CO2 même dans une pièce bien ventilée. Il est temps de prouver à votre professeur que ce n'est pas « diff eq » qui vous déprime, c'est la mauvaise ventilation ! Il est temps de déplacer la classe à la plage !

Code

Anduino
Une bibliothèque Arduino pour le bouclier Andium (Anduino). Transformez votre Arduino en AndiumNode.https://github.com/andium/Anduino

Processus de fabrication

  1. Sensirion :capteur de CO2 miniaturisé
  2. L'intégration des données du capteur avec le microprocesseur Raspberry Pi
  3. Piratage du Lego EV3 :créez votre propre capteur d'objets « yeux »
  4. Comment connecter un capteur à ultrasons Lego Mindstorms NXT au Raspberry Pi
  5. Capteur de portée à ultrasons HC-SR04 sur le Raspberry Pi
  6. Utilisation du capteur radar pulsé A111 avec un Raspberry Pi
  7. Amélioration des niveaux de service client en rayon
  8. L'alimentation sans fil RF libère l'omniprésence des réseaux de capteurs
  9. 5 Ws du capteur RapidPlex SARS-CoV-2