03 : Computer Controlled Cut#
1. Summary#
Hero Shot#
Learning Outcomes#
What did I learn this week ?
- Laser Cutting :
- Safety Rules
- Laser cutter functionning and parameters
- Laser cutter workflow
- CAD :
- New design workflow with parametric Inkscape with Python extension
- Slowness of the Inkscape Python extension for boolean operations
- Building
- Attaching pieces with no glue
- Attaching pieces with non 90° angles
- Patience...
- Vinyl Cutting :
- Make stickers !!
2. Assignment#
This third week's asignments are :
- Group :
- Do your lab's safety training
- Characterize your lasercutter's focus, power, speed, rate, kerf, joint clearance and types.
- Document your work to the group work page and reflect on your individual page what you learned.
-
Individual :
- Design, lasercut, and document a parametric construction kit, accounting for the lasercutter kerf.
- Cut something on the vinyl cutter.
-
Extra :
- Design it to be assembled in multiple ways
- Include elements that aren't flat
- Engrave as well as cut
Below you will find the achievement of the latter.
2.1. Group Assignment#
This week I worked with Michel and Fabio. Don't forget to check their documentation for complementary informations on the group assignment !
2.1.1. Safety and Usage Training#
Today with Patrick, our instructor, we did our safety and usage training concerning the laser cutter machines. He first explained us some safety rules and then showed us how to use each laser cutter machines of the lab.
Lasersaur#
For this assignment I will only use the Lasersaur machine because it is reserved for us. The Lasersaur is our FabLab reproduction of an open-source laser cutter.
Starting#
To turn it on and off we have to use the emergency button (on the left) then we have to turn on the extractor (on the right) whose role is to vaccum the harmful smokes coming out of the cut material.

Finally the pressurized air source must be open just before starting the cutting and must be closed when the cutting is finished (because it is really noisy).
Computer Aided Manufacturing Software#
The Lasersaur uses Lightburn to convert our 2D CAD files into instructions for the machine.
Setting the material in the Laser Cutter#
Each time you install a material inside the machine you have to adjust the focus and to add some weight on the border of the material in order to flatten its surface.
2.1.2. Focus Characterization#
In order to adjust correctly the focus before cutting, we have to determine the focal distance of the laser cutter lens. Therefore we fixed a tape band on the work plan of the laser cutter and we will do laser pulses starting at different heights.
The pulses will burn the tape on a single dot. The size of the dot will give us an indication of how close we are to the focal distance. The smallest the point is, the closest we are to the focal distance.
To be precise, we have small 3D printed support of different marked sizes.
We can thus simply unscrew the laser attach and adjust its height by placing the laser on the support.
We repeated the process with 7 different heights going from 9 mm to 15 mm and got the following result :
Therefore we see that the focal distance must be around 15mm.
2.1.3. Power VS Speed Table#
To characterize how the power and speed settings of the laser cutter influences the cut result, we will cut a grid of squares where each square will be cut with different power and speed setting. Fortunately, we don't have to design ourselves the grid since Lightburn has a feature that allows one to generate such grids.
We started with carboard.
Tadaa ! We obtain the following result :
This result allows us determine which speed and power we have to use to obtain each result. For example if we want a cut but we want to use the machine with the lowest power possible we have to select 40% power and 10 mm/s speed.
We repeated the experiment with wood.
and obtained the following result :
At this point we realised that we forgot to adjust the focus. Indeed we found that 15mm is the focal length but we have to focus the lens at 15mm from the surface or the middle of the material, not from the work plane. Therefore for the wood plank which is 2mm thick, the wood surface is 2mm away from the focal point.
Fabio repeated the experiment after adjusting the focus :
The day after Michel repeated it with another type of cardboard :
2.1.4. Kerf Test#
The kerf test consists in measuring the width of the cut made by the laser cutter. Indeed when the laser cut something, it removes some matter. To determine this width, we cut a large rectangle containing 9 small ones.
The space corresponds to the width of the removed matter of 10 cuts. We thus have to divide it by 10 to obtain the width of one single cut.
We measured 2.6 mm therefore the kerf is about 0.26mm.
2.1.5. Joint Clearence Test#
We then made a joint clearence test by cutting some comb-like shapes and joining them together. The thing is that each slit of the comb has a different width starting from the thickness of the material and adding some width on one side and substracting on the other.
Then we tested each slits and found out that the best joint was the one where we substracted 0.25 mm to the material thickness. It is quite logical given the kerf value.
2.2. Individual Assignment#
2.2.1. Idea : Spherical Polyhedron#
For the individual assignment I would like to build a close approximation to a sphere using only flat polygons. I looked for the possible ways to do it and found a website that classifies the mathematical possibilities : Polyhedra World. Below is a picture of some examples that can be found on the website.
At this point I realised that a lot of the examples require a too large number of different polygons. For example the third one requires 4 different triangles. To be able to finish my assignment in time, I thought it would be more reasonable to find a way to do a spherical polyhedron with maximum 2 different polygons.
A good way to do this is the typical example of the soccer ball that requires only pentagons and hexagons.
The mathematical name of this volume is Truncated Icosahedron. I checked the Wikipedia page of this shape to determine if it was feasible. It has 32 faces : 12 pentagons and 20 hexagons. It seems doable for this week's assignment.
However, I now have to determine how I would attach these faces one to the other. I looked for laser cut polyhedron and I found an example of a laser cut dodecahedron that uses fasteners with an angle :
It could be a good way to fix my pentagons and hexagons as long as I know the angles between each one of the truncated icosahedron faces. Fortunately the Wikipedia page of the truncated icosahedron contains these informations. The angle between two hewagons is 138.18° and the angle between a pentagon and a hexagon is 142.6°.
2.2.2. Material and joint width#
I will use a quite flexible cardboard to realise the assignment. Indeed I think that it will not be easy to assemble the different pieces together and particularly the last pieces. Therefore if the material is a bit flexible it will be far easier.
The cardboard I chose is 1 mm thick therefore according to the joint clearance test, the slits of the joints must be 0.75 mm large.
2.2.3. CAD#
To design the faces and the fasteners, I used Inkscape and the Python extension that allows one to do parametric designs.
I wrote a code that could generate a grid of regular polygons with a slit on each of its side to fix them together with the fasteners.
The pentagons parameters and the values I chose are :
| Symbol | Description | Value |
|---|---|---|
N |
Polygon's number of side | 5 |
L |
Side Length | 50 [mm] |
l |
Slit Length | 20 [mm] |
w |
Slit Width | 0.75 [mm] |
init |
Grid starting position | (50,50) [mm] |
n |
Gird columns number | 5 |
m |
Grid rows number | 4 |
space |
Space between rows and columns | 105 [mm] |
The code and the vector image generated can be found below.
Pentagon Code
def clear():
for obj in all_shapes():
obj.remove()
clear()
import numpy as np
def grid(init_pos,n,m,space):
coords=np.ones((n,m,2))
for i in range(n):
for j in range(m):
pos_ij = init_pos + np.array([i*space,j*space])
coords[i,j,:]=pos_ij
return coords
def slit_regular_polygon(N,pos,r,l,w):
angles=[i*(2*np.pi/N)+np.pi/2+np.pi/N for i in range(N)]
coords=np.array([pos+np.array([r*np.cos(angles[i]), r*np.sin(angles[i])]) for i in range(N)])
slit_coords=np.array([(coords[i,:]+coords[i-1,:])/2 for i in range(coords.shape[0])])
P=regular_polygon(N,pos,r,stroke='none').to_path()
for i in range(slit_coords.shape[0]):
slit_i=rect((0,0),(l,w),stroke='none')
slit_i.translate([-l/2,-w/2],relocate=True)
slit_i.translate(slit_coords[i],relocate=True)
slit_i.rotate(angles[i]/np.pi*180-180/N)
slit_i=slit_i.to_path()
P=P-slit_i
return P
N=5
L=50
l=20
w=0.75
r=L/(2*np.sin(np.pi/N))
init=np.array([50,50])
n=5
m=4
space=105
pos=grid(init,n,m,space)
Pinit = slit_regular_polygon(N,init,r,l,w)
for i in range(n):
for j in range(m):
if i+j!=0:
Pij = duplicate(Pinit)
Pij.translate(np.array([i*space,j*space]),relocate=True)
The hexagons parameters and the values I chose are :
| Symbol | Description | Value |
|---|---|---|
N |
Polygon's number of side | 6 |
L |
Side Length | 50 [mm] |
l |
Slit Length | 20 [mm] |
w |
Slit Width | 0.75 [mm] |
init |
Grid starting position | (50,50) [mm] |
n |
Gird columns number | 5 |
m |
Grid rows number | 4 |
space |
Space between rows and columns | 105 [mm] |
The code and the vector image generated can be found below.
Hexagon Code
def clear():
for obj in all_shapes():
obj.remove()
clear()
import numpy as np
def grid(init_pos,n,m,space):
coords=np.ones((n,m,2))
for i in range(n):
for j in range(m):
pos_ij = init_pos + np.array([i*space,j*space])
coords[i,j,:]=pos_ij
return coords
def slit_regular_polygon(N,pos,r,l,w):
angles=[i*(2*np.pi/N)+np.pi/N for i in range(N)]
coords=np.array([pos+np.array([r*np.cos(angles[i]), r*np.sin(angles[i])]) for i in range(N)])
slit_coords=np.array([(coords[i,:]+coords[i-1,:])/2 for i in range(coords.shape[0])])
P=regular_polygon(N,pos,r,stroke='none').to_path()
for i in range(slit_coords.shape[0]):
slit_i=rect((0,0),(l,w),stroke='none')
slit_i.translate([-l/2,-w/2],relocate=True)
slit_i.translate(slit_coords[i],relocate=True)
slit_i.rotate(angles[i]/np.pi*180-180/N)
slit_i=slit_i.to_path()
P=P-slit_i
return P
N=6
L=50
l=20
w=0.75
r=L/(2*np.sin(np.pi/N))
init=np.array([50,50])
n=5
m=4
space=105
pos=grid(init,n,m,space)
Pinit = slit_regular_polygon(N,init,r,l,w)
for i in range(n):
for j in range(m):
if i+j!=0:
Pij = duplicate(Pinit)
Pij.translate(np.array([i*space,j*space]),relocate=True)
Inkscape Python boolean operations are slow !
When using the Inkscape Python scripting extension, the boolean operations on paths (union, difference, etc.) are very slow. Therefore I wrote a code that only generates a polygon with slits once using the boolean operations and then make copies with the duplicate() function.
The fastener parameters and the values I chose are :
| Symbol | Description | Value |
|---|---|---|
L |
Fastener Length | 20 [mm] |
H |
Fastener Height | 5 [mm] |
l |
Slit Length | 10 [mm] |
w |
Slit Width | 0.75 [mm] |
th |
Fastener Angle | 138.18° and 142.6° |
The code and the vector image generated can be found below.
Fastener Code
def clear():
for obj in all_shapes():
obj.remove()
clear()
import numpy as np
def grid(init_pos,n,m,space):
coords=np.ones((n,m,2))
for i in range(n):
for j in range(m):
pos_ij = init_pos + np.array([i*space,j*space])
coords[i,j,:]=pos_ij
return coords
def attach(pos,L,l,H,w,th):
a=rect((0,0),(H,L)).translate(pos,relocate=True).to_path()
slit=rect((0,0),(w,l)).translate(pos+np.array([H/2-w/2,0]),relocate=True).to_path()
a=a-slit
b=duplicate(a).translate(np.array([0,L]),relocate=True).rotate(180).rotate(th-180,anchor='n')
c=circle(pos+np.array([H/2,L]),H/2).to_path()
a+b+c
init=np.array([10,10])
n=1
m=1
space=20
L=20
l=10
H=5
w=0.75
th=138.18
pos = grid(init,n,m,space)
for i in range(n):
for j in range(m):
attach(pos[i,j,:],L,l,H,w,th)
Info
Note that I did not generate a grid with the Python script for the fasteners because I realised it was simpler to generate one using the script and to make a grid using Inkscape interface.
2.2.3. Realisation#
Cutting Parameters#
The cutting parameters I will use for the whole assignments are the following :
| Parameter | Value |
|---|---|
| Power | 60% |
| Speed | 30 mm/s |
| Focus | 15 mm |
I chose the power and speed according to the table wa made with the concerned material in order to use the less power as possible. The focus was chosen to be the closest to the focal distance.
Faces Cutting#
I started cutting one pentagon to verify if there was no problem with the design.
I verified if the slit width was good :
and it was perfect ! Therefore I printed all the pentagons I needed (and few more just in case) :
and the hexagons :
Fastener Cutting#
I then cutted a fastener :
and after verifying it was correctly attaching I printed all of the fasteners of 142° I needed. These are the ones which are supposed to join the pentagons to the hexagons. Therefore, before cutting the 138° ones I attached all of the 142° to the pentagons (so I would not mix them up) :
Then I could cut the 138° fastener and start the building.
Building process and final result#
Below are pictures of the progress.
and the final result :
2.2.4. Vinyl Cutting#
Since my laser cutting assignment took a lot of time, I did not have time to think of a design of a sticker for the vinyl cutting part. Therefore I simply used a hexagon design of the latter assignment :
Here is the vinyl machine we used :
And here is the result stick on my laptop :