VACU-SWEEP, Better than any dustpan!

Here’s how we threw together a quick vacuum sweeping helper to keep the workshop clean using scrap wood, screws, 3D printing, and shop tools including using four saws five ways.

A super nice thing about the makerspace is the wide variety of tools that are readily available, this project used (in order):

  • A piece of scrap plywood
  • The table saw with crosscut sled to straighten the rough cut sides of the triangle
  • A pencil, nail, and scrap wood as “Hacker’s Compass”
  • The drill press for the jigsaw starter hole
  • The jigsaw to cut the circle
  • The table saw with the fence to cut the sides of the triangle square to uniform width (height)
  • The compound miter saw to cut mitered ends on the sides
  • The Qidi X3-Plus 3D printer and PLA for the hose adapter (thanks again Canuck Creator and Polymaker for donating the 3D printer and PLA)
  • FreeCAD for the hose adapter design
  • Screws and washers
  • The laser printer for the name
  • The paper cutter and scissors to cut the name out nice and square
  • Packing tape to affix the name

It needed a 16″ wide mouth for the best results with push brooms, and a 4″ inlet for the dust collector hose. We found the perfect rough cut triangular piece of scrap plywood in Workshop 88’s ample wood supply.

The edges of the triangle were trimmed straight and square on the table saw using the crosscut sled.

We marked 4 inch diameter (2 inch radius) circle using our “Hacker’s Compass”. The “Hackers Compass” is a scrap piece of Masonite from the back of a projection TV riddled with ventilation holes that, with a nail or screw and pencil, can mark arcs and circles. The improvised compass, initially needed to draw a large circle, started as a joke but turned out to be super useful and now is an easy go-to tool hanging in the shop.

The drill press was used to drill a 5/16″ hole just inside the edge of the circle for the jigsaw blade.

The workpiece was clamped to the edge of the workbench and after ensuring the workbench was out of danger, the large circular hole was quickly cut with the jigsaw.

A 4 inch hose adapter was designed in FreeCAD and successfully 3D printed after a couple failed prints due to mistakenly loading PETG instead of PLA (Doh!).

Another piece of scrap wood was selected for the edges.

The U shaped scrap was cut into 2 irregular strips on the band saw, then cut to the roughly one inch height dimension on the table saw using the fence to guarantee both sides were the same height.

The ends were mitered and cut to length on the compound miter saw, then screwed into place. The failed 3D printed adapter in the picture illustrates where the hose adapter will screw into place.

The hose adapter was screwed into place with wood screws and washers, then finally we affixed a laser printed name with packing tape. Voila!

Live in action!

This was a fun and useful project that cost next to nothing and took almost no time to make.

If you want to take a better look around Workshop 88 makerspace, see our 360° virtual tour.

What will you make at your makerspace?

2025 Workshop 88 Makerspace 360° Virtual Tour

The Makerspace

Visitors are first greeted by our charming entrance, then our charming members. Our creative and knowledgeable community is one of our greatest strengths (not pictured here).

The makerspace is divided into five areas, the first is the general meeting room. This area is primarily used for meetings, classes, laser cutting/engraving, 3D printing, crafts, and projects.

The next area is the workshop / woodshop where makers can do just about anything enabled by a wide array of hand and power tools.

At the far end of the workshop you’ll find the Shapeoko CNC machine you’ll start to see some of our metal working tools.

The electronics lab hosts tools and supplies for projects of all sizes and skill levels, from basic breadboard circuits to SMD PCB fabrication, from Arduino to Raspberry Pi and beyond. This is one of the most used areas in the makerspace.

The metal shop not only houses our Atlas lathe, SIEG manual/CNC mill, metalworking tools, and supplies but we also have a good inventory of metrology equipment for precision measurement.

And finally we come to the storage area where we keep everything that does not belong in the rest of the space. Here, members store personal supplies and projects alongside club projects and Workshop 88 surplus inventory including extra tools, equipment, 3D printers, robotic arms, CNC machines, a robot skeleton that can play a Theremin, and more.

In the rear of the storage area, Workshop 88 has a large collection of wood, plastic, glass, and other supplies available to members for projects.


How To Find Workshop 88

Workshop 88’s entrance is NOT on Main Street. Contrary to what your navigation system will tell you, do not use map apps to find the entrance.

Workshop 88’s entrance is in the public parking lot at 530 Pennsylvania Avenue, Glen Ellyn, in the back southwest corner. 

Workshop 88’s sign and entrance cannot be seen from the street. Pennsylvania Avenue is one way west, turn left (south) right after the mailbox, before Main St. There is additional street parking in the neighborhood and a free parking lot behind the fire department on the northwest corner of Pennsylvania Ave. and Main St.

Rear of the brick pedestrian walkway in the parking lot, Workshop 88’s sign can be seen from here. This is about halfway from the street to the entrance.

Rear of the paved parking lot where the gravel driveway extends to the southwest.

Workshop 88 Entrance

Welcome to Workshop 88 makerspace!

Managing fonts? There’s got to be a better way!

I frequently get new fonts for my video projects which can litter my system with tons of fonts that are no longer needed (unless I want to edit old video files).
For example I just downloaded 19 Horror font families from my favorite free fonts site 1001freefonts.com for a project which includes 129 discrete fonts including bold, italics, etc., of which I will probably use no more than 5 in the video.
I’m trying and really liking the free cross platform font manager FontBase.  I can move fonts into categories then enable and disable them as needed, so they are not all active all the time but I don’t have to manually install and uninstall them. I can locate fonts by install date too making grouping existing fonts easy. 

Applications like word processors and video editors still see a large alphabetically sorted list, rather than a hierarchical tree view, but it’s a huge improvement to be able to enable and disable fonts for projects. I feel like this is another area where modern OS’s have been negligent and are behind expectations of computers in 2025, like file sharing across devices and OS’s (see copyparty).

Staring at the sun with beer can Solarigraphy

I was inspired and guided by Karin Majoka‘s excellent beer can solarigraphy video on YouTube (thank you algorithm!). Karin explains what solarigraphy is and walks step by step through what materials are needed, how to make the cameras, how you may install them, how to collect and scan the film, and how she digitally edits her images.

I used actual German beer cans as she did, but chose to take a 6 month exposure from winter solstice to summer solstice, and did a extra planning to calculate the best orientation and pinhole location in my “beercanmeras” for 9 compositions around my property.

Preparation

Location plan

I put a lot of thought into the location and orientation plan. I selected 9 locations and orientations including the direction the can would be facing, the tilt, and the necessary hole offset from center to place the sun beams on the photographic paper. Each of the 9 locations included a thumbnail sketch of what I expected the image to look like. This plan was needed to keep track of the color of the tape used on each can, the vertical location of the pinhole in each can, and the fabrication of several mounts to hold the cans. (Sorry about the image quality, the plan has been lost and this digital image was extracted from another photo)

Sun angle SCAD

I wrote an OpenSCAD script to model the projection of the sun’s path on the photo paper in the canmera at the summer and winter solstices at different can pitches so I could plan to offset the pinhole in the can to best compose the solar traces on the photographic paper. The source code is in the appendix at the end of this article.

Pin hole locations

Canmeras facing south tilted back at a 23 degrees matching the axis of the Earth could have the pinhole located in the center of the can between the top and bottom to center the span of the sun’s paths creating an eye shaped pattern over the 6 month exposure time. If the canmera was angled back away from the south, lying more flat, the hole would need to be displaced toward the bottom of the can so the sunlight traces did not leave the top of the photo paper. Conversely the more vertical the can stood, the pinhole would need to be moved closer to the top to prevent the sun’s rays from falling off the bottom of the photo paper.

Can preparation

I found that tall Bavarian beer cans were a good fit for 5″x7″ piece of photo paper. I also found that Diet Coke can bottoms when cut at an angle were a tight fit over the beer cans making a good light tight seal.

I’d carefully rough cut the tops off all the cans with a long razor knife and then re-cut them with scissors for nice clean edges. Be careful of the sharp metal edges as well as the knife and scissors while cutting the cans.

Finally, I rinsed and dried all the can halves for the following steps.

After the can halves were dry I labeled each one with a number and indication where the hole should be. I poked the hole from the inside of the can by holding a needle in pliers (sorry, not pictured), then sanded the outside of each hole to give each pinhole a sharp edge to improve focus. I also circled the pinholes inside the can so I could find them more easily when loading them with the photo paper in the dim light.

Film loading and sealing

Under a dim red darkroom light I opened the light tight envelope of photo paper and taped a single 5″x7″ sheet into each can in landscape orientation. The paper was taped to keep the paper against the back of the can. In the future I may try to 3D print retaining rings for the top and bottom to spring load into the can to hold the paper more securely against the cylinder wall without adhesive on the film.

A piece of black electrical tape was placed over the pinhole opening of each can as a reusable shutter.

After placing the photographic paper I placed the Diet Coke can caps and sealed the cans in duct tape. I purchased brown and black duct tape to make the canmeras placed on the mailbox and backyard fence less conspicuous. Normal silver duct tape blended in pretty well with the light post those were attached to.

Mounting

I had to create several mounts to securely attach many of the canmeras at the correct angle for 6 months. This was done on the band saw and belt sander with pine and plywood scraps, all held together with my favorite fasteners, drywall screws and zip ties.

The cans were taped to the mounts and labeled to prevent hysteria and tampering by curious neighbors. I was particularly worried the 3 duct taped cylinders attached to the street light would be mistaken for some sort of threat so I labeled the pole as well.

Installation

Here is all 9 canmeras locations after about 5 months of their overall 6 months. Others place the cameras for 12 months but I only saw the need to capture 6 months from winter to summer solstice (or vise versa) as the sun retraces similar paths twice in a year. They were mounted December 28th, 2022 just a few days after the winter solstice and collected after sunset on the following Summer Solstice, June 21, 2023.

After each camera was mounted securely, I removed the electrical tape to open the shutter and attached the tape to the can below the orange label for use when I again close the shutter half a year thereafter.

Patience

The canmeras endured sun, rain, hail, snow, heat, cold, and humidity over 6 months. I gently cleared the snow off them and shooed away many squirrels and birds. I love a long term project, it’s was exciting to monitor the condition of the canmeras, week after week not knowing if my calculations and preparation would yield decent results.

Scanning

On the summer solstice, just after sunset I replaced the tape shutter on each canmera, unmounted them, and collected them inside.

Before opening them I had to cover a window and dim the computer monitor to a minimum. I even tinted the monitor to the longer wavelength red the photo paper is less sensitive to. The photo paper is not really very sensitive which makes it perfect for this type of project. It does not change quickly but still should not be exposed to bright light unnecessarily. It’s also nice that the photo paper does not strictly require developing, the negative image is clearly visible and can be scanned directly, though you could fix and develop the image on the paper if you wanted to.

The moment of truth: opening the canmeras. Despite my best efforts to seal them against the weather, all the cans had water in them. I wonder if the water seeped in through the seam or through the pinhole, or if it condensed from the air inside the can. I don’t know, but I may try to incorporate a light tight drain and desiccant into future attempts. Those mounted vertically had a small pool in the bottom, those more reclined soaked the photographic paper causing extensive damage usually along the center of the image. Even though the damage was not anticipated, it added some interesting texture to some of the prints that somehow complimented the natural organic nature of the intended images.

I carefully opened each camera, removed the photo paper, blotted it dry and scanned it in a flat bed scanner. I scanned each picture in both color and black and white at fairly high resolution. I had to clean the glass of the scanner between each scan to remove residual moisture.

I made a darkened envelope by lining an envelope with black construction paper to store the original exposures. I numbered the back of each one and layered them with paper towels. When done I placed them all in the blackout envelope with some desiccant packets to dry them out. Several weeks later I re-scanned all the images but I think the originals are subjectively better.

I brought each image into Gimp photo editing tool where I cropped and oriented image, then finally got creative with color curves to achieve the final aesthetic.

Results

  1. This one was on the mailbox pitched up 15 degrees facing south. You can barely make out the boxy shadow of the house in the bottom of the image and can clearly see the trees in the foreground. I really like that in many of these photos the trees and bushes lack foliage in the winter time when the sun is low and as the sun climbs in the sky you can see the shadows of growing foliage over the spring season. Some water damage at the bottom and on the right edge compliment the presence of tape in the lower corners bringing the natural subject, the impact of the water, and the mechanical methods used to capture this print together.

2. Light pole flat facing west. These are all the sunsets looking down the street I live on. Again I like to look at the trees on the horizon and how the leaves fill in from left to right in the paths of sunlight.

3. Light pole flat facing east. Half a year of sunrises. Note the boxy shape of the street light on the pole at the top of the image I think is the shadow of the light on the bright sky.

4. Light pole facing south standing pitched back 22 degrees. Here you can clearly make out the houses at the bottom. The houses have better vertical resolution and seem blurry from left to right which I wonder is from the swaying of the pole in the breeze. There is some light leakage, maybe from the inside of the aluminum can. Maybe in the future I should paint the interior of the can flat black to prevent reflections of the bright sky off the aluminum interior of the can.

5. Back yard east fence facing south inclined 20 degrees. The water damage starts to have more of an impact giving burnt film and oil bubbles psychedelic vibes. The houses are very clear at the bottom, being mounted to a fence post appears to have been more rigid than the light pole.

6. Backyard south fence looking straight up (I think this is upside down, the sun arcs should be at the top of the picture). I really like the composition of this one with the trees radiating from both sides of the image having a nearly 180 degree view of the sky. This is one I would prefer not to have water damage on to be able to see more of the subject but I still find it artistically beautiful, and like the contrast of the glowing sun traces, the soft projection of the image, and the sharp very closeup effects of the water.

7. Backyard fence flat pointing west. The water really got into these flat cans in back on the fence.
Here you can clearly see the shadow of an obelisk in the back yard in front of the neighbors house and the traces of 176 sunsets. I don’t understand how the light shadow of the obelisk to the right formed unless it was perhaps illuminated at night can there was a consistent thermal change in position. Interesting for sure and I would like to have been able to see more.

8. Backyard south fence, 20 degrees inclined facing due south. This one is obviously dominated by water damage and includes hairlike structures.

9 Backyard south fence, 20 degrees inclined turned west. The inclination and turning to face west moved the peaks of the solar traces left towards the east. I would have liked to seen this one with the pinhole moved further up to capture more of the foreground. The lack of focus suggest that this fence post had more wobble, perhaps due to it being on a north south fence when predominant winds are west to east.

Final thoughts

This was super fun. I like the results including the surprise water incursion. I think I’ll do it again some time, I kept all the cans and mounts and have plenty of photo paper and duct tape left. Here are some improvements:

  • Spray paint the inside of the cans flat black to prevent light leakage
  • Design and 3D print “C” shaped springy paper holders for inside the can to replace tape
  • Create a drain hole in the bottom of the can and shield it from light
  • Hot glue a desiccant packet in each canmera to try to control moisture

Things I’d like to try:

  • A box pinhole camera to see the different projection.
  • Taking shorter exposures (minutes to hours) in pinhole cameras. Of particular interest is the infinite depth of field, and that moving objects will vanish in long exposures.
  • Developing the film with Caffenol using coffee or maybe more appropriately Beerenol using beer! This is still a negative process so I’d have to do a contact print to get a 100% analog positive photo print.
  • Maybe floating a pinhole camera in water for a day, or swinging on a heavy pendulum, or on a spinning windmill, to capture one days worth of chaotic solar traces, or maybe recording a day of caustics in a birdbath would illuminate statistical trends in the surface waves.

Thanks for the inspiration Karin Majoka!

Appendix: OpenSCAD program

/* 
    Beercan Pinhole camera inclination calculator
    D. Scott Williamson
    (c) 2022 All rights reserved
*/

lat=41.860985;      // Observer latitude
incl=23.5;          // Earth inclination
cand=65;            // can diameter
canh=165;           // Can height
paperw=178;         // Ilford 5"x7" photo paper
paperh=127;         // Ilford 5"x7" photo paper
holeoffset=40;       // hole offset from center

t1=.75;//abs($t*2-1);     // ping pong animation time parameter
t1=abs($t*2-1);     // ping pong animation time parameter
cana=-lat-t1*-90;   // can pitch angle from vertical
cana2=0;            // rotation around hole
lineh=14;           // height of a line of text
$fn=128;            // facets in a cylinder

// level horizon summer sun goes way off paper
holeoffset=60;
cana=90-lat-0;
cana2=0;

// horizon dips to bottom, summer sun arcs to top
holeoffset=49;
cana=90-lat-12;
cana2=0;

// Summer and winter extents, ground off bottom
holeoffset=60;
cana=90-lat-12;
cana2=0;

// horizon  to summer extents with some margin
holeoffset=30;
cana=90-lat-22;
cana2=0;

// eye of zoron
holeoffset=0;
cana=90-lat-48;
cana2=0;

// eye of zoron horizon in view
holeoffset=-20;
cana=90-lat-48;
cana2=0;

// kind of cool extra rotation
holeoffset=0;
cana=90-lat-35;
cana2=22;



holeoffset=40;
cana=90-lat-00;
cana2=20;
cana3=00;


// can and paper
rz(cana3) rx(90-lat-cana) ry(cana2) tz(-holeoffset)  
{
    color([1,1,1]) paper();
    color([1,.5,0,.25]) tz(-canh/2) cylinder(d=cand+1,h=canh);
}
// summer 
//rz(90) 
{
    color([1,.7,0,.6]) rx(90-lat-cana) ty(cand/2) rx( incl+cana) s([1.4,7.7,1]) cylinder(d=cand,h=.21);
// winter
color([.4,.6,1,.6]) rx(90-lat-cana) ty(cand/2) rx(-incl+cana) s([1.4,5.7,1]) cylinder(d=cand,h=.2);

// horizon
color([.1,.1,.1,.6]) rx(90-lat-cana) ty(cand/2) rx(cana-90+lat) s([1.4,3.7,1]) cylinder(d=cand,h=.2);
}
// text
color("white") tz(lineh*6) tx(cand) rz(90) rx(90) 
{
    ty(-lineh*0) text(str("Earth Inclination: ",incl,"°"));
    ty(-lineh*1) text(str("Latitude:",lat,"°"));
    ty(-lineh*2) text(str("Angle:",floor(90-lat-cana),"°"));
    
}

module paper()
{
    canc=cand*PI;
    papera=360*paperw/canc;
    openinga=360-papera;
    t=.1;
    tz(-paperh/2) difference()
    {
        cylinder(d=cand,h=paperh);
        tz(-1)
        {
            cylinder(d=cand-t*2,h=paperh+2);
            rz(90)hull()
            {
                rz(-openinga/2)cube([cand,1,paperh+2]);
                rz(openinga/2)ty(-1)cube([cand,1,paperh+2]);
            }
        }
        
    }
}

module t(t) {translate(t) children();}
module tx(t) {translate([t,0,0]) children();}
module ty(t) {translate([0,t,0]) children();}
module tz(t) {translate([0,0,t]) children();}
module r(r) {rotate(r) children();}
module rx(r) {rotate([r,0,0]) children();}
module ry(r) {rotate([0,r,0]) children();}
module rz(r) {rotate([0,0,r]) children();}
module s(t) {scale(t) children();}
module sx(t) {scale([t,1,1]) children();}
module sy(t) {scale([1,t,1]) children();}
module sz(t) {scale([1,1,t]) children();}
module c(c) {color(c) children();}

Dust be GONE! Makerspace woodshop gets a new dust collector.

Workshop 88 would like to extend a heartfelt thank you to Karl P. who generously donated a Grizzly 1HP dust collection system complete with the dust collector, bag, chip/dust separator, hoses, clamps, quick fittings, and mounting hardware. This addition is sure to benefit our wood shop users for years to come.

Karl is himself and accomplished woodworker whose beautiful work with reclaimed lumber can be seen on his Facebook page. https://www.facebook.com/reclaimedtreasuresllc
But that’s not all, he also builds custom unique shuffleboard games from reclaimed bowling alley lanes, worth checking out. https://www.shufflegamesllc.com/

Thanks Karl!

SONOS speaker API overcomes app limitations (Updated 2/27/25)

What are SONOS speakers?

I have several Sonos brand speakers in several rooms around my house. Sonos speakers are small, LAN based devices. There’s a Sonos app for your phone or computer.  With the app, you can control what sound files play on the speakers. The files can come from a streaming service like Spotify, an Internet radio station, an audio book service like Audible and Libby, and just plain, old music tracks that you downloaded or ripped from vinyl, cassette, and CD (follow the links if you’re too young to know what those are).

The speakers provide a flexible listening experience. You can group speakers together so that all the speakers are playing the same thing — in perfect sync! You can have multiple groups — e.g., one playlist running on the 2nd floor speakers, a different playlist simultaneously running on the 1st floor and a third running in the basement. Speakers can either be a mono or paired together into stereo left and right. You can even play a separate playlist on each speaker. This is all controlled via the app.

What’s not to like?

As much as I like Sonos, I don’t like the app. It’s difficult to find the functions I want to perform. Certain functions are missing. To wit: Every speaker can be set to a different volume level, but there are times when I want to set the volume on all speakers to the same value. For example, when I want to play soft background music during a house party. The app requires that I set the volume for each speaker individually. I’d much prefer a button that says “Set the volume on all the speakers in <<group>> to the same level as the group’s softest/loudest speaker.”

What to do?

So I searched for “Is there an API to control SONOS speakers?”. It turns out there is! But it’s quite complex. So I asked, “Is there a Python library for the API?” AND THERE IS! It’s called soco and was written by a group of SONOS fans.

Here are some of the functions:

  • Get a list of all speakers/groups
  • Get a list of playlists
  • Get the list of tracks queued for a speaker/group
  • Send a playlist to a speaker’s/group’s queue
  • Get/Set the volume on a speaker
  • Play/Pause the queue of a group/speaker

I quickly wrote code on my laptop to implement my “volume” function. But I wanted more.

What else?

My wife wants to blast her workout playlist when she’s in the home gym. But she struggles with the app more than I do and usually has to ask me to do it for her. So I wanted to give her a button on the wall of the gym that she could push. The button would send her workout playlist to the “Gym” group (clearing whatever might have been queued there previously), shuffle the queued list, turn up the volume and starting playing. It didn’t take long to complete the code on my laptop. But how to run this from a button press on the wall?

My first attempt was to migrate my “workout” code from my laptop to a Pico W. Total failure. The Pico runs micro-python or CircuitPython — neither of which can support the soco library which has a very deep dependency list.

Attempt 2: Migrate to Raspberry Pi Zero W. That actually worked, but, as small as it is, the Zero wouldn’t lend itself to a button on the wall.

Attempt 3: I recently learned how to use MQTT and I have a broker running. So I figured to use the Pico W for the button on the wall. On push, it would publish a “sonos/play” message. The MQTT broker sends that message to the RPI Zero W subscriber. The RPI Zero then makes the calls to the SONOS. That worked wonderfully. The only thing that remains is getting the subscriber on the Zero to start up and stay active after a reboot and to make a container for the Pico/button.

Let the music play!

Enclosure

After several prototypes using card stock, I made a case for the circuit. I used the free BOXES.COM tool. Once you choose the kind of enclosure, (closed box, hinged box, drawer box, etc.) you fill out a form with the box dimensions. I picked a closed box and set height, width and depth measurements in millimeters. There are a few other options that deal with kerf, material thickness, etc. Then I downloaded a cut sheet in .svg format and fine tuned it in Inkscape. Fine tuning consisted of adding labels and cutouts for the components. I sent the .svg to the laser cutter and ended up with:

a finger joint box. Of course, it wasn’t until after everything was cut that I noticed the knot right where the title is.

While I was at it, I created boxes for my CO2 monitor and my display that cycles between outside temperature and wind chill.

One simple organizational trick will invert how you see boxes

Make empty boxes go from the one on the left to the one on the right!

I’ve been obsessed with this simple trick for reusing empty boxes to hold small pieces around my home workshop. I have always tried to hang on to sturdy boxes (shoe boxes, for example) to repurpose, but I was never happy with how visually cluttered shelves would be with the various box colors, labels, and logos.

Then I realized that many boxes can be unfolded and then inverted! Here’s how I did it with boxes for 3D printer filament:

This style of box is sometimes referred to as a top tuck shipping carton. The key feature is that the box uses no glue to hold it together. There is a slot on each side of the bottom of the carton. You can see in the first photo that I’m using a screwdriver to push the tab out of the slot without bending the cardboard too much. After releasing both tabs, it is just a process of completely unfolding the box and then refolding the box with the printing on the inside of the box.

After you try this a few times, you will see boxes you can reverse everywhere!

You will also be annoyed when you find boxes that have been glued together and cannot be so easily inverted.

Polymaker Sponsors Workshop 88 Makerspace

We’d like to welcome Workshop 88‘s newest sponsor: Polymaker!


We’d like to thank Polymaker for helping Workshop 88 makerspace achieve our mission of providing tools and technology access to makers. Watch for ingenious new Workshop 88 projects using Polymaker 3D printing filaments.

https://polymaker.com/
Polymaker is a developer and manufacturer of 3D printing materials committed to innovation, quality and sustainability. Its award-winning product portfolio has enabled numerous individuals and companies to better create and make.
US Store: https://us.polymaker.com/
Canada Store: https://ca.polymaker.com/

Why isn’t there a Thingiverse for CNC? Slice Everything!

Contents:

“Why isn’t there a Thingiverse for CNC?” is a question that has been asked for almost as long as Thingiverse has existed, and the answer may surprise you.  

I’m D. Scott Williamson, a software architect and developer as well as a CNC and 3D printing hobbyist. I’ve wondered about this many times myself, wishing I could share and find CNC projects with the same ease I can share and find 3D printing projects.

Some of my CNC projects I would have liked to have shared over the years: Furniture, standup, cocktail, and miniature coin-op cabinets, engraved signs, coasters, vacuum form molds, control panels and much more.

Here’s why, how we got here, and how we can fix it.

What is Thingiverse?

Thingiverse.com is a free global file sharing website for 3D printing where people can upload 3D printable files with descriptions, instructions, pictures and videos of their creations.  You can search for 3D printable files, preview them, and download them.  The 3D printable files contain 3D geometry, most often in the .stl file format. 

Search results for “Benchy” on Thingiverse

How to 3D print a file from Thingiverse

Go to Thingiverse.com, download a file, load the .stl into your slicer, click slice, preview, and send the gcode to your printer.  It takes a minimum of one click to convert a 3D model into gcode.

Benchy on Thingiverse

Benchy loaded and sliced in Prusa Slicer

Benchy loaded and sliced in SuperSlicer

Benchy loaded and sliced in Cura

Benchy loaded and sliced in IdeaMaker

How to CNC mill a downloaded file

Let’s start with some definitions.

  • CNC stands for “Computer Numerical Control” which refers to any machine controlled by computer, typically through a gcode program file. Automated milling machines are typically referred to as “CNC machines” but technically any computer controlled machine is a CNC machine, including 3D printers.
  • CAD stands for “Computer Aided Design” which refers to software used to design a part.
  • CAM stands for “Computer Aided Manufacturing” which refers to software used to translate a design into gcode. Slicer software is automated CAM for 3D printing.

There are many CNC file sharing websites (example lists here, and here), they typically share layered 2D dxf drawings and source files for dozens of CAD packages. There is no automatic CAM process to create gcode from these files, and there are few open source software options.

The CNC process varies by the CAM tool but always resembles the following: Download a file, load the 2D .dxf(s) into your CAM package, manually select shapes or faces, manually create a machine operation (e.g. drill, pocket, profile, engrave, 3D contour), and manually configure the machine operation (bit selection, depth of cut, cut speed, plunge speed, etc.) based on the machine capabilities and material properties. Repeat this process for every machine operation, create gcode, preview the result in a cut viewer (often third party software like CAMotics or Cutviewer Mill & Turn) and iterate as needed.  Load the gcode in your CNC controller software and machine the part.

If you’d like to change settings or cut a different material you need to revisit the settings in all impacted machine operations individually and manually re-configure the CAM.

CAM in CamBam and gcode visualization in CAMotics

There’s no “slice” button in CAM for CNC

There’s no Thingiverse for CNC because CAM is HARD! Shared .dxf files resemble drawings, not finished parts, and they require a lot of error prone manual work coupled with significant domain knowledge to generate the machine operations needed to create gcode.  Slicers are automated CAM tools for 3D printers which are technically CNC machines, that automatically convert 3D models into gcode using reusable parameters organized into machine, material, and job configurations.  The 3D models fully represent designer intent in their geometry.

It’s easier to 3D print the parts for an MPCNC than to use it.

How did we get here?

People have been shaping wood and stone for all of recorded history and have been using machines to shape metal at least since clock and watch makers used machines to cut metal gears and shape metal since the 1700’s. Numerical control of machines began in the 1940’s, gcode was invented at MIT in 1958 and standardized in 1963. CNC and CADCAM took off in the 80’s and fused filament deposition 3D printing was invented in 1988.  The consumer 3D printing market is valued at $3262 million USD (2022) compared to the desktop CNC Machines marked at $369.7 million USD(2023).  How did the consumer 3D printing market grow to nearly 9 times the size of the consumer CNC market when CNC had a 40 year head start?

I see two primary factors.

RepRap inspired, organized, and mobilized a global development community

RepRap has been an amazing force in the advancement of 3D printing technologies.  Founded in February 2004 by Adrian Bowyer at the University of Bath with the goal of making a self replicating machine to democratize manufacturing. RepRap inspired and organized a global community to iterate on all aspects of consumer 3D printing:

  • 3D printer design – Many 3D printer designs were and are explored including bed lifters, bed slingers, delta, scara, belt printers, and more experimental designs leading to many modern 3D printer companies today, not the least of which Prusa Printers founded by Joseph Prusa a long time active member of RepRap.
  • Electronics – RAMPS Arduino based controller
  • Firmware – Marlin, Sailfish, Repetier and more
  • Gcode senders – Pronterface etc. (later incorporated into slicers)
  • Software slicers – Skeinforge, ReplicatorG, Slic3r (and derivatives Prusa Slicer, Super Slicer, OrcaSlicer), Cura, and others.

This multidisciplinary community was able to rapidly experiment and advance the reliability and usability of 3D printers through iterative feedback and open source knowledge sharing, ultimately resulting in the ubiquity and ease of use modern 3D printers enjoy today.

The CADCAM software industry has neglected the consumer/hobbyist market

For literally hundreds of years, engineers have drafted detailed part designs on paper for skilled tradespeople to craft through a sequence of manual operations.  Standard practices and notations are used to ensure the communication of required dimensions and parameters for the efficient commercial production of parts relying on both the engineer and trades-person’s knowledge of engineering, material, and machining principles.  These conventions persist in the digital CADCAM systems of today.

There is little need for GD&T details for 3D printers or desktop CNC machines doing woodworking, PCB engraving, or just able to cut aluminum. What is the surface finish of a 3D printed part? What is the tolerance of a hole cut by a laser cutter?

Since industry is where the vast majority of commercial CADCAM software value is, there is little motivation to make workflows for hobbyists that are automated and focused on the capabilities of modest hobby CNC machines even though such tools have the potential to disruptively grow the consumer hobbyist CNC market.

Despite the proliferation of affordable consumer, desktop, hobbyist, and DIY CNC machines, there exists a significant knowledge and skill barrier to entry for CNC hobbyists; a barrier that has been overcome in free open source 3D printing slicer software.

An easy fix

Slicer software is already very capable CAM software. It loads, visualizes, and manipulates 3D models representing designer intent in the context of the work area of a machine. It uses preset parameters for machine, material, and job settings. It generates a sequence of machine operations, converts the machine operations to tool paths, and converts tool paths to gcode with post-processor specializations for 3D printer firmware flavors (SuperSlicer already supports post processing milling operations).

The opportunity is to leverage the existing capabilities and extend a slicer from purpose built 3D printing automated CAM to a general purpose automated CAM package capable of “slicing” a model to create gcode for any machine including 3D printers.

  1. Generalize existing slicer abstractions of printer, filament, and print parameters to machine, material, and job settings. 3D printers will become the first class of machines, filaments a class of materials, and print settings will be a job description. Additional machines, materials and jobs may be added, these abstractions enable the description of any job on any machine that converts gcode to action.
  2. Automatic creation of gcode from designer intent represented in shareable 3D files.
    1. 3D files (e.g. .stl, .obj, .step) that represent the finished part.
    2. 2D files (e.g. .dxf, .svg) that represent paths for machines that fundamentally operate in 2D (e.g. pen plotters, vinyl cutters/drag knife, EDM, engravers, hot wire cutters, needle cutters, laser cutters, plasma cutters, CNC for sheet material).

These concepts not only enable CNC mills but all types of machines that convert gcode to action including:

  • 3D printers (Cartesian, Bed lifters, Bed slingers, Belt printers, Deltas, CoreXY, SCARA, …)
  • CNC mills
  • Laser cutters/engravers
  • Pen plotters
  • Vinyl cutters (drag knives)
  • EDM machines (2 or 4 axes)
  • Hot wire foam cutters (2 or 4 axes)
  • Needle cutters (foamboard, closed cell foam)
  • Plasma cutters
  • Waterjet
  • Wire benders
  • CNC Lathes
  • CNC grinder

I have nothing against CADCAM software, it will always be needed for more advanced or commercial machining. You may wonder why I don’t advocate adding a “slice” button to CADCAM packages. This was my initial thought but most packages are closed source. It would be great if open source FreeCAD/ONDSEL incorporated fully automated CAM, but it currently lacks the simple workflow, interface, and parameter organization that already exists in slicers. Slicers have the needed program components organized in nearly the right way to enable a slice button for every CNC machine and being infinitely community extensible. A nice stretch goal would be to enable the slicer to export a FreeCAD project file from the source geometry, generated machine operations, and generated tool-path. This would provide easy gcode generation for hobbyists with a low barrier path from hobbyist to more advanced open source CADCAM.

Slice Everything!

I’m no Adrian Bowyer, I don’t know how to organize and inspire an online community, I am a software architect & developer with a background in graphics and computational geometry who sees how close open source slicers are to automated general purpose CAM systems. I’m also a 3D printing and CNC hobbyist who recognizes a real market pain point and opportunity. (FWIW I invented the magnetic removable steel 3D printing build plate: Hackaday, Workshop 88 Blog)

Community is critical to this type of project just as it has been in the amazing success of 3D printing. I particularly hope this message and its potential for positive disruption resonates in the RepRap community as it is perfectly aligned with their mission: “RepRap is about making self-replicating machines, and making them freely available for the benefit of everyone. We are using 3D printing to do this, but if you have other technologies that can copy themselves and that can be made freely available to all, then this is the place for you too.”

Goals:

  1. Help the developer community organize and plan to advance existing slicer design to be applicable to any job on any machine using any material that makes sense without impacting the existing 3D printing workflow, which enables…
  2. Automatic creation of gcode for any machine, material, and job to be as easy as slicing for 3D printing, which enables…
  3. Sharing of files in common formats that completely capture designer intent that can be easily converted to gcode for any compatible machine or material.
    Thingiverse for everything.

Hopefully some people will share this vision and help organize around it. Perhaps manufacturers of consumer CNC machines and kits, existing slicer developers, frustrated CNC hobbyists, or you.

Please share your thoughts with me, Scott Williamson at scottw@workshop88.com, subject “Slice Everything”.

I have specific technical ideas related to slicer advancement I will cover in a later post.

I will be happy to talk to anyone about it, see you at Midwest RepRap Festival 2024.

tl; dr (summary)

  • Thingiverse and similar sites are successful because there are interchangeable 3D geometry file formats and slicer software makes it simple to 3D print downloaded files
    • .stl (.obj, .stp) are generic file formats that contain the designer’s intent in geometry
    • Slicer software directly converts designer intent from geometry into gcode using parameters in preset categories
  • There is no “slice” button to create CNC gcode in CADCAM software whether it be open source, online, or commercial.
    • .dxf is the primary interchange format for CNC designs, dxf is layered 2D resembling drawings
    • CAM software does not have standardized shareable file formats for machine operations, machine capabilities or even tool (bit) descriptions
    • CAM software does not provide direct conversion of designer intent into gcode for a machine, rather requires manual creation of machine operations and configuration
    • CAM software does not organize presets in such a way as to facilitate a wide variety of machine configurations, job types, and materials
  • Slicer software already contains abstractions for CNC machine, material, and job though they currently target the narrow 3D printing application: printer, filament, print settings
  • Slicer software already contains planar geometry analysis of 3D objects required to create the vast majority of 3 axis CNC tool-paths for many machines
  • Slicer software already contains code for the creation of a sequence of machine operations that are converted into machine readable gcode with a post-processor to adapt to printer firmware
  • Slicer software (SuperSlicer recommended) should be be extended and organized such that:
    • Print settings are replaced with Job settings where 3D printing is a type of job
    • Filament settings are replaced with Material settings where 3D printing plastics are described for 3D printing jobs and additional materials may be added for other types of jobs
    • Printer settings are replaced with Machine settings where details can be captured for a variety of machines including which job types are applicable to which machines
    • Machine operations and parameters for CNC be added and algorithms be extended/created for CNC.
  • Slicer software is and will continue to be open source enabling the community to extend it to support whatever machines that turn gcode to action that exist or may be imagined.
    • Potential types of machines:
      • 3D printer (existing)
      • CNC mills
      • Laser cutter/engraver
      • Pen plotter
      • Vinyl cutter (drag knife)
      • EDM (2 axis, 4 axis)
      • Hot wire foam cutting (2 axis, 4 axis)
      • Needle cutter (foam cutter)
      • Plasma cutter
      • Waterjet
      • Wire bender
      • CNC lathe
      • CNC Grinder
  • One click Slicing for CNC and other machines lowers the barrier to entry for hobbyists/consumers, enables widespread sharing of designs, and has the potential to enable significant market growth
  • Please share your thoughts with me, Scott Williamson at scottw@workshop88.com, subject “Slice Everything”.

D. Scott Williamson
scottw@workshop88.com