Tactile switch (TS04-66-43-BK-260-SMT, see datasheet)
Although the footprint of each RGB LED is the same, there are two different configurations of RGB LED as shown below:
Two different RGB LED configurations.
To make the wiring easier, I chose the one on the right, which is compatibale with NeoPixel library.
PCB Milling
Then I milled the PCB using Bantam Othermill. The process is quite straightforward.
First, I secured the copper board on the milling bed with double-sided tape.
Next, I loaded the .gbr file into the software and set the origin point.
After that, I just needed to press "Start" and change the milling tool if necessary, then just wait for it to finish.
(The whole process took around 10 minutes)
From left to right, the pcb layout, trace pattern and the milled pcb after soldering&debugging.
From the picture above, we can see that the milling is quite precise and clean. After milling, I soldered the components onto the PCB. The final product is shown in the figure on the right.You can see that I use a jump wire to connect the first LED to 5V pin of the microcontroller, and the rest of the LEDs are connected in series. Based on this design, I can control the color and brightness of each LED individually using the NeoPixel library in Arduino.
Other Notes
The gerber files for copper layer is here and the edge cuts is here.
After debugging with a multimeter, I confirmed that all connections were correct and the circuit was functioning as intended. The full play around with this PCB is discussed in Output Device Week.