Electronics Production Cover

8. ELECTRONICS PRODUCTION

[ MISSION: FABRICATE A HIGH-PRECISION PCB. ]

[ SYSTEM_HARDWARE_SPEC ]

MonoFab SRM-20

> MODEL: Desktop Milling Machine
> VOLUME: 203.2 x 152.4 x 60.5 mm
> SPINDLE: 7,000 RPM
Roland MonoFab
STAGE_01: CONCEPT

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

Sketch

PROTOTYPE_V1

Final

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 ]

STEP 01

Download Drivers

Visit the Roland DG site to get the official drivers for your OS. It's the first step to establish communication with the MonoFab.

DOWNLOAD_DRIVERS.EXE
Download Page
STEP 02

Driver Installation

Run the installer as administrator. This will allow your computer to recognize the machine via USB.

Driver Install
STEP 03

VPanel Setup

VPanel is the virtual controller. Without it, you cannot set the machine's origin points or start the milling process.

VPanel Setup
STEP 04

Get VPanel Software

Make sure to download the latest version of VPanel for the SRM-20 to ensure full compatibility with your firmware.

DOWNLOAD_VPANEL.ZIP
Software Interface
STEP 05

Get VPanel Software

Make sure to download the latest version of VPanel for the SRM-20 to ensure full compatibility with your firmware.

Software Interface
STEP 1

STAGE 03: [ PCB MILLING ]

STEP 01

Machine Setup

In order to mill your plaque you're gonna need your copper plaque and a wooden plaque to put underneath as a sacrifice.

STEP 02

Placing tape

For your plaque no to move it's necessary for you to place double sided tape underneath de copper plaque.

STEP 03

Fixating the sacrifice

To fix the plaque on the machine it's necessary to use 4 screws.

STEP 04

Screwing the plaque on to the Monofab

When you place your plaque on the machine it should look like this.

STEP 1

> 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.

GET_FILES.ZIP

Copyright 2026 CARLOS GUTIÉRREZ MARTÍNEZ - Creative Commons Attribution Non Commercial

Source code hosted at gitlab.fabcloud.org