This week's assignment was to make something big. I recently moved into an apartment in Central and needed to add more seating to our dining room table, so I decided to build a dining room bench.


My original idea was to surface the bench seat to make it more comfortable (think bus seats). I modeled the seat using SolidWorks and lofted cuts. I then made a scale model to cut during our first session with the ShopBot.

Seat Model and Surfacing Test Cut

I exported the SolidWorks part as a STL file and imported it into PartWorks 3D. I needed to change the orientation of the model to "back" so that it the z access was on the right plane (see image below). Also, the thickness of the part was incorrect, so I set this to 0.75 inches.

Set orientation to "back"

I used a 1/2" ballnose endmill with a spindle speed of 12000 rpm, a feed rate of 120 in/min, and a plunge rate of 30 in/min. The stepover was set to 25%. We ended up just doing a finishing toolpath with a pass depth of 0.25". For the cut out path, we set "material to leave" to -0.1.

Surface Milling


I had trouble settling in on an idea for the bench and tried modeling a lot of different ideas. Generally, I wanted to gain more experience with surfacing in SolidWorks and ended up learning a lot about designing multi-body parts (thanks to some help from Yoav)!

Original designs

I decided to try cutting the "dino" bench and did a lot of test cuts before cutting out one of the side panels. But even after the tests, the slots were really oversized, and I found that the bench was a few inches too low.

Test cuts for press-fit

Dino bench side panel

After the failed attempt at making the dino bench, I decided to re-design the bench and came up with a new design:

New bench design

Here's how I designed the model in SolidWorks:


Cutting all of the pieces took around 6 hours. I used the MDF that was available in the architecture shop. I attempted to use PartWorks 3D for surfacing but found that the entire seat would take about two hours to cut, and my partner was already nice enough to stay until 3 AM, so I decided not to surface mill the seat.

The back support for the bench also wasn't surface milled, resulting in some pieces that stick out of the bench.

Things I learned from using the ShopBot:

  • You have to re-zero the "z" axis every time you reset the machine.
  • Dogbone corners to ensure the pieces slide in as far as they should
  • Use the function "join open vectors" to close all gaps between vectors
  • Ensure that the x and y axes are correct before you send to the machine
  • Not a ShopBot detail, but you can park in the parking lot behind Bank of America after 2:30 PM for free on Weekdays, which is located relatively close to the architecture ShopBot.


The pieces in my living room

I didn't have a rubber mallet, so I covered my hammer with a cloth

Should have filleted those corners...

Assembled bench

Unexpectedly, the bench acts as a good drying rack...


CAD & PartWork Files


For my final project, I'd like to make self-documenting LEGO bricks. This would involve adding electronics to existing LEGO bricks to make them capable of sensing their connections. The connected bricks would form a CAD model in real-time so that people can share their designs with others easily without having to create a separate digital model from scratch.

Prior Work

There are many examples of smart building blocks, including the following:

  1. Tangible Programming Bricks enable people to create physical computer programs using LEGO bricks:

Tangible Programming Bricks

The Tangible Programming Bricks each contain an 18 pin PIC and creates connections between blocks using a female connector on the top of the brick (metal pads on a PCB) and a male connector on the bottom (a JST-ICC). It has several LEDs embedded in the brick used for debugging.

Hardware used for the Tangible Programming Brick (Tim's thesis)

  1. Triangles are a set of tangible pieces that are connected using magnetic hinges. CAD models of the Triangles' configuration are rendered in real-time. However, the triangle pieces are quite large and require a significant amount of hardware for each piece.


  1. Activecube is a system that uses large bricks that sense their connections using IR sensors. ID numbers are assigned to each face of the cube to identify its connected face. Similar to Triangles, Activecube is limited by its size and limited number of pieces.

System Components

LEGO bricks

I plan to build a mold to cast my own custom LEGO bricks.Each stud of the bricks will have a magnet embedded in it to establish a connection between connected blocks. I will start with 4x2 bricks and see if I need larger / smaller bricks. Ideally, this would be a platform that could be extendible to larger or smaller bricks so that you can use a variety of different pieces.


At the bare minimum, I would like the bricks to light up to indicate that they are connected. I will experiment with several sensing techniques including using reed switches to detect when the bricks are magnetically connected or using IR lights and sensors.


I plan to use Processing for the CAD visualization.

Questions / Tasks

  1. Designing and casting the LEGO mold.
  2. Designing the internal circuitry for the bricks.
  3. Designing the software that will help establish how bricks are connected.
  4. Creating the CAD visualization for viewing the model of connected bricks.