Arduino vanonder 't fijnstof
logo

Arduino vanonder 't fijnstof

Module 1 Module2 Module3 Module4 Module5 Module6

   Programma voor de fijnstofdetector



Op de de project hub van Arduino kan je projecten terugvinden die er voor de fijnstofdetector al gemaakt zijn.

We beginnen met het overnemen en bestuderen van de sketch van een bestaand project.

  • Download de sketch van de project hub van Arduino en open in het programma, oftewel de sketch, Arduino IDE. "Unzip" hiervoor eerst het bestand hieronder.
  • Bekijk de onderstaande sketch en overloop vluchtig de functionaliteit van elke instructie.
  • In de volgende submodule "De sketch toegelicht" bestuderen we de sketch in meer detail.

int pin = 8; // digitale sensor aansluiten op digitale PIN 8
unsigned long duration; // Declaratie (bekendmaking) van de variabele duration (duurtijd)
unsigned long starttime; // Declaratie van de variabele starttime (starttijd)
unsigned long sampletime_ms = 2000; // Declaratie (bekendmaking) en initialisatie (toekennen van een waarde, hier 2000) van sampletime_ms (tijdspanne waarin 1 meting genomen wordt)
unsigned long lowpulseoccupancy = 0; // Declaratie en initialisatie van lowpulseoccupancy (tijd waarin signaal digitale 0 voorstelt)
float ratio = 0; // Declaratie en initialisatie van (Low Pulse Occupancy ) ratio (verhouding)
float concentration = 0; // Declaratie en initialisatie van concentration (fijnstofconcentratie)
   
void setup() {  
  Serial.begin(9600); // Bepaalt de snelheid van de communicatie met de seriële monitor
  pinMode (8, INPUT); // PIN 8, waarop de sensor gemonteerd werd, wordt als input gedefinieerd.
  starttime = millis(); // de starttijd krijgt de juiste tijdswaarde.
}  
   
void loop() {  
  duration = pulseIn(pin, LOW); // pulseIn meet de tijd waarin het signaal dat binnenkomt in pin 8 de digitale waarde 0 heeft.
  lowpulseoccupancy = lowpulseoccupancy+duration; // start nieuwe meting, moment start vastleggen, pas nu opmeten want opstart fijnstofsensor vergt behoorlijk wat tijd
  if ((millis()-starttime) >= sampletime_ms){ // De if-loop wordt uitgevoerd wanneer de looptijd van de meting groter (of gelijk) geworden is dan (aan) de totale tijdsperiode (sampletime_ms) die de meting moet duren.
    ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Berekening van de verhouding van de Low Pulse Occupancy Time tot de totale tijdsperiode
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // Berekening van de fijnstofconcentratie aan de hand van het inverse functievoorschrift
    Serial.print("Concentration = "); // Print of geef de concentratie weer op de seriële monitor
    Serial.print(concentration);  
    Serial.println(" pcs/0.01cf");  
    Serial.println("\n");  
    lowpulseoccupancy = 0; // Om een nieuwe cyclus te starten resetten we de lowpulseoccupancy op 0
    starttime = millis(); // Om een nieuwe cyclus te starten zetten we de starttijd van de nieuwe cyclus opde huidige tijd.
  }  
}