Szukaj na tym blogu

sobota, 23 marca 2013

Oszczędzanie energii

Jestem po pierwszych zabawach z arduino czyli czujnikami temperatury, diodami, odbiornikiem podczerwieni itp postanowiłem opisać swoje pierwsze rozważania na temat poboru energii przez układ.

Budując układ do pomiaru temperatury (patrz Jak mierzyć temperaturę z Arduino) napisałem prosty program
#define TEMP_PIN 2

void setup()
{
  Serial.begin(57600);
}


void loop()
{
  float wart = analogRead(TEMP_PIN);
  float temp = ((wart * 5.0 / 1024.0) - 0.5) / 0.01;

  Serial.print(temp);
} 
i zauważyłem, że kolejne pomiary potrafią się czasem sporo różnić mimo, że temperatura czujnika tak naprawdę się nie zmienia. No cóż, pewnie napięcie na usb niezbyt stabilne jest więc stąd te niedokładności. Aby je usunąć zrobiłem małą zmianę w programie, a mianowicie:

#define TEMP_PIN 2
#define INTERVAL 60000

unsigned long lastTime = 0;
unsigned long count = 0;
unsigned long value_sum = 0;


void setup()
{
  Serial.begin(57600);
}


void loop()
{
  int value = analogRead(TEMP_PIN);
  value_sum += value;
  
  count ++;
  
  unsigned long time = millis();
  
  if (time - lastTime > INTERVAL)
  {
    float temp = (((value_sum) * 5.0 / 1024.0 / count) - 0.5) / 0.01;

    Serial.print(temp);
    Serial.print(";");
    Serial.print(count);

    Serial.println();

    lastTime = time;
    count = 0;
    value_sum = 0;
  }
}

zmianę, która jak łatwo zauważyć przez minutę liczy średnią, a następnie wypisuje ją oraz liczbę pomiarów.W ciągu minuty na moim arduino liczba pomiarów w ciągu minuty to prawie 500 tys. Zaczęło mnie zastanawiać czy tak duża liczba pomiarów jest potrzebna. Intuicja mi bowiem podpowiadała, że każdy taki pomiar zużywa energię, a arduino z baterii potrafi być zasilane więc dobrze aby na niej długo działało.
Po nieco trudnej ale ciekawej lekturze dwóch artykułów:
wyszło mi, że wystarczy ich o wiele mniej. Powiedzmy 10 tys. aby uzyskać dokładność na poziomie 0,01 stopnia - mam na myśli wyeliminowanie wahań odczytów.

Pytanie jednak brzmi czy zmniejszenie liczby pomiarów poprzez wstawienie instrukcji 'delay' na końcu metody loop zmniejszy pobór energii. Arduino podłączone do 9V baterii wykonując powyższy program pobiera 47,1 mA. Po dodaniu na końcu instrukcji
  delay (6); 
liczba pomiarów spada do 9800, a pobór prądu ... rośnie do 47,8 mA.

No i to by było na tyle w temacie oszczędzania energii. Szczerze mówiąc zawiedziony jestem, taki fajny algorytm dynamicznego dostosowywania liczby pomiarów do aktualnych warunków w głowie miałem.

Do tematu jednak zamierzam wrócić bo to się wierzyć nie chce, że nie da się postawić układu w stan zawieszenia kiedy zapotrzebowanie na energię jest minimalne

Brak komentarzy:

Prześlij komentarz