In my previous instructables I described the details of energy monitoring of a off grid solar system.I have also won the 123D circuits competition for that.You can see this ARDUINO ENERGY METER.

Finally I post my new version-3 charge controller.The new version is more efficient and works with MPPT algorithm.

You can see it by clicking the following link.


You can see my version-1 charge controller by clicking the following link.


In solar power system, charge controller is the heart of the system which was designed to protect the rechargeable battery .In this instructables I will explain the PWM charge controller.

In India most of the people are living in rural area where national grid transmission line is not reached till now.The existing electric grids are not capable of supplying the electricity need to those poor people.So renewable energy sources ( photo voltaic panels and wind-generators) are the best option I think. I know better about the pain of village life as I am also from that area.So I designed this DIY solar charge controller to help others as well as for my home.You can't believe, my home made solar lighting system helps a lot during the recent Cyclone Phailin.

Solar power have the advantage of being less maintenance and pollution free but their main drawbacks is high fabrication cost, low energy conversion efficiency. Since solar panels still have relatively low conversion efficiency, the overall system cost can be reduced using a efficient solar charge controller which can extract the maximum possible power from the panel .

What is a Charge Controller ?

A solar charge controller regulates the voltage and current coming from your solar panels which is placed between a solar panel and a battery .It is used to maintain the proper charging voltage on the batteries. As the input voltage from the solar panel rises, the charge controller regulates the charge to the batteries preventing any over charging.

Types of Charge controller :


2. PWM


The most basic charge controller(ON/OFF type) simply monitors the battery voltage and opens the circuit, stopping the charging, when the battery voltage rises to a certain level.

Among the 3 charge controllers MPPT have highest efficiency but it is costly and need complex circuits and algorithm.As a beginner hobbyist like me I think PWM charge controller is best for us which is treated as the first significant advance in solar battery charging.

What is PWM:

Pulse Width Modulation (PWM) is the most effective means to achieve constant voltage battery charging by adjusting the duty ratio of the switches ( MOSFET ). In PWM charge controller, the current from the solar panel tapers according to the battery’s condition and recharging needs. When a battery voltage reaches the regulation set point, the PWM algorithm slowly reduces the charging current to avoid heating and gassing of the battery, yet the charging continues to return the maximum amount of energy to the battery in the shortest time.

Advantages of PWM charge controller :

1. Higher charging efficiency

2. Longer battery life

3. Reduce battery over heating

4. Minimizes stress on the battery

5. Ability to desulfate a battery.

This charge controller can be used for :

1. Charging the batteries used in solar home system

2. Solar lantern in rural area

3. Cell phone charging

I think I have described a lot about the background of the charge controller.let starts to make the controller.

Like my earlier instructables I used ARDUINO as the micro controller which include on-chip PWM and ADC.

Remove these adsRemove these ads by Signing Up
1-40 of 270Next »
sspence2 days ago

ah, becasue you used a IRF MOSFET, you needed a separate driver transistor. If you had used the IRL540, you could have avoided the need for a driver transistor.

deba168 (author)  sspence2 days ago

Thanks :)

I didn't know it during building this project.

IfranS7 days ago

what is a good out put voltage for a charge controller?

nrh3bat1 month ago

IRF540 is a logic level MOSFET, why you put a MOSFET driver on them?

kelduino1 month ago

can i use this instructable to charge 12v battery?

deba168 (author)  kelduino1 month ago

No it needs modifications. You can use my version -2

thanks for the fast reply sir deba..i cant find the parts needed for your ver.2 charge controller :(

like the mbrf2045 and the tvs diode..

are the buck converter and current senor is needed there or just optional?

waylon meurs made it!1 month ago

I built this and housed it in a water proof case. Instead of the whole load side I just paralleled off of the battery. I use it to power another arduino circuit. In the picture the middle wire coming out of the bottom is my 6V power jack. Awesome project. Thanks for posting.

deba168 (author)  waylon meurs1 month ago

Its looking very nice.

Thanks for sharing the pics.

Say hello to one of your friends can give you the arduino code you wonder

deba168 (author)  recep.kasikcioglu1 month ago

Hello :)

Have you modified my code ?

what ?

hye..can you guide me on how to design this controller to have both solar panel and electrical supply (ac) as the input?

deba168 (author)  budakbarubelaja1 month ago

I can help you.Just proceed :)

I am doing the same project but I am going to use a 50 watt solar panel so is it ok to use this circuit?

deba168 (author)  shimaa.gamal.92161 month ago

It is possible.

Just go through my version-2 charge controller.

It matches your requirement.

AlberA2 months ago

How hard is it to build one... for person that have just worked with arduino and stuff like this for 1 month. Will i have to calculate stuff or do i just need to follow your steps.

deba168 (author)  AlberA1 month ago

Its simple.

You can proceed. If you face any difficulties, I am ready to help you.

amazing detail. I will defiantly build one. quick question. is this design ok for wind turbine charging?

Wind turbine chargers usually have a dump load circuit. That is for when the batteries are fully charged or the turbine is supplying more than the load, it dumps the power into a power resistor or heater to keep the turbine from over speeding. It might not be necessary if the turbine regulates its own speed, but usually putting the power to use like in heating water is preferred to just letting the turbine idle.

brilliant. thanks for the share. I built the vertical axis wind turbine yesterday and next week I will commence playing withe the motor and charging circuit. I will inlude your comments into my design and post an Instructable in due time.

Which motor used in wind turbine


deba168 (author)  the_mini_guy1 year ago

I think it should work..wind turbine input must be connected in parallel to solar panel

But I never tested it,you can of luck

merra12 months ago

hye. I've made the solar charge controller circuit. but the problem is when the solar is disconnected, the circuit still reads the solar voltage. it is supposed to be 0 V. Couldn't seem to find what the problem is. can you help? thank you.

vish r merra2 months ago

Hey U need to ground analog pin after removing solar panel .

Analog pin in ardiuno needs closed path.

deba168 (author)  merra12 months ago

Place the diode D1 in between MOSFET Q1 and battery .It serve the same purpose as before .I think it will work.If it works then tell that any one facing the same problem can rectify.

merra deba16812 months ago

the diode has been placed, but nothing happened. diode D1 at the input after solar don't have to be changed right? just add the same diode between the battery and mosfet is it? or is it something to do with the coding?

Hi if I were to use a 5v solar panel and a 7v rechargeable battery... What do I need to consider for the circuit... How do I get the correct resistance value for the voltage sensor?..

sir why does the code doesnt work with my arduino uno?can you give the code for the 12v system?thanks in advance sir

deba168 (author)  anthony.pablo22 months ago

I have made a charge controller which is suitable for both 6V and 12V.

You can see it from the link bellow.

The driver doesn't work.
I've tried to connect pin D2 to base of BJT,tried 2N3904 and 2N2222,either works.
But if connected pin D2 to MOSFET directly,it works.

The voltage of D2 is 5V while the program outputed it as digital high.But drops into 0.6V while connected to base of BJT.
I guess that's reason since 0.6V is less than Vbe.But my resistors are same as picture shows.I even tried smaller resistor,not working.
If I connect Vcc via R1 to base of BJT,it also drops into 0.6V and not working.
If connect Vcc to base of BJT directly,arduino got a shortcut.

Please give me some advice.

deba168 (author)  zhaoyou.huang.92 months ago

The driver works for me.The output from the driver is complement of the arduino signal.If you send 5V (HIGH) from arduino you will get 0V (LOW) at output.

sanusername3 months ago

Great work sir

i am working on the similar project but i need to convert the 6V dc output from this circuit to the ac current (with at least 1A rating)

Please guide me how can i do that (which inverter or circuit to use )

deba168 (author)  sanusername2 months ago

Thanks :)

You have to use a inverter for converting DC to AC.

AymanS23 months ago

guys can anybody tell me where to go if i want to build a solar charge controller but for a bigger system 12V 100Ah batteries

deba168 (author)  AymanS22 months ago

You can look into my version-2 controller.It is for bigger system.

JimC63 months ago
Can i use a 10 watt solar panel in this solar charge controller?
deba168 (author)  JimC62 months ago
emlaabs made it!3 months ago

here its not hooked up to the the panel, battery, or a load but it works! Nice tutorial, Thanks a bunch!!

1-40 of 270Next »