PCB milling, troubleshooting, and working with the RP2350.
For my electronic production assignment, I took what I created during embedded programming week and improved it further. I replaced the Arduino Uno R3 with a Seeed RP2350 and swapped the IRF520 MOSFET for a proper motor driver chip from the starter kit.
The coding stayed mostly the same, but I had to make several changes so everything would work correctly with the RP2350. This week ended up being a huge learning experience because almost every part of the process fought me at some point.
Before I could even start milling PCBs, I had major problems getting the Makera Carvera CNC software working. I downloaded both the Makera CAM software and the controller software, but the CAM software would not launch correctly and kept saying I had no internet connection.
Before figuring out the issue, I went through four different computers, wiped both of my laptops, and even used my fiancée’s brand new MacBook trying to figure out what was wrong.
I finally realized the middle school network where I work had restrictions blocking the CAM software from connecting correctly. When I took the setup home, the software worked perfectly on every computer.
After figuring that out, I got permission to take the CNC machine home so I could continue the assignment.
Once I started working in KiCad again, I ran into another issue. Since I had wiped my computers, I forgot to reinstall the Fab Academy libraries and footprints. Because of that, I had trouble finding parts for the RP2040/RP2350 and several other components.
After reinstalling everything, I was finally able to create my PCB design and begin routing traces.
I designed the board using KiCad. First, I created the schematic by placing all of the components I needed, including the Seeed RP2350, LEDs, motor driver, resistors, power connections, and temperature sensor connections.
After creating the schematic, I switched into the PCB editor where I arranged the components and manually routed traces between them to create the electrical connections for the board.
During this process, I had to adjust trace widths, spacing between pads, and component placement several times so the CNC machine would be able to properly mill the traces without shorting them together.
After milling my first PCB, I realized the board was not sitting flat on the machine bed. Some corners were slightly raised, causing the milling bit to miss traces in certain areas. Several traces were not cut correctly and some broke when I tested continuity with a multimeter.
This taught me really fast that PCB milling depends heavily on setup and alignment. Even if the design is correct, a board that is not flat can ruin the traces.
This was another board I was having problems with.
This was while trying to find the correct Seeed RP2350 component.
These were the missing footprints before reinstalling the libraries.
After finishing the PCB design in KiCad, I exported the Gerber files and imported them into the Makera CAM software for the Makera Carvera CNC machine.
Inside the CAM software, I created multiple toolpaths for:
For the traces, I used a very small V-bit so the machine could isolate the copper correctly and create clean traces. For drilling holes and cutting the outside of the PCB, I used larger end mills.
I adjusted spindle speed, cut depth, plunge rate, and feed rates so the board could be milled correctly without damaging the copper or breaking the milling bit.
After milling the board, I soldered the components together and uploaded code using the Arduino IDE. The board controls LEDs, temperature sensing, and a motor used as a cooling fan.
The code reads the temperature sensor value and decides when to activate the motor and LEDs. When the temperature rises above a threshold, the red LED turns on and the motor starts spinning. When the temperature cools down, the green LED turns on and the motor shuts off.
int sensorPin = A0;
int redLED = 2;
int greenLED = 3;
int motorPin = 5;
void setup() {
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(motorPin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(sensorPin);
if(sensorValue > 520) {
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
digitalWrite(motorPin, HIGH);
} else {
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
digitalWrite(motorPin, LOW);
}
}
This code reads the analog value from the temperature sensor and controls the outputs based on the temperature reading.
This is the final hero shot of my completed milled and soldered PCB board.
This week taught me how much preparation and troubleshooting goes into electronic production. I learned how PCB milling depends heavily on machine setup, proper board alignment, software configuration, and component libraries.
I also learned how important it is to test traces carefully using a multimeter and how small milling issues can completely affect whether a board works or not.
More than anything, this week taught me that fabrication projects almost never work perfectly the first time. I spent a lot of time troubleshooting software, footprints, milling depth, broken traces, and setup issues before finally getting usable results.