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:
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 :
#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 :
Voici 6 mois de travail résumés en 3 minutes :
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,