Capteur Qualité D'air 3
Liste des donnée séparées par des ,
- 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)
Code source
// Capteurs // temps , Temperature , humidité , Qualité d'Air , CO2 , NH3 , CO , NO2 , C3H8, C4H10, CH4 , H2 , C2H5OH // Enregistrement sur memoire interne #define DEBUG 0 #include <LFlash.h> #include <LBattery.h> #include <Wire.h> #include <SeeedOLED.h> #include "MutichannelGasSensor.h" #include"AirQualityLinkitOne.h" AirQuality airqualitysensor; int32_t lastSlope = 4; //Capteur de co2 const unsigned char cmd_get_sensor[] = { 0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; unsigned char dataRevice[9]; int CO2PPM; int temperature; int Airquality; int AQ; String Time; //Capteur d'humidité et temperature #include "DHT.h" #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); float tDHT; float hDHT; void setup() { Wire.begin(); SeeedOled.init(); //initialze SEEED OLED display SeeedOled.clearDisplay(); //clear the screen and set start position to top left corner SeeedOled.setNormalDisplay(); //Set display to normal mode (i.e non-inverse mode) SeeedOled.setPageMode(); //Set addressing mode to Page Mode SeeedOled.setTextXY(0, 0); //Set the cursor to Xth Page, Yth Column SeeedOled.putString("Capteur polution"); //Print the String SeeedOled.setTextXY(1, 14); //Set the cursor to Xth Page, Yth Column SeeedOled.putString("V3"); //Print the String SeeedOled.setTextXY(2, 5); //Set the cursor to Xth Page, Yth Column SeeedOled.putString("(ppm)"); //Print the String SeeedOled.setTextXY(5, 0); //Set the cursor to Xth Page, Yth Column SeeedOled.putString("Initialisation.."); //Print the String if (LBattery.isCharging()){ info("En Charge...", -1, 6, 0);} Serial1.begin(9600); //démarre la communication avec le capteur de CO2 dht.begin(); // initialise le capteur d'humidité airqualitysensor.init(A0); // initialise le capteur qualité d'air Serial.print("Premiere valeur de qualité d'air : "); Serial.println(airqualitysensor.initValue); //Ouvre le port serie Serial.begin(9600); Serial.print("Initialisation de la memoire Flash..."); LFlash.begin(); Serial.println("memoire flash initialisée."); gas.begin(0x04);//the default I2C address of the slave is 0x04 gas.powerOn(); Serial.print("Firmware Version = "); Serial.println(gas.getVersion()); Serial.print("....."); SeeedOled.clearDisplay(); //Print the String } void loop() { float c; String dataString = ""; // Déclaration d'une chaine de caractere pour stoquer les données: int ret = dht.readHT(&tDHT, &hDHT); // lecture de la temperature de l'humidité //tDHT = tDHT - 3; //correction de temperature Airquality = airqualitysensor.slope(); AQ = airqualitysensor.current(); if (dataRecieve() && hDHT > 0 ) //Si on a recus des donnée du capteur de CO2 et d'humidité { int m = millis(); Time = String(m / (1000 * 60 * 60)) + ":" + String((m % (1000 * 60 * 60)) / (1000 * 60)) + ":" + String(((m % (1000 * 60 * 60)) % (1000 * 60)) / 1000); dataString += Time; info(Time, -1, 0, 0); if (LBattery.isCharging()){ info("<", LBattery.level(), 0, 9);}else{ info("%", LBattery.level(), 0, 9);} dataString += ","; dataString += String(Airquality); dataString += ","; dataString += String(AQ); info("AQ:", AQ, 1, 0); dataString += ","; dataString += String(tDHT); info("T:", tDHT, 2, 0); dataString += ","; dataString += String(hDHT); info("H:", hDHT, 2, 8); dataString += ","; dataString += String(CO2PPM); info("CO2:", CO2PPM, 3, 0); c = gas.measure_NH3(); dataString += ","; dataString += String(c); info("NH3:", c, 4, 0); c = gas.measure_CO(); dataString += ","; dataString += String(c); info("CO:", c, 5, 0); c = gas.measure_NO2(); dataString += ","; dataString += String(c); info("NO2:", c, 6, 0); c = gas.measure_C3H8(); dataString += ","; dataString += String(c); c = gas.measure_C4H10(); dataString += ","; dataString += String(c); c = gas.measure_CH4(); dataString += ","; dataString += String(c); c = gas.measure_H2(); dataString += ","; dataString += String(c); c = gas.measure_C2H5OH(); dataString += ","; dataString += String(c); Serial.println(dataString); LFile dataFile = LFlash.open("qualite_air_v3.txt", FILE_WRITE); // ouverture du fichier CO2 // Si le fichier est ouvert on ecris les données if (dataFile) { dataFile.println(dataString); dataFile.close(); //Fermeture du fichier } else { Serial.println("erreur d'ouverture du fichier CO2.txt"); } } delay(10000); } bool dataRecieve(void) { byte data[9]; int i = 0; //transmt command data for(i=0; i<sizeof(cmd_get_sensor); i++) { Serial1.write(cmd_get_sensor[i]); } delay(10); //begin reveiceing data if(Serial1.available()) { while(Serial1.available()) { for(int i=0;i<9; i++) { data[i] = Serial1.read(); } } } if((i != 9) || (1 + (0xFF ^ (byte)(data[1] + data[2] + data[3] + data[4] + data[5] + data[6] + data[7]))) != data[8]) { return false; } CO2PPM = (int)data[2] * 256 + (int)data[3]; temperature = (int)data[4] - 40; return true; } void info(String data, float val, int Row, int Column) { char _data[data.length()+1]; data.toCharArray(_data, data.length()+1); SeeedOled.setTextXY(Row, Column); //Set the cursor to Xth Page, Yth Column SeeedOled.putString(_data); //Print the String if (val >= 0) { SeeedOled.setTextXY(Row, Column + data.length()); SeeedOled.putFloat(val); } }