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:
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 0x27boolean koniec = false;
int interwal = 5000; //Interval (ms) between measurementsfloat 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);
}
}
Wygląd zmontowanego układu:
Super układ, jeszcze tylko mam pytanie, jak go przerobić, żeby obsługiwał napięcie akumulatorz w zakresie 1,5 -12v?
Można przerobić jednak pamiętaj, że każdy ma inne napięcie rozładowania musisz je dostosować. Dla 3,7V ogniwa to float battLow = 2.8;
Czemu wyświetla błąd podczas wgrywania do arduino? stray '\’ in program ?? jakieś rozwiązanie jest?
Nawet samo arduino ci odpowiada stray ‚\’
Już sobie poradziłem,użyłem przedtem zepsutego arduino nano 😡
Nie jesteś jedyny.
Coś źle złożone, w moim przypadku zadziałało od strzała.
Witam a jest opcja przeprojektowania na akumulatory 12v i pojemność powyżej 100 Ah
Można czemu nie, kilka zmian w kodzie jak i w schemacie i gotowe.
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.
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.
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ć.
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.?
Ponieważ pomiar powinien być jak najbliżej źródła napięcia.
Innymi słowy GND z Arduino nie powinien być podłączony blisko tranzystora lecz przy akumulatorze, ponieważ mierzone jest napięcie w punkcje podłączenia. A jak wiadomo na linii obciążonej powstają spadki napięcia.
Analogicznie rzecz się ma z przewodem podłączonym do A1 Arduino. Powinien on być podłączony jak najbliżej plusa akumulatora.
Przewody do rozładowywania czyli te między tranzystorem a rezystorami oraz zaciskami akumulatora powinny być słusznej grubości. W zależności od długości i prądu rozładowywania np. 1,5mm2.
Jeżeli ww. warunki zostaną spełnione wtedy pomiar nie będzie miał przekłamań.
Dokładnie, czasem też rodzaj przewodu ma znaczenia.
wyskakuje błąd podczas kompilacji stray’\342