Capteur qualité d'air V4

Capteur de qualité d'air Grove

Capteur d'humidité et de T° Grove

Détecteur de poussière Grove

Capteur de qualité d'air Grove 101020078 Capteur d'humidité et de t° Grove 101020019  Détecteur de poussière Grove 101020012

 

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 ( 3 polution trés élevée , 2 polution élevée , 1 polution faible , 0 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. Ratio Particules
    6. concentration Particules (pcs/litres ou pcs/0.01cf)

 

Précautions

     Veuillez garder le capteur Verticalement.
     Un temps de préchauffage de 3 min est requis lors de la première utilisation.
     (rectangle rouge marqué) sont utilisés uniquement pour le réglage d'usine. Veuillez NE PAS modifier la configuration par défaut.

 

Enregistrer

Enregistrer

Code source

  1.  // Capteurs
  2.  // temps , Qualité d'Air , Temperature , humidité , Ratio particule , Concentration Particules
  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"AirQualityLinkitOne.h"
  11.  
  12.  AirQuality airqualitysensor;
  13.  int32_t lastSlope = 4;
  14.  
  15.  int temperature;
  16.  int Airquality;
  17.  int AQ;
  18.  String Time;
  19.  
  20.  //Capteur d'humidité et temperature
  21.  #include "DHT.h"
  22.  #define DHTPIN 2 // what pin we're connected to
  23.  #define DHTTYPE DHT22 // DHT 22 (AM2302)
  24.  DHT dht(DHTPIN, DHTTYPE);
  25.  float tDHT;
  26.  float hDHT;
  27.  
  28.  //Grove - Dust Sensor Demo v1.0
  29.  int Dustpin = 8;
  30.  unsigned long duration;
  31.  unsigned long starttime;
  32.  unsigned long sampletime_ms = 30000;//sampe 30s ;
  33.  unsigned long lowpulseoccupancy = 0;
  34.  float ratio = 0;
  35.  float concentration = 0;
  36.  
  37.  void setup() {
  38.   Wire.begin();
  39.   SeeedOled.init(); //initialze SEEED OLED display
  40.   SeeedOled.clearDisplay(); //clear the screen and set start position to top left corner
  41.   SeeedOled.setNormalDisplay(); //Set display to normal mode (i.e non-inverse mode)
  42.   SeeedOled.setPageMode(); //Set addressing mode to Page Mode
  43.   SeeedOled.setTextXY(0, 0); //Set the cursor to Xth Page, Yth Column
  44.   SeeedOled.putString("Capteur polution"); //Print the String
  45.   SeeedOled.setTextXY(1, 14); //Set the cursor to Xth Page, Yth Column
  46.   SeeedOled.putString("V4"); //Print the String
  47.   SeeedOled.setTextXY(2, 5); //Set the cursor to Xth Page, Yth Column
  48.   SeeedOled.putString("(ppm)"); //Print the String
  49.   SeeedOled.setTextXY(5, 0); //Set the cursor to Xth Page, Yth Column
  50.   SeeedOled.putString("Initialisation.."); //Print the String
  51.   if (LBattery.isCharging()) {
  52.   info("En Charge...", -1, 7, 3);
  53.   }
  54.  
  55.   dht.begin(); // initialise le capteur d'humidité
  56.   airqualitysensor.init(A0); // initialise le capteur qualité d'air
  57.   Serial.print("Premiere valeur de qualité d'air : ");
  58.   Serial.println(airqualitysensor.initValue);
  59.   //Ouvre le port serie
  60.   Serial.begin(9600);
  61.   Serial.print("Initialisation de la memoire Flash...");
  62.   LFlash.begin();
  63.   Serial.println("memoire flash initialisée.");
  64.   SeeedOled.clearDisplay(); //Print the String
  65.  
  66.   pinMode(Dustpin, INPUT);
  67.   starttime = millis();//get the current time;
  68.  }
  69.  
  70.  void loop() {
  71.   String dataString = ""; // Déclaration d'une chaine de caractere pour stoquer les données:
  72.  
  73.   duration = pulseIn(Dustpin, LOW);
  74.   lowpulseoccupancy = lowpulseoccupancy + duration;
  75.  
  76.   if ((millis() - starttime) > sampletime_ms) //if the sampel time == 30s
  77.   {
  78.   ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // Integer percentage 0=>100
  79.   concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // using spec sheet curve
  80.   lowpulseoccupancy = 0;
  81.   starttime = millis();
  82.   }
  83.  
  84.   int ret = dht.readHT(&tDHT, &hDHT); // lecture de la temperature de l'humidité
  85.   Airquality = airqualitysensor.slope();
  86.   AQ = airqualitysensor.current();
  87.  
  88.   if (hDHT > 0 && lowpulseoccupancy == 0 ) //Si on a recus des donnée du capteur de CO2 et d'humidité
  89.   {
  90.   int m = millis();
  91.   Time = String(m / (1000 * 60 * 60)) + ":" + String((m % (1000 * 60 * 60)) / (1000 * 60)) + ":" + String(((m % (1000 * 60 * 60)) % (1000 * 60)) / 1000);
  92.   dataString += Time;
  93.   info(Time, -1, 0, 0);
  94.   if (LBattery.isCharging()) {
  95.   info(">", LBattery.level(), 0, 9);
  96.   } else {
  97.   info("%", LBattery.level(), 0, 9);
  98.   }
  99.   dataString += ",";
  100.   dataString += String(Airquality);
  101.   dataString += ",";
  102.   dataString += String(AQ);
  103.   info("AQ:", AQ, 1, 0);
  104.   dataString += ",";
  105.   dataString += String(tDHT);
  106.   info("T:", tDHT, 2, 0);
  107.   dataString += ",";
  108.   dataString += String(hDHT);
  109.   info("H:", hDHT, 2, 8);
  110.   dataString += ",";
  111.   dataString += String(ratio);
  112.   info("Particules", -1, 5, 0);
  113.   info("Ratio:", ratio, 6 , 0);
  114.   dataString += ",";
  115.   dataString += String(concentration);
  116.   info("pcs/L:", concentration, 7 , 0);
  117.  
  118.   Serial.println(dataString);
  119.  
  120.   LFile dataFile = LFlash.open("qualite_air_v4.txt", FILE_WRITE); // ouverture du fichier CO2
  121.   // Si le fichier est ouvert on ecris les données
  122.   if (dataFile) {
  123.   dataFile.println(dataString);
  124.   dataFile.close(); //Fermeture du fichier
  125.   } else {
  126.   Serial.println("erreur d'ouverture du fichier");
  127.   }
  128.   }
  129.   delay(5000);
  130.  }
  131.  
  132.  void info(String data, float val, int Row, int Column)
  133.  {
  134.   char _data[data.length() + 1];
  135.   data.toCharArray(_data, data.length() + 1);
  136.   SeeedOled.setTextXY(Row, Column); //Set the cursor to Xth Page, Yth Column
  137.   SeeedOled.putString(_data); //Print the String
  138.   if (val >= 0) {
  139.   SeeedOled.setTextXY(Row, Column + data.length());
  140.   SeeedOled.putFloat(val);
  141.   }
  142.  }