Week 08

Electronics Production

iconn

ASSIGNMENT

Make and test a microcontroller development board that you designed — from schematic to soldering and programming.

TOOLS

KiCad · Mods CE · Roland SRM-20 · Arduino IDE

Electronics Production

Personal and Group Assignment

This week's personal assignment was to design, manufacture, and test a custom PCB board using a microcontroller. The group assignment focused on characterizing the milling process — testing trace widths, clearances, and cut depths on the Roland SRM-20.

Here's also the link to our group assignment of this week.

What is Electronics Production?

Electronics production in Fab Academy means manufacturing your own Printed Circuit Board (PCB) from scratch — designing the schematic, laying out the board, milling it on a CNC machine, soldering the components, and testing that everything works correctly.

Unlike buying a development board like an Arduino, this process gives you full control over every component, trace, and pin. It's an essential skill for creating custom electronics for your final project.

KiCad

Free and open-source EDA tool for schematic and PCB design.

Mods CE

Browser-based toolpath generator. Converts PNG images into CNC instructions.

Roland SRM-20

Desktop CNC mill used to cut copper traces on FR1 boards.

File Export

Gerber Export & PNG Conversion

To prepare files for the CNC machine, I exported the design as Gerber files from KiCad's Plot dialog. Then I converted them to high-resolution PNG images using Gerber2png from Fab Lab Kerala — because Mods CE reads PNG, not Gerber.

  • 1 KiCad PCB editor → File → Plot
  • 2 Select F.Cu and Edge.Cuts layers. Format: Gerber. Click Plot.
  • 3 File → Fabrication Outputs → Generate Drill Files. Keep defaults, click Generate.
  • 4 Go to gerber2png.fablabkerala.in and upload the Gerber files.
  • 5 Download Top Trace PNG and Outline PNG separately.

Why PNG and not Gerber directly?

Mods CE reads bitmap images to determine where to mill. A black pixel means "keep copper", a white pixel means "mill away". This is why we convert Gerber → PNG before generating the CNC toolpath. The resolution of the PNG directly affects trace quality.

Mods CE Setup

CNC Parameters in Mods CE

Mods CE is the browser-based toolpath generator for the Roland SRM-20. I configured three separate operations with different tools and parameters for traces, drills, and the board outline.

OPERATIONTOOL SIZESPEEDDEPTH
Traces (engraving)0.4 mm V-bit2 mm/s0.1 mm
Drills0.8 mm flat0.5 mm/sThrough board
Board outline2 mm flat end1 mm/sThrough board
▸ Step by Step: Mods CE Configuration
Open Mods

01. Open Mods CE

Go to modsproject.org → Programs → Roland SRM-20 → mill 2D PCB.

Load PNG

02. Load Trace PNG

Click "select png file" and upload the Top Trace image. Set tool diameter to 0.4 mm.

Set parameters

03. Set Parameters

Set speed to 2 mm/s, depth 0.1 mm, origins X/Y to 0. Preview the toolpath simulation.

Download RML

04. Download RML File

Click "calculate" then "save". The .rml file will be sent to the Roland SRM-20 via VPanel.

Outline config

05. Configure Outline

Repeat the process for Edge.Cuts PNG. Use 2 mm flat tool, set depth to cut all the way through.

PCB Manufacturing

Milling with the Roland SRM-20

The order of operations is critical: drill holes first, then engrave traces, and cut the outline last. This sequence prevents the board from shifting after it's been freed from the base material — which would ruin the alignment.

▸ Step by Step: Roland SRM-20 Setup
Fix board

01. Fix the Copper Board

Apply double-sided tape to the back of the FR1 copper board and press firmly onto the MDF sacrificial layer.

Install bit

02. Install Drill Bit

Insert the 0.8 mm bit into the collet. Tighten with the wrench — secure but don't overtighten.

Set XY

03. Set XY Origin

Use VPanel to jog the spindle to the board corner. Click "Set X/Y Origin" to define the work origin.

Calibrate Z

04. Calibrate Z Axis

Slowly lower the tool until it barely touches the copper surface. Set Z origin. Raise tool before running the file.

Mill traces

05. Mill Traces

Switch to 0.4 mm V-bit, re-zero Z, and run the trace toolpath. Monitor the machine at all times.

Cut outline

06. Cut Board Outline

Switch to 2 mm flat end mill, re-zero Z, and run the outline file. The board is free after this step.

Results — Milled PCB

Component Soldering

Soldering Process

I recommend soldering from the smallest components to the largest to avoid blocking your working area. SMD resistors and LEDs go first, then connectors, and the microcontroller last.

I applied soldering paste to the pads with a toothpick before using the iron and solder wire. My iron temperature was set to 270°C — slightly below the typical 290–300°C range since it was my first time soldering SMD components. Better to go slow.

Tip: Continuity Test Before Powering Up

After soldering all components, use a multimeter in continuity mode (the beep symbol). Touch one probe to a trace and the other to an adjacent trace — if it beeps, you have an accidental short circuit to fix before connecting USB. This step saves a lot of debugging time and protects your microcontroller.

Board Testing

Programming with Arduino IDE

I connected the finished board to my laptop via USB-C. To program it, I added the RP2040 board package to Arduino IDE and ran two simple tests to verify the LEDs and button worked correctly.

  • 1 Open Arduino IDE → File → Preferences
  • 2 Paste this URL in "Additional Boards Manager URLs":
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
  • 3 Open Board Manager → Search "Raspberry Pi Pico/RP2040" → Install
  • 4 Tools → Board → XIAO RP2040
  • 5 Select the correct port and upload your sketch
▸ Test 1: Button Controls LEDs
Button test

Button press → LEDs on

Pressing the button turns all LEDs on. Releasing turns them off. Validates the pull-up resistor and button wiring.

// Test 2: Button → LEDs

const int button = D3;
const int led1 = D0;
const int led2 = D1;
const int led3 = D2;

void setup() {
  pinMode(button, INPUT_PULLUP);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}

void loop() {
  int state = digitalRead(button);

  if (state == LOW) {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
  } else {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
  }
}

Downloadables

Here you can find the KiCad project, Gerber files, PNG images, and Arduino sketches from this week.


⬇ Download Project Files