Table of Contents

The Intro

You maybe know the situation. You want to quickly test something with a custom controller on the bread board but end up spending most of the time searching for a reset button, a flash button, the cables and a resistor to go with everything. Then quickly look up again how to attach a button to your controller (by searching for arduino button and check wether to do a pull up or a pull down approach… here).

And after half an hour to an hour later you end up with something looking like this:

And as you sneak in your maker time after work, your precious time for that day is almost already over…

…. and your breadboard is more than full with just a few buttons.

Time for yet another breakout board.

The Schematics

I create my PCBs with KiCad. It’s open source and you can get it from their website:

If you need an intro to KiCad see my previous post: /post/2018/12/25/howto-kicad.html.

Open the schematics view (Eeschema), hit A to add a new component, search for SW_push and add your first button. Do the same for the resistor by searching for R. Conn_01x03 is the name of a generic 3-pin header. Hit W to add the wires. Give the resistor a value of 10k.

The above is already the basic idea. From now on I will call the pins

  • Resistor pin
  • Pin pin
  • Switch Pin

This way I can avoid using GND or VCC and can decide later if the pin attached to the button is pulled low, or high. Connect your controller’s GPIO to the Pin pin. You get two (sensible) configurations:

Use Case Resistor Pin Pin Pin Switch Pin

Now, as we will need more buttons, let’s clone this setup and paste it to get four buttons.

Click and drag to select the components, then rightclick and select duplicate block. Move it below the initial block. Repeat this to get four rows of buttons.
Remember the part where I said I want to save space on the bread board? Next, connect all resistor sides and switch sides, so we only need n+2 cables to add four buttons to our experiment.

Click on the annotate schematic symbols button , and in the following dialog on Annotate.
Then, click on the assign footprints to schematic symbols button and map each symbol to a footprint.

Check on the left for the mapping that I used.

(I prefer 0603 SMD resistors, because I have hundres of them, and they reduce the size of the PCB. The same goes for the THT buttons and they have a good handling.)

I use this repo for footpints:

Proceed by clicking on the generate netlist button , followed by Generate Netlist and save the netlist.


Open pcbnew to layout the PCB. Set the grid to 2.54mm and align the pin headers to it. Also, flip them (F to the other side of the PCB). Everything else you an align like you see fit.
This is how I thought it should work :).
3D Preview.

Now, maybe you dont need exactly four buttons in your project, or not all of them are pulled high or low. In this case just break the PCB into single buttons and use those.

Otherwise you can save cables by using the shared R and S pins :).

The Result

To give you an idea of this things size, take a look at the renderings below:

Diagonal view.
Front view.
Right view.
Top View.

I will update this post as soon as I have the PCBs.

Ordering the PCBs

I shared this project via so you can order this PCB with a few clicks from Aisler. They sponser my projects with free PCBs. :)

You can use my personal coupon code p3dt50 to slash your first PCB order in half. Valid until the end of 2019.

If you want to change the PCB check the section below for the sources. You can upload the .kicad_pcb file directly to to se how it would turn out.

The Sources

If you want to modify the sources head to my GitHub repository: