Skip to content

CNC Router Process

Updated: 2025-03-15 / JRO

Vision

  • End-to-end process for creating a "Hola Mundo" 2D design and etching it into wood, using open-source tools

Tools

  • 2D design:
    • Inkscape / SVG
  • Screen recording:
    • OBS
  • 3D design
    • Kiri:Moto
    • FreeCAD
  • CNC control:
    • Universal G-Code Sender
  • Cameras & Mount
    • iPhone camera
    • Gooseneck clip mount
  • Computer / Phone file transfer
    • KDE Connect
  • Source control:
    • Git
    • Codeberg

Files

  • Source repository (REMOTE SOURCE REPO)/(USER or ORG)/(PROJECT-NAME)
  • Project folder: ~/_Projects/(PROJECT-NAME)
  • Design: (PROJECT-FOLDER)/Design
    • 2D Designs: /Design/2D (Source images, SVG)
    • 3D Designs: /Design/3D (G-code)
  • Project overview: README.md
  • Contributors: CONTRIBUTORS.md
  • Notes: docs/notes.md
  • Journal: docs/journal/(YYYY-MM)/(YYYY-MM-DD)_(TOPIC).md

Process

Take paper notes!

  • Get out notebook
    • Date: (DATE)
    • Client: (CLIENT)
    • Project: (PROJECT-NAME)
    • Materials: (Wood type)
    • Bits / Feeds / Speeds

Take digital notes

  • Open VSCodium to take notes
    • Example: (PROJECT-FOLDER)/journal/notes.txt

Measure

  • Measure stock thickness
    • Used later to determine height of CUTS

Record Screen

  • Open OBS
    • (Add computer Screen to recording canvas)
  • Set file recording folder.
    • Example: ~/_INBOX/_SCREEN-RECORDINGS/
  • Optional: Set format to M4V
  • Press OBS RECORD BUTTON
  • Minimize OBS application

Design Phase

Create design using Inkscape

  • Open Inkscape
  • Save SVG file to project folder:
    • Example: (PROJECT-FOLDER)/Design/2D/(PROJECT-NAME)_design.svg
  • Set Canvas dimensions to match
    • CNC cutting board:
      • Example:
        • Height: 40 cm
        • Width: 40 cm
  • Open Layers window pane

  • Use the Shape tool to, create a rectangle to represent the material stock (the wood board).

    • Example:
      • Length: 10 cm
      • Width: 10 cm
    • Fill color with brown, to represent wood
    • Name: Material Stock

Example design: "Hola Mundo Café"

  • Use the Text tool to create text "Hola Mundo Café"
  • Set Font
  • Name the object: "Text: Hola Mundo Cafe"
  • Add coffee cup design

    • Search tool: https://www.svgrepo.com/
    • Example search: https://www.svgrepo.com/svg/488123/coffee
  • Scale design to the correct dimensions

    • Set Inkscape measurement format to: Centimeters (cm)
  • Add XZ mark in the design, to Zero the machine's XY later

  • Subtract design from the stock

    • Select the shape AND the stock
    • Subtract operation (CTRL + -)
  • Save/Export as SVG
    • Example: (PROJECT-NAME)_paths_engrave.svg

2D to 3D using Kiri:Moto

  • Open Kiri:Moto
  • Set mode to CNC
  • Import File --> SVG
  • Select all objects
  • Merge object meshes to combine
  • Set Scale
    • Note: Dimensions in millimeter?
    • Scale Z separately by unchecking the box
    • Example: Set Z to 2 mm
  • Click top surface
  • Add Operation: "Rough"
  • Set bit
    • Example: 1/16" end-mill
  • Preview animation
    • Look for:
      • Unnecessary step-down
      • Leftover material
  • Export as G-Code Example: (PROJECT-FOLDER)/Design/3D/(PROJECT-NAME)_CNC_gcode.nc

2D to 3D using FreeCAD

  • Open FreeCAD
  • New Body
  • Save file
    • Example: (PROJECT-FOLDER)/Design/3D/(PROJECT-NAME)_CAD
  • New Sketch
    • Choose: XY Plane

Open Sketch workbench

  • Import SVG
  • Add Constraints
    • Dimensions
  • Ensure objects are inside the Body, in the object tree
  • Scale SVG

Open FreeCAD CAM/PATH Workbench

  • Set Stock placement
    • Example: Base XY+Z
  • Set Coordinate system
    • Example: G54
  • Units: Metric
  • Add Tool
    • Example:
      • 1/8" Endmill
        • Width: 3.175 mm
      • 1/16" Endmill
        • Width: 1.5875 mm
      • 1/32" Endmill
        • Width: 0.79375 mm

FreeCAD CAM / Pocket operation

  • Add job: Pocket
    • Boundary: "Inside"

FreeCAD CAM / CUT Operation

  • Add job: Profile
    • Boundary: "Outside"
    • Start depth: 0 (top of material)
    • Final depth: (Material thickness)
    • Add Holding tags (optional - to stabilize the workpiece while being cut)

FreeCAD - Exports G-code

  • Post-processor
    • Set to: GRBL
    • Save G-code
      • Example: (PROJECT-FOLDER)/Design/3D/(PROJECT-NAME)_cnc_gcode_(DATE-TIME YYYY-MM-DD_HHMM).nc

Commit files to Source repository

  • Open (PROJECT-FOLDER)

Create code repository

git init

Review files

git status

Consider adding a .gitignore

touch .gitignore

Add files to repository

git add .

Create remote source repository (Codeberg)

Build Phase

  • Open Universal G-Code Sender (UGS)
  • Workpiece mounted/secured with clamps
  • Install Engraving CNC bit into Spindle
    • Example: 1/16" Downcut bit (downcut, in order to leave a clean edge on the engraving)
  • Home the CNC

CNC Job: Engrave / Etch

  • Zero XY on the Design's XY marker (added earlier)
  • Mark the stock with XY marker
    • Idea: Use a pen to make an X
  • SAFETY GLASSES ON
  • HEADPHONES ON
  • Test Run of CNC job in the air
    • Move spindle a few centimeters above the work surface
    • Reset ("zero") Z axis
    • RUN the CNC Job
      • Check the job doesn't go too fast
      • Check the job doesn't extend past the stock or machine limits
  • Z-Probe to tell the machine the height of the workpiece surface

Get ready to run job

  • iPhone Plugged into battery pack or computer
    • Press Power button on battery pack
    • Ensure battery pack is ON
  • iPhone mounted on goose-mount
  • Use the bathroom
  • Drink water
  • SAFETY GLASSES ON
  • HEADPHONES ON
  • MUSIC ON
    • Playlists:
      • Lo-Fi
      • Funk
      • Life Success Wisdom

Camera on!

  • Open iOS Camera.app
  • Tap screen to focus-lock on a part of workpiece
  • IPHONE CAMERA RECORD
  • VACUUM ON

Turn on SPINDLE

  • Spindle ON
    • Tip: Create a shortcut in Universal G-Code Sender Example: "Spinde ON" = M3 S1000
  • RUN CNC JOB

While Job is running

  • Vacuum dust
  • Aim camera at interesting events

ETCH JOB COMPLETE

  • Vacuum dust
  • Take notes on the job
    • Example: (PROJECT-FOLDER)/journal/notes.txt
    • Issues?

CNC JOB: Cut

  • Load cut design into Universal G-code Sender (UGS)
    • Example: (PROJECT-NAME)_paths_cut.svg
  • Install cutting bit
    • Example: 1/8" up-cut endmill (up-cut, in order to remove dust)
    • Get out two wrenches to unscrew the collet
  • Connect to CNC Router
    • Click the Connect button in UGS
    • Example: /dev/ttyACM0
  • Move ("jog") spindle to XY Marker on the design
  • MARK XY marker onto stock
    • Example: Make an X with a pen
    • Drill it with CNC router?
  • Zero XY on XY marker in Design
  • Test run a 2-4 centimeters above the work-surface
  • Z-Probe to set Z zero
  • Move spindle a few centimeters above work surface
  • SPINDLE ON

Finish up CNC job

  • Move ("jog") CNC spindle elsewhere
    • Take photos
  • Turn off CNC
  • Vacuum work area & machine
  • Take notes
    • What went well? / Do More
    • What to change? / Do differently
    • What was frustrating? / Stop doing
  • Transfer iPhone video to computer
    • Open KDE Connect app in iPhone
    • Open KDE Connect on Linux
    • Transfer video from Phone to Computer
    • Move video to Project folder
      • Example: (PROJECT-FOLDER)/Video/cnc-job.m4v
  • Move Screen-cast video to Project Folder
    • Example: (PROJECT-FOLDER)/Video/screencast.m4v
  • Publish project files to remote repository

Edit & Publish video

  • Choose music for the video
    • Search for a song you like
    • Use yt-dlp to download song
    • Use ffmpeg -i (INPUT FILE).m4v (OUTPUT FILE).mp3 to convert music to audio
  • Open video editor
    • Add music file to timeline
    • Cut music down to 1 minute - Find an interesting part of the track
  • Add videos to library
    • Screen recording
    • CNC router tool / workpiece view
  • Edit out the boring parts
  • Add transitions
  • Add title
    • Example:
      • "Using CNC router to create Hola Mundo Cafe sign, with open-source tools"
      • "Date: YYYY-MM-DD"
  • Add trailer
    • Logo
    • Call to action
    • Link to Site
    • QR code
    • Music credits:
      • Example: "Music: (SONG NAME) by (ARTIST)

Export video

  • Format: M4V
  • Size: 1080p (?)
  • Frame-rate: 30 frames per second
  • File path: (PROJECT-FOLDER)/Video/(PROJECT-NAME)_(Year-Month YYYY-MM).m4v

Publish video (AWS S3 bucket)

  • Example:
    • https://Studio.Cambria-Labs.com/products/(PRODUCT-NAME)/video/(VIDEO FILE NAME)
# Check AWS credentials
aws configure

# Sync/copy project files to remote server storage (AWS S3)
aws s3 sync (PROJECT-FOLDER) s3://(AWS S3 BUCKET - STUDIO)/products/(PRODUCT-NAME/)

Wondering about...

  • Source-control (git) & video files

Terminology

  • CNC
  • Collet
  • Jog

This Document: `To Add / Edit

  • Images
  • Example files
  • Collapsible "accordion sections"

Contributors:

  • JRO