**If you like my project please vote for it in the 3D printing Contest! **(top right corner of this page) **Thanks!**

With some coffee ground, I observe some difficulties finding the balance when packing the coffee powder into the portafilter:

When it's to packed, the machine clog, ... if it's not enough packed you get a "sock juice"!

The solution : control the packing pressure !

That's how I decide to design and print a Dynamometric coffee Tamper

## Step 1: Design

I design the tamper using OpenSCAD, a very precise and convenient CAD to design pieces to be printed.

Ok, it done with command lines ...but don't be afraid, as it's said in some tutorials it's very addictive! .. at a point you you will become a real nerd before you finish your 1st part! ;)

The pressure is controlled with a spring located in the axis and is measured with the length of the axis.

When pressing on the tamper, the spring collapse and the axis slide into the other, so the length reduces.

The axis can be graduated to increase precision (not done on here).

More you press, more the axis length is reduced, and more your coffee powder will be packed!

The coil I have placed in allow me to apply a weight from 0 to approx 4kg.

## Step 2: Description and Code!

The tamper is composed of 5 parts ... 4 of them are printable!

You can see the detail of the parts in the illustrations.

The washer will block the upper axis into the lower axes.

The upper axis is glued on the upper disk.

The washer must be glued on the lower axis (after having inserted the spring!)

Here is the code to generate the tamper in openSCAD:

start of code -->

res=50;

//pressing disk ************************

union() {

translate([0,0,2]) difference() {

cylinder (h=40, r=7, $fn=res); //tube

translate([0,0,3]) cylinder (h=38, r=4, $fn=res); //spring hole

}

minkowski(){

sphere (r=1);

cylinder(h=2,d=56, $fn=res);

}

}

// Handel **********************

translate([0,0,25])union() {

translate([0,0,40])cylinder (h=38, r=3, $fn=res); //axis

translate([0,0,35])cylinder (h=5, r=4,$fn=res ); //block

}

// handel disk

translate([0,0,110])difference(){

minkowski(){

sphere (r=1);

cylinder(h=2,d=56, $fn=res);

}

translate([0,0,-1])cylinder (h=2, r=3, $fn=res);

}

// washer**********************

translate([0,0,50]) difference() {

cylinder (h=2, r=7, $fn=res ); //disk

translate([0,0,0]) cylinder (h=3, r=3, $fn=res); //hole

}

<-- end of code

## Step 3: Printing

I unfortunately don't have (yet!) a printer at home, so I use the services of 3dhub to print my parts !

Nice service, easy and reliable!

3 days after sending my file to the nearest hub, I receive my dynamometric Tamper!

## Step 4: Post Scriptum

After some trials, I imagined some improvements for the Dynamometric coffee Tamper (see attached image):

1) To make it stronger, I would increase the size of the axes and avoid right corner by sloping some parts

2) Pushing 4 kg on the coffee powder may not be enough, so I would place a stronger spring to go up 30kg (that seems to be a commonly used value)

... so thanks for your support by making some comment or voting (top right corner)

here is the code for it:

res=50;

//tasseur ************************

union() {

translate([0,0,2]) difference() {

cylinder (h=40, r=10, $fn=res); //tube

translate([0,0,3]) cylinder (h=40, r=6, $fn=res); //percée resort

}

hull(){

translate([0,0,15]) difference() {

cylinder (h=2, r=10, $fn=res );

translate([0,0,-1]) cylinder (h=4, r=5, $fn=res);

}

minkowski(){

sphere (r=1);

cylinder(h=2,d=56, $fn=res);

}

}

}

// Manche **********************

union() {

translate([0,0,40])cylinder (h=38, r=5, $fn=res); //tige

translate([0,0,35])cylinder (h=5, r=6,$fn=res ); //blocage

}

// presse

translate([0,0,77])union() {

difference(){

hull(){

translate([0,0,-10]) cylinder (h=1, r=5, $fn=res);

minkowski(){

sphere (r=1);

cylinder(h=2,d=56, $fn=res);

}

}

translate([0,0,-12])cylinder (h=10, r=5, $fn=res);

}

}

// rondelle **********************

translate([0,0,42]) difference() {

cylinder (h=2, r=10, $fn=res ); //rondelle

translate([0,0,-1]) cylinder (h=4, r=5, $fn=res); //percée

}