Bateria... taka prosta rzecz. W szczególności popularny paluszek, czyli R6, AA. Cechy charakterystyczne: cylindryczna obudowa, 1.5V i cena od mniej niż złotówki do kilku złotych za sztukę. Podobno te droższe, których reklamy możemy oglądać w telewizji mają większą pojemność, starczają na dłużej i ogólnie są lepsze. O tyle lepsze, że opłaca się wydać kilka razy więcej pieniędzy i kupić właśnie je zamiast tanich zamienników.

Czy rzeczywiście? Jakoś nigdy nie byłem do tego taki przekonany. Oczywiście, najdroższa bateria powinna być wielokrotnie lepsza od najtańszego "chińskiego badziewia". Tego nie negowałem. Ale co z tańszymi odpowiednikami ze średniej półki? Różnica w jakości jest aż tak duża, że usprawiedliwia różnicę w cenie? Zagraniczne projekty dowodzą, że zdecydowanie nie. Wystarczy popatrzeć na wyniki opublikowane na Battery Showdown. Różnica w koszcie jednej Ah potrafi być wielokrotnie różna. I nie zawsze najdroższa bateria jest tą najlepszą. Podobne wnioski płyną z lektury artykułu Denisa Hennessyego. Szkoda tylko, że testy nie uwzględniały baterii dostępnych na naszym rodzimym rynku.

A szczęście, kolega Denis jest na tyle sympatycznym i otwartym człowiekiem, że cały swój kod umieścił na GitHubie. A ja, zainspirowany jego projektem postanowiłem go zrealizować w naszych rodzimych realiach. Z kilkoma zmianami. Po pierwsze, całość została maksymalnie uproszczona. Zrezygnowałem z LCD, pomiaru temperatury i tak dalej.

Układ elektryczny też został uproszczony i oprócz obwodu z baterią obciążoną żarówką o oporze 3.2Ohma posiada jeszcze tylko LED informujący o trwającym pomiarze:

W kodzie zostało praktycznie tylko to co istotne dla pomiaru pojemności baterii w dżulach (J) i miliwatogodzinach (mWh).Jak to policzyć? Dość prosto. Wystarczy co sekundę wykonać następujący kod:

voltage = 5.0 * ((float) analogRead(V_METER)) / 1024.0;

float current = voltage / R_LOAD;
joules += voltage * current;
float wattHours = (joules / 3600.0) * 1000.0;

Czyli:

  1. obliczamy napięcie na podłączonej baterii (zmienna voltage) (Arduino zwraca wartość wejść analogowaych jako liczba w zakresie 0-1023, więc jest potrzebne trochę dzielenia i mnożenia),
  2. obliczamy aktualne natężenie (current) prądu ze wzoru I = U / R.  U znamy, bo właśnie je obliczyliśmy, R jest stałe i u mnie wynosi 3.2Ohma, więc obliczenie prądu nie stanowi najmniejszego problemu,
  3. zwiększamy licznik dżuli (joules) o iloczyn napięcia i natężenia (P = U * I),
  4. przeliczamy dżule na miliwatogodziny dzieląc przez 3600 (liczba sekund w godzinie) i mnożąc przez 1000 (przejście z Wh na mWh).

I to tyle. Uruchamiając powyższy kod co sekundę zwiększamy licznik dżuli tak długo, jak napięcie na baterii nie spadnie poniżej wartości krytycznej. Ja przyjąłem 0.2V jako wartość krytyczną, ale chyba ją podniosę do dużo bardziej użytecznej wartości 0.8V w następnych pomiarach.

Wracając do tematu porównania baterii dostępnych na naszym rynku. Badania trwają. Nie będę zdradzał wyników częściowych, powiem tylko tak: jest ciekawie, a liderem jest znana marka raczej nie kojarzona z dobrymi bateriami. Więcej spoilerów nie będzie. Zamiast tego wykres pokazujący różnicę w charakterystyce rozładowania baterii alkalicznej i akumulatora NiMH.

Już na pierwszy rzut oka widać, że teoretyczna przewaga zwykłej baterii nad akumulatorem polegająca na wyższym napięciu (1.5V kontra 1.2V) nie starcza na zbyt długo. Krzywa napięcia dla akumulatora ma bardziej płaski przebieg i w efekcie dłużej dostarcza on wyższe napięcie niż bateria w tych samych warunkach.

Cała dokumentacja projektu, czyli kod źródłowy, schemat podłączeniowy i biblioteki są dostępne na GitHubie.