For the individual assignment I used KiCad 9.0 as my EDA tool to design a custom 8x8 LED matrix board. The matrix uses surface mount LEDs and is designed to interact and communicate with an Arduino Uno.
Why an LED Matrix?
An LED matrix is a good project for learning EDA because it involves repetitive but precise component placement, multi-layer routing, and direct microcontroller interfacing. The 8x8 grid gives you 64 individually addressable LEDs using only 16 I/O pins through multiplexing — each LED sits at the intersection of a row and column, and you light it by driving the correct row HIGH and column LOW.
Design Decisions
I decided to go with an 8x8 matrix — 64 LEDs total — which is a straightforward multiplexed design. The circuit itself is fairly simple: 8 rows and 8 columns, with each LED addressed by activating the correct row and column combination. The board interacts and communicates with an Arduino Uno (ATmega328P microcontroller), which drives the matrix using 16 of its I/O pins — digital pins D2 through D13 for 12 of the lines, plus analog pins A0 through A3 (used as digital outputs) for the remaining 4.
The board is a two-sided PCB, which was necessary to route all the traces without running into each other. Row traces run on the front copper layer (F.Cu) and column traces on the back copper layer (B.Cu), with 77 vias connecting signals between the two sides where needed.
Schematic Design
I started in KiCad's schematic editor (Eeschema) by placing the Arduino Uno R3 module symbol and all 64 LED symbols. Each row of 8 LEDs shares a common anode connection, and each column shares a common cathode. The schematic is straightforward but large — wiring 64 LEDs with proper net labels for all 8 rows and 8 columns took careful organization to keep it readable.
KiCad schematic — 8x8 LED matrix controlled by Arduino Uno
PCB Layout
The most time-consuming part was the PCB editor. After assigning the LED_0201_0603Metric_Pad0.64x0.40mm_HandSolder footprint to each LED and the Arduino UNO R3 module footprint, I moved to the board layout.
Individually spacing out all 64 surface mount LEDs in a tight, even grid without wasting board space took a lot of careful work. Each LED had to be precisely positioned while keeping the traces clean on both sides of the two-sided PCB. The front copper layer carries the row connections and the back copper layer carries the column connections, with 77 vias punching through wherever a trace needs to switch sides.
Routing was done manually — auto-router struggled with the density of connections in such a compact grid. Getting the traces to flow cleanly without crossing or creating clearance violations was the real challenge of this project.
Grid Alignment Problem
One issue I ran into was that KiCad's PCB editor doesn't have a built-in tool to grid-align components into an evenly spaced matrix. There's no "arrange in grid" feature for footprints, so I couldn't just select all 64 LEDs and snap them into an 8x8 layout automatically. Instead, I had to manually calculate and plot the X and Y coordinates for each LED on the board, then do the same for each of the 77 vias. Every component had to be positioned by entering exact coordinate values to ensure the grid was perfectly uniform — any small offset would throw off the trace routing and make the final board look uneven. It was tedious but necessary to get a clean, professional layout.
KiCad PCB editor — two-sided board layout with 64 LEDs and 77 vias
3D Board Preview
KiCad 3D viewer — the finished two-sided LED matrix board