Go Down

Topic: Capteur de particules (Read 677 times) previous topic - next topic

Mar 22, 2020, 04:03 pm Last Edit: Mar 22, 2020, 04:22 pm by 6temd32
Bonjour a tous,

Je vous présente un capteur de particule.

Il a été réalisé avec une Arduino Uno, un Dust sensor, un écran LCD (4x16), un acc 9v et une imprimante 3d
Pour le capteur, c'est celui-ci:
http://wiki.seeedstudio.com/Grove-Dust_Sensor/

Le code est fourni avec la carte mais j'ai fait des adaptations pour notamment faire la moyenne des 4 dernières mesures.
Quelques photos :




Voici le code :
Code: [Select]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
float concentrationsdisplay = 0;// Va servir à faire la moyenne
float concentration1 = 0;
float concentration2 = 0;
float concentration3 = 0;
float concentration4 = 0;
float concentrationbefore = 0;
void setup() {
 Serial.begin(9600);
 pinMode(8,INPUT);
 starttime = millis();//get the current time;
 lcd.init();                      // initialize the lcd
  lcd.init();
  // Print a message to the LCD.
 lcd.backlight();

}
void loop() {

 duration = pulseIn(pin, LOW);
 lowpulseoccupancy = lowpulseoccupancy+duration;
 if ((millis()-starttime) > sampletime_ms)//if the sampel 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
 if (concentration < 0.63) // When value is too small
    {
      concentration = concentrationbefore;
    }///////////////////////////////////////////////
concentration4 = concentration3;
concentration3 = concentration2;
concentration2 = concentration1;
concentration1 = concentration;
concentrationsdisplay = (concentration1 + concentration2 + concentration3 + concentration4)/4;
Serial.println("------------------------------");
 Serial.println("concentrationsdisplay");
 Serial.println(concentrationsdisplay);
  Serial.println("concentration1");
 Serial.println(concentration1);
  Serial.println("concentration2");
 Serial.println(concentration2);
  Serial.println("concentration3");
 Serial.println(concentration3);
   Serial.println("concentration4");
 Serial.println(concentration4);
 lcd.setCursor(0,0);
 lcd.print("   Concentration = ");
 lcd.setCursor(0,1);
 lcd.print(concentrationsdisplay);
 lcd.println(" pcs/0.01cf");
 lcd.setCursor(0,2);
 lcd.print("Pollution level:");
 lcd.setCursor(0,3);
 lowpulseoccupancy = 0;//add
 starttime = millis();//add
 concentrationbefore = concentrationsdisplay;
 lcd.print("                     ");
   if(concentrationsdisplay < 400)
    {
   lcd.setCursor(0,3);
   lcd.print("                     ");
   lcd.setCursor(0,3);
   lcd.print("NO");
    }
   if(concentrationsdisplay > 400)
    {
   lcd.setCursor(0,3);
   lcd.print("                     ");
   lcd.setCursor(0,3);
   lcd.print("Very Low");
    }
   if(concentrationsdisplay > 800)
    {
   lcd.setCursor(0,3);
   lcd.print("                     ");
   lcd.setCursor(0,3);
   lcd.print("Low");
    }
   if(concentrationsdisplay > 1500)
    {
   lcd.setCursor(0,3);
   lcd.print("                     ");
   lcd.setCursor(0,3);
   lcd.print("Medium");
    }
   if(concentrationsdisplay > 2500)
    {
   lcd.setCursor(0,3);
   lcd.print("                     ");
   lcd.setCursor(0,3);
   lcd.print("Very High");
    }
    }
    }


Voici la modélisation disponibles sur 360 :
https://a360.co/2WzLILy

Voici 6 mois de travail résumés en 3 minutes :
https://youtu.be/xAs7EH2vVOI

Pour la suite, j'envisage de modifier l'affichage pour le rendre plus simple par exemple 3 couleurs indiquant la qualité de l'air en terme de concentration de particules, et d'alimenter par panneaux solaire, et mettre l'installation dans le jardin de mon pavillon !

N'hésitez pas à me contacter en cas de question,

Lacuzon

Bonjour,

jolie réalisation ! Si j'ai bien compris, ça détecte les particules dont le diamètre est supérieur à 1 µm c'est déjà pas mal. As-tu installé une alarme type buzzer en cas de dépassement des limites fixées ?

Tu pourrais aller plus loin en en faisant un détecteur connecté pour surveiller de loin le taux de particules avec un esp8266 envoyant les données sur un cloud par exemple.

Un dispo intéressant en particulier si l'on utilise un chauffage au bois. I y a deux jours, le soleil tapait sur une de mes cheminées, quand je suis entré dans la pièce ou fonctionnait un insert, on ne se voyait plus. Ton dispo aurait été bien utile...

Un détail, ton afficheur lcd me semble plutôt un 4x20.

En tout cas bravo.

Hello, merci merci !
Je n'avais pas pensé à l'alarme, mais je vais y penser, c'est une bonne idée.
L'idée du capteure esp8266  me plait beaucoup ! Je vais m'y atteler, le temps de trouver un tuto !
Pour le cloud, tu as recommandations ?

Sinon j'ai fait des mesures à coté d'un insert à foyer ouvert, et c'est vraiment un catastrophe en terme de concentration!

Effectivement , c'est un 4x20

Bonne journée

Artouste

Hello, merci merci !
Je n'avais pas pensé à l'alarme, mais je vais y penser, c'est une bonne idée.
L'idée du capteure esp8266  me plait beaucoup ! Je vais m'y atteler, le temps de trouver un tuto !
Pour le cloud, tu as recommandations ?

Sinon j'ai fait des mesures à coté d'un insert à foyer ouvert, et c'est vraiment un catastrophe en terme de concentration!

Effectivement , c'est un 4x20

Bonne journée
Bonjour
regarde ce topic de  microquettas
https://forum.arduino.cc/index.php?topic=640772.0

Lacuzon

Bonsoir,

oui, c'est un beau projet bien décrit. Il utilise une horloge RTC type DS3231 mais comme tu es semble-t-il proche d'une box, si tu as besoin de référence temporelle tu peux laisser tomber le module RTC et utiliser une mise à jour réseau (via la box) de type ntp avec la bibliothèque "NTPClient.h".


Go Up