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
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¶
Stamps - Prototyping¶
Flora made some stamp prototypes to test the material, the sizes and shape.
Hacking the Shopbot with grasshopper¶
The first set of baked experiments:¶
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¶
- Cook soybeans with a small amount of water until soft.
- Blend them into a smooth, hummus-like paste.
- 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¶
- Brush each mixture onto separate zones on silk.
- Let it dry fully.
- Optional: apply multiple layers for stronger effects.
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¶
Direct Fabric Printing - Coreopsis Ink¶
We prepared natural stamping inks using a coreopsis dye bath.
Test Inks¶
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.
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:
- Stamp holder sits lower than the milling bit.
- For calibration, we placed 2 cm wood on top of the foam.
- Calibrated Z-zero onto the wood.
- Removed the wood → Z-zero floats 3 cm above the print bed.
- Z = 20 This prevents the bit from crashing into the surface.
CNC Stamping Sequence¶
The programmed cycle:
- Move to ink jar
- Lower Z → 3 sec soak
- Lift
- Move to stamp position
- Press stamp onto fabric (Z = −0.01 to −0.5, depending on material)
- Pause 3–5 sec for ink transfer
- Lift
- Return to ink jar
- 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
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¶
- Made a truncated pyramid → extruded the top surface to create a handle.
- 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.
- 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.
- Made a truncated pyramid with a slightly taller base → extruded the top surface to create a handle → extruded the bottom surface 1 mm
- 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.
- 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¶
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°.
The ESP32-S3 will be attached to the stamp and it will move the motor based on the input receivecd from the ESP32-C3.

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¶
-
Shopbot stamper: code and grasshopper ↩















