Skip to content

Computer-controlled machining

CNC Lawn Chair

Task

  • Group assignment

    • Do your lab's safety training
    • Test runout, alignment, fixturing, speeds, feeds, materials, and toolpaths for your machine
  • Individual assignment

  • Make (design+mill+assemble) something big (~meter-scale)
  • Extra credit: don't use fasteners or glue
  • Extra credit: include curved surfaces

Group assignment page

Lawn Armchair

Design

Inspiration

I've used the www.dimensions.com website as reference. In particular, for similar ergonomics to what I intend, I've used Shell Chair. It looks great but a bit too laid back, so I've placed my backrest and seat at a shallower angle. I've also added a head rest because I consider them necessary.

Tuning the ergonomics

I've checked a few lounge chairs and it seems mine, at 31cm seat height, was going to be a bit low. I've raised it to 35cm.

I designed it as a set of surfaces then used OffsetSrf to make solids. I offset everything by 15mm (the thickness of the stock) except the seat, which I offset by 16mm to get more clearance, since I expect it will be the hardest part to assemble.

Joinery strategy

My original joinery strategy was:

1) Subtract seating surfaces from armature: they will be press/gravity fit. 2) Subtract armature from armrests to make simple joints. 3) Use a plugin to create slits

It sounded reasonable but it has been a struggle. The Box Slits component in Rhino does a terrible job when the solids are not orthogonal:

Box slits component

I therefore had to redo the structure as surfaces without thickness, use the region slits component, then write a short Grasshopper script to extrude them into solids, which I needed for the boolean difference between the seating and the armature.

Chair as surfaces

Doing the slits

It was a very manual process, which was very frustrating when I made a small change and had to redo manually many steps.

For example, after Riichi's chair broke I decided to add more support to the seat and make the living hinge pattern larger, and that implied doing the following:

  1. Add more pieces as surfaces
  2. Run Grasshopper script to get slits and extrude the armature.
  3. BooleanDifference to generate the slots for the seating in the armature.
  4. Select faces as cutting pattern
  5. Fix small imperfections manually.
  6. DupBorder to get lines.
  7. Orient them manually in a plane.
  8. Nest for optimum material use.

Another semimanual step was fine tuning the slits: region slits doesn't know how much material to give each half of a joint, so if you want to make one part sturdier you have to touch that yourself. I did it by:

  1. Isolating one component
  2. Pushpulling the bottom of the slit to the required thickness
  3. BooleanDifferenceing to get the other half.

Pushpulling to fine tune slits

For step 7 above I tried using OpenNest, and it kind of worked, but the nestings it produced even after increasing iterations and rotations were very obviously suboptimal, so I did them manually.

RhinoCAM

You can find the final design and CAM files here.

Step 1 is adding a 6mm diameter flat tool:

The cuts were made at 18000rpm, and feed rates were 3000mm/min across the board. Movement rates were 7000mm/min.

The next step is setting up my 15mm plywood as a box stock:

engraving engraving pocketing profiling profiling

The clearance for the screw marks (set up as an engraving operations) was 30mm, because the wood might bend.

The hinge was set up as an engraving operation as well.

For the following operations (hole pocketing and profiling) it was 20mm from the material. Each pass was set to remove 3.1mm of material: around half of the 6mm endmill, with a bit added to ensure that it went all the way through the material. Final cut depth was 15.4mm.

I had to manually place the bridges in most pieces because the auto-placing was putting them inside the slits.

Fabrication

Fabrication was smooth. I used the Raptor-XL. I held down the 15mm-thick plywood with around 20 screws.

Cutting took around 2h30m. I had to stay close in case something happens so I used the time to get up to date with documentation.

It was interesting to note how much the grain of the wood affects the quality of cuts. You can see it in this closeup with different orientation cuts.

I did need to put in a lot more sanding than I expected.

Assembly

The problems in the design showed themselves during assembly. The main one is that I had designed the slits as a 2-dimensional shape, because the box-slit component in Grasshopper was buggy. This works great if your pieces intersect perpendicularly, but if they do it at an angle the slit will need to have a different profile.

In my design, however, the two big pieces of the armature are at an angle. I think it looks sleek, but since I didn't account for it when designing the slits, we had to do a whole lot more sanding:

Still, the wood was being subjected to stresses, and at some point it was too much for it 😢:

The design has enough resilience built in that it still was able to work! It held my weight just fine.

Shoutout here to my two great assistants Julia and Xiomara for helping out with assembly in the heat of Barcelona summer!

Lessons learnt

My main learning here was that you never can expect a version 1 of a physical product to work: you always need to plan for iteration. You need to expect a conversation with the material and tools, asking them "is this okay" and listening to their answer over several rounds.

It was also invaluable to make a scale model in a cheaper material, or I couldn't have had that conversation.

Still, when I went to the final material it was thicker and more rigid than the model, so even if you have done "pre-iteration" you still need to account for 1-2 more iterations. This is hard (or expensive) to do with final materials.

Changes for a follow-up version

The slit learning would be key if I were to create a v1.0 of the lawn chair. There are two possible solutions:

  1. Model the chair as a solid then do the slits. This would be a lot of work, since the box slits component in Grasshopper is buggy.
  2. Make all the intersections be 90-degree: this would eliminate the twisting forces. This would be my preferred option because the aesthetic impact wouldn't be so bad as I first feared

Also, the seat, backrest and headrest would need to be changed so that there are no islands that fall off. Instead of a spiral pattern I could go for a regular living hinge pattern. That'd be fine, since they only need to curve in one dimension.

Miniature gears

This week, for my final project B, I wanted to make some gears. I made different test designs and in the end I went for a 0.4" base gear with 18 teeth. All gears will have to keep this relationship to be able to mesh.

The base profile is a multiple of breadboard hole separation.

17 teeth is the minimum, but I decided to go for 18 so that I can have non-integer relationships: gears that are, for example, 5/2 as big as the minimal one.

I used geargen.py from food4rhino. There are some nice instructions at makearchitecture.

I struggled a bit to export a png for the Roland until Santi showed me the hatch command. It's just what I needed!

Gears in their bed

Finger for scale

Notes on CNC @ Fab Lab

Types of bits:

Straight, Upcut, Downcut, Compression cut.

Spindle always rotates clockwise

Plywood: downcut or, even better, compression tool.

Compression tools are effective but you have to cut all at once and they suffer a lot.

Flute should always be at least as big as the amount of material you are cutting.

Number of flutes: tradeoff between space for the chips to escape and number of cuts per rotation. More flutes are better for for harder materials.

TODO

  • Paisaje in wood: no 3D this week!
  • Small brass gears

References