Introduction: Bench PSU Power Supply From Old ATX With Arduino and LCD Monitor

Hello all and welcome to my first Instructable.

I've always wanted a bench PSU for easy access to a power source, and something that I can rely on when working on various projects. I wanted a PSU that:

• provides 12v, 5v, and 3.3v outputs
• provides variable voltage outputs
• has an LCD monitor to show voltages
• doesn't cost too much
• looks good as well

Firstly, I have to have a disclaimer: PLEASE be careful when working with mains voltages. Keep all power disconnected whilst working with the power supply. I am not responsible for any damage, loss or any adverse effects that you may incur whilst doing this project.

All images are taken by myself, except the PSU pinouts which are from Google. The schematic diagrams are also mine, and so are the videos.

Now, on to the overall concept.

There will be multiple outputs on the terminals where you can connect patch cables, and there will also be banana sockets for easy hot swap of the modular cables we will be making, or for whatever you like. The LCD will monitor voltages and status of the power supply. There will also be 2 USB outputs which will be powered by the 5V standby so there is always USB power available (my 5vSB allows up to 2.5A so it is good enough for charging my phone). There will also have to be two potentiometers on the front panel to allow adjustment of the variable voltage modules. Four LEDs will indicate that each output rail is working properly, and finally there will be a big power switch.

Firstly I designed the control system based on an Arduino Nano v3 for the monitoring LCD to display voltages and status of the power supply. Next step was to design the circuit diagram to ensure all buttons and switches etc are in the correct places, including voltage dividers for measuring the voltages. I then designed the case for the project ensuring everything can fit on the size chosen, followed by building the case, marking out placement of all components, mounting all components, soldering them together, test running it all, and then the final steps.

Another thing which makes this design cool is that I will be making modular power connectors which can connect to any of the banana sockets for easy access to a variety of power outputs, and connectors.


Components you will need:

• ATX Power supply from old PC or brand new, your choice! (mine was 450W, depends on your requirements)
• 14-18 gauge wire, around 3-5m of it (I used thick speaker wire that I had lying around)
• 22/24 gauge wire (thinner one) for LEDs and switches
• Speaker terminals
• Banana post terminals
• Banana plugs
• Arduino Nano (or a variation)
• Arduino Nano terminal board
• 20x4 HD44780 LCD
• I2C module for LCD
• 120mm PC fan 12V
• DC step-up/down module (eBay)
• Momentary switch

Tools and materials you will need:

• Wire strippers
• Wire cutters
• Heatshrink tubing various diameters
• soldering iron and solder, obviously
• 5mm MDF wood (or your choice of wood)
• Small screws
• Hot glue gun! ;)
• Dremel for cutting out smaller holes/openings
• Sandpaper 120-200 grit, and a finer one 400 grit +
• Black spray paint
• MDF primer if using MDF

It is assumed you have a basic understanding of electronics and soldering, and basic experience with Arduino. I will try my best to help you if you have any questions. Sorry if I have missed out any steps or if something is not clear enough!

So let's begin!

Step 1: Create Design and Wiring Diagram

I used Microsoft Publisher to design the front, side and back panels of the final product. I chose to have 4 x 4 way speaker terminals, and 6 banana posts. I also added a grounding post for an ESD wrist strap for later use. The large angel eye momentary switch allows the PSU to power up and down, and there are 4 LEDs to indicate that each voltage rail is working. Finally the LCD displays voltages and PSU status.

IMPORTANT: To power the ATX PSU without a motherboard being connected, we need to cross the green wire with ground (black wire) on the 20/24 pin connector. The green wire senses if it's OK to power all rails, so this needs to be connected to ground in order to power on. Read on...

Attached are the schematic files which I designed in ExpressSCH, and there are also images of the schematic.

The Arduino detects changes on the interrupt pin D2, which come from the momentary switch, and then sends a high signal to pin D6 which activates a transistor, that connects the GREEN POWER_ON wire to GROUND on the PSU to allow it to power up. When the switch is pressed again, a change is detected on interrupt pin D2 so pin D6 outputs low, breaking the connection to ground and turning the PSU off.

Once I had this completed, I figured out the entire circuit diagram. The idea is to gather all the same coloured wires from the output cables and group them together, but leave one of each colour cable separate for extras, such as the USB power and ground for the Arduino, and most importantly for the input to read voltages. The 5V standby cable is the PURPLE one which will power the Arduino and the LCD, and also the USB ports, so even when the output rails are turned off, the monitoring system will still be active and looking for an input on the interrupt pin (for the power on button), and you can charge your phone without having the entire power supply turned on.

The Arduino has analog input pins capable of reading a maximum voltage of 5V - since we have 12V and possibly more, we will be using voltage dividers to allow a safe input to the Arduino. See the diagram for the values that I used - I was able to get an accuracy of +-0.05V on all rail readings. This is because of the 10-bit resolution of the Arduino's ADC - I noticed that the higher the resistor values you use, the less accurate your readings, so I tried to choose resistor values that were in between and gave me the best readings I could get. Feel free to experiment with different values, but be sure NOT to input more than 5V on any of the Arduino pins as this will more than likely damage your Arduino!

Voltage dividers do what they say - they divide voltage. For more information on this, check out this link: Voltage Dividers tutorial and calculator I used this calculator for aiding with choosing the correct resistor values.

Since there will be 4 LEDs for each rail, measure the voltage on each rail and then calculate the resistor value required to have all 4 LEDs light up at the same brightness. I chose 10mA for all LEDs (I chose blue 3V forward voltage). Calculator: LED Calculator

In my case, my power supply required that I connect a 3.3v (orange) wire to the brown wire, which I believe is the 3.3v sensing rail, as I used an older PSU. But until I did this, the power supply wouldn't stay on - it would turn on for a split second and then power down. So try connecting the green wire to ground, and if it doesn't stay on then you may need to cross a brown and orange wire, if you have a brown wire. Else it should power up. I soldered the orange wire to the brown wire.

Also, there is a gray wire which will output 5V when the power supply is turned on i.e when you connect the green wire to ground. This gray wire connects to the Arduino's pin D4 and the software detects an input on the pin, and displays 'POWER ON' on the LCD if it detects 5V or 'POWER OFF' if it detects 0V. That is how we monitor the status of the PSU. I also designed a rotating square block which shows that the Arduino is running and voltage monitoring is being updated. You will see this in the video.

You may need a load resistor across 5V to keep the power supply on - I tried this on mine but as mentioned, I was required to connect the orange and brown wires, and the load resistor was not an issue. If you do need a load resistor, please make sure it is rated for at least 10W, and 10ohm. I personally would recommend you add it anyway, but I didn't add one. I will probably add one after having completed this Instructable.

In the third picture, you see a protoboard with terminal blocks - I used this protoboard to solder the voltage divider resistors on to, and wired them to the terminal blocks such that all the different rails could connect to it with a common ground for measuring the input. Unfortunately I do not have a picture of this, but the protoboard simply has the voltage divider resistors on there. Wires come out from the middle point of the voltage dividers and go to the respective Arduino pin (refer to the schematic).

Once you know how you will be wiring it all, upload the code to the Arduino, the connect it all up and give it a test run before you go on to build the case. Feel free to modify the case as you require. I left a space on the base on the left hand side as I want to add an LED tester, which I haven't done yet, but I will be doing.

PLEASE NOTE: before uploading the Arduino code you need to change some parameters in the code - see the next step.

The video shows how the control system works; this was before I built the case.

Step 2: Editing and Uploading the Code

So firstly to get accurate readings we need to measure the output voltage of the PURPLE 5V standby cable, as this will be powering the Arduino and the LCD. When we will be calculating the voltage within the code, we must try to have accurate measurements as possible to try and increase accuracy of the readings. This can be changed at the top of the code file, as shown in the first picture.

Secondly, we need to setup the voltage dividers. The schematic on this page shows how to connect them up to the Arduino; it is an extension of the previous schematic. Voltage dividers do what they say - they divide voltage. For more information on this, check out this link: Voltage Dividers tutorial and calculator I used this calculator for aiding with choosing the correct resistor values.

The 3.3v line can be connected directly to the A0 PIN since it should never exceed 5v anyway, but can fluctuate sometimes up to 3.5v from my experience. When wiring the other lines through the voltage dividers, you must measure the resistance of each resistor with a multimeter, and change their respective values in the code - the value must be entered in Ohms. So for me, my R2 resistor was 1.8K for all the voltage dividers, and somehow every single one of the 1.8k resistors was 1770Ohms on my multimeter - in contrast, when I used a 12k resistor for the R1 resistor on the two variable voltage inputs, one of the 12k resistors was 11890Ohms, and the other was 11920Ohms - your mileage may vary. But it is really important to change the values of them.

To calculate the real input voltage from the PSU lines, we first calculate the pin votlage as follows:

The analogRead(PIN) function will give a value between 0 and 1023 since it is a 10-bit ADC (Analog to Digital Converter), so the formula we use to convert this to voltage is:

voltage = ( analogRead(PIN) * Vpower) / 1024

where Vpower is the 5VSB value (5.22 in my case)

For example, if analogRead(PIN) was 600, then the voltage would be (600*5.22)/1024 = 3.058V

We then take this voltage and use the following formula to finish off the calculation:

volts = (voltage) / (R1 / (R2 + R1))

where voltage is calculated from about, and R1 and R2 are the resistor values in Ohms

So if we continue from the above calculation, we would have 3.058 / (1770 / (4650+1770) ) = 11.09V.

This is the measurement for a supposedly 12v input, although this may not reflect 12v it is just an example.

And there we have the code modification done! You can now upload the code to the Arduino. Attached in the .ino file - simply open it with the Arduino IDE, edit the values as described above, and upload it!

Step 3: Building the Enclosure and Component Placement Preparation

Firstly I cut out the side walls for the basic structure of the case, then marked out where all the terminals and mounting holes will be need to cut or drilled out. Also cut out a panel for the PSU backplate for the mains input, and a cooling fan hole on the left panel.

Make sure you know exactly where you need to cut out holes for cooling or input/outputs as it will be much more difficult later on.

Attached are the Microsoft Publisher files containing my design - feel free to make changes yourself as you require.

For cutting out largers areas I drilled a few holes slightly bigger than my jigsaw blade, and then cut them out using the jigsaw with a wood blade. The LED bezel holes were simply drilled out, and the switch required a 16mm spade drill bit. Once the component holes were cut out I sanded and filed them down to try and get a perfect fit as possible - the LCD hole was the hardest one as the alignment on my jigsaw was offset, so I had to sand and file it a fair bit.

After you are happy with this, give all the panels a light sanding with a coarse sandpaper, and a light sanding with a fine one for a smooth finish. Then you are ready to paint the panels.

Since MDF is a big problem when it comes to painting, you will definitely need an MDF primer. I used a brush to paint it on and that is why you can see streaks on the final coat. You should use a roller for a much smoother finish, something I did not have available at the time, unfortunately. The MDF primer will be dry within a couple of hours, then give it 2 coats of black spray paint, or anything of your choice. I would recommend 24 hours drying time before you begin to assemble it.

After it has all dried, screw the fan into place as this will be quite difficult to do later on. After this, temporarily place the panels as you would like them to be fixed, possibly using tape to hold them or clamps - I marked each one to indicate which panel goes next to each other, then used a clamp to hold them in place whilst I drilled pilot holes for the screws. You can also use wood glue, or a combination of both. It is entirely up to you, but screws were good enough from my experience. You want to screw the side and back panels to the bottom base at this point, and leave the top and front panels out for now.

The front panel still needs the components and terminals mounting on so we will not screw it in yet. At this stage you DO want to drill pilot holes for the front panel though, so once everything is mounted you can simply screw it in without struggling. I drilled 3 pilot holes for each side to screw into, but you can choose to use wood glue or anything you prefer.

Step 4: Placing the Components and Terminals

So I added the terminals first, ensuring I could see the solder tabs on the inside of the panel to solder wires from inside. Then I added the LCD, mounted it on and ensured a nice fit. I added the switch, the LEDs and the banana scokets (I actually added them when the project was near completion as they took a while to be delivered, which is why you cannot see them in the 1st picture on this step).

I cut a few lengths of the thicker cable, ready to solder on to the speaker terminals - these will be soldered to the corresponding voltage rails. For the variable voltage regulators, I unsoldered their potentiometers, and extended them to be on the front panel so I can adjust the voltage from the panel. Make sure you remember the correct orientation for them!

I soldered the resistors for the LEDs on at this stage, and connected the common grounds all together for everything, so I only need one ground cable. I wired the variable voltage modules to their terminals, and had their power inputs ready to connect to GND and 12v.

The Arduino terminal requires these inputs for the voltage readings: 3.3v (orange), 5v (red), 12v (yellow), voltage regulator 1 and voltage regulator 2. And it also requires ground, and 5v standby (purple) for powering it up.

Please check the pictures to see how I've connected the terminals for voltage reading inputs. The bottom stripboard has the voltage dividers on there, which are connected to the respective terminals on the Arduino. So basically, on the stripboard under the Arduino terminal board, I soldered the voltage dividers, which have the wires going to the Arduino terminal board. And then I added another terminal block on the stripboard to which the power lines connect from the PSU, making everything easily connectable.

Add the USB ports, and wire them to 5VSB and ground, or normal 5V - it's up to you!

Also you must extend the potentiometers so you can control the variable voltage modules from the front panel!

Step 5: Testing and Final Steps

So this is nearing completion now and requires some testing. I used a voltmeter to confirm all voltages were displayed as accurately as possible on the LCD screen, and as mentioned before, it was accurate to within +- 0.05v for almost everything. I noticed that with the variable voltage modules, the accuracy was very precise within the 3v - 7v range.

I didn't screw the top on, but I used industrial double sided tape - this is because I need to add the load resistor, and extend a 12V wire for the LED tester module which will be on the outside of the case.

Double check that all the voltages are correct on your voltmeter, and are to an acceptable accuracy on the LCD. Turn it on and off a few times to see it it responds!

I found that my momentary switch had a lot of bounce - the interrupt would ignore it. So in order for it to work properly, I would have to press the button firmly, and not quickly, if that makes sense.. Your mileage may vary!

Alternatively you could add a hardware debounce, or a software debounce - when I get a chance I will update the code to have a software debounce.

Step 6: Making the Modular Power Cables

I managed to make the modular power cables and so far I've made 3 - two for breadboards, since I use them a lot, and the third one is a DC barrel plug for various items.

I used a small piece of stripboard and soldered 3 x 2 header pins to plug into the breadboard power line. The other end of the 2 wires goes to the banana plugs which will go into the banana sockets on the power supply 5V line. I made two of these so I can use one for 3.3v or for 12v, whilst still having one cable available for 5v power.

The DC barrel plug was a ready made patch one, so I just stripped the wires and screwed them into the banana plugs.


The unfinished project you see on the breadboard is something I'm working on, which you will see completed in the coming weeks. Keep an eye out on my page! :)

Step 7: Final Thoughts and Discussion

You have successfully built a Bench Power Supply!

There were a couple of things which I thought maybe I could have added, or I could possibly add later on with a new improved version.

  • Current sensing modules, to show the current consumption on each rail. This would require multiple modules and would increase the complexity of the Arduino code - also, all the data would not fit on the 20x4 LCD so we would probably require another 20x4 LCD purely for current, or a larger screen. That may require a re-design of the front panel, increasing complexity overall. In my design, since I have a longer base on the left side, I could probably add another LCD and have that display current although it would probably not look right, but it's a thought.
  • Adding a load resistor! I should have done this at the early stages but I haven't had any problems yet. I will probably add one anyway.
  • Adding an LED tester - I am going to add this on the left side of the case where I have left a space.

Please leave comments and let me know how you think I did. The feedback would be greatly appreciated. Also please take a look at my personal website, where I have started to blog about my recent projects, and I will be adding more content slowly but surely!

My Website -

I am more than happy to assist anyone - please leave a comment!

Thank you very much for taking your time to read this Instructable!


l19bal (author)2015-12-13

I will be adding a second LCD for the two variable outputs, and adding current sensing modules when I get a chance. The code will be updated and I will add new wiring diagrams, and possible a modified enclosure. Only when and if I get a chance, which I hope I do :)

vmusica (author)2017-05-24

This is just excellent! Great job, great skill, great final product!

brentonreimann (author)2017-02-02

Hi l19bal, this is a great project. I'm planning to make 2 of these, one for me and one for my dad who has built me a couple power supplies over the years with analogue meters, but i think he needs one with an LCD don't you??!

Just a question, where did you source the usb sockets? Could they be reused out of an old PC like the PSU?

Just a thought about adding current sensing capability. What about leaving the one 20x4 LCD and have a momentary or even toggle switch next to it to flick between current and voltage, or a mixture of say two rails with V and I, and flick switch for the other 2 rails V & I? That way it wouldn't require such a redesign of the front panel etc?

Just a thought.

Again, thank you for taking the time and effort to make this into an instructable. I appreciate it takes a lot of extra time to help others, rather than just make it yourself.

l19bal (author)brentonreimann2017-04-01

Hi sorry for the mega delayed response. That sounds great, I hope you've been getting on well!

The USB sockets I purchased from eBay for cheap from China - you are better off buying all the components from China as you will save a lot of money. Alternatively if you have a cheap USB hub you could desolder the USB sockets from there as it would probably be easier than desoldering them from an old motherboard/PC.

In regards to current sensing and the toggle switch for the display - yes, great idea and it is possible. Firstly you'd need to find a current sensing module, then modify the code to display the current at the toggle of the switch. It would require a bit of code reworking but shouldn't be too much effort. I haven't had time to add this feature unfortunately, but I should be back on the scene soon :)

Also for the error you are having with the LCD library, please check you have the LCD library installed in your Arduino library folder. Alternatively try this line:

LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display

instead of: lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

I am unsure if this will solve the problem but it's worth a try. You could also try copying the library header and source file to the root of the .ino file for this code. You may need to use a newer library?

Let me know how you get on, and best of luck! Thank you for your good feedback :)

brentonreimann (author)l19bal2017-04-05

I'm sorry but this didn't help either!!

Any other ideas??

brentonreimann (author)l19bal2017-04-04

Hi there unfortunately that change doesn't help. There are a lot of errors still:

Arduino: 1.8.1 (Windows Store (Windows 10), Board: "Arduino Nano, ATmega328"

C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino: In function 'void LCDSetup()':

Bench_PSU:55: error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'



C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino:55:17: note: candidate is:

In file included from C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino:8:0:

C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: void LiquidCrystal_I2C::begin()

void begin();


C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: candidate expects 0 arguments, 2 provided

Bench_PSU:56: error: 'class LiquidCrystal_I2C' has no member named 'setBacklightPin'



Bench_PSU:56: error: 'POSITIVE' was not declared in this scope



exit status 1

no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'

This report would have more information with

"Show verbose output during compilation"

option enabled in File -> Preferences.

Any ideas??

SimonB86 (author)2017-04-04

Hi! I'm not able to open the schematic.sch of the project. I would like to know what are the resistors value and the number of the transistor you're using.

Please! ?

SimonB86 (author)SimonB862017-04-04

Transistor model number!

brentonreimann (author)2017-02-18

Hi l19bal,

I'm having issues compiling your code. I've got the LiquidCrystal_I2C library installed, and have tested my 20x4 lcd out fine. It's address is 0x27.

But these are the error messages i get when i compile. Can you please HELP??

Arduino: 1.8.1 (Windows Store (Windows 10), Board: "Arduino Nano, ATmega328"

Bench_PSU:36: error: no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)'

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);


C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino:36:80: note: candidates are:

In file included from C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino:8:0:

C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:71:2: note: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t)

LiquidCrystal_I2C(uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize = LCD_5x8DOTS);


C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:71:2: note: candidate expects 4 arguments, 8 provided

C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

class LiquidCrystal_I2C : public Print {


C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: candidate expects 1 argument, 8 provided

C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)

C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: candidate expects 1 argument, 8 provided

C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino: In function 'void LCDSetup()':

Bench_PSU:54: error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'



C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino:54:17: note: candidate is:

In file included from C:\Users\FUSION06\Documents\Arduino\MySketches\Bench_PSU\Bench_PSU.ino:8:0:

C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: void LiquidCrystal_I2C::begin()

void begin();


C:\Users\FUSION06\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: candidate expects 0 arguments, 2 provided

Bench_PSU:55: error: 'class LiquidCrystal_I2C' has no member named 'setBacklightPin'



Bench_PSU:55: error: 'POSITIVE' was not declared in this scope



exit status 1

no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)'

Invalid library found in C:\Users\FUSION06\Documents\Arduino\libraries\MySensorsArduinoExamples-master: C:\Users\FUSION06\Documents\Arduino\libraries\MySensorsArduinoExamples-master

This report would have more information with

"Show verbose output during compilation"

option enabled in File -> Preferences.

Cardoso92 (author)2016-09-22

Hey there! I love this project and also i loved your closure! Can you tell me the sizes of the box? thank you.

linuxsurfer (author)2016-09-15

Hello, Has the bench PSU schematic been updated to reflect incorrect orientation of the Pwron and Pwrok wires

mildrid1 (author)2016-08-10

Hello and good evening,

I'm totally after making something just like this. I've printed parts list and tools list and slowly getting all items. I have a corsair GS700 psu that i would like to make into a bench power unit like yours, It looks really nice, So much i have joined this site and even stuck up some pickys,

Ok my little issue is, Do i build a big box and fill it with kewl lights switches lcd and have the psu inside it etc, I've bought that arduino starter kit as well. Haven't a clue how all that works either, But i am sure youtube will teach me. OR do i build like a control box and plug the lead from PSU into the box. I've gotten into this buying PCB kits from Banggood or whatever it be called. And i needing the different power levels in helping me build things. Also need to build a solar/bat generator but that's another story.

Would there be any chance you be able to advise me which way would be best. I don't mind making either. Buti haven't a clue wich be safest etc.

Cheers Mark W.

chris24xx (author)2016-04-11

Super project!!! But i've a problem. The same as HristoStanchev

I have problems with compiling the arduino code on the

{{{ LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); }}}

line. It says [[[no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)']]].

The library is installed and the examples are running. What is my failure?

thx Chris

bazhalliwell (author)chris24xx2016-05-28

i am also having this code im very new to codeing so im lost with the code at the moment

im using ide 1.6.9 and all the librarys are the newest i can find on githib

could you zip your i2c library so we could use that or send us the link for it?

thanks for your time

kukem7 (author)2016-04-20

Your "circuitbenchpsu.sch" is NOT CORRECT - PWR OK Signal is connected to GND through a transistor.
I follow your tutorial, when I turn this on PWR OK connect to GND then my ATX broken. :(((((((((((((
Sorry my bad English

maxxt (author)2016-02-25

Great build! I am about to start one of my own, current modules and all! I have a question about the Vpower parameter in your code, the one based on the PURPLE wire of the PSU. Doesn't the nano have a regulator on it, thus taking that 5.22V and turning it into 5V? Due to this I am wondering where the correction comes into play, why it is neccassary. Any thoughts?

l19bal (author)maxxt2016-02-25

Hi, You are right - the Nano does have a 5V regulator but that regulator is only used when the Nano is being powered from the Vin pin. In this project we are bypassing the regulator and powering the 5V pin directly since we already have a 5V output from the ATX PSU (purple wire in my case), and I find it pointless making use of the regulator, so it is important to ensure you input only 5V to this pin on the Nano. The ATX PSU's purple wire (5VSB) will output a little more than 5V exactly, but this is not a problem. So the Nano is powered from the purple wire - because of this, all 5V outputs and inputs will be referenced to the 5.22V which is powering the Nano. The ADC needs the correct reference voltage in order to produce accurate readings, therefore giving accurate voltage measurements. So you need to measure the 5VSB output of your ATX PSU. This would be true even if you powered the Nano via the Vin pin, using its own 5V regulator because it does not output exactly 5V. I noticed if powered via USB it outputs around 4.97V depending on what components are connected, so the requirement for the Vpower variable is so you can obtain accurate readings. Also for the resistors, you would need to measure them as accurately as possible - so you can get good readings! Hope that makes sense and helps!

AlexanderJ12 (author)2016-01-30

Hi I19bal,

thank you very much for this great project! :)

I have a question: Is it right, that the PWR ON Signal is always connected to GND and the PWR OK Signal is connected to GND through a transistor? Or is this turned around by mistake?

I thought if you press the button, the Arduino Nano "opens" the transistor and the Signal of PWR ON is okay. Is this wrong?


Alex from Germany =)

l19bal (author)AlexanderJ122016-02-03

Hi, the PWR ON pin is left open (not connected) when the button is NOT being pressed, so the PSU stays off. In order for the PSU to power up, the PWR ON pin must be connected to ground, so the Arduino will turn the transistor ON, completing the connection between the PWR ON pin to GROUND. Once the PSU is turned on, the PWR OK pin outputs 5v, which is also connected to the Arduino to detect the current state of the PSU. And yes you are right for pointing my silly mistake - the PWR OK and PWR ON pins should in fact be switched around. So the transistor collector goes to PWR ON, and the PWR OK pin goes to Arduino D4 to detect the state of the PSU. Hope that helps!

psargaco (author)2016-01-23

Hi, I'm afraid I have another question. These power sources have a bunch of same coloured wires. For instance, there are 4 orange wires for 3.3 V in the 20 pin connectors of mine. I've seen similar projects where they have used just one of the wires but I'm thinking that it makes more sense to aggregate the 4 wires and connect all of them to the terminal. Won't this increase the maximum permissible output current? On the other hand, the label says that the 3.3V rail outputs up to 28 amps (probably up to 7 amps per wire) which is probably a bit excessive. What's your view? One wire or all the wires?



l19bal (author)psargaco2016-02-03

Hi I would suggest grouping all the wires from each voltage together so you don't have to worry about maxxing the current draw. Hope that helps!

psargaco (author)2015-12-16


You have added a extra fan. Wasn't the original power supply's fan sufficient?

l19bal (author)psargaco2015-12-22

Hi the extra fan was for the step up modules inside, and the rest of the electronics. The PSU fan is only for the PSU and is obviously sufficient for its purpose. It's not necessary to add am extra fan but I just felt the need to add one!

psargaco (author)2015-12-13


Great project. I'm thinking of using is as a basis for a similar implementation but with the requirement of leaving the original ATX power source as-is, that is, no wires will be harmed on the execution of the project.

I have one question regarding your project. The step down converters you used seem to be the most common available, but the potentiometers are ridiculous. I find that little screw very impractical. If I wanted to replace that with something with a proper knob, what kind of potentiometer should I use?



l19bal (author)psargaco2015-12-13

Hi thank you very much. You're right, the potentiometers are a bit silly..

You can follow the exact same method - unsolder the 'silly' potentiometers and wire the module to a standard potentiometer with a knob. I can't remember what potentiometer value mine was, but check on your module - it will have a 3 digit code on it.

The first two digits indicate the value and the last digit indicates the multiplier. So a 103 pot would be a 10k pot. Similarly a 204 pot would be 200k. When you establish the value on the module, just get the same value pot of your choice and wire it up. They are all 3 pin (+, wiper, -).

Hope that helps and good luck. Please someone correct me if I've said anything incorrect!

psargaco (author)l19bal2015-12-15

Outstanding! Thank you for your problem solving reply. Paraphrasing Woody Allen, you're a credit to humanity in general and to the Instructables spirit in particular :-)

HristoStanchev (author)2015-09-02

Very nice! But I have one question. Is there a way to put a 16x2 display instead of 20x4, because I can't seem to find a 20x4 display in my country (and also don't want to wait about a month to order one from ebay). Maybe there is a way to show only variable voltages and power ON?

Also the final design of your PSU awesome!

l19bal (author)HristoStanchev2015-09-03

Thank you! Yes of course you can use a 16x2 display - I have added code for a 16x2 display in step 2, although there are no labels for the voltages on the LCD, and the rotating square block in the corner is also not there. The code is untested, although it will work - I am unable to test it right now so that's up to you!

HristoStanchev (author)l19bal2015-09-22

Thanks for the code, but I have one more question. :)

Why are they needed 2 LM2596 modules?

Sorry if my question is stupid, but I really want to make this psu :)

l19bal (author)HristoStanchev2015-12-13

Hi I used two modules because I wanted two variable outputs - if you'd like only one variable output then only use one module!

HristoStanchev (author)l19bal2015-09-23

Also what type is the transistor between PWROK and pin D6 on the arduino? Thanks.

l19bal (author)HristoStanchev2015-09-23

No problem! You can use pretty much any NPN transistor, but I think I used a 2N3904 specifically. Also I used 2 x LM2596 modules because I wanted 2 variable voltage outputs - you can use only 1 module if you would like only 1 variable voltage output, or you can use 5 modules if you want 5 variable outputs! Hope that helps :)

HristoStanchev (author)l19bal2015-09-24

It's me again :D

I have problems with compiling the arduino code on the

{{{ LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); }}}

line. It says [[[no matching function for call to 'LiquidCrystal_I2C]]].

I thinks its from the library, can you give me the library that you used.


l19bal (author)HristoStanchev2015-09-24

Download and install the LiquidCrystal library! It sounds like you don't have it installed although Arduino IDE does come with it..

HristoStanchev (author)l19bal2015-09-23

Thanks for the fast reply! Yes this helps me a lot. Hope I will post pictures in the coming week(or maybe the next) :)

ИгорьА1 (author)2015-09-07

A very interesting project! It looks very neat. What do you think, if you add the adjustment of electric current? it will charge any type of rechargeable battery and the device will be more multifunctional.

surya raju (author)ИгорьА12015-11-29

my friend's fake (unfortunately) IMAX charger gave up on him. he now charges each individual cell on his 3s Lipo with a constant current module. It's tedious for sure but if your are in dire need of a Lipo then its okay.

l19bal (author)ИгорьА12015-09-11

Thank you! I'm not sure, depends the type of battery you want to charge. For LiPo battery I would not suggest using this - you need a special charger. For other batteries I'm unsure as to what conditions a charger has to meet but I think it may be possible!

keebie1 (author)2015-09-03

I'm having a problem finding LM 2565 DC step up/down module, do you know where I can buy them from ? I've looked on ebay and Amazon. It looks fantastic and I can't wait to build my own.

l19bal (author)keebie1 2015-09-03

Hi my apologies! It should be LM2596! I will correct that!

Here is a link for eBay:

Thank you for your kind words, I look forward to seeing yours! :)

magkopian (author)2015-09-02

Very good job especially with the case, it looks really cool. Just an idea for a feature, it would be nice to also add a knob or button to control the brightness of the LCD using PWM. That's actually something I wanted to add to my own instructable, but for some reason I always find myself working on something else.

l19bal (author)magkopian2015-09-03

Thank you very much1 Yeh that's a possibility, could easily be added. I was considering it but thought to myself I'd rather have it on full brightness so it's clearly visible. Adding the brightness control would be good for when working in low light, so it's not blinding. :)

russ_hensel (author)2015-08-31

Welcome to the club: Just a note to let you know I have added this instructable to the collection: Encyclopedia of ATX to Bench Power Supply Conversion


Take a look at about 70 different approaches to this project. This topic is one of the more popular of all instructables.

l19bal (author)russ_hensel2015-08-31

Excellent! Thank you!

lsanjaysha (author)2015-08-29

can i use arduino uno too?

l19bal (author)lsanjaysha2015-08-30

Certainly! I'm pretty sure Arduino Uno and Nano are almost identical in terms of pin outs. All Arduino's will work except for Leonardo, and Due I think, since they are different. Refer to this link:

lsanjaysha (author)l19bal2015-08-31

Thanks Bro! ill make it and share with you

l19bal (author)lsanjaysha2015-08-31

Excellent, I look forward to it! :)

Droxz (author)2015-08-30

real nice instructable, thx for sharing!

l19bal (author)Droxz2015-08-30

Thank you!

About This Instructable




Bio: BEng Software and Electronic Engineering with Honours. Currently employed as a Developer for IBM. Experience with embedded systems, full stack development, UI/UX design, enterprise ... More »
More by l19bal:PC USB Media Volume Controller based on ArduinoWater Cooled and Wall Mounted Xbox 360Bench PSU Power Supply from Old ATX with Arduino and LCD Monitor
Add instructable to: