18650 Battery capacity checker

Some of you know, I really like lithium ion batteries

*shocked*

Shut it!  This is a short post, I don’t need you hamming up the works.

Just wait till I show up in your videos….

You wouldn’t….

Hello….

Oh hell…..

Ok, lets not worry about that now.

I picked up a pretty sweet haul of batteries this week.

 

 

 

 

22lbs.  I counted 107 2cell packs.  214 cells to check out.  This is great, but I have a single opus charger that can do 4 cells at a time.

So 214 cells will take some time to process.  I have done that game.  So I wanted to do more cells.  There are examples online of doing this with arduino’s and what not and since I am big fan of arduino’s anyways I decided to give that a shot.  I built it out initially with an arduino uno.  Using the awesome guidance of Adam Welch.  If you don’t know who Adam is, you gotta check out his work.

Website: http://adamwelch.co.uk/ 
Youtube: https://www.youtube.com/channel/UCm5sG3-BXQZfVy3st2T_XKg

His work I used for this is here.

I modified the code a little as I didn’t have that screen.  I have a 20×4 screen.  I also updated mine to calculate the voltage reference from the internal 1.1v reference.


/*
* Battery Capacity Checker
* Uses Nokia 5110 Display
* Uses 1 Ohm power resister as shunt - Load can be any suitable resister or lamp
*
* YouTube Video: https://www.youtube.com/embed/qtws6VSIoYk
*
* http://AdamWelch.Uk
*
* Required Library - LCD5110_Graph.h - http://www.rinkydinkelectronics.com/library.php?id=47
*/

#include <LiquidCrystal_I2C.h>
#define gatePin 2
#define highPin A0
#define lowPin A1

boolean finished = false;
int interval = 5000; //Interval (ms) between measurements

float mAh = 0.0;
float shuntRes = 1.0; // In Ohms - Shunt resistor resistance

float current = 0.0;
float battVolt = 0.0;
float shuntVolt = 0.0;
float battLow = 2.9;

LiquidCrystal_I2C lcd(0x27,20,4);
unsigned long previousMillis = 0;
unsigned long millisPassed = 0;

void setup() {
analogReference(INTERNAL);
Serial.begin(115200);
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
Serial.println("Battery Capacity Checker v1.1");
Serial.println("battVolt current mAh");

pinMode(gatePin, OUTPUT);
digitalWrite(gatePin, LOW);

lcd.setContrast(68);

lcd.clear();

lcd.print("Battery");
lcd.print("Check");
lcd.print("Please Wait");
lcd.print("AdamWelch.Uk");

delay(2000);
lcd.clear();
}

void loop() {
voltRef = readVcc() / 1024.0;
Serial.print("Volt Ref: ");
Serial.println(voltRef);
battVolt = analogRead(highPin) * voltRef / 1024.0;
Serial.print("Batt Vol: ");
Serial.println(battVolt);

shuntVolt = analogRead(lowPin) * voltRef / 1024.0;
Serial.print("Shunt Val: ");
Serial.println(shuntVolt);
Serial.println();
Serial.println();
/*
Serial.print(battVolt);
Serial.print("\t");
Serial.print(current);
Serial.print("\t");
Serial.println(mAh);
*/
if(battVolt >= battLow && finished == false)
{
digitalWrite(gatePin, HIGH);
millisPassed = millis() - previousMillis;
current = (battVolt - shuntVolt) / shuntRes;
mAh = mAh + (current * 1000.0) * (millisPassed / 3600000.0);
previousMillis = millis();

lcd.setCursor(0,0);
lcd.print("Discharge ");
lcd.setCursor(0,1);
lcd.print("Volt:");
lcd.print(battVolt);
lcd.print("v ");
lcd.setCursor(0,2);
lcd.print("Current:");
lcd.print(current);
lcd.print("a ");
lcd.setCursor(0,3);
lcd.print(mAh);
lcd.print("mAh ");
lcd.print("Running ");



}
if(battVolt < battLow)
{
digitalWrite(gatePin, LOW);

finished = true;



lcd.clear();
lcd.print("Discharge");
lcd.print("Voltage:");
lcd.print(battVolt);
lcd.print("v");

lcd.print(mAh);
lcd.print("mAh");
lcd.setCursor(0,1);
lcd.print("Complete");


}
delay(interval);
}

long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}

Next step is to add a “charging” function with a tp4056 so I can charge then discharge.

 

Amazon – 5 for 6.95

Ebay – 10 for 4.95

Aliexpress – 10 < 2 bucks.

 

Once that is working I should be able to add a couple more modules.  I have been really looking towards doing something with Brett Wattys 8 module charger.  That things is INTENSE!!!

If you want to see all the info check out the secondlifestorage forum.

https://secondlifestorage.com/t-Brett-s-Arduino-8x-Smart-Charger-Discharger

He also has a portal he is setting up to help aggregate some numbers on how many cells the community has recycled.

 

 

Until later!!!

bye!!!!

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.