Skip to content

7. Electronics Design

What is Electronic Design Automation (EDA)?

Electronic Design Automation (EDA) refers to the category of software tools used for designing electronic systems, such as printed circuit boards (PCBs). EDA tools help engineers design, simulate, and verify circuits and PCBs, ensuring that the layout and functionality of a board meet design specifications. KiCad is an example of an open-source EDA tool that allows users to create schematics, design PCB layouts, and generate the necessary files for manufacturing.

KiCAD

Previous Use of Circuit Board Design Software: Prior to using KiCAD, I have worked with other circuit board design software, including [mention any other software you have used]. However, I found KiCAD to be a very accessible and comprehensive tool for this specific project.

Before diving into KiCAD, it’s essential to outline the typical workflow for circuit board design. The workflow involves several key steps:

  1. Schematic Design: You start by creating a schematic diagram, which defines the electrical connections between components. This is the blueprint of your circuit.
  2. Component Selection: You choose appropriate components for your design, ensuring they meet the requirements (e.g., size, functionality, electrical ratings).
  3. PCB Layout: Once the schematic is complete, you design the physical layout of the PCB, placing components and routing traces.
  4. Design Rule Check (DRC): The design is then checked for errors, such as trace width violations or component overlaps.
  5. Gerber File Generation: Once the design is validated, the final step is to generate Gerber files, which are used by manufacturers to produce the PCB.

In my project, I began by downloading the Fab Academy library for KiCad to ensure that I had the right parts.

I first had to download the Fab Academy library for KiCad, to make sure I had the right parts.

Then it was off to making my schematic. I used my Wokwi and copied what I had on there, the only difference was that I used the footprints of SMD components instead of through-hole ones.

After I had my Schematic I then imported it over to the PCB design page. I placed my components as compact as I could while staying aware of limitations such as the USB-C port at the top of the C3. I also made all of my tracks .5mm instead of KiCads default fo .2mm, which does not stay on the board.

Once I had the PCB layout complete, I could then view the 3d model in KiCad’s PCB viewer.

Milling

We used Bantam Tools’s desktop milling machines to create our PCBs.

I had some clearance issues with the board, this was an incredibly easy fix though as I milled anyway, and then went back with tweezers and cut those bridges manually. I double checked with a multimeter to make sure they were truly disconnected.

(The red marks are places where the 1/64” flat endmill bit can’t reach)

One of our milling machines has a problem with sensing duuring touch off. Since we can no longer order the part, as the manufacture has discontinued this model, we are now using an alligator wire connected to the drill bit and the head of the machine, while janky, it does work well enough until we order new milling machines next year.

Video of milling the board:

After milling, this is what my board looked like:

Soldering

Soldering went super smothly except for one small detail, my LED was on backwards. When I tried to take off my LED, I ripped the trace. I fixed this easily by subsituting the trance with a 0ohm resistor.

My first attempt at soldering (LED was backwards):

My second attempt at soldering my PCB (trace ripped and I bridged it with a 0 ohm resistor):

Coding

I just used some old button code from my Embedded Programming week. I programmed the chip through Arduino since I can’t be bothered to use Thonny.

const int buttonPin = D1;     // the number of the pushbutton pin
const int ledPin =  D0
;      // the number of the LED pin

int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) { 
    // turn LED off:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED on:
    digitalWrite(ledPin, LOW);
  }
}

This is what the final board looks lke running:

Reflection

This week was a slight learning curve for me because I had partially forgotten how to use KiCad. Thankfully, I was able to quickly use trial and error to produce my PCB board quickly. Everything (Besides the soldering) was pretty chill this week, I didn’t find myself rushing too much to get everything done. I also think that looking at the signals from the oscilloscope was really interesting.

SoftWare Used

My Group’s Site

Members Role
Andrew and Kathryn Documentation
Kathryn Sigilent Oscilloscope
Kathryn Multimeter
Andrew Analog Discovery 2 (Logic Analyzer)

My Files


Last update: April 22, 2025