Restore Batteries with Arduino

Picture of Restore Batteries with Arduino
Do you have rechargeable batteries that aren't chargeable anymore? There are many possible reasons why a battery stops taking a charge, here are a couple of common ones. It may have been damaged by heat due to overcharging, or sulfates may have built up on the internal plates due to extreme discharge. The good news is that many times a battery in this condition can be restored. You may be familiar with desulfating circuits, the setup I'm presenting in this article is my take on one.
Remove these adsRemove these ads by Signing Up

Step 1: The Circuit

Be advised that this is an experimental setup, it should only be duplicated by those who are familiar with appropriate safety precautions. DO NOT attempt to charge Li-Ion/Polymer batteries with this setup as there is a risk of explosion.

This circuit works by pulsing high voltage short duty cycle spikes, to a problematic battery. This can help breakup sulfation, and re-stimulate the chemistry of the battery. This setup is intended to be used primarily for Lead-Acid, Nickel-Cadmium, & Nickel-Metal-Hydride batteries.

The way this circuit functions is a square wave pulse generated by the Arduino is amplified with a MOSFET to switch an inductor (L1) on and off rapidly. Each time the power to the inductor (L1) is switched off the magnetic field surrounding the coil collapses which generates a high voltage spike. We direct this spike into the charge battery through D1 which allows current to flow in only one direction. D2 is a safety precaution to help protect the MOSFET from being damaged by the high voltage spikes. D3 is a blocking diode to keep supply voltage from coupling with the Arduino's supply. R1 is a pull down resistor to keep the MOSFET off until it receives a positive pulse on the gate.

I used a 12VDC power supply to power the charge circuit.

Parts List:
  • Q1 = N-Channel MOSFET rated above the input voltage, and for a couple of amps to be safe.
  • D1, D2, D3 = 1N4007 Rectifier Diodes
  • R1 = 10K 1/2W
  • L1 = Experiment with a variety of coils. I used a small air core spool of light gauge magnet wire that measured 15 Ohms.
matsk7 months ago
To expand the scoop would be to measure the voltage and the temperature on the battery and log it to an SD card or just to the serial port.
Thom Kouwen10 months ago
Nice project, I normally just put 10V on a NiMH for a second, quite cruel now that I think about it, but it works. Since this is your first project, and I see you haven't used PWM, I think these two links will be quite helpful for learning the things Arduino can do:

Good luck!
technovative (author)  Thom Kouwen10 months ago
Thanks, manually pulsing voltage to a battery above that which it is rated for can indeed help stimulate it to take a charge. I appreciate the suggestion of using PWM, and the URL's. I used the analogWrite function in my first sketch, it didn't produce the result that I wanted, I realize now it was due to error. I understand that using the delay function limits the other functionality that can be added to the loop. However if the Arduino is just being used as a trigger source for the charge circuit, I like the simple versatility of the digitalWrite and delay functions.
It is indeed a simple system, but it actually also a kind of PWM, it's just at a low frequency. If you want to PWM in frequencies other then the standard 500Hz, check out this link: . With this you can set your PWM to a whole range of frequencies, even 30Hz is an option.

Good luck with your future Arduino Projects!

Get More Out of Instructables

Already have an Account?


PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!