HTMAA Demo Project / Baby UI Pad

Project Repo on CBA Gitlab

I’m making this thing mostly so that I can walk through a few of the critical steps for HTMAA (how to make almost anything) projects: (1) circuit design, (2) circuit manufacture / soldering, (3) embedded programming, and (4) interface and application programming.

(1) Eagle Electronics CAD (ECAD) Design

Above is a ~ 50 minute hello-world to get you situated in Eagle ECAD software. I’ve included files from the example project in this repository and the library used is located here, in the fab cloud.

Eagle in 10 Commands

As a cheat-sheet, here’s the basics - these commands should be enough to get you through most design exercises.

Schematic Design

The schematic is a nonphysical space where we can describe which outputs or inputs from our various components are connected to one another. In a schematic, we find part symbols that pave pins, these are connected to one another on nets.

Add / Delete

We use add or delete in the schematic to add components to the sheet. Simple enough! We can also use delete to remove “nets.”


The net command lets you draw schematic hookups which are known as … well, “nets” in ECAD terms. A net represents a kind of non-physical wire - or we can think of it as a vertex in a graph to which other things (component pads, for example) are connected. We can also think of a net as a single signal in our circuit.


We can use name to give nets unique names. Drawing two net lines but naming them the same thing will “virtually” connect them, meaning you can make schematics less messy. Nice.

Board Design

The board representation is where our design meets the physical world. Here we find footprints that have pads that are connected to one another via traces, vias, and pours i.e. copper.


DRC stands for design rule check and lets you configure Eagle such that it won’t let you draw signals that are i.e. too close to one another (such that they would be impossible to manufacture). It also helps check for errors: make sure you call DRC before you send a board to fab!


The route command lets us connect disparate elements of the same net to one another: laying tracks / drawing wires / routing: all the same.

When routing, we can click the middle mouse button to lay a via, thus t r a v e r s i n g through the stack of PCB layers.


Contrary to route - ripup will remove tracks / traces, or delete vias. Ripup has some settings: we can remove partial elements of a trace, or vias, or the entire signal, or only the piece of a signal on the current copper layer.


Move … moves things! When we call this, we have to pick things up right by their origin (denoted with a tiny + and on the tOrigins or bOrigins layer).

When moving, we can right-click to rotate by 90’. Nice.


The grid is how we keep ourselves organized in Eagle, or line things up. You can set grid units and spacing by calling i.e. grid mm 1 / grid <unit> <spacing>

In order to move something on to the current grid, hold down ctrl while picking it up with the move command.


The polygon command lets us draw copper “pours” - areas we want to cover with monolithic sweeps of connected copper. Pours are awesome for sucking the heat out of power components, or connecting large ground planes / etc.

To use polygon, call the command, draw a shape, and then name the polygon with the name of whichever “net” / signal you want to occupy that area.


We eventally need to draw an outline for our board, or maybe we want to doodle on the silkscreen, whatever. line will let you draw those things - make sure you have the appropriate layer selected: dimension is for board outlines, tPlace or bPlace for the silkscreen.



Calling ratsnest will re-draw all polygon pours, and in older versions of Eagle, will redraw the airwires as well.


We can use show to highlight signals / nets in our board design. This is awesome when we just need to sit there and consider how to route something, or want to do a little visual analysis on our current progress. For example show +3v3 will highlight everything connected to the +3v3 net, you get the idea.


Eagle has a layer system: top and bottom copper are on top and bottom respectively, component names and values are on tNames and tValues - (and with the b prefix for anything on the other side), and when we are sending boards to a fabricator we should also consider the tPlace (silkscreen) tStop (solder mask) and tCream (solder stencil) layers. Additionally, we have measures where I normally put dimensions / measurements and guides, and tDocu where footprint documentation (i.e. outlines we would like to see when routing, but would not want to print on the silkscreen) goes.

To show / hide these during routing, we can use display -<layer_name> to hide a layer or display <layer_name> to show it, and can issue multiple arguments during each command.


Want to mount something to your board? Use hole - it’ll draw a circle on the dimension layer, meaning it will be milled / drilled during fabrication.

(2) Fabricating Boards using PNGs and Eagle

Exporting PNGs that are appropriate for manufacturing using mods in a fab lab is a bit of a trick. We need to get PNGs that are purely black and white, that contain only the layers we want to mill.

To export a PNG for the traces, use these commands:

display none to make all of the layers invisible

display top vias pads to display top copper layers

export image to export a PNG, use an appropriate DPI (1000 is likely high enough) and use the monochrome option

To export a PNG for the outline, we do something similar:

display none

display bottom dimension vias

export image - the same, monochrome, with the same DPI

now we need to process these PNGs (photoshop is good) to make them ready to mill: we have to do the same in KiCAD: the fab pcb milling process is unusual, and we haven’t developed an automated workflow yet!

  • black parts of the image will be milled away !
  • on the outline, make sure the board is completely filled in with white
    • but leave vias completely black: this will mean that we drill via holes and mill the out outline with one job