Analyseur Air

Analyseur d'air ambiant.

Le but : connaitre la composition de l'air ambiant de sa maison afin d'agir lorsque le taux de pollution est critique.


Pérequis : connaissance de l'Arduino et de sa programmation.

Room air analyzer

The purpose is to know ambient air composition of his house in order to act when the rate of pollution is critical.

On se pose fréquemment des questions sur la qualité de l’eau que l’on boit, on installe des filtres sur nos robinets ou dans nos carafes. A contrario, on se pose beaucoup moins de questions sur l’air que l’on respire. On prend l’air qui nous entoure comme une fatalité sans avoir l’impression que l’on puisse agir. Pourtant, par des gestes simples, on peut améliorer la qualité de l’air de notre habitation qui est souvent responsable de l’allergie de nos enfant ou des mauvaises nuits que l’on peut passer. Les principaux facteurs qui influencent la qualité de l’air de nos habitations sont : le taux de CO (monoxyde de carbone), le taux de formaldéhyde, polluant dégagé par nos produits ménagés, la peinture, meubles et autres objets de décoration, ainsi que toutes les particules fines (diesel, fumés, poussières diverses.)

Un des gestes simples, que tout le monde peut mettre en œuvre pour assainir l’air ambiant de sa maison, est d’aérer les pièces.  Ce geste simple fait surgir un lot de questions légitimes : Mais quand ? Est-il réellement utile d’aérer si l’on habite à coté d’une autoroute ? A quelle fréquence ? Aérer l'hiver nous fait perdre de la chaleur.

Le but ce projet est de répondre à ces questions. Fabriquer un appareil simple qui va pouvoir nous indiquer, grâce à ses capteurs, le taux de CO (monoxyde de carbone), de polluants (formaldéhyde) et de particules présentes dans l’air afin que l’on puisse agir lorsque le taux devient critique.


"A quel moment il devient nécessaire

d'aérer une pièce ?"


"When is necessary to ventilate a room? "

Le matériel


Mes recherches sur internet m'ont amenées à opter pour des capteurs aux prix abordables mais, malgré tout, de bonne qualité : Le système Grove de Seeedstudio.

Le système Grove de Seeedstudio est un ensemble de composants plug-and-play et  open-source. Les modules sont enfichables sans soudure sur un Base Shield ou un Mega Shield à connecter sur une carte Arduino ou compatible.

En résumé :  nous avons une carte de base  sur laquelle viendront se connecter les capteurs sans soudure.









La carte de base, 2 possibilités   :

1-Arduino  +  Base Shield



                                                                                                 










ou bien :

2- La carte Seeeduino Lotus qui fait les deux













Pour les personnes ayant déjà un arduino,   il y a la possibilité d'ajouter  un  Grove Base Shield sur l'arduino. Sinon, on peut opter pour la carte Seeeduino Lotus qui est une Seeeduino (carte compatible Arduino) avec le Grove Base Shield intégré. Pour ma part, mes  Arduino(s) étant déjà très occupés, j'ai opté pour  la Seeeduino Lotus.  Mais que ce soit l'une ou l'autre solution, tout est identique concernant le raccordement et la  programmation. Le seul avantage de choisir la première solution  et que, si l'on possède déjà un Arduino, le Grove Base Shield est moins onéreux. (environ 10€ de différence). Pour les connaisseurs, vous pouvez également utiliser ce tuto pour un arduino simple avec les capteurs en version non Grove. Les sorties Arduino sont aussi indiquées.

Les capteurs

J'ai choisi un capteur de qualité d'air, un capteur de particules, mais aussi un capteur de température et de taux d'humidité, 2 facteurs également importants pour la qualité de sommeil.


Grove – Air quality sensor V1.3

Ce capteur va nous donner un indicateur global de qualité de l'air en analysant plusieurs composants : le formaldéhyde,  monoxyde de carbone, l'alcool, l'acétone, ainsi que d'autres polluants. (Wiki)

Grove - Dust Sensor

Ce capteur va nous donner une indication précise sur le taux de concentration de particules > 1μm. (Wiki)

Les potentiomètres présent sur la carte sont réglés en usine, ne pas les modifier.

Grove Temp & Humi Sensor Pro

Il existe 2 versions de ce capteur, j'ai choisi la version pro (DHT 22) plus précise.

L'autre version est la Grove Temp & Humi Sensor (DHT 11).

Il va nous indiquer la température et le taux d'humidité. (Wiki)

L'affichage des données

Pour afficher les données de manière autonome, notre appareil doit avoir un écran dédié. J'ai choisi l'écran Grove - OLED Display 96*96. Ecran de qualité, facile à connecter et pilotable sur le port I2C. Un  autres atouts est sa faible consommation. Nous allons afficher les données provenants des différents capteurs. Température, taux humidité, qualité d'air, concentration du taux de particules. (Wiki)


L'assemblage


On va raccorder chaques capteurs à un port de la carte.



Grove – Air quality sensor 

A0 (pin A0 Arduino)

Grove - Dust Sensor

D4 (pin 4 Arduino)

Grove Temp & Humi Sensor Pro

D2 (pin 2 Arduino)

Grove - OLED Display  1.12"

I2C (Port I2C Aduino)

Une fois assemblé et testé, il ne reste plus qu'à trouver un boitier dans lequel on va pouvoir faire cohabiter tout ce beau monde. Pour ma part, j'ai utilisé un boitier de récupération.

L'alimentation

 

L'avantage de ces modules est que l'on à besoin d'une  seule alimentation pour la carte principale. Elle s'alimente en 5v sur un port micro USB. Une batterie portable, que l'on trouve maintenant partout, va donc lui donner toute son autonomie.

Sinon, un simple chargeur de téléphone avec cordon micro USB fera l'affaire mais dans ce cas, on  sera contraint de poser notre boitier prêt d'une prise de courant.

La programmation

Voici le programme dans son ensemble, trouvé sur les wiki de Seeedstudio et surtout inspiré par HackSpark.

Le dialogue entre la carte et l'écran se fait par I2C. Mais on peut imaginé un dialogue en Série ou autre, afin par exemple, d'alimenter une base de données qui récupère les valeurs de chaques capteurs pour les exploiter par la suite.

1- Installez les librairie Arduino de chaques capteurs

2- Copier/coller le programme dans une votre fenêtre de programmation Arduino.


1- Installation des librairies

Téléchargez le fichier des librairies. Ici

Décompressez le fichier









et copier/coller les librairies dans votre dossier 'Librairies' Arduino. Souvent il se trouve dans  C:\Program Files (x86)\Arduino\libraries.


2-  Récupérez le programme.

Copier/coller le programme ci-contre ou vous pouvez le télécharger  ici


Note :

// Uncomment whatever type you're using!

//#define DHTTYPE DHT11   // DHT 11

#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);

Le choix entre DHT11 et  DHT22 correspond au type du capteurs de Température/humidité  choisi. DHT22 est la version pro du capteur.


3-  Si vous utilisez la carte Seeeduino Lotus

Il faut  installer les drivers que vous pouvez télécharger  ici.

Puis  exécutez  le fichier et choisissez 'INSTALL'.












Pour terminer :

Vous devez  installer la liste des nouvelles  cartes prises en charge  dans votre logiciel arduino. Tout est expliqué ici.  Choissisez ensuite la seeduino Lotus dans la liste des cartes Arduino, dans Outils>Type de carte. Vous êtes prêt à tester le programme.

! Warning ! : Pensez à redémarrer le logiciel Arduino après tout changement de librairies.


Le panier :

Grove – Air quality sensor 8,70€

Grove - Dust Sensor13,25€

Grove - Temperature&Humidity Sensor 11,40€

Grove - OLED Display 14,45€

#include <Wire.h>

#include <SeeedGrayOLED.h>

#include "AirQuality.h"

#include "Arduino.h"

#include "DHT.h"

#define DHTPIN 2     // what pin the DHT is connected to


// Uncomment whatever type you're using!

//#define DHTTYPE DHT11   // DHT 11

#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);


AirQuality airqualitysensor;

int current_quality =-1;

#define BUZZER 10


int dust_pin = 4;

unsigned long duration;

unsigned long starttime;

unsigned long sampletime_ms = 30000;//sampe 30s ;

unsigned long lowpulseoccupancy = 0;

float ratio = 0;

float concentration = 0;


void setup()

{

  Wire.begin();    // initialize i2c

  SeeedGrayOled.init();  //initialze SEEED OLED display

  SeeedGrayOled.clearDisplay();          //clear the screen and set start position to top left corner

  SeeedGrayOled.setNormalDisplay();      //Set display to normal mode (i.e non-inverse mode)

  SeeedGrayOled.setVerticalMode();   

  //SeeedGrayOled.setPageMode();           //Set addressing mode to Page Mode

  SeeedGrayOled.setTextXY(0,0);          //Set the cursor to Xth Page, Yth Column 

  SeeedGrayOled.putString("Initializing"); //Print the String

 

  pinMode(BUZZER, OUTPUT);

  digitalWrite(BUZZER, LOW);

  airqualitysensor.init(14);

  dht.begin();

 

  pinMode(dust_pin,INPUT);

  starttime = millis();//get the current time;

}


void loop()

{

  // Reading temperature or humidity takes about 250 milliseconds!

  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  SeeedGrayOled.setTextXY(8,0);

  // check if returns are valid, if they are NaN (not a number) then something went wrong!

  if (isnan(t) || isnan(h))

  {

      SeeedGrayOled.putString("DHT ERROR");

  }

  else

  {

      SeeedGrayOled.putString("Humid: ");

      SeeedGrayOled.setTextXY(9,0);

      SeeedGrayOled.putString("   ");

      SeeedGrayOled.putFloat(h);

      SeeedGrayOled.putString("%");

      SeeedGrayOled.setTextXY(10,0);

      SeeedGrayOled.putString("Temp.: ");

      SeeedGrayOled.setTextXY(11,0);

      SeeedGrayOled.putString("   ");

      SeeedGrayOled.putFloat(t);

      SeeedGrayOled.putString("C");

  }

 

  // Checking Air Quality

  current_quality=airqualitysensor.slope();

  if (current_quality >= 0) {

    if (current_quality <= 1)

      // Air quality is bad. Let's revert display to make some light !

      SeeedGrayOled.setInverseDisplay();

    else

      SeeedGrayOled.setNormalDisplay();

     

    SeeedGrayOled.setTextXY(1,0);

    SeeedGrayOled.putString("Air Quality:"); //Print the String

    SeeedGrayOled.setTextXY(2,0);

    SeeedGrayOled.putString("   "); // Empty the number line

    SeeedGrayOled.setTextXY(2,0);

    SeeedGrayOled.putNumber(airqualitysensor.first_vol); //Print the String

   

    SeeedGrayOled.setTextXY(0,0);

    if (current_quality==0)

    SeeedGrayOled.putString("Emergency   ");

    else if (current_quality==1)

    SeeedGrayOled.putString("Hi Pollution");

    else if (current_quality==2)

    SeeedGrayOled.putString("Lo Pollution");

    else if (current_quality ==3)

    SeeedGrayOled.putString("Fresh air   ");

   

    if (current_quality<1)

      digitalWrite(BUZZER, HIGH);

    else

      digitalWrite(BUZZER, LOW);

  }

 

  // Checking Dust Sensor

  duration = pulseIn(dust_pin, LOW);

  lowpulseoccupancy = lowpulseoccupancy+duration;


  if ((millis()-starttime) > sampletime_ms) //if the sample time == 30s

  {

    ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100

    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve

    /*Serial.print(lowpulseoccupancy);

    Serial.print(",");

    Serial.print(ratio);

    Serial.print(",");

    Serial.println(concentration);*/

    SeeedGrayOled.setTextXY(4,0);

    SeeedGrayOled.putString("Particles:");

    SeeedGrayOled.setTextXY(5,0);

    SeeedGrayOled.putString("    ");

    SeeedGrayOled.setTextXY(5,0);

    SeeedGrayOled.putNumber(concentration);

    lowpulseoccupancy = 0;

    starttime = millis();

  }

}


ISR(TIMER2_OVF_vect)

{

if(airqualitysensor.counter==122)//set 2 seconds as a detected duty

{


airqualitysensor.last_vol=airqualitysensor.first_vol;

airqualitysensor.first_vol=analogRead(A0);

airqualitysensor.counter=0;

airqualitysensor.timer_index=1;

//PORTB=PORTB^0x20;

}

else

{

airqualitysensor.counter++;

}

}

Exploiter les données

La température (Grove Temp & Humi Sensor Pro)

La température idéale reconnue par tous les spécialistes se situe pour une chambre d'adulte entre 16°C et 20°C, et pour une chambre de bébé entre 18°C et 21°C. Concernant les pièces à vivre entre 20°C et 21°C.


Le taux d'humidité (Grove Temp & Humi Sensor Pro)

Le taux d'humidité optimal reconnu par tous les spécialistes se situe entre 40% et 50%. Le schéma ci-dessous montre l'Incidence du taux d’humidité sur le développement des bactéries, virus, allergies, acariens….

















Le taux de qualité de l'air (Grove – Air quality sensor)

Les données constructeur (cf. Wiki) indiquent :

Un taux en dessous de 50 : Air correct (Fresh air)

Un taux au dessus de 50 : Qualité médiocre (Low pollution)

Un taux au dessus de 150 : Air pollué (High pollution)

Un taux au dessus de 400 : Air très pollué (High pollution alert)


Le taux de concentration de particules. (Grove - Dust Sensor)

Les données constructeur (cf. Wiki) indiquent :

Le capteur va adresser un valeur entre 0 et 8000.

Sachant qu'un air pur se situe au alentours de 500.

Exemple : pendant les pics de pollution à Paris, cette valeur peut monter à plus de 6000/7000. (cf.HackSpark)


Voici le graphe d'un relevé moyen d'une journée dans un bureau, concentration en fonction de l'heure (Données constructeur,  cf. Wiki)

En conclusion

Cet appareil va nous apporter des éléments de réponse quantifiables sur la qualité de l'air ambiant de notre maison. Il va nous permettre de savoir plus précisément quand nous devons aérer nos pièces.

Ce projet permet de découvrir les capteurs Grove, fiables et de bonne qualité. Ainsi que leur programmation par l'intermédiaire d'Arduino. Vous pouvez réaliser le projet avec tout ou une partie des capteurs. Le capteur indiquant la qualité de l'air peut être suffisant dans un premier temps. La température et le taux d'humidité est un plus, mais on peut s'en passer au début et le rajouter par la suite. Si vous adaptez des variantes, sortie sur autre écran, récupération des données sur serveur, etc....   N'hésitez pas à le partager avec nous. Contactez-moi si vous avez des questions ou remarques.

contact@lelabtechno.com

Retrouvez ce projet sur  Instructables.com