Facebook
From Anorexic Capybara, 7 Years ago, written in C.
Embed
Download Paste or View Raw
Hits: 246
  1. int measurePin = 0;
  2. int ledPower = 7;
  3.  
  4. int samplingTime = 280; // parametry pomiarowe
  5. int deltaTime = 40;
  6. int sleepTime = 9680;
  7.  
  8. float voMeasured = 0;
  9. float calcVoltage = 0;
  10. float dustDensity = 0;
  11. float dust; // zmienna pojedyńczego pomiaru
  12.  
  13. float MIN_VOLTAGE = 600.0;
  14. int MAX_ITERS = 10;
  15.  
  16.  
  17. float avgDust = 0; // uśredniony wynik z 10 pomiarów
  18. int iter = 0;
  19.  
  20.  
  21.  
  22. //arduino
  23. void setup(){
  24.   Serial.begin(9600);
  25.   pinMode(ledPower,OUTPUT);
  26. }
  27.  
  28. float measureDust() {
  29.  
  30.   digitalWrite(ledPower,LOW);           // włączenie LED
  31.   delayMicroseconds(samplingTime);
  32.  
  33.   voMeasured = analogRead(measurePin);  // odczytanie wartości zmierzonej
  34.  
  35.   delayMicroseconds(deltaTime);
  36.   digitalWrite(ledPower,HIGH);          // wyłączenie LED
  37.   delayMicroseconds(sleepTime);
  38.  
  39.   calcVoltage = (5000.0 / 1024.0) * voMeasured;
  40.  
  41.   //dustDensity = 0.17 * calcVoltage - 0.1;
  42.   if (calcVoltage > MIN_VOLTAGE)
  43.   {
  44.     return (calcVoltage - MIN_VOLTAGE) * 0.2;
  45.     //return (0.17 * calcVoltage) - 0.1;   różne opcje zamiany tego na wartość
  46.   }
  47.   return 0;  
  48. }
  49.  
  50.  
  51.  
  52.  
  53.  
  54. //arduino
  55. void loop(){
  56.  
  57.    avgDust = 0;
  58.    iter = 0;
  59.  
  60.    while (iter < MAX_ITERS)
  61.    {
  62.      dust = measureDust();  //funkcja zwracająca pojedyńczy pomiar pyłu
  63.      if (dust > 0)
  64.      {
  65.        avgDust += dust;
  66.        iter++;
  67.        delay(10);
  68.      }    
  69.    }  
  70.    avgDust /= MAX_ITERS;
  71.  
  72.    //avgDust = measureDust();
  73.  
  74.    Serial.print("D = ");
  75.    Serial.print(avgDust);
  76.    Serial.println("ug/m3");  
  77.     delay(2000);
  78. }
  79.