MonoFab SRM-20
> VOLUME: 203.2 x 152.4 x 60.5 mm
> SPINDLE: 7,000 RPM
Design Inspiration & Kicad Exporting
For this week, the challenge was to move from a breadboard prototype to a professional permanent circuit. For that I used a Monofab, and a Copper with fiberglass botom plaque. Taking inspiration form my friend's Oscar Hernandez plaque I decided to make a module for Autobot design from Transformers, since he made one out of the decepticons logo.
1.- Exporting from KiCAD
> FIG 01: SVG_EXPORT_PROCESS.MP4
PROTOTYPE_V1
PRODUCTION_V2
STAGE 02: [ FILE CONVERSION ]
> TRACES_CALCULATION.MP4
> OUTLINE_CALCULATION.MP4
To prepare the file for the Monofab I used two SVG files, one for the inside milling and one for the outside milling, and for this I used a webpage called modsproject.
SOFTWARE SETUP: [ V-PANEL & DRIVERS ]
STAGE 03: [ PCB MILLING ]
> DEBUGGING_MODE: BOARD_TESTS
Verifying circuit integrity and logic.
TEST_01: CONTINUITY
// Internal LED control with button on D9 for XIAO RP2350
const int buttonPin = D9; // Button pin
const int ledPin = LED_BUILTIN; // Built-in orange LED
bool ledState = LOW; // Current LED state
bool lastButtonState = HIGH; // Previous button state (HIGH due to Pull-up)
void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
Serial.println("--- Button System (D9) Ready ---");
}
void loop() {
bool currentButtonState = digitalRead(buttonPin);
if (currentButtonState == LOW && lastButtonState == HIGH) {
delay(50); // Debounce
ledState = !ledState;
digitalWrite(ledPin, ledState);
Serial.print("Button pressed. LED: ");
Serial.println(ledState ? "ON" : "OFF");
}
lastButtonState = currentButtonState;
}
TEST_02: SIGNAL_LOGIC
// Pin definition using 'D' nomenclature
const int buttonPin = D9; // Button on D9
const int externalLedPin = D10; // Your LED on D10
// Variables to manage state
bool ledOn = false;
bool lastButtonState = HIGH;
void setup() {
// Initialize Serial Monitor at 9600 bits per second
Serial.begin(9600);
// Configure D9 with internal Pull-up (button should connect to GND)
pinMode(buttonPin, INPUT_PULLUP);
// Configure D10 as output for the LED
pinMode(externalLedPin, OUTPUT);
// Ensure the LED starts turned off
digitalWrite(externalLedPin, LOW);
Serial.println("System Ready. Press the button on D9 to toggle the LED on D10.");
}
void loop() {
// Read the current state of pin D9
bool currentButtonState = digitalRead(buttonPin);
// Detect falling edge (when the button is pressed: HIGH to LOW)
if (lastButtonState == HIGH && currentButtonState == LOW) {
// 1. Add a small delay to skip the initial mechanical noise
delay(50);
// 2. Toggle the LED state
ledOn = !ledOn;
digitalWrite(externalLedPin, ledOn ? HIGH : LOW);
// 3. Print status to Serial Monitor
if (ledOn) {
Serial.println("LED Status: ON");
} else {
Serial.println("LED Status: OFF");
}
// 4. Wait until the button is released
// This prevents the LED from flashing crazy if you hold the button down
while (digitalRead(buttonPin) == LOW) {
delay(10);
}
}
// Save the state for the next iteration
lastButtonState = currentButtonState;
}
PRODUCTION FILES UNLOCKED
Download SVG, RML and CAD source files.








