Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h> //een bibliotheek aan code toevoegen; Arduino heeft deze nodig om de Shield te kunnen 'lezen'
- #include <SD.h> //zie hierboven
- //hieronder volgen enkele variabelen. Denk eraan: float betekent dat het decimale getallen kunnen zijn
- const int chipSelect = 10; //const = een variabele die nooit verandert
- int PM=8; //de fijnstofmeter zit in digitaal poortnummer 8
- unsigned long duration;
- unsigned long starttime;
- unsigned long sampletime_ms = 30000; //unsigned long = een variabele die erg hoog kan oplopen, maar nooit negatief kan zijn
- unsigned long lowpulseoccupancy = 0;
- float ratio = 0;
- float concentration = 0;
- unsigned long tijd = 30;
- //void setup wordt één keer uitgevoerd, bij het opstarten van de Arduino-minicomputer
- void setup()
- {
- Serial.begin(9600); //de snelheid (in bits/second) aan welke de seriële data zal worden getransfereerd
- pinMode(PM,INPUT); /*PM is de variabele van helemaal bovenaan: pinMode vraagt twee parameters 1)de poort (werd gedefinieerd bovenaan) 2)INPUT of OUTPUT
- Ditmaal leest de fijnstofmeter gegevens die we vervolgens IN onze Arduino willen importeren, dus INPUT*/
- starttime = millis(); //hoelang draait het programma? millis() geeft de duur sinds het werd opgestart
- Serial.println("SD-kaart opstarten indien aanwezig... "); //Je schrijft nu neer dat de SD-kaart wordt gezocht en opgestart (println = hierna op volgende regel verder gaan)
- //hieronder staat een 'als'-lus: als aan de eerste voorwaarde wordt voldaan, voert hij uit wat eronder staat, anders gaat Arduino verder achter de afsluitende accolade
- if (!SD.begin(chipSelect)) //Als er NIET (!) kan worden begonnen met de SD-kaart te selecteren ...
- {
- Serial.println("Corrupte of ontbrekende SD-kaart!"); //dan wordt deze boodschap getoond
- return;
- }
- //Als de SD-kaart dus WEL werkt, gaan we hieronder verder
- Serial.println("SD-kaart werkt...");
- Serial.print("Fijnstofsensor start op. Even geduld! Metingen om de 30 seconden.");
- Serial.println("\n");
- }
- //void setup wordt oneindig lang uitgevoerd, tenzij je dat anders bepaalt
- void loop ()
- {
- duration = pulseIn(PM, LOW); //als de fijnstofdetector niet meet (LOW), beginnen meten
- lowpulseoccupancy = lowpulseoccupancy+duration; //na elke meting de 'duration' (30 sec) optellen bij de totale tijd
- if ((millis()-starttime) >= sampletime_ms)
- {
- //hieronder de wiskundige berekeningen om het fijnstofgehalte te berekenen
- ratio = lowpulseoccupancy/(sampletime_ms*10.0);
- concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;
- //hieronder alles wat zal worden geprint naar het seriële venster
- Serial.print("Fijnstofconcentratie na ");
- Serial.print(tijd);
- Serial.println(" seconden:");
- Serial.print(concentration);
- Serial.println(" deeltjes/0,01cf");
- Serial.print("\n");
- File dataFile = SD.open("meting.txt", O_RDWR | O_APPEND);
- dataFile.print("Fijnstofconcentratie na ");
- dataFile.print(tijd);
- dataFile.print(" seconden: ");
- dataFile.print(concentration);
- dataFile.print(" deeltjes/0,01cf");
- dataFile.print("\n");
- dataFile.close();
- if (!dataFile) {
- // It failed, so try and make a new file.
- dataFile = SD.open("meting.txt", O_RDWR | O_CREAT);
- dataFile.print("Fijnstofconcentratie na ");
- dataFile.print(tijd);
- dataFile.print(" seconden: ");
- dataFile.print(concentration);
- dataFile.print(" deeltjes/0,01cf");
- dataFile.print("\n");
- dataFile.close();
- if (!dataFile) {
- // It failed too, so give up.
- Serial.println("Failed to open meting.txt");
- }
- }
- /*File dataFile = SD.open("meting.txt", O_CREAT | O_APPEND | O_WRITE); //het bestand meting.txt moet op de SD-kaart worden geopend om erin te schrijven
- if (dataFile) //als het bestand kan worden geopend, volgende gegevens printen
- {
- dataFile.print("Fijnstofconcentratie na ");
- dataFile.print(tijd);
- dataFile.print(" seconden: ");
- dataFile.print(concentration);
- dataFile.print(" deeltjes/0,01cf");
- dataFile.print("\n");
- dataFile.close();
- }
- else //als het bestand niet kan worden geopend ...
- {
- Serial.println("Fout bij het openen van meting.txt");
- }
- */
- tijd = tijd + 30; //meting afgerond, totale tijd = +30 seconden
- lowpulseoccupancy = 0; //de status van de fijnstofmeter is terug 'LOW'
- starttime = millis(); //volgende meting starten
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement