This guide will introduce you to the basic process I use to build PCBs based on Adafruit and other open source designs. We will extract parts of the board files as what Eagle calls "Design Blocks" and then we will use them along with a fundamental workflow in Eagle to create a featherwing-like board for the Trinket M0. This board will allow you to securely attach the Adafruit INA219 current sensor breakout to a Trinket without having to use jumper wires to connect them together. We're starting with this modest goal to keep things simple as we learn some fundamental concepts, while hopefully also ending up with a useful circuit.

This guide will cover using a Trinket M0 and INA219 breakout, however these same methods can be used to make a PCB to replace the breadboard or protoboard. These techniques can be used to extract useful pieces from open source boards to use in your own completely new circuit boards.

Things you'll need

To get started you'll need some hardware, some software, and the PCB design files for the Trinket M0 and INA219 breakout

1 x Trinket M0
The brains of the operation
1 x INA219 High Side DC Current Sensor Breakout
For all your current sensing needs! (under 3.2A)
1 x Header Kit for Feather - 12-pin and 16-pin Female Header Set
Female headers to attach the Trinket and INA219 to the PCB

The headers listed will allow you to assemble and disassemble the Trinket and INA219 breakout from the PCB we're designing. There are many other options for headers or other ways of connecting the PCB to the other parts depending on how you want to use them. 

Eagle and the Eagle files

You'll need to download the free version of Eagle if you don't already have it, and if you do you'll want to make sure it has been updated to the latest version.

Autodesk Eagle Free Version

Once you've downloaded the version of Eagle for your computer, install it according to Autodesk's Instructions.

Additionally you'll need the PCB files for the Trinket M0 and the INA219 Breakout

Adafruit Trinket M0 PCB Files ZIP
Adafruit INA219 Breakout PCB Files ZIP

Create a directory for this project on your computer, unzip both files and copy them into your project directory. Copying the files into a new directory will preserve an original version of the PCB files in the case that you want to save your progress as you edit them while following the guide.

Overview and Approach

On the Trinket M0 and INA219 breakout, there are pads used to make external connections to the board, usually by mounting male headers to allow the boards to be used with a breadboard. For our project we're going to use the layout of these headers in the board files to allow us to create a new board that has header holes perfectly matching the spacing on the Trinket and INA219 breakout, ensuring that headers will fit correctly.

As an alternative we could take measurements from the boards themselves and use that information to arrange headers, however using the information in the board files will allow us to be confident that the measurements are correct since we're getting them straight from Adafruit.

Once we have the information for the headers for both of the boards, we will create a schematic that will define the power and I2C connections between the Trinket and INA219 breakout that the adapter will make which will allow the Trinket to talk to the breakout.

Once the schematic is complete, it will be the guide through the steps required to create a new board. Once the board file is done, it can be sent to OSH Park to be manufactured. Once back, the project can be assembled and a simple CircuitPython program loaded to use assembly to measure the current draw of another circuit.

Extracting Design Blocks

Open your copy of Eagle and in the main "Control Panel" window, use the File > Open > Schematic menu to open your copy of the schematic for the Trinket M0. The schematic file ends in .sch and when you open it, Eagle will ask if you want to open the board file as well. Say yes and select the schematic window if it isn't already selected.

The schematic will have different areas for the various parts of the board. In the case the Trinket M0, there sections for the SAMD21 microcontroller, USB connection, power regulation, and most importantly for this project are symbols to represent the rows of holes for mounting headers or other connections. 

To remove all the redundant pieces, we’ll have to use eagle’s group and delete modes to select and then delete all of the nets and components from the schematic except for the headers, shown here

With the schematic window open, select the group tool to select as much of the schematic as you can, except for the headers. Once selected, everything in the group will be highlighted. You can then select the delete tool, right click on the group and select delete group.

Repeat this process until the only thing left is the headers and the nets connected to them. We also want to remove the schematic frame and all the text in it because what we're left with will be pasted into another schematic, so this frame won't be needed.

You’ll want to make sure to keep the little pieces of nets that connect to the header as they have important information about what pins on the Trinket the headers pins go to.

Once you have removed everything in the schematic except for the headers and the nets connected to them, you should be left with a very sparse schematic:

Now that the schematic has what we want, switch to the board window by clicking the SCH/BRD button in the toolbar:

Now in the board window you should see a representation of the Trinket board but now it will be missing some pieces because we deleted them from the schematic. We want to delete everything from the board except for the headers and the outline, however It's possible that you don't have all the layers visible so we'll need to make all the layers visible for the things we want to delete. Additionally, we'll hide the layer with the outline (layer 20, Dimension) so that it won't be deleted.

Click on the Layer Settings tool, select Used Layers from the Filter dropdown, and click Show Layers.  Then de-select the Dimension layer and click OK to make the rest of the layers visible.

With all the layers visible you can see that there is a lot of information available in the board file, most of which we're not going to use. Among these are the Adafruit logo and any other branding on the board. Adafruit open-sources their designs but their name and logos are their trademarks and should not be used without their explicit permission.

Slimming down the board

Use the Group tool to select everything and then like with the schematic select the Delete tool, right click on one of the selected items and choose Delete Group. 

Eagle will pop up a warning saying that you're trying to delete elements that cannot be back annotated, in this case, it's talking about the headers and not deleting them is precisely what we want. Back annotation refers to Eagle's ability to keep the schematic and board in sync and will not allow you to remove the functional schematic elements from within the board window.

Click OK and you should be left with just the headers and the outline. If anything else is left over, go ahead and delete them as well.

You are now ready to save the headers as a design block.

Click the SCH/BRD button on the toolbar to switch back to the schematic view. In the schematic window's menu click  File > Save as Design Block

This will pop up the Generate Design Block window. If you wish, you can include a brief description of the part you’re working on however I honestly skip this step. Click “Save as…” and give the block a name. The window will allow you to select a different location to save the design block however I strongly recommend that you use the default location as it will make it easier to find later. Once you have chosen a name, click “Save” to create the design block.

You now have a Design Block that you will use later when we create a new schematic for the adapter board. Use the same process to create a Design Block for the header on the INA219 breakout and you'll be ready to create the schematic.

For the INA219 Breakout schematic, you'll need to delete the pull-up resistors from the header part of the schematic so you're left with just the header and the nets connected to it, leaving you with something like this:

Creating a Schematic with Design Blocks

Now that we have the design blocks for the Trinket and breakout, we can start assembling the schematic for our board. To start, we need to create a new blank schematic and board file.

With the schematic window open, use the File > New to create a new schematic. If you haven't saved the current schematic you will be given a chance to save. After creating the new schematic, click the SCH/BRD button. You will be prompted to create a board file from the schematic; say yes so that we are able to paste in both the schematic and board parts of the design blocks we created in previous steps. You will be prompted to save the current board if you wish.

Make sure to click the BRD/SCH button to create the board file before you add the design blocks or else the board parts of the design block will not paste in correctly

Since the board we are creating is, in essence, a set of jumper wires, the schematic will only contain these connections themselves, not the complete circuit with the Trinket and the breakout.

This step is analogous to what you would do when assembling a circuit on a breadboard, using wires to connect signals between different pieces. In this case, however, instead of connecting the components of the circuit with the tracks of a solderless breadboard and jumper wires, we'll be documenting those connections in Eagle with “nets” which are Eagle’s way of representing the connections between the parts of a circuit.

Nets are used to record the “what” of the connection between two parts of a circuit. The “how” is done later when doing the layout in the board file. This separation of concerns is useful because this leaves you the flexibility to make choices about how the connection is made when laying out the board.

First we’ll need to add the headers for the Trinket and INA219 to the main schematic. To do this, select the Add a Design Block tool, expand the Design Blocks node and select the first piece of your circuit. I generally start with the main processor or development board but the order doesn’t matter. Select the design block that you created for the Trinket header and click OK and you will see a copy of the schematic from the Trinket header design block following your cursor.

Choose a section of the schematic to place it in and right click to put it down. Once you do this, your screen will change to the board view to allow you to place the elements from the design block on the board layout. Try to place it in the general area you will want it, but don’t worry about getting it perfect at this step.

Once you have placed the board elements you will be show the Paste from file dialog that looks like this:

This dialog allows you to change the names of the “incoming” design block to avoid using the same name of an net that already exists in the main schematic. In Eagle, two nets are connected if the have the same name, even if there isn’t a visible connection between the two parts of a schematic. The “paste from file” dialog allows you to avoid unintended connections by changing the name of the nets from the design block before they’re added to the schematic. In our case since this is the first piece of the schematic there are no conflicts.

Click OK to finish adding the design block to the schematic.

Repeat this process for the INA219 header design block. When the Paste from file dialog appears the one common net name is GND which is of course the ground connection. For this project and most others if the incoming design block has a GND net it will be OK to leave the name as it is since you generally want your grounds connected. When you use these techniques in your future projects you will have to make that decision based on the needs of your project.

Click OK to finish adding the INA219 header.

Congratulations! You’re not done but you’re closer than when you started! The next step is to create the nets needed to make the connections between the different parts of your circuit. As before, the nets we create here will be virtual representations of the connections of our circuit; you can think of them as equivalent to the jumper wires you used to connect the parts of your circuit on your breadboard.

Connecting with Nets

When creating and connecting nets in a schematic, I like to start with power connections but you can really start anywhere. Additionally there are several ways that you can create nets between two pins or components.

Since the GND net is already connected from when we added the two design blocks to the schematic,  start to use the first approach of connecting nets to make the 3.3v power connection between the headers for the Trinket and the INA219. We are going to use the Net tool to draw the connection between the two net stubs on each of the headers.

To start, select the Move tool and click on the VCC symbol attached to the VCC net for the INA219 header and stretch out the net a bit to give yourself more room to draw the net. Then do the same for the 3.3V net for the Trinket (which may be hard to see).

Now that we have a bit more room to work with, select the Net tool and first click on the green VCC net extending from pin 1 of the INA219 header. Then click to lay down net pieces towards the 3.3v net extending from pin 1 of the JP2 header for the Trinket. Finally click on the 3.3V net to join the two nets into one. Eagle will present you with a Connect Net Segments? window and will ask you to choose the new name for the combined net. Choose 3.3V and click OK to join the two nets. 

For the remaining nets, we'll use the fact that Eagle considers two nets as the same if they have the same name. Using this technique allows to to keep your schematic tidy by not requiring nets to cross the whole schematic to be connected. It's up to you to decide which approach makes your schematic easier to understand.

Select the Name tool and click on the D2_A1_PA09_SCL_MISO net connected to pin 2 of the Trinket's JP2 header. Eagle will show a Name dialog that allows you to change the name of the given schematic element, in this case a net. As the name suggests the D2_A1_PA09_SCL_MISO net represents a connection to the Trinket's SCL pin which is what we want to connect to the net of the same name for the INA219 breakout. Change the name to SCL and click OK. Eagle will verify that you want to connect the two nets. Click Yes to change the name and make the connection.

Repeat the process, renaming the D0_A4_PA08_SDA net to SDA to make the final connection. The remaining nets do not need to be connected for this project so you can leave them as they are.

Once you have connected nets between all of the pieces of your circuit that need to be connected, I suggest clicking on each of the nets with the Show tool to highlight all the connected parts of the net to verify the connections.

Congratulations! You’re not done but you have a functional circuit schematic. For this project the schematic is a means by which to create a circuit board however schematics are valuable on their own as documentation of how a circuit is constructed. Schematics are the circuit, the arrangement of information that creates a thing where one did not previously exist.

Layers, like an Onion

Now we arrive at my favorite part of circuit board design, layout. This is where we will translate the design represented in our schematic to a set of plans that will be used to fabricate the actual circuit board. When we’re done we will have a file that we can send to a board manufacturer like OSHPark to be manufactured.

When you switch to the Board window, you will see all of the footprints that you placed as you added the design blocks to the schematic as well as a bunch of lines between the different pins. These lines are referred to as airwires and will be present on the Unrouted layer (20) between the two closest pieces of the board that represent either end of the net. In this case, because we haven’t defined any traces yet, the airwires will span the whole distance between each pair of pins.

Our next steps will be to first define the general shape of our board by modifying the Dimension layer (layer 20), then we will position the headers on the board and finally we will use the route tool to lay down the copper traces that will make the connections that our nets represent.


I, EncycloPetey (, "Dagwood sandwich",

It's worth taking a moment here to talk about how layers are used in Eagle. Eagle organizes information about a board's layout into a vast array of layers, most of which we don't need to concern ourselves with just yet. The free version of Eagle comes with two routing layers, Top(1) and Bottom(16) that represent the design of most of the copper connections and footprints for components on the respective sides of the finished PCB. A large amount of our layout work will be done on these layers using the routing tools.

The Pads(17) and Vias(18) layers both represent the locations of plated through holes on the board that make an electrical connection between layers. The main difference between the two is that the Pads layer is generally used to connect the pins of a through hole component such as our headers both mechanically and electrically to the board.  Vias are essentially pads that are only used to electrically (and sometimes thermally!) connect layers of the board. Since they aren't meant to have anything physically passing through them they are normally smaller than pads so that they don't use more space on the board than needed. 

Finally we will be using the tPlace(21) and bPlace(22) to add stuff to the silkscreen design that will be printed on the top and bottom of the board respectively. At a minimum you should use this layer to label things on the board like pins or perhaps orientation information.

There are many more layers, some of which you will use in the future and some that you may never use. OSH Park has an excellent guide covering the commonly used layers in Eagle.

Shaping the Board

Before we can start placing the headers and traces on our board, we need to have a general idea of the shape of our board. There are several things that you will want to keep in mind when designing the shape of the board, however given those considerations you still have a lot of flexibility.

An important early step of designing the board is determining where components will be placed on the board. Many items have a fair amount of leeway with where they can be placed however components that will connect the board to something else such as headers, mounting holes, or sockets will generally have some constraints on where they should be placed. A USB socket for example can certainly be placed in the middle of a board facing a header, but then you wouldn't be able to plug in your cable once the board is assembled:

This won't work very well

In the case of our board, the headers that will allow you to connect the adapter board we are making to the Trinket need to be positioned such that they will line up with the headers on the Trinket. This is one of the main reasons why we're using design blocks extracted from the original board files; the spacing of the headers is already correct. All we have to do is place the headers in relation to each other.

The B Stands for Board, not Boring

Traditionally, PCB shape has been largely governed by the practical constraints such as mechanical connections or the enclosure that they're mean to fit into, however that need not be the case! Certainly your board has to be functional, however given the shape of the board is one of the most distinct visual aspects of it, why not get creative? For this project I will be making the board a fairly functional but boring rectangle, but you could make it (nearly) any shape you want! Square? Sure! Triangle? Isosceles or Scalene? Tardis? If you can settle for 2D and put in the work, sure! 

One of the "limitations" of the free version of Eagle is that it limits the size of your board to 12.4 in2 or 80 cm(as of version 9.2.2). I put limitations in scare quotes because while it might seem small, you will likely go a long ways with Eagle before you reach this limit. The vast, vast majority of Adafruit's boards including most, if not all. the breakouts, feathers, trinkets, metros, featherwings, gemma boards and circuit playgrounds are all well within this size.

It's also worth considering that given that OSH Park charges by the size of the board, generally it's worth trying to make boards on the smaller side, if you have a choice.

Adjusting the outline

With the board window open, you should see the three headers (two from the Trinket and one from the INA219) and the outlines of the Trinket and breakout and a larger black area with orange borders:

The black area is Eagle trying to do its best to represent the current area of the board as defined by the extent of the Dimension layer's contents. The large black box comes from Eagle's default behavior for a new board which is to create an outline as large as the free version allows. The holes are because Eagle is interpreting the outlines of the Trinket and breakout as cutouts because they're within a larger outline. We'll fix this as we adjust the outlines of the adapter board.  

Before setting the size of the board, we should position the headers relative to each other to help us judge how the Trinket and INA219 breakout will be positioned once attached to the adapter PCB.

Use the Group tool to select the INA219 breakout outline and header as a group. Then select the  Move tool, right click and select Move Group to move the outline and header together closer to the board edge and oriented so that the side with the header is closer to the Trinket.

While moving something with the move tool, right clicking your mouse will rotate it.

Next, again using group and move tools, position the Trinket outline and headers in relation to the INA219 breakout so that the outlines do not overlap and the notch in the Trinket outline for the micro USB connector faces away from the INA219 breakout.

Make sure to move the Trinket headers and outline as a group to preserve their spacing

By orienting the outlines and headers together and in relation to each other, we now know where the boards will be once connected to the adapter board.

Now we can use the move tool to resize the board outline to something more practical, and the delete tool to remove the Trinket and INA219 breakout outlines.

With the board outline more or less defined, we can start working on the actual routing of traces. As you do more work on the board, you may find that you need to make further adjustments to the outline, but this first draft will be good enough to start using to route the board and work on the silk screen.

Now is a good time to save if you haven't done so already.

Working with Design Rules

Design Rules

One of Eagle's more important but less flashy features is its support for design rule sets. These are sets of rules for things like spacing between board features and minimum sizes that all correspond to the tolerances and capabilities of a board manufacturer. Setting these design rules will help you design your board in a way that will fit the requirements and capabilities of your board manufacturer. 

The board house will specify these tolerances like on this page for OSH Park and you can manually create your own design rule sets based on these requirements, however in our case we're going to download and use the design rule files that OSH Park provides. 

Keep in mind that these design rules are for the minimum size that a manufacturer will produce, not the only size! In most cases, it is wise to use larger sizes than the minimum as the closer, smaller and tighter your design, the more "fragile" your design will be, meaning it will be susceptible to problems occurring from the normal and expected variances that occur during manufacturing.

Using Design Rule Files

Go to the OSH Park Eagle design rule page and download the "oshpark-2layer.dru" design rule file. Once downloaded, while in the board window, open the Edit menu  and select Design rules...
In the window that opens, click Load, select the OSH Park design rule file you just downloaded, and click OK.

Once you have loaded the new design rule file, let's run a design rule check to see if the board as it is now has any design rule errors.

By default Eagle will continuously check for Design Rule errors. You can turn this behavior on or off using the "Live DRC" checkbox under Options>Set..>DRC tab

Click the DRC button to open the DRC window, and click Check

This will pop up a dialog that will list any current board feature that violates the design rules.

When you run the design rule check, it will highlight several errors; the first is Airwires which are connections from nets that have not been completed using traces. This is to be expected because we have not created any traces yet.

The second class that might appear are dimension errors that come from the pads for the headers being too close to the outline of the board. One of the design rules that OSH Park and other board houses specify is how much clearance there must be between the board outline and anything on the copper layers.

We can use the move tool to adjust the position of the board outline and headers to provide an appropriate amount of clearance. 

Make sure NOT to move the individual Trinket headers by themselves! Use the group>move command to preserve their spacing

You will likely discover however that you can only make relatively coarse movements

The movement flexibility, in steps, is due to the default size of the grid.


Eagle allows you to specify a grid that board features will snap to when being moved or created. The units you specify will also determine the units used for measurements throughout Eagle. When routing a board I prefer to set the grid size somewhere between 2.5 to 10 mils. This allows for a fair amount of flexibility and, since design rules are often in mils, using mils for the units helps me make sure I'm keeping the design rules in mind while working on the board.

Open it by clicking the Grid icon. It will ask you to specify the grid size value and units like millimeters or mils (1/1000th of an inch). Set the size to 10 and the units to mils and the Alt to 2.5.

Now that you have adjusted the size of the grid, select the Move tool again and move the position of the board outline to remove the dimension errors. If you hold Alt (Option on a mac) while moving something, you will temporarily change to the alternate grid that you've set to a finer pitch, allowing you to make even finer adjustments. After working working in Eagle for a bit you'll likely develop your own preferences and can set the grid accordingly.

James M Corey 2005-03-12 (, „Wood router jmc 2005 03 12“,


We're ready to start laying down traces to connect the headers to each other.

Select the Route tool and select 10 from the width dropdown in the route tool's menu bar. This will set the width of the traces you will create to 10 mils since you set the grid to use mils. 10 mils is a good default width; it's more than enough to carry the current that this project will be dealing with while still being small enough to not take up more board space than necessary. Additionally because the INA219 breakout is open source, we can see that it uses 10 mil traces for the VCC, GND, SCL, and SDA signals.

A full consideration of how to choose trace widths is outside the scope of this guide. Searching for "choosing trace widths" in your search engine of choice will provide a wealth of information on the topic.

I2C connections and VCC

Like other things in Eagle, there isn't a required starting place for routing, so for the sake of this guide I'm going to start with the I2C connections, followed by the VCC connection. We're going to keep GND for last for a reason that will be apparent when we get to it.

With the Route tool still selected, verify that the Top layer (1) is selected and click on the SCL pin of the INA219 breakout to start a trace. Move your cursor towards the SCL pin on the Trinket's header, clicking along the way to lay down trace segments. Finally click on the Trinket's SCL pin. When you are done there should no longer be an airwire for the SCL net.

Continue using the Route tool to connect the SCL and VCC pins

Ripup, don't Delete

It's inevitable that you will either make a mistake or just decide that you don't like the way a trace trace looks. When you want to remove a trace you can either use EDIT>UNDO menu item if you just routed it, but if you added it a while ago you can use the RIPUP tool to remove it.

Select the Ripup tool and click on the trace segments that you want to delete. Easy peasy.

You can use the Delete tool to remove traces however if you accidentally click on the airwire left after removing a trace, you'll get this somewhat confusing error:

This is Eagle complaining because it thinks you are trying to delete the airwire which is a functional part of the schematic. Eagle is saying it can't "backannotate" which is what it calls keeping the Schematic and Board in sync. In this case it is refusing to apply this "deletion" to the schematic because it would totally change the circuit.

Ground Planes

One technique that is useful to learn is creating ground planes. You may have noticed when looking at some boards that they have large areas of copper filling most, or all, of the otherwise empty space around the components and the traces. These areas of copper, called ground planes, are often used to simplify making ground connections that the circuit requires. There are several other reasons why using ground planes makes sense on boards more complex than we're making, however again the reasons behind that are outside the scope of this guide. The Wikipedia page on the topic does a good job of explaining how and why they're used. This board is simple enough that a ground plane really isn't needed however learning the technique now to apply to more complex boards in the future will make routing a lot easier.

To create a ground plane we'll first use the Polygon tool to create a polygon slightly larger than the outline of our board. 

Select the Polygon tool and click around the perimeter of the board to create a polygon, ending the polygon by returning to the beginning of the outline and clicking on the start.

Once you complete the polygon, you will be prompted to name the signal that the polygon will belong to. Enter GND so that the polygon becomes part of the  GND net.

Once you specify the signal that the polygon is part of, click the Ratsnest button to fill the area outlined by the polygon with the GND signal. Since this creates a contiguous path between the two GND pads, this will complete that connection, removing the final airwire.

If you add new traces after creating the ground plane you will need to use the RATSNEST tool to generate a new ground plane that accounts for the new traces.

Switching Sides

Sometimes when routing a board you will find that there is no easy way to find a route for a trace because it would have to go get to the other side of a trace and there is no quick way to go around it. This is where vias and double sided boards are useful. On a single sided board, you would use a jumper to cross another trace, however since our board has two sides, we can use a via to continue the trace on the other side of the board, avoiding the trace in the way.

This is entirely unnecessary for this board however I will give you an example of how to use both sides of a board by re-routing the SCL connection using vias to switch sides.

Starting with the SCL trace ripped up, again verify that the Top layer(1) is selected and click on the SCL pin of the INA219 breakout header. Start clicking to lay a path and when you want to switch sides, with the route tool still active select the Bottom layer (16). Once you do this, the trace will continue to follow your cursor however there will be a via at the tip of your cursor. The next time you click you will place a via and the traces will continue on the bottom layer. Route as you wish and then select the top layer again and repeat the process to continue on the top layer.

Because the pads for the headers are like large vias connecting both sides of the board, once you've switched to the bottom layer, you can in fact just complete the rest of the trace on the bottom of the board (if you're paying attention, you'll notice that you could also just have the whole trace on the bottom).

If your mouse has a middle button, clicking it will also create a via to continue on the other side of the board

Functionally Done but not Complete

Once you have the VCC, GND, SCL and SDA nets done, the board should be functionally complete. It could probably sent to OSH Park at this point however we should tweak a few things before we send it out to be manufactured.

Final Touches

Rounding Corners

When a board is manufactured, the board house will use a milling tool to cut the final shape of the board out of the larger PCB panel. If you have 90 degree (or more acute) angles on the corners of your board they can end up pretty sharp.

For prototypes it is common to just file the sharp edges off, however with just a bit more effort we can round the sharp corners of the board in Eagle so the milling operation will take care it for us. While there are more than one way to skin this particular cat, the Miter tool makes it extremely easy.

Select the Miter tool and choose your desired radius (in mils due to the grid settings). Then simply click on each of the corners you want to round.

Adding Silk Screens

Next we'll add some text to the tPlace (21) and bPlace (22) layers to be printed on the board to help us identify which pins are which. These sets of text or graphics are referred to as "silk screens" or "silks" because of the silk screen printing processed used. The the same process is often used to print t-shirts!

Before we add our text, let's check the handy manufacturing extension to see what the board will look like. To make sure it's enabled open the Options>User interface... menu and make sure the manufacturing checkbox is checked in the Extensions section

Next click on the Manufacturing extension to load the board preview. Looking at the preview of the board that it provides, we can see that we forgot to remove the labels for the headers.

Use the delete tool to remove the header labels if the are still there then make sure the tPlace (21) layer is selected. Click on the Text tool and you will be prompted to enter the text that you want to add to the board. Start with the VCC and click OK.  The text tool acts like a stamp, placing the selected text wherever you click.

With the text tool set to your chosen text you can adjust the size and ratio selectors to adjust the size and thickness of the text. Once you are happy with a size, click next to the VCC pin of the INA219 header to add it to the silk screen. Once the first label is place, right click to rotate the tool and apply another label next to the Trinket header's VCC pin.

Repeat this process to add as many or as few labels as you wish. I highly suggest that you have at minimum at least one pin of each header labeled so that you know how to orient the Trinket an INA219 breakout.

Final Checks

As a last step we should double check the board before sending it off to have it manufactured. First use the manufacturing extension to verify that the board and silks look how you would like them to. Lastly run another design rule check to verify there aren't any lingering issues

In my case there was a wire stub error which is an extra unused piece of a trace. You can address wire stubs by simply using the ripup tool to remove them. Address any DRC errors that show up, then save and we're ready to send the board out to be manufactured!

Ordering and Assembly

The happiest place on earth

Uploading to OSH Park

We're finally ready to send the board out to be manufactured! This is maybe the best and worst part of the process; the best because you're finally going to be seeing the board in the real world and the worst because once you order, there will be a lot of sitting around waiting for the mail to arrive.

I'm going to show how to order your board from OSH Park because I think they make the process as easy as possible, they have excellent customer service, their boards are high quality, their prices are very reasonable, they have free shipping, and they arrive relatively quickly for the price. There are other options that you can investigate, but OSH Park does such a good job on smaller scale projects that I personally have yet to have a reason to get boards from anywhere else.

The first step is to go to the OSH Park login page and create an account. After submitting the form you will be send an email to the address you gave to verify your address. Follow the instructions in the email and you will be returned to the login page. Once you log in you will be taken to an account profile page. From here you can click on the OSHPARK logo at the top right of the page to go back to the OSH Park home page.

Once at The OSH Park home page, click the big Browse for Files button. This will open a window to select a file, and you'll want to navigate to where you saved your schematic and board file and select the board file.

After taking a bit of time to analyze the board file, you will be shown a summary of what the board will look like as well as the cost for having the board manufactured, including free shipping!

A name for the board will be automatically generated from the filename which you can change as well as giving a description of the board. Both of these fields are for your own use and often times I just leave them as they are.

Lastly you will be given a summary of the information extracted from the board file including the size and number of layers. Additionally if OSH Park detects any issues with your board it will give you warnings. A common (non-critical) warning is that you don't have a silk screen on one side of your board.

Unless there are any glaring errors at this point, click Continue and you'll be given a chance to review the board in more detail before ordering.

Verify the Layers

The next page will allow you to verify your design. Here OSH Park will show you images of different parts of the board along with some very useful instructions on how to assess each image that is shows you.

The main things that I will look at is that the silk screen looks how I would like it to look and that the copper layers don't look like there are any short circuits where copper is touching where it should not be. This is your last chance to review the design so it's worth taking a few minutes to double check everything.

Once you're happy with how things look, click the Order button.

Finalizing Your Order

The next page is where you'll decide how many copies of the board you want to order and if you want any optional services. For your first board, the only one I would consider is the Super Swift Service option that will double the price to reduce the time at the fab to about five days. Getting your boards back sooner is always nice and for smaller boards the price difference is minimal.

On the final two pages, you will provide your shipping information and provide payment. After that is complete, all you have to do is wait!  OSH Park will email you status updates about your order as it progresses onto a panel, to the fab and back, and when it's shipped.

Eventually after what will seem like forever, a beautiful purple package will arrive!

Inside you will find your boards! Take a moment to revel in your accomplishment. You made a thing!

Now we have to do a bit of work to make this thing you made do something. Time to put it together.


We're almost to being able to put all the work we've done so far to use. The one last thing that we need to do is assemble the breakout board.

Because they were cut from a larger panel, your boards will likely have a few pieces of extra board still attached. If you have a file or sand paper you can put it on a flat surface and rub the board against it to remove the edges. 


Doing it this way rather than holding the abrasive and board in your hands will make it easier to not accidentally file off something you don't intend because you're not juggling two things at once.

If like me you've already assembled your Trinket with male headers, you can simply cut a larger female header into two pieces, one for each side of the Trinket's pins.

You will always lose one pin while cutting headers so make sure to cut on the pin one past the last one you need. Since we need five pins for each side of the Trinket, cut at the sixth pin from the end.

It can some times be tough to align headers correctly when soldering so you can use the Trinket to hold the headers in place while soldering. Simply flip the Trinket on its back and place the headers on the pins.

With the headers in place you can then place the board on the headers and solder the pins sticking through.

That trick won't work for the header for the INA219 breakout so you can instead use a sizable piece of Blue Tac or other similar reusable adhesive to hold the header in place while soldering.

Once you've soldered on your headers all that's left to do is to plug in the Trinket and INA219 Adapter, using the labels on the silk screen to align them correctly.

An interesting feature of a board like this is that it can be mounted either above or below the Trinket. To mount it above the Trinket, you'll need your Trinket to have stacking headers so that there are female headers on top of the Trinket for the adapter to plug into. If that's your intention you'll probably want to design your board slightly differently, lest you end up with and unwieldy beast:

If you're trying to keep it as small as possible, you can always just solder the breakout and board directly to the adapter:

Usage and Final Thoughts

The one last thing to do is load some code onto the Trinket to use the INA219, wire it up to a load and measure some current!

The INA219 breakout guide has all the info you'll need to use your newly assembled circuit. Note that since the breakout you created does the wiring to the microcontroller for you, you can skip the steps on how to wire the microcontroller and go straight to the section on wiring the INA219 breakout into the load circuit. Once the wiring is done, you can follow the INA219 guide's Circuit Python code example to put the board to use.

Don't Be Afraid of Making Mistakes

While writing this article, I made a boo boo. I thought I was being smart and ordered the board before I was done with the guide so that it would arrive just in time to take pictures. As it turns out, since I was in a hurry, despite checking it several times, I missed the fact that I had the header for the INA219 breakout backwards because I didn't use the outlines of the original boards to check the layout of the headers.

Despite this frustration I was still able to make the board work by using a stacking header to elevate the breakout above the Trinket. 

With experience, even you too can make mistakes (and fix them)

The point of mentioning this is to remind you that even someone who has been doing this for a while can and will make mistakes. The important takeaway is that, when you make something, you learn how it works in the process and when you break it, you're equipped to fix it. Don't let a fear of making mistakes keep you from doing something because everyone will make mistakes. Making mistakes doesn't matter; learning from them does.

Where to go from here

Congratulations, you've made a circuit board! As I previously mentioned, the project for this guide is just the tip of the iceberg. You can use these same techniques to do anything from breakout adapters like we just did, to custom feather wings or bonnets based on breakouts, or whatever your heart desires! We're just getting started. If you have an existing project based around Adafruit or other open source hardware, try converting it into a PCB.

The next guide in this series will take what we've learned here and turn it up a notch. Stay tuned.

Addendum: Tips and Tricks

Origins and You

Eagle has recently made a few very notable improvements in the UI department but there are still some counter-intuitive things about how it expects you to work. 

Origins are one of the most important things to understand in Eagle because just about every operation you'll want to do on a component will require you to interact with the Origin. The rest of the symbol or footprint might as well not exist as far as Eagle is concerned, you must click on the origin.

Some times they're easy to find:

Easy Mode

Other times you'll click around like a maniac trying to find it:

You're not crazy, the designer of this symbol is crazy

And other times you'll swear you've gone crazy and start questioning if you've ever known how to use Eagle, only to later notice that you've hidden the tOrigins or bOrigins layer that controls if the origins are visible and can be clicked on:

Chances are that if you're trying to do something reasonable and Eagle is beeping at you or refusing to listen, you're probably not interacting with the origin.

Group Operations Made Easier

As I mentioned previously, since being acquired by Autodesk, the Eagle team has recently made some notable improvements in the UI department. Previously some very common user interface operations like moving or deleting groups, copying and pasting were annoyingly difficult and unintuitive. This improvement in usability is important enough that you should verify that it is enabled:

With a board or schematic open in their respective windows, click the Options menu > Set..> Misc tab and double check that the "Group command default on" option is checked.

With this option enabled, two notable group operations are much easier. To move a group, all you have to do is select the Group tool, left click drag a rectangle around the items to group, and then simply drag on of the group's members' origin to move the group.

Similarly, after using the group tool to create a group, simply pressing the Backspace (Delete on a Mac) key will delete it.

Additionally, CTRL/CMD-C and CTRL/CMD-V can now be used to copy and paste selected items or groups. Note that, if you copy any nets, the copies will still have the same name and thus will be connected together.

This guide was first published on Feb 05, 2019. It was last updated on Feb 05, 2019.