Arduino – Miernik pojemności akumulatora

Z racji tego, że ostatnio zamawialiśmy w firmie sporą pakę z akumulatorami i panowie z Hongkongu „zapomnieli” opisać jaką pojemność mają ogniwa trzeba było je pomierzyć. Zaraz ktoś się doczepi, że można było prościej, tak można było jednak przy tej mnogości wersji ( 60 różnych ) tak jest wygodniej. Mogłem oczywiście mniej więcej określić ich pojemność  znając pobór prądu oraz  czas działania akumulatora jednak jest to metoda mniej więcej dokładna. Najprościej było by zakup gotowego miernika pojemności, jednak potrzeba szybkiego ogarnięcia sprawy wymusiła produkcję miernika samemu. Cały miernik został wykonany z elementów które miałem pod ręką.

Jak działa układ ?

Cała zasada opiera się o badanie spadku napięcia na pierwszym rezystorze 1Ω. Jeżeli znamy jego rezystancję jesteśmy w stanie określić prąd w oczku. Na wyświetlaczu podczas pomiaru możemy obserwować bieżące napięcie akumulatora i prąd płynący w obwodzie oraz bieżącą pojemność.  Jeżeli napięcie spadnie poniżej 2.8V układ kończy pomiar, MOSFET  rozłącza obwód pomiarowy oraz na wyświetlaczu pojawia się wartość końcowa pojemności. Średni błąd pomiarowy układu waha się między 80-120mA, dla mnie jest to wystarczające, gdyż pod „młotek” trafiały akumulatory od 4000mAh w górę.

Do wykonania będą nam potrzebne następujące elementy:

– Arduino np. Arduino nano,
– Tranzystor MOSFET IRFZ44N lub zamiennik
– Rezystor 1Ω / 5W (zalecany radiator)
– Rezystor 3,9-4,2Ω/ 5W (zalecany radiator)
– Wyświetlacz 16×2 wraz z modułem I2C
– Wentylatorek na 5V jako opcja (ja musiałem założyć gdyż układ pracuje prawie bez przestoju)

Schemat ideowy połączeń z Arduino:

miernik akumlatorow arduino

Kod programu:

// Copyright © by swistak
// www.tranzystor.pl
// I2C piny
//VCC – > 5V
//GND – GND
//SCL -> A5
//SDA -> A4

#define mosfet 13
#define highPin A1
#define lowPin A0
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu układu na 0x27

boolean koniec = false;
int interwal = 5000;  //Interval (ms) between measurements

float mAh = 0.0;
float rezystancja = 1.0;
float napRef = 4.58; // wartość napięcia zasilającego sprawdz pin 5V
float prad = 0.0;
float battVolt = 0.0;
float shuntVolt = 0.0;
float battLow = 2.8;

unsigned long previousMillis = 0;
unsigned long millisPassed = 0;

void setup() {

pinMode(mosfet, OUTPUT);
digitalWrite(mosfet, LOW);
lcd.begin(16,2);
lcd.home();
lcd.print(„Test ogniwa”);
lcd.setCursor(0,1);
lcd.print(„Tranzystor.pl”);
delay(2000);
lcd.clear();
}

void loop() {

battVolt = analogRead(highPin) * napRef / 1024.0;
shuntVolt = analogRead(lowPin) * napRef / 1024.0;

if(battVolt >= battLow && koniec == false)
{
digitalWrite(mosfet, HIGH);
millisPassed = millis() – previousMillis;
prad = (battVolt – shuntVolt) / rezystancja;
mAh = mAh + (prad * 1000.0) * (millisPassed / 3600000.0);
previousMillis = millis();
lcd.clear();
lcd.home();
lcd.print(„U:”);
lcd.print(battVolt);
lcd.print(„V”);
lcd.setCursor(9,0);
lcd.print(„I:”);
lcd.print(prad);
lcd.print(„A”);
lcd.setCursor(0,1);
lcd.print(mAh);
lcd.print(„mAh”);
delay(interwal);
}
if(battVolt < battLow)
{
digitalWrite(mosfet, LOW);
koniec = true;
lcd.clear();
lcd.home();
lcd.print(„Koniec pomiaru”);
lcd.setCursor(0,1);
lcd.print(mAh);
lcd.print(„mAh „);
delay(interwal * 2);
}
}

Plik ino do pobrania.

Wygląd zmontowanego układu:

Gotowy miernik akumulatorów

Post Author: swistak

6 thoughts on “Arduino – Miernik pojemności akumulatora

    Viteck

    (20 sierpnia 2019 - 21:42)

    wyskakuje błąd podczas kompilacji stray’\342

    swistak

    (21 sierpnia 2019 - 08:24)

    Przed chwilą sprawdziłem u siebie wgrało bez problemu, dołączyłem do wpisu gotowca .ino. Po kawałku błędu też ciężko cokolwiek powiedzieć.

      Viteck

      (22 sierpnia 2019 - 14:09)

      Zrobiłem nową pcb i już działa, ale źle podaje napięcie akumulatorka (zaniża aż o 0.3v) Jak długo tak średnio trwa pomiar.?

    Viteck

    (22 sierpnia 2019 - 00:28)

    Wgrało, biblioteka do lcd była problemem. Działa, alec zęściowo dobrze, bo mam jakieś dziwne wskazania, aku 18650 22000mAh naładowane 4.02V pokazuje mi 3.85V I:0.08A 0.05mAh i pomiar trwa kilka sekund.

      swistak

      (22 sierpnia 2019 - 14:29)

      Sprawdzałeś czy w kodzie mas ustawione prawidłowe napięcie VIN ? czym większa pojemność aku tym dłuższy pomiar czasowo nigdy nie sprawdzałem.

    swistak

    (22 sierpnia 2019 - 14:27)

    Coś źle złożone, w moim przypadku zadziałało od strzała.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.