Capteur Qualité D'air 3

Capteur de qualité d'air Grove 101020078 Capteur d'humidité et de t° Grove 101020019Capteur de CO2 Grove 101020067  Capteur de gaz Grove 101020088

 

Liste des donnée séparées par des ,

  1. 0. durée depuis le démarage de la captation (h:mn:s)
    1. Qualité d'air ( 0 polution trés élevée , 1 polution élevée , 2 polution faible , 3 air sans poluants : monoxyde de carbone, alcool, acétone, diluant, formaldéhyde )
    2. Qualité d'air (0-700)
    3. Temperature (°c)
    4. Humiditée (%)
    5. CO2 : dioxyde de carbone (1 – 2000 ppm)
    6. CO : monoxide de carbone (1 – 1000 ppm)
    7. NH3 : Ammoniaque (1 – 500ppm)
    8. NO2 : dioxyde d'azote (0.05 – 10ppm)
    9. C3H8 : Propane (>1000ppm)
    10. C4H10 isobutane (>1000ppm)
    11. CH4 : Méthane (>1000ppm)
    12. H2 : Dihydrogène (1 – 1000 ppm)
    13. C2H50H : Éthanol (10 – 500ppm)

Enregistrer

Enregistrer

Enregistrer

Enregistrer

Enregistrer

Code source

  1.  // Capteurs
  2.  // temps , Temperature , humidité , Qualité d'Air , CO2 , NH3 , CO , NO2 , C3H8, C4H10, CH4 , H2 , C2H5OH
  3.  // Enregistrement sur memoire interne
  4.  #define DEBUG 0
  5.  
  6.  #include <LFlash.h>
  7.  #include <LBattery.h>
  8.  #include <Wire.h>
  9.  #include <SeeedOLED.h>
  10.  #include "MutichannelGasSensor.h"
  11.  #include"AirQualityLinkitOne.h"
  12.  
  13.  AirQuality airqualitysensor;
  14.  int32_t lastSlope = 4;
  15.  
  16.  //Capteur de co2
  17.  const unsigned char cmd_get_sensor[] = { 0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 };
  18.  unsigned char dataRevice[9];
  19.  int CO2PPM;
  20.  
  21.  int temperature;
  22.  int Airquality;
  23.  int AQ;
  24.  String Time;
  25.  
  26.  //Capteur d'humidité et temperature
  27.  #include "DHT.h"
  28.  #define DHTPIN 2 // what pin we're connected to
  29.  #define DHTTYPE DHT22 // DHT 22 (AM2302)
  30.  DHT dht(DHTPIN, DHTTYPE);
  31.  float tDHT;
  32.  float hDHT;
  33.  
  34.  
  35.  void setup() {
  36.   Wire.begin();
  37.   SeeedOled.init(); //initialze SEEED OLED display
  38.   SeeedOled.clearDisplay(); //clear the screen and set start position to top left corner
  39.   SeeedOled.setNormalDisplay(); //Set display to normal mode (i.e non-inverse mode)
  40.   SeeedOled.setPageMode(); //Set addressing mode to Page Mode
  41.   SeeedOled.setTextXY(0, 0); //Set the cursor to Xth Page, Yth Column
  42.   SeeedOled.putString("Capteur polution"); //Print the String
  43.   SeeedOled.setTextXY(1, 14); //Set the cursor to Xth Page, Yth Column
  44.   SeeedOled.putString("V3"); //Print the String
  45.   SeeedOled.setTextXY(2, 5); //Set the cursor to Xth Page, Yth Column
  46.   SeeedOled.putString("(ppm)"); //Print the String
  47.   SeeedOled.setTextXY(5, 0); //Set the cursor to Xth Page, Yth Column
  48.   SeeedOled.putString("Initialisation.."); //Print the String
  49.   if (LBattery.isCharging()){ info("En Charge...", -1, 6, 0);}
  50.  
  51.   Serial1.begin(9600); //démarre la communication avec le capteur de CO2
  52.  
  53.   dht.begin(); // initialise le capteur d'humidité
  54.   airqualitysensor.init(A0); // initialise le capteur qualité d'air
  55.   Serial.print("Premiere valeur de qualité d'air : ");
  56.   Serial.println(airqualitysensor.initValue);
  57.  
  58.   //Ouvre le port serie
  59.   Serial.begin(9600);
  60.  
  61.   Serial.print("Initialisation de la memoire Flash...");
  62.   LFlash.begin();
  63.   Serial.println("memoire flash initialisée.");
  64.  
  65.   gas.begin(0x04);//the default I2C address of the slave is 0x04
  66.   gas.powerOn();
  67.   Serial.print("Firmware Version = ");
  68.   Serial.println(gas.getVersion());
  69.   Serial.print(".....");
  70.   SeeedOled.clearDisplay(); //Print the String
  71.  }
  72.  
  73.  void loop() {
  74.   float c;
  75.   String dataString = ""; // Déclaration d'une chaine de caractere pour stoquer les données:
  76.  
  77.   int ret = dht.readHT(&tDHT, &hDHT); // lecture de la temperature de l'humidité
  78.   //tDHT = tDHT - 3; //correction de temperature
  79.   Airquality = airqualitysensor.slope();
  80.   AQ = airqualitysensor.current();
  81.  
  82.   if (dataRecieve() && hDHT > 0 ) //Si on a recus des donnée du capteur de CO2 et d'humidité
  83.   {
  84.   int m = millis();
  85.   Time = String(m / (1000 * 60 * 60)) + ":" + String((m % (1000 * 60 * 60)) / (1000 * 60)) + ":" + String(((m % (1000 * 60 * 60)) % (1000 * 60)) / 1000);
  86.   dataString += Time;
  87.   info(Time, -1, 0, 0);
  88.   if (LBattery.isCharging()){ info("<", LBattery.level(), 0, 9);}else{ info("%", LBattery.level(), 0, 9);}
  89.   dataString += ",";
  90.   dataString += String(Airquality);
  91.   dataString += ",";
  92.   dataString += String(AQ);
  93.   info("AQ:", AQ, 1, 0);
  94.   dataString += ",";
  95.   dataString += String(tDHT);
  96.   info("T:", tDHT, 2, 0);
  97.   dataString += ",";
  98.   dataString += String(hDHT);
  99.   info("H:", hDHT, 2, 8);
  100.   dataString += ",";
  101.   dataString += String(CO2PPM);
  102.   info("CO2:", CO2PPM, 3, 0);
  103.   c = gas.measure_NH3();
  104.   dataString += ",";
  105.   dataString += String(c);
  106.   info("NH3:", c, 4, 0);
  107.   c = gas.measure_CO();
  108.   dataString += ",";
  109.   dataString += String(c);
  110.   info("CO:", c, 5, 0);
  111.   c = gas.measure_NO2();
  112.   dataString += ",";
  113.   dataString += String(c);
  114.   info("NO2:", c, 6, 0);
  115.   c = gas.measure_C3H8();
  116.   dataString += ",";
  117.   dataString += String(c);
  118.   c = gas.measure_C4H10();
  119.   dataString += ",";
  120.   dataString += String(c);
  121.   c = gas.measure_CH4();
  122.   dataString += ",";
  123.   dataString += String(c);
  124.   c = gas.measure_H2();
  125.   dataString += ",";
  126.   dataString += String(c);
  127.   c = gas.measure_C2H5OH();
  128.   dataString += ",";
  129.   dataString += String(c);
  130.  
  131.   Serial.println(dataString);
  132.  
  133.   LFile dataFile = LFlash.open("qualite_air_v3.txt", FILE_WRITE); // ouverture du fichier CO2
  134.   // Si le fichier est ouvert on ecris les données
  135.   if (dataFile) {
  136.   dataFile.println(dataString);
  137.   dataFile.close(); //Fermeture du fichier
  138.   } else {
  139.   Serial.println("erreur d'ouverture du fichier CO2.txt");
  140.   }
  141.   }
  142.   delay(10000);
  143.  }
  144.  
  145.  bool dataRecieve(void)
  146.  {
  147.   byte data[9];
  148.   int i = 0;
  149.   //transmt command data
  150.   for(i=0; i<sizeof(cmd_get_sensor); i++) { Serial1.write(cmd_get_sensor[i]); }
  151.   delay(10);
  152.   //begin reveiceing data
  153.   if(Serial1.available()) { while(Serial1.available()) { for(int i=0;i<9; i++) { data[i] = Serial1.read(); } } }
  154.   if((i != 9) || (1 + (0xFF ^ (byte)(data[1] + data[2] + data[3] + data[4] + data[5] + data[6] + data[7]))) != data[8]) { return false; }
  155.   CO2PPM = (int)data[2] * 256 + (int)data[3];
  156.   temperature = (int)data[4] - 40;
  157.   return true;
  158.  }
  159.  
  160.  
  161.  void info(String data, float val, int Row, int Column)
  162.  {
  163.   char _data[data.length()+1];
  164.   data.toCharArray(_data, data.length()+1);
  165.   SeeedOled.setTextXY(Row, Column); //Set the cursor to Xth Page, Yth Column
  166.   SeeedOled.putString(_data); //Print the String
  167.   if (val >= 0) {
  168.   SeeedOled.setTextXY(Row, Column + data.length());
  169.   SeeedOled.putFloat(val);
  170.   }
  171.  }