Сегодня мы покажем вам, как сделать тестер емкости литий-ионных аккумуляторов с помощью Arduino. Тестер емкости аккумулятора разряжает полностью заряженный литий-ионный элемент через резистор, одновременно измеряя ток, протекающий через резистор, для расчета его емкости.

Это устройство очень простое и состоит всего из нескольких компонентов: микроконтроллер Arduino Nano, ЖК дисплей, маленькое реле на 5В, резистор 5 Вт, два небольших резистора и кнопка.
Когда мы нажимаем кнопку пуска, тестовая батарея подключается параллельно резистору 4 Ом и разряжается через него. Напряжение считывается микроконтроллером каждые полсекунды, поэтому за один час получается 7200 измерений. Используя закон Ома, можно узнать ток, подаваемый на нагрузку. Затем просто умножаем 1 из 7200 часов на текущее значение и складываем полученные числа до тех пор, пока батарея не разрядится ниже 3 В, а затем на дисплее отобразится результат измерения в мА в час.
Для начала нам нужно подключить полностью заряженный аккумулятор. На дисплее отображается текущее напряжение аккумулятора. Как только мы нажимаем кнопку пуска, начинается тестирование батареи. Следующая информация будет отображаться на экране: количество выполненных измерений, напряжение батареи, а также мощность по времени в милиампер в час. Тест заканчивается, когда напряжение достигает 3 вольт и аккумулятор считается разряженным. Это может занять некоторое время в зависимости от емкости аккумулятора.
Когда напряжение аккумулятора падает до 3 вольт, измерение завершается, и на дисплее отображается фактическая емкость аккумулятора, а также количество выполненных измерений. Схема подключения компонентов измерителя емкости аккумуляторов представлена на следующем изображении.

Код программы для этого тестера батарей следующий:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 9;
int sensorPin = A0;
int sensorValue = 0;
const int relay= 10;
int buttonState = 0;
float mah = 0.0;
long timestart ;
void setup() {
lcd.begin(16, 2);
lcd.print("Batt life tester");
pinMode(relay, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
digitalWrite(relay, 0 );
while (buttonState == LOW ) {
sensorValue = analogRead(sensorPin);
buttonState = digitalRead(buttonPin);
lcd.setCursor(0, 1);
lcd.print((sensorValue*4.98)/1023);
lcd.print(" Volts");
delay(500);
}
digitalWrite(relay, 1 );
lcd.setCursor(0, 0);
lcd.print("Testing ");
lcd.setCursor(0, 1);
lcd.print(" ");
mah = 0.0;
timestart = millis( );
while ( ((sensorValue*4.98)/1023) > 3.00 ) {
lcd.setCursor(0, 1);
lcd.print((sensorValue*4.98)/1023);
lcd.print(" V ");
sensorValue = analogRead(sensorPin);
mah = mah + (((sensorValue*4.98)/1023)/4 )/7.2;
lcd.print(mah);
lcd.print(" mAh ");
delay ( 500 ) ;
lcd.setCursor(8,0);
lcd.print((millis( )- timestart)/1000);
}
digitalWrite(relay, 0 );
lcd.setCursor(0, 0);
lcd.print(mah);
lcd.print(" mAH ");
lcd.print((millis( )- timestart)/1000);
lcd.print(" S ");
buttonState = digitalRead(buttonPin);
}
© digitrode.ru