• lightbulb.png

    What is a hackerspace?

    A hackerspace (also referred to as a hacklab, makerspace, or hackspace) is a community-operated workspace where people with common interests, often in computers, technology, science, digital art or electronic art, can meet, socialize and/or collaborate. Learn More at Wikipedia

  • world.png

    Our Location

    We are located at 7964 Baltimore St, Baltimore, MD 21224 Click here for a map

  • customers.png

    Ready to join?

    We would love to have you join us. Stop by on Wednesday for Open Hack night and check us out or check out our meetup calendar for other events. Learn more about membership

Advanced Cabinet making on the ShopBot

20240831_204246

Get it? On the ShopBot? Because…  I know, it’s a terrible pun, but I actually did most of the work with the ShopBot too!  This post is designed to show off what you can do with the tools in our shop – we offer free training for everything shown in this post, and it’s easier than I thought!

448592246_813269787214595_7974013255419937489_n

   The story starts when my friend made fun of my entry-way table, which is always covered in stuff. I realized I need an entryway cabinet, so I could hide all of that stuff in drawers! So I was bouncing ideas around in my head when a friend offered me a slab from his old tree.  Cheap, cut with an Alaskan mill (aka a chainsaw with a spacer rig), and aged a few years in his back yard.  I’ve watched fancy furniture videos on the internet for years, and here was my chance to try it!

 

 

 

20240804_191006

The first challenge is turning this chunk of tree into “Lumber”.  The professionals have giant planers… ours is only 12″, and too small for this slab.  But what we do have is a ShopBot! I drilled a few recesses and screwed the plank to the table, and ran a decking pass. Just a giant rectangle with a wide bit…  and then hand-drove the head around to do cleanup on the edges just outside the rectangle.  One side done, I flipped the slab, re-zero’d the Z axis, and in just under an hour I had a perfectly flat and parallel piece of lumber!  While it was screwed down, I used the CNC to cut it to size. Using the same large rectangle, I rounded the corners, let it overhand the slab on one edge (to get a live-edge look), and cut only the perimeter this time.  I took it down to 1/4″ of material remaining – this meant I didn’t have to worry about the slab moving because I’d cut it free of the screws. For the remaining 1/4″ I used a jigsaw for a rough first pass – staying wide of the edge – and then used a follower bit in the router to match that edge with the CNC’d profile.

The next step was sanding. So much sanding. I think I did 80-120-200. I don’t know if that’s right, I know I should have gone higher, but after so much sanding I didn’t care anymore. While sanding,  I’d take breaks to work on the live-edge. I had to pull off the bark and spongy sap-wood so I only had good material left.  I mostly worked with chisels.  If you’re at our hackerspace ask around and borrow someone’s nice chisels, the communal chisels are thoroughly abused. Despite not knowing what I was doing, I slowly got down to good wood, and the slab was ready for finishing!

Before finish, I moved onto the cabinet itself.  While working on the slab, I’d been working on the CAD for the main body. This first-round of CAD was only to figure out the proportions and the look of the piece. I can’t draw, so in order to figure out what proportions looked right, I had to model it. The first models were ugly. If you wanted to be charitable you could call them “highly functional.”   My modeling process is to make a round of updates to the CAD, and then send a screenshot to a friend asking what’s wrong with it.  Then another round of updates to fix those issues, another screenshot, and ask a different friend what’s wrong with it. It’s the same way I revise my high-effort videos (please sub!).  In addition to purely-aesthetic changes, the cad evolved as the slab shrank down to final dimensions.

allScreenshots
Cad screenshots harvested from a handful of chats

 

20240810_203936

With the cad almost-finalized I had a few structural pieces to cut on the shopbot. The legs were nice and simple, and cut out of some scrap 2x8s.  Less simple were the front corners, which I had decided should be rounded. It definitely looks cool, but unlike the previous cabinet, this curve was too tight to be able to steam-bend, while far too large for a chamfer bit.  Luckily, we have a shopbot! I exported a STL of the part, loaded it into aspire, and set up a 3d toolpath. Key tips: Use a round-nosed bit, I used 1/2″.  Take aggressive steps on the roughing passes, but dial it back to baby steps for the finishing pass. I routed this out of a 6×6 from homedepot, and while the finishing pass did take an hour, the results were worth it. A bit of sanding, and I had a long stock of quarter-round I could use for the edge rails.

With these corners and the table-top, I could trace out the base of the cabinet, which I bulked out on the table-saw and finished with a jigsaw. Having both the base and the corners gave me a final dimension for the face of the cabinet – it’s always best to measure these and not rely on the cad. I cut the doors first. A coat of stain, and then a light engraving pass to through the stain to expose a pattern! I fell down a rabbithole on the door design, which you can read all about in the previous post here.  Doors done, it was time for the fascia / drawer covers. I left tabs on these pieces, locking them all in place so that I could use the vacuum hold-down.  Then I repeated the stain-and-engrave trick to decorate the drawers.

For the drawers, I knew I wanted a similar mathematic exponential design… I tried circles again, but it looked off. Instead I just pulled up a graphing calculator and started playing with equations…  I knew I wanted curves, so that meant a sine wave. I knew I wanted it to expand over time, so that meant an x*sin(x) curve. Plotting it, I realized it needed to slow down over time as well, so x*sin( ln(x) )…    After a bunch of guess-and-check to tweak the curves, I got this:

drawerEquations

I could pretend I then used these equations in Solidworks to programmatically generate my cut-path, but I didn’t. I hit print-screen, cropped the curves in gimp, and traced them in Inkscape.  Once there, I could stretch it to fit my drawer fronts, and engrave more math into my nerdy furniture.

Spoiler: I figured it out

From here, it gets pretty boring. I bashed a frame out of 2×3 and 2x4s, sheeted it with plywood, installed home-depot hinges, and built drawer-boxes. Which, of course, I could have done on the shopbot! Instead I locked my slide and bulked them out on the table-saw. If you really need the details LMK in the comments and I’ll write a “Drawers 101″ course. I spec’ed out some nice push-to-open drawer-slides on Woodcraft, but their website crashed so I bought knockoffs on amazon. I mounted them on random scraps of wood that would give me the right offset…. which is definitely not the right way to do it, but it’s hidden so it’s not getting fixed unless it breaks.

The last step is the surface-finish.  I started with the body: Another round of sanding, and then to the tricky part: Matching stains. The different woods reacted differently to the stains, so I had to whip up a custom mix of stain using SpunSpoon. I put together a short video explaining this process:

Was that really just a commercial for SpunSpoon? Of course it was. Do you need a SpunSpoon? Of course not. But it did work a treat. Then excessive coats of poly and call it a day.

The slab is the start of the show and would see more abuse, so it deserved and needed more thorough finishing.  First were two final rounds of sanding, and I popped the grain between grits by wiping it with a damp cloth.  Then came a dark stain, and once that dried I did touch-ups with a sharpie – darkening the various worm-holes and scars that stood out against the now-dark wood. It’s super fast and simple, but this quick step makes a huge difference in appearance.  After that, I clear-coated the entire slab with poly. Poly is never a mistake. After the poly I mixed up a bunch of deep-pour slow-setting self-leveling epoxy, and smeared a layer of this over the entire table.  It looked amazing, but it also leaked through every minor crack or worm-hole on the entire table.  Because of this, my planned two coats turned into 4 coats, all 12 hours apart. Next time, I’m going to superglue, hotglue, or epoxy every single defect before the pour. Epoxy done, I tented the board in some cheap plastic sheeting to protect it from sawdust, and let the whole thing cure for 4 days. Finally, I shaved the epoxy stalactites off bottom, taking shallow passes with an inverted chisel until they were flush.

And now, almost a month later, we can move this cabinet off the shopbot!

458240134_1507252999914479_866690381658277781_n

 

 

Programming – Interlocking Exponential Circles

  • If you’re not a programmer, you can download the software here. Run the exe, load the sample SVGs, play around, and feel free to skip the details in the rest of this post.
  • If you are a programmer and want to follow along, or think you can improve this software, please do! The source is available here  .

So… I decided I would make another cabinet (post coming next week!). And then, messing about in CAD, I realized I could create cool patterns with parametrically related circles. The only issue was the sheer number of cascading parametric relationships – each circle related to the circles touching it – managed to crash my machine. Even my beefy video-editing desktop. The easiest solution would be to change the design, but I was infatuated to the point I fell asleep thinking about circles every night…

Spoiler: I figured it out
Spoiler: I figured it out

So I dove in, assuming I’d figure it out as I went.  The first challenge was to describe the actual expansion I was looking for… I knew I wanted the pattern to grow both in circle-radius and circle-spacing, but couldn’t really describe it better than that.  So forget it! We’ll come back to it.  Instead, I wrote a program that would create a list of circles on a grid.  Just X, Y, and radius. A couple nested for loops that spat out a list of numbers.

Now we need to turn those numbers into circles. I looked at a few graphic libraries for c#, but I wanted an output format I could drop into cad. I really wanted a DXF.  So I checked out some DXF libraries, and started reverse-engineering DXF files.  Reverse-engineering is really just a fancy term that means “I changed the extension to TXT and looked at it notepad”.  This still looked like a lot of work. What about SVG? I use Inkscape for cad more than I should…  some of Doomba’s mechanical parts even went straight out of Inkscape to SendCutSend.

Success!  There was a lot of complicated file definition, but when I drew a SVG of a single circle, I saw a single corresponding line of code in notepad.

<ellipse style = “fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.24600001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1″
id = “path652″ cx = “8″ cy = “8″ rx = “5″ ry = “5″ />

Do I know what all these fields mean? Nope. But playing with cx and cy showed them to be center-x and center-y, and rx/ry were radiuses (two options for ellipses, but we’re sticking to circles so we’ll use the same number for each).

So now, I can have my program spit my list of circles into an actual SVG!  It starts by copying the beginning of the SVG, adds a line for each circle – updating cx/cy/rx/ry, and then appends the tag that closes the document.  Then save it as an SVG, and done!  On top of that, I had GPT help me look up parts of the code for me… GPT works very well as a stack-overflow research engine.

Now my program can draw circles! Which means I could start playing with the variables to figure out how to create the pattern I was looking for. I could do a lot of math… but it was faster and more fun to play guess-and-check. So much guess-and-check I had to optimize the program. I added more and more options for circle locations, spacing, and sizing. But with this many variables, I would forget the settings I used. So I had the software save the last set of variables.  But that didn’t solve the problem for previous circles, so I added a comment to each SVG containing all the variable values used in that SVG. On the flip side, I wrote a function that will extract those variables from a saved SVG, so it was easy to tweak a design that was almost right.

This is another section where GPT did most the work… I wrote sample code showing how it would work for one-variable, and then told chat GPT to duplicate that code for each of a long list of variable names, changing the data-types to match the definition. AI is excellent at what boils down to a multi-step copy-paste problem, and probably saved me a few hours over the course of this project.

After hours of guess-and-check, the equations ended up being:

double locX = deltaX * Math.Pow(expX, x – 1);
double locY = deltaY * Math.Pow(expY, y – 1);
double distance = Math.Sqrt(x * x + y * y);
double circleRadius = circleSize * Math.Pow(circleFactor, distance);

Better, I had a SVG.  I dropped this in Inkscape where I could overlay it on the outlines of the doors I’d drawn. I resized the circle-array, and mirrored it for the opposite door. Export to DXF, load it into Aspire (one trick here: use “Quick Engrave” to engrave only the lines, without the CAM software worrying about which regions over overlapping shapes are positives or negatives). Export to .SBP, and off to the shopbot!

Success!

 

 

 

Basic Cabinetry on the ShopBot

So… I still have 4000 spoons (please buy some) and needed better storage for them at the Hackerspace, so I decided to build a cabinet. This also gave me a first chance to break into furniture-making, which has always fascinated me. The goals here were cheap and fast, so we’re going to take a lot of shortcuts. However, I always try to learn one new skill on every project, so this week we’re learning wood-bending!

First off, I got a sheet of “fancy plywood” from Home-Depot. I’m sure there’s a technical term, interior-grade birch something-or-other, but… I lets be honest. It’s bougie plywood. Then I measured the space the cabinet would fit into, and laid out the lid of the cabinet. This was a simple cut on the shopbot, which does a better job on curves than I ever could by hand. And when working with sheet-goods, we can use the vacuum hold-down which is convenient and saves the material from screw-holes.

After the lid, I cut both exposed sides of the cabinet in one piece! The front portion is simple, as it matches the square edge of the top of the cabinet, with two doors inside it. Because we’re aiming for fast and easy, I cut the doors out in-situ. This means the doors will have the  1/4″ gap left by the endmill, but fast and easy.  I could cut the doors out of a separate piece, but then I’d have to go back to HD for more fancy ply…   The corner / side of the cabinet aren’t as simple as the front. With the overhang of the lid, the curved portion of the sides will be shorter than the curved portion of the lid… and I’m not sure how much shorter.  I could do a bunch of math and probably get it right, but I had an easier solution: I cut it long, and I’ll trim it down to size later.

20240115_142323

This brings us to the interesting part of the cabinet…  Bending. First, we needed to plane down the portion of the sides that will be making the bend. There are lots of ways to do this, but the plywood is already on the ShopBot… So I decked it! Really simple, just bring it down from 0.5″ to 0.1″. You’ll see in the pictures that I added a bunch of tiny slits trying to do an accordion fold… but that was a mistake that hurt more than it helped. Simply deck the entire area flat.

Now, we have to warm and moisten the wood fibers so that they’ll bend without breaking. The correct way to do this is to build an enclosed steam-box and pipe steam into it for 30m to an hour… but fast+easy, right?  I filled a storage bin with water, and put an immersion heater in it.  Honestly, this was garbage. It didn’t entirely fit, so I had to soak portions at a time, while ladling water over the exposed portion. If I were to do it again, I’d probably still do the soaking method, but I’d measure the soaking-tank beforehand to make sure it actually fit.

 

 

 

 

 

20240115_142318

However, half an hour later my board was bendy! According to the internet, you can just curve it into shape with some ratchet-straps and wait for it to dry! The internet is a liar. I mean, except for this website…  It was impossible to induce my curve without also inducing some twist in the wood.  I left the straps on, and submerged my bent and twisted wood back into it’s bath-tub while I ran to my com puter for emergency cad.  I quickly sketched inner and outer braces in Aspire, and then CNC’d two of each out of scrap wood. I swear we’re not sponsored by ShopBot, but I love that thing.  These braces worked perfectly, and I could clamp the curve into the desired shape, and held it there while it dried overnight. (Overnights, I got distracted).

 

 

 

 

 

 

20240115_192000
20240118_192616

 

The rest of the project is pretty standard. Framing out the body of the cabinet, adding shelves of scrap ply-wood, poly over everything, more poly over that, and piano-hinges from the value rack at HD. I did learn one last lesson: Edge banding. Edge banding is awesome, it’s super easy and hides the fact that you used plywood. HD only sells one type but it’s an exact match for their bougie ply. Then you iron it on like you’re making custom tshirts in the 90s, and trim the edges so they match the plywood perfectly. You can do this with a chisel or a razor, but they also make a little slidy thing that pinches razor blades to the exact right height and does all the work for you.  It even stains the same as the plywood.  I knew edge-banding was a thing, but I have an all-new appreciation for it now.

 

 

 

 

 

 

 

20240121_151903
%d bloggers like this: