Skip to content

Designing your PCB

Welcome to the first part of your robot! This guide takes you from a blank KiCad project to a routed and checked Waypoint robot-controller PCB.

For this guide we’re using KiCad, an open source PCB design tool.

First, open KiCad and create a project for your robot.

To start, import the needed symbols and footprints: How to Import KiCad Libraries. Symbols are the parts you place in the schematic. Footprints are the physical shapes that appear on the PCB.

After importing, your project should contain both library files:

Project folder with the WaypointCarePackage symbol and footprint libraries

Now open the schematic editor.

The Schematic Editor button in KiCad

The schematic shows which pins connect to each other.

Press A to add a symbol. Search for WaypointCarePackage:DROK_BUCK_MODULE. If it appears, the symbol library is working.

The power section gives the board the voltages the robot needs and adds a power switch.

Press A and add:

  • Connector:Barrel_Jack
  • WaypointCarePackage:KFC7x7_Latching_DPDT
  • WaypointCarePackage:DROK_BUCK_MODULE

Place them roughly like this:

Power stage components before wiring

Press P to add power symbols. Place +BATT, +9V, +5V, and GND.

Press W to draw wires. Wire the barrel jack, switch, buck converter, and power symbols to match the completed section below. The buck input and EN pin go to switched +9V, the buck negative pins go to GND, and the output goes to +5V.

Completed power stage with wires and a labeled power box

When you reach an unused pin, press Q to place a no-connect marker. That tells KiCad, and anyone reviewing your design, that the pin is intentionally unused.

The motor drivers let the Raspberry Pi control the motors.

Press A and add two WaypointCarePackage:DRV8833_MODULE symbols and four Connector:Screw_Terminal_01x02 symbols.

Connect each DRV8833 to +9V and GND. Connect the four motor-output pairs to the four screw terminals, just like this:

Completed motor-driver schematic section

This is where labels are easier than long wires. Press L to add net labels for the motor inputs:

D1_IN1
D1_IN2
D1_IN3
D1_IN4
D2_IN1
D2_IN2
D2_IN3
D2_IN4

The MPU6050 lets the robot sense movement.

Press A and add WaypointCarePackage:MPU6050_MODULE. Connect VCC to +3.3V, connect GND, and label the I2C pins SDA and SCL. Mark unused pins with Q.

Completed MPU6050 IMU schematic section

The Raspberry Pi controls the motor drivers and communicates with the IMU.

Press A and add Connector:Raspberry_Pi_4. This symbol gives you the standard 40-pin Raspberry Pi header.

Use this pinout while you connect the labels:

Raspberry Pi pinout reference

Connect +5V, GND, and the Pi 3.3V pin. Connect SDA to physical pin 3, SCL to physical pin 5, and the D1_IN* and D2_IN* labels to GPIO pins.

Completed Raspberry Pi schematic section

Add a spare header or another small feature that makes the board yours.

Press A and add a spare header such as Connector:Conn_01x10_Pin. For a smaller feature, use the matching pin count, like Connector:Conn_01x03_Pin for a 3-pin servo header. Wire useful pins such as GND, +5V, +3.3V, SDA, SCL, and extra GPIO.

Here’s an example breakout on Orphbot:

Example spare breakout header

For a servo header, use this order:

GND
+5V
PWM-capable GPIO

Most Raspberry Pi GPIO pins can do software PWM. GPIO12, GPIO13, GPIO18, and GPIO19 are easy PWM-capable choices.

Add M3 mounting holes with Mechanical:MountingHole.

Example M3 mounting holes in the schematic

Run Inspect > Electrical Rules Checker. Fix real errors before moving into the PCB editor.

Footprints are the physical shapes that will appear on the PCB. Open the footprint assignment tool.

The Assign Footprints button in KiCad

Some rows may be blank at first.

Symbols before footprints are assigned

Use these assignments for the main parts you can find in your kit:

Symbol Footprint
Connector:Barrel_Jack Connector_BarrelJack:BarrelJack_Horizontal
WaypointCarePackage:KFC7x7_Latching_DPDT WaypointCarePackage:KFC7x7_Latching_DPDT_Blue
WaypointCarePackage:DROK_BUCK_MODULE WaypointCarePackage:LOW_DROK_BUCK_MODULE
WaypointCarePackage:DRV8833_MODULE WaypointCarePackage:DRV8833_MODULE
Connector:Screw_Terminal_01x02 WaypointCarePackage:TerminalBlock_KF301-2P_P5.08mm_Blue
WaypointCarePackage:MPU6050_MODULE WaypointCarePackage:LOW_MPU6050_MODULE
Connector:Raspberry_Pi_4 WaypointCarePackage:MODULE_RASPBERRY_PI_ZERO_2_W
Connector:Conn_01x#_Pin Connector_PinHeader_2.54mm:PinHeader_1x#_P2.54mm_Vertical
Mechanical:MountingHole MountingHole:MountingHole_3.2mm_M3_Pad_Via

These are the ones I picked:

Footprints assigned for the schematic

Apply the changes and save.

Open the PCB editor.

The PCB Editor button in KiCad

Press F8 to update the PCB from the schematic. KiCad will import the footprints. The thin connection lines are the ratsnest, and the gold/copper pads are the places tracks can start or end.

Press M to move a footprint and R to rotate it. Put connectors near board edges, motor drivers near motor terminals, and the Pi where its USB ports are reachable.

If you want a footprint on the opposite side of the PCB, select it and press F, or right-click and choose Flip. This moves it between the front and back of the board.

Select the Edge.Cuts layer and draw the board outline around your parts. Use the measure tool to check the board size.

Imported footprints arranged inside a board outline

Before routing, check that the parts physically fit together.

Open View > 3D Viewer. Rotate around the board and look for parts intersecting each other, connectors blocked by other parts, or modules sitting where they cannot actually be installed.

3D render of the placed PCB parts

If two parts overlap in 3D, move one of them or choose a different footprint height before you route traces.

3D viewer showing a part-intersection check

Set up trace widths before routing so you can quickly switch between small signal traces and larger power or motor traces.

Open the predefined track-width editor from the PCB editor toolbar.

Button for editing predefined trace widths

Add at least one normal width for GPIO and I2C, plus a larger width for motor and power connections. During routing, pick the width that matches the connection you are drawing.

Predefined trace-width settings

A GND copper pour fills empty board space with copper that connects to GND. It can simplify routing because many ground pads connect to the pour instead of needing individual ground traces.

Click the copper-zone tool.

Copper-zone creation button

Set the net to GND, choose both copper layers, and draw the zone around the board area. Press B to refill zones after you create or edit traces.

Copper-zone settings for a GND pour

Routing turns the ratsnest into copper tracks.

Press X, click a connected pad, follow the ratsnest, and click the destination pad. Use F.Cu for front copper and B.Cu for back copper. If you need to change layers while routing, press V to place a via.

Use the wider predefined trace width for power and motor paths. Use the smaller width for GPIO and I2C.

Completed routing with a GND copper pour

Add silkscreen labels for motor outputs, header pins and your name. You can also add art to make the board feel finished.

Heres examples from my board:

Top silkscreen art on the PCB

Bottom silkscreen art on the PCB

Google KiCad silkscreen art or KiCad image converter silkscreen if you want to get creative; there are tons of tutorials online!

Run Inspect > Design Rules Checker and fix real errors. The example below shows checks intentionally ignored for this board and what a clean no-violations result looks like. Do not ignore unrouted net errors!

DRC ignored checks with no remaining violations

That’s it! You now have a routed and ready robot control PCB!