Thread Starter


Joined May 10, 2024

This is my first time designing a PCB and I just wanted to check that I had done it correctly or if there's anything I can improve.

The main focus of this design is to scale down Voltage into a GPIO entry on an MCU and then scaling back up the voltage coming out from the MCU to the OEM components.

For this I have used 6 ULN2004 chips which hopefully I have wired correctly. I have used 2 different types of tracing widths; 0.75mm for the 12V signals and 0.3mm for the 3.3V signals. Also, all my vias are 1.6mm diameter and 1mm hole.

One of the biggest questions that I have is that I have poured a ground plane on the bottom layer of the board, and I have also poured a 12V and a 3.3V power plane on the top layer of the board, I am using some decoupling capacitors connected to the power input of the ULNs, but as both the capacitor and the ULN power pin are connected to the power layer, I don't know if they will do their job properly.

There's some extra pins that are not wired, I am still thinking of a use that I could give them to keep the connectors a nice even number.

Any feedback and/or advice is more than welcome.

Thank you in advance!





panic mode

Joined Oct 10, 2011
silkscreen is your canvas - use it to mark each and every terminal. this will avoid confusion when trying to interface to the board. for example you marked J3 as "Button Inputs" but it is not clear which of them is input1,2,3.... do not assume that end user will be educated enough and willing to look for square pad and count terminals.

same goes for outputs. same goes for GPIO header...

same goes for all the parts on the board. identify them (IC1, IC2... R1, R2,...)

you only have two mounting holes along center axis. there is no support on the corners. this means using screwdriver to connect/disconnect wires from terminals away from center axis will put stress on the board and deflect it, potentially touch whatever is under the board (and maybe cause short circuit)

there is bunch of IO on that board but zero indicators. each every input/output could have an LED indicator. same goes for power.

i see no current limiting, reverse polarity protection, overcurrent protection, flyback etc.

i see no identifier on the board. this is supposed to be "name" of the board like R2D2_IO64 V1.0. this is obviously not a complete product but part of some larger assembly so identification and version are important.

not sure what the application is but for industrial use, anything with outputs should have separate power terminal that only powers group of outputs. this allows connecting safety circuit that can disable group of outputs, regardless of GPIO state.
Last edited:


Joined Aug 7, 2020
Don’t put the component identifier underneath the component. Otherwise how do you see the component identifier once the component is soldered in place.
I like to make all tracks as wide as I can. My default is 0.03” (0.76mm) (the width of a SOIC pad) and only less that that when I need to


Joined Jun 8, 2013
There are alot of things wrong, too many to describe.
How much current is the ULN2004 intended to provide? Really shouldn't be more than about 250mA (continuous) TOTAL without a heat sink (meaning the trace widths could be about 1/2 to 1/3 the width used. Pads could be smaller (allowing copper pours to fill areas completely), etc.


Joined Mar 30, 2015
The main focus of this design is to scale down Voltage into a GPIO entry on an MCU and then scaling back up the voltage coming out from the MCU to the OEM components.
If I understand this correctly, you want a bi-directional level shifter. They sell chips that do that.

If frequency is sufficiently low, all you need is an N channel MOSFET and 2 resistors for each channel. From Sparkfun: