Skip to content

11. Open Source Hardware - Stamping with CNC

CNC-Milled Stamps & Natural Textile Printing

This week explored open-source hardware, CNC hacking, and natural textile printing.
Our goal: transform the CNC milling machine into a robotic stamping tool that can paint patterns onto fabric using natural inks and bio-based binders.

Inspiration & Research

Links Below to stories tht informed our work this year:

De Katoendrukkerij at Volmolen Amersfoort Tools and Products

Cotton block printing

culture

Group Work Overview

Our group used the CNC machine as an automated printing robot.

We split tasks to cover the full workflow:

  • Developing Rhino/Grasshopper code to control machine movement.
  • Designing a fixture to attach the stamp safely to the CNC head.
  • Building a motor + Arduino system to rotate the stamp (button-triggered).
  • Designing and constructing EVA foam stamps.
  • Preparing natural inks, thickeners, and fabric for printing.
  • Preparing the material archive.

Inspiration

inspo

Stamps - Prototyping

Flora made some stamp prototypes to test the material, the sizes and shape.

stamps

stamp

Hacking the Shopbot with grasshopper

grasshopper grasshopper

The first set of baked experiments:

PATTERNS

Taking it from grasshopper to Shopbot

STEP-BY-STEP. also follow Flora for more information

[once the Shopbot code and design is ready]

Connect the points within the design to the Area and therefore the rest of the code for the Shopbot. [do this twice if there are different points for rotated designs e.g. pattern5A.sbp was horizontal and pattern5B.sbp was vertical]

BAKE [the correct axis points] [take note of the setting you used or export high-res image of grasshopper] Then within large pink, panel, right click and ‘Copy Data Only’ Open TextEdit Paste… Format… ‘Make Plain Text’ Save. [Name] .sbp Untick ☐ If no extension is provided, use “.txt”. Save onto USB.

Mordanting the fabrics:

  • Premordanting with oak galls: 12% oak galls
    We mordanted 460g WOF = 20g oak gallsafterwards
  • Mordanting 12% alum = 460 WOF = 55g alum
    1,5% soda = 6,9g soda

Mordant Printing with Soy Milk

Soy milk is a plant-protein binder that helps natural dyes “stick” to fibers.
When printed on silk, it keeps patterns crisp instead of letting the dye bleed.

Preparing the Soy Milk Binder

  1. Cook soybeans with a small amount of water until soft.
  2. Blend them into a smooth, hummus-like paste.
  3. Strain through cheesecloth → the liquid becomes your fresh soy-milk binder.

Why it works:
Soy proteins behave like a gentle plant-based mordant. The protein in soy milk coats cellulose fibres, creating a surface that dyes adhere to more strongly, similar to how protein fibers like wool and silk already do. It acts as a binder, physically holding the dye to the fabric rather than creating a chemical bond like a traditional mordant.

Testing Thickeners

To reduce bleeding, we thickened the soy milk and compared:

  • Pure soy milk
  • Soy milk + guar gum
  • Soy milk + xanthan gum
  • Soy milk + alginate

Thickeners increase viscosity → the mixture stays on the fabric surface → sharper edges.

Application on Silk

  1. Brush each mixture onto separate zones on silk.
  2. Let it dry fully.
  3. Optional: apply multiple layers for stronger effects.

soymilk

Dye Bath & Pattern Development

  • Once dry, place the silk into a dye bath.
  • Soy-treated areas absorb more dye and appear darker.
  • Untreated areas stay light.

This creates contact-printed patterns without needing metallic mordants.

Discharge Printing Paste

To create negative patterns on dyed fabric, we prepared a mild discharge paste.

Recipe

  • 100 ml water
  • 5–10 g citric acid
  • 1 g guar gum

Citric acid acts as the discharging agent, which can effectively remove color from certain dyes when printed and cured, while guar gum provides the necessary viscosity for printing it with a stamp. For this technique the fabric should be mordanted already.

Preparing the different inks & binders

ink

Direct Fabric Printing - Coreopsis Ink

We prepared natural stamping inks using a coreopsis dye bath.

Test Inks

testing

We tested with different materials, gums, stamp depth, materials.

Test 1
- 50 ml coreopsis dye
- ½ tsp xanthan gum

Test 2
- 100 ml coreopsis dye
- ½ tsp alginate

Tip from Cecilia:
Add a small amount of metal salt to stabilise the ink and reduce bleeding - but only on scoured fabric.
On alum-mordanted fabric this causes uncontrolled bleeding.

Stamping with CNC

Preparing the Print Bed

To turn the CNC into a controlled stamping press:

  • Foam layer + felt on top → softer printing surface
  • Both fixed to the CNC bed with double-sided tape
  • Fabric pinned tightly under tension
  • A sponge-filled ink container (3D-printed by Maddy) placed at one corner

We bypassed VCarve and sent code directly from Rhino to the ShopBot.

bed

CNC Calibration

X & Y

  • Job origin set to the center of the ink jar.
  • Measured the offset between ink jar and first stamping point.
  • Entered values into ShopBot for precise movement.

Z-Axis

A small hack was needed:

  1. Stamp holder sits lower than the milling bit.
  2. For calibration, we placed 2 cm wood on top of the foam.
  3. Calibrated Z-zero onto the wood.
  4. Removed the wood → Z-zero floats 3 cm above the print bed.
  5. Z = 20 This prevents the bit from crashing into the surface.

testing

CNC Stamping Sequence

The programmed cycle:

  1. Move to ink jar
  2. Lower Z → 3 sec soak
  3. Lift
  4. Move to stamp position
  5. Press stamp onto fabric (Z = −0.01 to −0.5, depending on material)
  6. Pause 3–5 sec for ink transfer
  7. Lift
  8. Return to ink jar
  9. Repeat for next location

Optimising the Print

  • Z-pressure increased step-by-step from 0.01 → 0.5
  • Switched stamp material:
  • 2 mm EVA → too thin → bleeding
  • 6 mm EVA → much better, more pressure possible
  • Pause extended to 5 seconds for improved ink absorption
  • Used guar-thickened natural ink for better control
  • For tests, we placed paper over the final fabric to avoid staining the master fabric

results

Rotational axis

Conclusion & Learnings

Stamp Materials

  • 6 mm EVA foam gives cleaner prints and better pressure distribution.
  • Thin foam bleeds under CNC pressure.

Inks & Dyes

  • Natural inks need thickeners for stamping (guar gum works best).
  • Adding metal salts only works on scoured fabric as mordanted already has it.

Fabric Preparation

  • Scoured fabric = needs to use inks with metal in it. If not, it will cause the ink to spread & will wash out.
  • Mordanted fabric = Has metal added to it. Can use inks with binders.

Material bed

  • Sponge made for the best soakage for the EVA foam.
  • Felt didnt absorb as well as sponge.
  • Neoprene wasn't thick enough.
  • The bed had to be soaked. We kept refiling to make sure it was soaked.

Maddie's static stamper5

  1. Made a truncated pyramid → extruded the top surface to create a handle.
  2. Made 2 cylinders the diameter and distance of the 2 screw holes (placed vertically on the z-axis). Used a boolean difference to subtract the cylinders from the handle.
  3. Exported as an .stl, sliced with PrusaSlicer, and printed it with PLA on the Prusa CoreOne. Used Generic PLA print settings, didn’t adjust anything.

At this point, our first prototype was made and tested. The center of gravity was off due to not being attached directly to the moving part of the machine. It was flimsy because of the low amount of infill and thin, flat base. The screws used the attach the plate to the machine were on tight, but a size up from M3 to M4 could fit the machine better with less wiggle room.

Taking these changes into account, I started working on the second iteration of the static attachment.

  1. Made a truncated pyramid with a slightly taller base → extruded the top surface to create a handle → extruded the bottom surface 1 mm
  2. Made 2 cylinders with the new measurements for the 2 screw holes, (placed vertically on the z-axis). Used a boolean difference to subtract the cylinders from the handle.
  3. Exported as an .stl, sliced with PrusaSlicer, and printed it with PLA on the Prusa CoreOne. Used Generic PLA print settings, but changed to 80% infill.

.

Servo Motor Stamper6

This consisted of two 3D-printed parts: the motor holder and the stamp holder. A servo motor connects the two pieces. A FabriXIAO board and battery pack control and power the servo motor. A button and second ESP32 microcontroller wirelessly control the servo motor, allowing the user to rotate the stamp at a defined angle.

Stamp holder 7

Because the X shaped motor attachment’s holes are so small, it was difficult to get precise measurements for the screw holes on the stamp holder. The first iteration had circular holes but did not fit because the X shaped piece on the motor was not completely square. So, Asli created slots that would allow the fit to be adjusted. Printed with 80% infill.

Ink pad8

Madie made a square, used an offset to get lines for the walls, then extruded the bottom outline to create a base and the top outlines to create the walls. The large size provided room for human intervention, testing different materials, and movement of the stamp. Printed with generic PLA settings.

Asli's scheme

asli

Arduino

arduino

Wiring

The ESP32-C3 will be giving input to the ESP32-S3. It will be connected to a button, that when pressed, will rotate the arm stamp of 90°.

board

The ESP32-S3 will be attached to the stamp and it will move the motor based on the input receivecd from the ESP32-C3. wiring

To find out more about the code please go to Alessia Talò

The final final using the rotating stamper

Alessia press that button!

The stamper rotating 90 degrees

POV of the CNC machine

Fabrication files