Advertisement
Guest User

Untitled

a guest
Apr 19th, 2017
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.80 KB | None | 0 0
  1. #include <SPI.h> //een bibliotheek aan code toevoegen; Arduino heeft deze nodig om de Shield te kunnen 'lezen'
  2. #include <SD.h> //zie hierboven
  3.  
  4. //hieronder volgen enkele variabelen. Denk eraan: float betekent dat het decimale getallen kunnen zijn
  5.  
  6. const int chipSelect = 10; //const = een variabele die nooit verandert
  7. int PM=8; //de fijnstofmeter zit in digitaal poortnummer 8
  8. unsigned long duration;
  9. unsigned long starttime;
  10. unsigned long sampletime_ms = 30000; //unsigned long = een variabele die erg hoog kan oplopen, maar nooit negatief kan zijn
  11. unsigned long lowpulseoccupancy = 0;
  12. float ratio = 0;
  13. float concentration = 0;
  14. unsigned long tijd = 30;
  15.  
  16. //void setup wordt één keer uitgevoerd, bij het opstarten van de Arduino-minicomputer
  17.  
  18. void setup()
  19. {
  20. Serial.begin(9600); //de snelheid (in bits/second) aan welke de seriële data zal worden getransfereerd
  21. pinMode(PM,INPUT); /*PM is de variabele van helemaal bovenaan: pinMode vraagt twee parameters 1)de poort (werd gedefinieerd bovenaan) 2)INPUT of OUTPUT
  22. Ditmaal leest de fijnstofmeter gegevens die we vervolgens IN onze Arduino willen importeren, dus INPUT*/
  23.  
  24. starttime = millis(); //hoelang draait het programma? millis() geeft de duur sinds het werd opgestart
  25.  
  26. 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)
  27.  
  28. //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
  29.  
  30. if (!SD.begin(chipSelect)) //Als er NIET (!) kan worden begonnen met de SD-kaart te selecteren ...
  31. {
  32. Serial.println("Corrupte of ontbrekende SD-kaart!"); //dan wordt deze boodschap getoond
  33. return;
  34. }
  35. //Als de SD-kaart dus WEL werkt, gaan we hieronder verder
  36.  
  37. Serial.println("SD-kaart werkt...");
  38. Serial.print("Fijnstofsensor start op. Even geduld! Metingen om de 30 seconden.");
  39. Serial.println("\n");
  40. }
  41.  
  42. //void setup wordt oneindig lang uitgevoerd, tenzij je dat anders bepaalt
  43.  
  44. void loop ()
  45. {
  46. duration = pulseIn(PM, LOW); //als de fijnstofdetector niet meet (LOW), beginnen meten
  47. lowpulseoccupancy = lowpulseoccupancy+duration; //na elke meting de 'duration' (30 sec) optellen bij de totale tijd
  48.  
  49. if ((millis()-starttime) >= sampletime_ms)
  50. {
  51. //hieronder de wiskundige berekeningen om het fijnstofgehalte te berekenen
  52.  
  53. ratio = lowpulseoccupancy/(sampletime_ms*10.0);
  54. concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;
  55.  
  56. //hieronder alles wat zal worden geprint naar het seriële venster
  57. Serial.print("Fijnstofconcentratie na ");
  58. Serial.print(tijd);
  59. Serial.println(" seconden:");
  60. Serial.print(concentration);
  61. Serial.println(" deeltjes/0,01cf");
  62. Serial.print("\n");
  63.  
  64.  
  65. File dataFile = SD.open("meting.txt", O_RDWR | O_APPEND);
  66.  
  67. dataFile.print("Fijnstofconcentratie na ");
  68. dataFile.print(tijd);
  69. dataFile.print(" seconden: ");
  70. dataFile.print(concentration);
  71. dataFile.print(" deeltjes/0,01cf");
  72. dataFile.print("\n");
  73. dataFile.close();
  74.  
  75. if (!dataFile) {
  76. // It failed, so try and make a new file.
  77. dataFile = SD.open("meting.txt", O_RDWR | O_CREAT);
  78.  
  79.  
  80. dataFile.print("Fijnstofconcentratie na ");
  81. dataFile.print(tijd);
  82. dataFile.print(" seconden: ");
  83. dataFile.print(concentration);
  84. dataFile.print(" deeltjes/0,01cf");
  85. dataFile.print("\n");
  86. dataFile.close();
  87. if (!dataFile) {
  88.  
  89. // It failed too, so give up.
  90. Serial.println("Failed to open meting.txt");
  91. }
  92. }
  93. /*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
  94.  
  95. if (dataFile) //als het bestand kan worden geopend, volgende gegevens printen
  96. {
  97. dataFile.print("Fijnstofconcentratie na ");
  98. dataFile.print(tijd);
  99. dataFile.print(" seconden: ");
  100. dataFile.print(concentration);
  101. dataFile.print(" deeltjes/0,01cf");
  102. dataFile.print("\n");
  103. dataFile.close();
  104. }
  105.  
  106. else //als het bestand niet kan worden geopend ...
  107. {
  108. Serial.println("Fout bij het openen van meting.txt");
  109. }
  110. */
  111. tijd = tijd + 30; //meting afgerond, totale tijd = +30 seconden
  112. lowpulseoccupancy = 0; //de status van de fijnstofmeter is terug 'LOW'
  113. starttime = millis(); //volgende meting starten
  114. }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement