From bread board to PCB requires a few simple steps.

Table of Contents

Intro

About once a week I get the question

Can you teach me PCB?

Or

Can you teach me KiCad?

At first I found these questions quite confusing, but I understand the motivation behind this. A lot of makers on social media, might fall into the category “show-off”, by just posting snapshots of their work, but not explaining how they actually built it. Which ends up with people asking me “How do you do this?”.

My problem then is, I don’t have the time to explain it to anyone personally, and I don’t know which youtube video I watched a year ago, and I can’t decide which one is the best for you.

Everytime I look for tutorials on youtube I end up in a tricky situation: https://www.youtube.com/results?search_query=kicad+tutorial. There are many videos from 15mins to 2 hours, and you have to make a choice, and figure out which has your learning speed. I usually spend more time looking for a video, than actually watching it.

Note, the KiCad page itself (http://kicad-pcb.org/help/tutorials/) has a ton of material that will most likely be even better than anything that I am going to present below.


You have read this far, so you deserve another teaser that will make you want to read the rest of this page. You want to build something like this. I know it.

More Intro

My workflow with KiCad can be described with the following pseudo code (assumption: you already have a working prototype on a breadboard, if not, imagine one):

# steps you have to do only once
if not hasInstalledKicad():
    installKicad()
    startKicad()
if not hasOwnSymbolLibrary():
    createSymbolLibrary()
if not hasOwnFootPrintLibrary():
    createFootPrintLibrary()

 # go through the stuff you have on your breadboard
for part in [...modules, ...parts]:
    # IMPORTANT: this is often the case with modules
    if not hasSymbol(part):
        createSymbol(part) # this is work
    # IMPORTANT: this is often the case with modules
    if not hasFootprint(part):
        createFootprint(part) # this is work
    addPartToSchematics(part); # this is fun
    connectParts(); # this is work and fun
    mappPartToFootprint(part);

createNetworkList()
loadNetworrkList()
movePartsAroundAndAddTraces() # this is fun and work
uploadToAisler()

Just looking at the code above does not give you an idea where to click in the kicad application so just keep scrolling and you will see what I usually do.

Hint: If someone actually does read this and stumbles across a mistake, or sth. where your experience deviates: contact me via social media :), then we can add an if xyz to this page.

If you have not installed KiCad yet, get it from here: http://kicad-pcb.org/download/

Known Bugs of this HowTo

In the screenshots you can see that I named the part 0.96_oled_128x64, but used a 80x160 TFT panel. Changing the screenshots to match the label on the shown module is too much work now, but I renamed the footprint in my library :D.

The Initial Setup

You have installed KiCad, and clicked 'OK' on the first dialog without reading the content? This is what you will have missed, and agreed to. I used the default selection.
Create a new project. A kicad project consists of a range of files that need to be in a separate folder.
There are four buttons you need to remember for now:
  1. Schematic layout editor
  2. Symbol library editor
  3. PCB layout editor
  4. Footprint library editor

Custom symbol library setup

I often use components that are not yet available in KiCad. In this case we need to add the missing components to our own symbol library.

Open the symbol library editor, and create a new library.
Give it a name.
Add it to the global library table.

This way we can reuse our library in multiple KiCad projects.
Open the symbol library manager, then open the symbol library manager via the 'Preferences' menu
Verify your custom library shows up.

Create a Symbol

One of the steps you will need to repeatedly do for new modules is adding them as a new symbol to a symbol library.

We will create a Symbol and Footprint for this display module.
In the footprint library editor, click the new symbol icon in the toolbar:

Then, select your library, and click the OK button.
Provide a name for your symbol. I changed the default reference designator to 'D' because I want to reference displays with a 'D'. If in doubt, leave as is.
Everything else remains default, then click OK.
You will end up with a view like this.
The next step is to add pins to your module. For:
  • GPIO -> Bidirectional
  • VCC -> power input
  • GND -> power output

And so on.
First add GND pin.
Make sure to get the pin numbering right. We will need this later.
Adding a VCC pin.
See? Easy.
Adding more pins, in the order as they are on the module, depicted above.
Finalize your symbol by adding a frame , and moving the inital labels to a sensible location.

Save and close the window.

Custom footprint library setup

Unfortunately, there is no “new Footprint library” menu entry. This means, we need to create a folder called ‘MyFootprints.pretty’, in a sensible place. And add it to KiCad.

Open the footprint library editor, then open the footprint library manager via the 'Preferences' menu
This is the footprint library manager.
Add your *.pretty folder by clicking on 'browse libraries'.
And set it as your active library from the 'File' menu.
Select your library, and we are ready to proceed.

Create a Footprint

As with symbols in KiCad, one of the steps we need to repeatedly do for new modules is adding them as a new footprint to a footprint library.

Click on the new footprint button and give it a name.
You will end up with a view like this.
Remember, we want to add build a footprint for this component, so it will look similar to this.

Also, we added the pins to the symbol before, so we need to make sure we get the pin numbers right (1-8, from left to right).

Hint: Use a breadboard for size reference, and a grid of 1.27mm.
Click on the add pad button , to add a hole for a pin.

Hit ESC, hover with the mouse over the pad and hit E to edit the pad.

I usually go with Hole size X 1mm and Size X 2mm, because the defaults are too small for the usual pins.
If you add more pads, they'll be added with the settings you gave the previous pad.

Add the remaining 7 pads.
If you want to add holes (as in the module), set the Pad type to NPTH, Mechanical, adjust the size accordingly.
There are more pad types. Use SMD for SMD components, and set the Shape to Rectangular
To add the outline of the module, select the F.SilkS (front silk screen) layer, and draw it with the add graphic line tool .
Make sure your footprint is centred (the faint blue line), by selecting (drag click) all components, and moving (hit M) them to be centered.

This will make things easier when flipping components in the pcb editor.
How do you know the footprint is correct?

The next steps are not mandatory ;)

Open the print dialog...
... and print as PDF ...
... view the PDF in 'actual size' ...
... and compare with your module, on the screen.

Be careful not to scratch the screen ;)
Save the footprint.
With the add text button , you can add labels to your footprint.

You can resize them ;)
And add more lines to represent your part.

Done.

Schematics

Now, that we have repeated the steps to add the missing symbols and footprints to our libraries, we are finally ready to create our PCB.

After a while you will get quicker at this, and have all your parts in KiCad anyways ;).

You can go on a coffee break now.

In the remainder of this howto I will create the PCB for my space-hopper project

Open the schematic layout editor
Click on the place symbol button to add a symbol to your workspace. Or hit A.

Hint: You can search an preview symbols in this dialog.
Repeat for all required components.

Hint: Search for R in the Device library to add resistors. Buttons are in the Switch library.
Click on the place net label button to add labels to connect all pins to avoid wiring all over the place. Or hit L.

Hint: This way we have labeled networks we need later when designing the PCB.
Click on the place wire button to connect the labels with the input/outpus pins. Or hit W
Complete your schematics.
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.
Proceed by clicking on the generate netlist button , followed by Generate Netlist...
.. then save the .net file.

Finally, the PCB

Now, that we have the logic side covered of our project, we can think about creating the actual PCB. You will see, if you are aiming for small PCBs, that you can get lost on the PCB editor. The schematics we created with the symbols, will make sure that our PCB is correct.

Hint: I usually have mistakes in my schematics, so I have to save the netlist again ;).

Open the PCB layout editor
Click on the read netlist button and then on Read Current Netlist.
If everything is completely mapped, you will get a successful log output...
... and after closing the dialog the footprints are in the workspace ...
Hover with the mouse over a footprint and hit M to move it into place. Hit CTRL+0 to align the view to your components.

Hint: Hit F to flip a part to the back layer. It will be rendered in purple.
Hit X to place traces, V and then click to create vias and switch layers.

You will see the editor showing unconnected pads with white lines. Do not connect the GND pins yet.
Select the Edge.Cuts layer and draw a polygon around your parts. This will be the outline of your PCB.
Click on the add filled zones button , select the F.Cu layer and the GND net, then hit click on OK.

Draw a polygon along your previous edge cuts.
Your result should look similar to this.
Repeat the process for the B.Cu layer using the same GND net.
Click on the perform design rules check button and click on Start DRC, this will create the copper infill on your layers.
This will also show you problems in your design, that you need to fix.
Your result should look similar to this.

Hint: Make sure all GND pins/pads are connected now. Depending on your placement, the infill can't reach everywhere.
From the View -> 3D Viewer you can get a preview of your PCB.

Front ...
... and back.
One setting I like to set under the Setup menu is the Pads to Mask Clearance setting...
Set the solder mask clearance to 0. (I had PCBs shipped where SMD components were not surrounded fully by solder mask and soldering them shorted them with the GND plane.)

See my post on instagram for more details: instagram.com/p/Bkf0sF5HYeu/

Ordering a PCB (example)

Now, the easiest part.

Go to Aisler.net and click on Upload project...
... click on Select file ...
... open the *.kicad_pcb file ...
... and review your pcb ...
... yup, I made a few mistakes and tried 4 more revisions ...

Hint: Use the add graphic arc button , to make round corners.
... and can finally order my PCB :)

Wow, you’re done. You either scrolled past all of this without reading, or you went through this step by step. Please let me know via social media (links below) if this was helpful or not. I write this stuff for free, for you to learn.

Also, if I’ve explained something totally wrong, please also let me know. I have to learn this stuff too :D.

Have fun.