Arduino vanonder 't fijnstof
logo

Arduino vanonder 't fijnstof

Module 1 Module2 Module3 Module4 Module5 Module6

   De sketch toegelicht



We bekijken de sketch in meer detail.

Open de sketch in het programma Arduino IDE om de sketch goed te kunnen bestuderen.




1. Declareren en initialiseren


int pin = 8;
unsigned long duration
unsigned long starttime;
unsigned long sampletime_ms = 2000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

In het eerste stuk van de sketch ga je declareren en initialiseren.

Duration, starttime_ms, ratio, etc. zijn voorbeelden van variabelen.

Het "declareren" is het bekend maken van een variabele aan de sketch.

Bij het declareren van een variabele, kan je meteen ook "initialiseren", oftewel een waarde toekennen aan de variabele, zoals bijvoorbeeld een geheel getal.

 

"duration" noemt men een variabele. Een variabele is een element dat je gebruikt in je code, dewelke je op voorhand gedeclareerd hebt.
Je kan de waarde van een variabele gemakkelijk initialiseren bij de declaratie, bovenaan. De waarde van een variabele kan ook in de void loop() aangepast worden.

"LED_BUILTIN", zoals je bij de inleiding van Arduino tegenkwam, noemt men, daarentegen, een constante. De waarde van een constante hoort niet aangepast te worden, en blijft daarom constant. Een constante wordt aangeduid met hoofdletters.



  Opdracht 1




Bij het declareren en het initialiseren moeten we ook een datatype toekennen aan de variabele.
De datatypes zijn blauw gekleurd in het programma Arduino IDE.


Een datatype wordt aan een variabele toegekend om duidelijk te maken over welke soort variabele het gaat.
Een variabele kan namelijk een woord zijn, of een geheel getal, een natuurlijk getal, een kommagetal, etc.



  Opdracht 2

Neem een kijkje op de website van Arduino naar de verschillende soorten datatypes.






2. void setup()

De instructies die onze Sketch vormgeven zijn void setup() en void loop(). Dit zijn de basisinstructies van de Sketch.
De instructie void setup() gebruikt accolades {}. Elke instructie die tussen deze accolades staat, behoort tot void setup().


void setup() {
  Serial.begin(9600);
  pinMode (8, INPUT);
  starttime = millis();
}

Lees op de website van Arduino over de functie van void setup().



void setup() is een functie die uitgevoerd wordt bij de start van het programma.
In deze functie worden bijvoorbeeld variabelen en parameters geïnitialiseerd.




  Opdracht 3

Lees op de website van Arduino over de functies van serial, begin(), pinMode en millis().





3. void loop()

De instructies die onze Sketch vormgeven zijn void setup() en void loop(). Dit zijn de basisinstructies van de Sketch.
De instructie void loop() gebruikt accolades {}. Elke instructie die tussen deze accolades staat, behoort tot void loop().


void loop() {
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy = lowpulseoccupancy+duration;
  if ((millis()-starttime >= sampletime_ms)
  {
        ratio = lowpulseoccupancy/(sampletime_ms*10.0);
        concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;
        Serial.print("Concentration = ");
        Serial.print(concentration);  
        Serial.print(" pcs/0.01cf");
        Serial.print("\n");
        lowpulseoccupancy = 0;
        starttime = millis();
  }
}

Lees op de website van Arduino over de functie van void loop().



void loop() is een functie die telkens opnieuw, herhalend, uitgevoerd wordt.
In deze functie wordt wat het programma eigenlijk moet doen uitgevoerd.


  Opdracht 4

In de vorige modules hebben we de meting van de fijnstofsensor zelf verwerkt.
We hebben de "Low Pulse Occupancy Time" besproken. Herbekijk voor de oefening de definitie ervan, indien nodig.




  Opdracht 5

Lees op de website van Arduino over de functie van pulseIn().


  duration = pulseIn(pin, LOW);
  lowpulseoccupancy = lowpulseoccupancy+duration;

We beginnen het experiment met een meting.
In deze meting gaan we een tijd lang, namelijk de sampletime_ms het signaal van fijnstofsensor analyseren.




  Opdracht 6

Nadat de meting van de sensor gedurende de volledige meettijd, namelijk de sampletime_ms, genomen is, moeten we de meting verwerken.

  if ((millis()-starttime >= sampletime_ms)
  {
        ratio = lowpulseoccupancy/(sampletime_ms*10.0);
        concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;




  Opdracht 7

Met de instructie "ratio = lowpulseoccupancy/(sampletime_ms*10.0);" berekenen we de Low Pulse Occupancy Time als verhouding tegenover de totale tijd in %.
Maar vanwaar komt de factor 10? Beantwoord daarvoor onderstaande vragen.





  Opdracht 8



Bekijk hieronder de totale wiskundige berekening.





Vergelijk de onderstaande instructie met het inverse functievoorschrift.

y = 1,1 x³ - 3,8 x² + 520 x + 0,62


concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;



  Opdracht 9




  Opdracht 10




Om de concentratie op het computerscherm weer te geven, gebruiken we de volgende instructies.
We "printen" de waarden op het computerscherm.

  • Serial.print zal gewoon de waarde of tekst tussen de haakjes afprinten.
  • Serial.println zal de waarde of tekst afprinten en daarna een nieuwe regel starten.

  • De gewone te printen tekst wordt weergegeven door "blauwe letters tussen aanhalingstekens":
    • "Concentration = "
    • " pcs/0.01cf"
    • "\n" is een uitzondering, dewelke een nieuwe regel start. Het is als het ware de enter-toets van je toetsenbord.
  • Het zwarte woord concentration wijst op de variabele concentratie die je net berekent hebt.

Deze concentratie, samen met de andere woorden, "printen" we op het computerscherm. Het resultaat zie je in de onderstaande afbeelding


        Serial.print("Concentration = ");
        Serial.print(concentration);  
        Serial.println(" pcs/0.01cf");
        Serial.println("\n");




Nadat een meting volledig is uitgevoerd, verwerkt en weergegeven, kunnen we een nieuwe meting starten.
Hiervoor beginnen we helemaal opnieuw en "resetten" we de waarden:

        lowpulseoccupancy = 0;
        starttime = millis();
  }
}