Week 6 — Electronics Production

October 14, 2026

What I did

This week was about turning a design into a real board: making the PCB in the lab, soldering the parts onto it, and checking that it works. The plan was simple. Last week I designed the main board of my final project, the remote-controlled sailing boat, in KiCad. This week I would just mill it and solder it.

It was not that simple. Before the board ever touched the milling machine, I redesigned it twice, after talking to Quentin and Qilmeg. Then the milling half worked, the soldering took much longer than I expected, I tore a bit of copper off the board, and I fixed it with a piece of wire. In the end, the LED lights up.

The finished milled copper board plugged into a white USB-C cable, with the XIAO ESP32-C3 soldered at the top, a small white LED glowing brightly on the right, three sets of right-angle header pins on the edges, the black antenna cable clipped onto the XIAO, and a servo plug lying next to the board
The end result: Victor's Boat PCB, powered over USB-C, with its status LED on.

Process

Redesign #1: tracks behind the header pins

Last week, my main headache was that tracks were running under the header pins, where the bare metal would lie on the copper and short everything together. I solved it by squeezing tracks under the XIAO and adding a 0 Ω resistor as a bridge.

After talking to Quentin and Qilmeg, I realised there was a much simpler way: the copper tracks can come into the pads from behind, from the board side, while the pins and their plastic body stick out past the edge. Nothing runs under the metal any more, because the metal is not on the board at all. So I redid the whole routing, and as a bonus the 0 Ω jumper disappeared.

KiCad PCB editor showing the first redesign: the XIAO at the top left, the LED and its 1k resistor at the top right, the battery header J3 on the right edge, and the two servo headers J1 and J2 along the bottom edge, with all tracks arriving at the header pads from inside the board; the sail header J2 is wired signal, GND, VBAT
Redesign #1. All the tracks reach the headers from the inside of the board, and the 0 Ω resistor is gone. Look at J2 (the sail header, bottom left): its pins go signal, GND, VBAT. Keep that in mind.

Redesign #2: servos have opinions about wire order

Just before milling, Qilmeg pointed out something I had completely missed. A servo cable comes with its plug already on it, and the order of the wires is fixed: signal, then +, then −, with the power (the battery) in the middle. That is a feature, not a coincidence: if you plug it in the wrong way round, + is still on +, and nothing burns.

On my rudder header that was fine. But somewhere in all my rerouting, the + of the sail header had ended up on the edge. Plugging the sail servo into that header would have sent the battery into the wrong wire. So I redid the routing again, this time with both servo headers in the right order: signal, VBAT, GND.

KiCad PCB editor showing the second redesign: the same board, but the sail header J2 is now wired signal, VBAT, GND like the rudder header J1, with its VBAT track looping over to the VBAT pin of J1 and its GND track passing underneath to the GND pin of J1
Redesign #2. J2 now reads signal, VBAT, GND, exactly like J1, so both servos plug in the same way. The VBAT track loops over the top and the GND track goes around underneath.

I kept the same rules as last week, 0.4 mm track width and 0.4 mm clearance, which leaves enough room for the milling bit to pass between two tracks. I also checked the 3D view one last time, now with the right 3D models for every component.

KiCad 3D render of the final board seen from an angle: the XIAO ESP32-C3 with its USB-C port at the top, R1 and the LED on the right, the capacitor C1 and the 2-pin battery header J3 sticking out of the right edge, the diode D1 in the middle, and the two 3-pin right-angle servo headers J1 and J2 sticking out of the bottom edge
The final version in 3D. All three headers now hang off the edges of the board, with their pins pointing outwards.

Then I exported the copper layer as a black and white image, which is what the milling machine works from: white is copper that stays, black is copper that gets milled away.

Black and white trace image of the board: white tracks, pads, the plus and minus signs and the text HTMAA 2026 and Victor's Boat PCB on a black background, with four white circles for the M3 holes
The trace file. Ready to mill.

Milling

The board is milled in two passes: first a fine bit engraves around the tracks, then a bigger one cuts the board outline (and the holes) out of the copper sheet.

The first pass, for the tracks, with the 1/64″ bit, worked well. All the tracks came out clean, and even the text is readable. The second pass was a different story: the 1/32″ bit broke, and it never cut all the way through the board. So I finished the job by hand with a cutter, scoring along the milled outline until the board came loose, and then sanded the edges with sandpaper so they would not be sharp and frayed.

The freshly milled board lying on the sacrificial copper plate of the milling machine, surrounded by the engraved outlines of other students' earlier boards; the tracks, pads and the text HTMAA 2026 and Victor's Boat PCB are clearly engraved
Fresh out of the mill. The tracks are all there. All around it you can see the ghosts of everyone else's boards on the sacrificial plate.
The bare milled copper board on a wooden table, cut out and sanded, showing the XIAO pads, the tracks, the plus and minus signs, the text HTMAA 2026 and Victor's Boat PCB, and four M3 holes in the corners
The bare board after the cutter and the sandpaper. The edges are not factory straight, but they are smooth.

Collecting the parts

Next I went shopping in the lab's inventory: the XIAO ESP32-C3, the 1 kΩ resistor (marked "1001", which I can now read thanks to week 3: 100 × 10¹ Ω), the Schottky diode, the capacitor, the LED, and the headers.

The bare milled board on a wooden bench next to all its parts: the XIAO ESP32-C3 module, two 3-pin and one 2-pin right-angle headers, a resistor marked 1001 on its white tape, and the other tiny surface-mount parts still in their packaging
Everything that goes on the board, before soldering.

The headers come as one long strip, so you cut off exactly the number of pins you need: two strips of 3 for the servos and one strip of 2 for the battery.

A long strip of right-angle header pins lying on a scratched wooden workbench next to a pair of scissors, with a short 2-pin piece already cut off
Cutting the header strip down to size with scissors.

Soldering

I used the same bench and tools as in week 3: the Weller soldering iron, the Andonstar microscope, tweezers, and desoldering braid for the mistakes. I thought this would go fast, since I had already soldered a board. It did not. The parts are much smaller than on the QPAD, and getting each one on the right way round turned out to be the actual difficulty.

The XIAO first. I started with the microcontroller, since it is the biggest part and everything else is placed around it. The solder wire I picked first just would not work for me: I kept getting "cold" joints, where the solder sits on top of the pad as a dull lump instead of flowing onto it and making a proper connection. I changed to another solder wire and it instantly became much easier.

The milled board with the XIAO ESP32-C3 soldered on, seen upside down, with shiny solder joints along both rows of its side pads and the rest of the board still empty
The XIAO is on. The rest of the board is still empty.

The LED, which is where it got hard. An LED only lets current through in one direction, from the anode (+) to the cathode (−), so it has to go on the right way round. I could not figure out which side was which on this tiny one. I checked every source I could think of: Google, Claude, the datasheet. I also tried to find out with the multimeter in diode mode, but I could not get it to work. In the end I decided to just solder it and see.

A red and black multimeter set to diode test mode showing OL on its screen, its two probes lying next to a tiny surface-mount LED on the wooden bench
The multimeter in diode test mode, next to the LED, which was supposed to tell me which side is which. I never got it to give me an answer.

Unfortunately, while I was working on the LED, I pulled off part of the copper track next to it. On a milled board the copper is a very thin layer glued on top, and once it is gone, it is gone. To repair it, I soldered a small piece of wire along the path the track used to take, so the circuit is closed again. It is not pretty, but electricity does not care about pretty.

Close-up of the board with the XIAO, the 1001 resistor and the white LED soldered on the right, and a thin bare wire soldered from the XIAO's track to the LED and down along the track, replacing the copper that was torn off
The resistor and the LED are on. The thin silver wire around the LED replaces the copper I tore off.

The diode was easier. It has a visible line printed on one end that marks the cathode, so there was no guessing.

The headers went on last. They were not too complicated, although the battery header does not lie perfectly flat. I also clipped the little Wi-Fi antenna onto the XIAO.

The fully soldered board on the bench, with the XIAO, LED, resistor, diode, capacitor and all three right-angle headers in place, the black Seeed Studio 2.4G antenna connected to the XIAO by a thin cable, a spool of copper desoldering braid and a pair of tweezers on the bench
All components soldered, with the antenna attached. The desoldering braid in the corner saw some use.

Testing

I then grabbed the two servos that I am going to use for the final project, plugged them in to check that the plugs fit the headers, and headed home to test the board.

View from above of the soldering bench: the finished board with its antenna at the top, two servo cables plugged into its headers, and two black servos at the other end of the cables, a TIANKONGRC MG995 and a Miuzei 996; the Andonstar microscope and soldering station are on the right
Both servos plugged in. The plugs fit, which, after two redesigns, was a relief.

There was a catch: I don't have a battery yet. Over USB, the XIAO is powered, but the servos are wired to the battery input, and the diode sits between the two. Its whole job is to stop current from going from the XIAO back towards the battery side, which means it also stops USB power from reaching the servos. That is exactly what I designed it to do, and exactly what stopped me from testing them. So for now, the only thing I could test was the LED.

The test program blinks the LED on D10 and prints a message to the computer, to check that the XIAO, the LED and its resistor are all soldered correctly:

// Step 1 - Blink the status LED on D10
// Checks that the XIAO, the LED and R1 are soldered correctly.

const int LED_PIN = D10;   // our LED is wired to pin D10

void setup() {
  pinMode(LED_PIN, OUTPUT);       // D10 will send current out
  Serial.begin(115200);           // open a message channel to the computer
  Serial.println("Victor's Boat PCB is alive!");
}

void loop() {
  digitalWrite(LED_PIN, HIGH);    // LED on
  Serial.println("LED on");
  delay(500);                     // wait 0.5 seconds
  digitalWrite(LED_PIN, LOW);     // LED off
  Serial.println("LED off");
  delay(500);
}

And the LED lit up (that is the photo at the top of this page). Given my "solder it and see" approach to finding the cathode, I guess I was lucky on that one. So it works, at least the part I can test without a battery.

What I learned

Talk to people before you mill. Both redesigns came from a five-minute conversation, and both would have been painful to discover on a finished board, especially the servo wire order, which would have sent the battery voltage into the wrong wire of the sail servo.

A component's real-world constraints matter as much as the schematic. KiCad was happy with my J2 header. The servo cable, which already has its plug on it, was not.

Soldering is not a skill you learn once. Every new part size brings its own problems, and when a joint will not take, the problem is often the solder wire, not your hand.

Copper tracks are fragile. When one tears off, a piece of wire soldered along its path does the same job.

Next step, once I have a battery: making the servos move.

Files