Designing the squeezer
So far you have collected the pieces but not assembled them. You have a brief that says what the part must do (Chapter 11). You have a mechanism, the ridged reamer cone sitting in a strainer bowl, and you understand why it works (Chapter 12). You know the rules that keep a printed part printable (Chapter 9) and the rules that keep a juice-contact part as food-safe as plastic gets (Chapter 14).
This chapter is where those four things turn into actual millimeters. By the end you will have a set of real numbers, a clear picture of every feature and the reason it exists, and two ways to build the model so you can pick whichever tool you are comfortable with. Then you export an STL and print it.
The overall form
Picture a small bowl. Rising straight out of the middle of its floor is a cone with ridges running down its sides, like a stubby gear tooth turned point-up. That cone is the reamer, the thing you press and twist a cut lemon half onto. The floor of the bowl is not flat and smooth: it has a low strainer across it (think small fins or a grid of holes) that lets juice run through but catches seeds and big bits of pulp on top. The rim of the bowl has one notch cut into it, a little spout, so you can aim the juice into a glass. The rim itself is rounded and a touch thick so your fingers have something to hold.
Here is a cross-section, as if you sliced the whole thing in half down the middle and looked at the cut face:
cut lemon half presses down here
│
▼
╱ ╲ reamer cone (ridged)
╱ ╲
╱ ╲
rim ┐ │ │ ┌ rim (spout notch on one side)
────┤ ╱│ │╲ ├────
bowl│ ╱ │ │ ╲ │bowl
wall│╱ └───┬───┘ ╲│wall
╲ strainer floor ╱
╲________________╱
(juice pools here, pours out the spout)
The reamer rises from the floor. The juice tears loose at the cone, runs down past the ridges, drips through the strainer, pools in the bottom of the bowl, and leaves by the spout. Everything in the design serves that one path.
Size it from the lemon
Here is the idea that makes the whole design easy: you do not invent a single dimension out of thin air. You measure one thing, a real lemon, and every other number follows from it by a fixed ratio. Measure across the fattest part of a lemon with calipers if you have them, or just stand it next to a ruler. A medium lemon is around 62 mm across. Yours might be 58 or 68; use your own number.
Why drive everything from the lemon? Because a squeezer that fits your fruit juices well, and one that does not fit fights you. If the reamer is too wide, the peel splits before the flesh gives up its juice. If the bowl is too narrow, the lemon half will not seat on the rim. Tie the design to the fruit and it just works.
The ratios this design uses:
| Dimension | Rule | Why |
|---|---|---|
| Reamer base diameter | about 70% of the lemon diameter | narrow enough that the flesh folds around the cone instead of the peel splitting at once |
| Reamer height | about 80% of the lemon's radius | tall enough to reach the core, short enough to leave the peel intact |
| Bowl inner diameter | lemon diameter plus about 6 mm | the lemon half seats on the rim with a small lip to spare |
| Wall thickness | about 2.4 mm | six printed lines at a 0.4 mm nozzle, which is strong and watertight (see Chapter 9) |
That wall number is worth a second look. At a common 0.4 mm nozzle, the slicer lays down plastic in lines roughly 0.4 mm wide. Six of those side by side give 2.4 mm. Asking for a wall that is a whole number of line widths means the slicer fills it solidly with no thin gap left over, which is exactly what you want for a bowl that has to hold liquid without weeping through the wall.
A small helper to do the arithmetic
You could work these ratios out with a calculator, but it is easy to fat-finger a number, and you will want to redo the whole set every time you measure a different lemon. So here is a short Python script that takes the lemon diameter and prints every dimension, plus an estimate of how much juice you can expect. It depends only on numpy.
"""Work out the key dimensions of the portable lemon squeezer.
The squeezer has three working parts:
1. a REAMER, a ridged cone you press into a cut lemon half to tear the pulp,
2. a BOWL that catches the juice while holding back pulp and seeds, and
3. a SPOUT to pour the juice out.
A lemon half is roughly a hemisphere. To juice it well, the reamer cone should be a
bit shorter and narrower than that hemisphere so the lemon's flesh wraps around it.
This script sizes the parts from one measured number: the diameter of a typical
lemon. Everything else follows, so when your lemons are bigger or smaller you just
change one value and reprint.
Only depends on numpy. Run with: python3 squeezer_geometry.py
"""
import numpy as np
def cone_volume_cm3(base_diameter_mm, height_mm):
"""Volume of a cone (the reamer), in cm^3. V = (1/3) * pi * r^2 * h."""
r_cm = (base_diameter_mm / 10.0) / 2.0
h_cm = height_mm / 10.0
return (1.0 / 3.0) * np.pi * r_cm ** 2 * h_cm
def hemisphere_volume_cm3(diameter_mm):
"""Volume of a hemisphere (a lemon half), in cm^3. V = (2/3) * pi * r^3."""
r_cm = (diameter_mm / 10.0) / 2.0
return (2.0 / 3.0) * np.pi * r_cm ** 3
def design_squeezer(lemon_diameter_mm=62.0, juice_fraction=0.35):
"""Derive squeezer dimensions from a lemon's diameter.
juice_fraction: share of a lemon half's volume you can realistically extract
as juice (the rest is peel, pith, pulp, and what stays behind). 0.35 is a
sane, slightly conservative real-world figure.
"""
# Reamer: 70% of the lemon's width at the base, 80% as tall as the lemon's
# radius. These ratios let the flesh fold around the cone without splitting
# the peel immediately.
reamer_base = 0.70 * lemon_diameter_mm
reamer_height = 0.80 * (lemon_diameter_mm / 2.0)
# Bowl: wide enough to seat the lemon half on its rim, with a small lip.
bowl_inner_diameter = lemon_diameter_mm + 6.0
bowl_wall = 2.4 # mm, prints strong at 0.4 mm nozzle
bowl_outer_diameter = bowl_inner_diameter + 2 * bowl_wall
half = hemisphere_volume_cm3(lemon_diameter_mm)
reamer = cone_volume_cm3(reamer_base, reamer_height)
juice_per_half = half * juice_fraction
print("=== Portable lemon squeezer dimensions ===\n")
print(f"Input: lemon diameter = {lemon_diameter_mm:.0f} mm")
print(f" juice fraction = {juice_fraction:.0%} of a half\n")
print("Reamer (the juicing cone):")
print(f" base diameter = {reamer_base:.1f} mm")
print(f" height = {reamer_height:.1f} mm")
print(f" solid cone volume = {reamer:.1f} cm^3\n")
print("Bowl (catches the juice):")
print(f" inner diameter = {bowl_inner_diameter:.1f} mm")
print(f" wall thickness = {bowl_wall:.1f} mm (= 6 lines at 0.4 mm)")
print(f" outer diameter = {bowl_outer_diameter:.1f} mm\n")
print("Juice you can expect:")
print(f" one lemon half (hemisphere)= {half:.1f} cm^3 of fruit")
print(f" realistic juice per half = {juice_per_half:.1f} ml")
print(f" whole lemon (two halves) = {2 * juice_per_half:.1f} ml")
if __name__ == "__main__":
# Default: a medium lemon, about 62 mm across.
design_squeezer()
print("\n--- A big lemon (75 mm) just by changing one number ---\n")
design_squeezer(lemon_diameter_mm=75.0)
Running it prints this:
=== Portable lemon squeezer dimensions ===
Input: lemon diameter = 62 mm
juice fraction = 35% of a half
Reamer (the juicing cone):
base diameter = 43.4 mm
height = 24.8 mm
solid cone volume = 12.2 cm^3
Bowl (catches the juice):
inner diameter = 68.0 mm
wall thickness = 2.4 mm (= 6 lines at 0.4 mm)
outer diameter = 72.8 mm
Juice you can expect:
one lemon half (hemisphere)= 62.4 cm^3 of fruit
realistic juice per half = 21.8 ml
whole lemon (two halves) = 43.7 ml
--- A big lemon (75 mm) just by changing one number ---
=== Portable lemon squeezer dimensions ===
Input: lemon diameter = 75 mm
juice fraction = 35% of a half
Reamer (the juicing cone):
base diameter = 52.5 mm
height = 30.0 mm
solid cone volume = 21.6 cm^3
Bowl (catches the juice):
inner diameter = 81.0 mm
wall thickness = 2.4 mm (= 6 lines at 0.4 mm)
outer diameter = 85.8 mm
Juice you can expect:
one lemon half (hemisphere)= 110.4 cm^3 of fruit
realistic juice per half = 38.7 ml
whole lemon (two halves) = 77.3 ml
Read the first block. A medium 62 mm lemon gives a reamer about 43 mm across at the base and about 25 mm tall, sitting in a bowl about 68 mm across on the inside and roughly 73 mm on the outside. The juice estimate says one half holds about 62 cm³ of fruit, and at a slightly conservative 35% you should get close to 22 ml of juice per half, so a bit over 40 ml from a whole lemon. That is a realistic figure, not a wish. Real fruit varies and you will never wring out every drop, which is why the script uses a fraction rather than pretending you collect all of it.
Now look at the second block. The only thing that changed was the lemon diameter, from 62 to 75 mm, and every single number moved with it: a wider, taller reamer in a bigger bowl, and proportionally more juice. That is the payoff of designing from ratios. When your local lemons are giants, you change one value and reprint, with no redesign.
Don't be confused. The "solid cone volume" (12.2 cm³ for the medium lemon) and the "juice per half" (21.8 ml) are completely different things, and it is easy to read one as the other. The cone volume is how much plastic a fully solid reamer would contain, a fact about the part you are printing. The juice volume is how much liquid you get out of the fruit, a fact about the lemon. They are not related, they just sit next to each other in the output. (In practice you will not even print the reamer solid; the slicer fills it with light infill, so it uses far less plastic than that 12.2 cm³ anyway.)
Feature decisions, one reason each
The numbers fix the size. These decisions fix the shape.
The reamer ridges. A smooth cone would just slide against the lemon flesh and slip. Ridges are what tear the pulp open so the juice runs out, the same reason a kitchen reamer has them (see Chapter 12). Use about 8 ridges spaced evenly around the cone. Make each one a rounded vertical bump or a soft triangular fin, tallest near the base and fading out toward the tip. Round, not sharp: a sharp edge tears the peel and is harder to clean, and a rounded ridge still grips the soft flesh fine. Eight is a comfortable number, enough to bite all the way around as you twist, not so many that they crowd together and lose their edges.
The strainer. Across the bowl floor, around the foot of the reamer, you want low fins or a ring of holes that let juice through but stop seeds. A lemon seed is several millimeters long, so a gap of about 1.6 mm passes juice freely while a seed sits on top. Keep the strainer low, just a few millimeters tall, so it catches debris without blocking the juice from reaching the spout. If you use holes, 1.6 mm is also a sensible diameter; if you use fins, 1.6 mm is the gap between them.
The pour spout. Cut one shallow notch into the rim and pull it out slightly into a small lip. That is all a spout is: the low point where juice leaves, with a bit of channel to aim it. Without it the juice dribbles over a random part of the rim and down the outside. With it, you tip toward the spout and the stream goes where you point it.
Portability features. The brief asked for something you can toss in a bag (Chapter 11). Three things help. Keep the footprint small, which the lemon-driven sizing already does. Round the entire outside so there are no sharp corners to snag a bag lining or jab through it. And as options you might add a snap-on lid that doubles as a drip cover, or design a second piece that nests inside the bowl for storage. Treat those last two as nice-to-haves; the single open bowl is the thing to print first.
Print orientation and the food surface. Print the bowl open-side up, sitting on its base, exactly the way it is used. Two reasons. First, the surfaces a top-up print leaves smoothest are the top-facing ones, and those are precisely the juice-contact surfaces (the inside of the bowl, the reamer, the strainer). Smoother surfaces have fewer crevices for residue and bacteria to hide in, which matters for anything that touches food (see Chapter 9 and Chapter 14). Second, open-side up means the gentle slopes of the bowl and cone hold themselves up as they print, so you need little or no support inside the bowl. And keep the whole thing a single piece if you possibly can. Every seam between two parts is a crevice that traps pulp and is a pain to clean.
Tolerances, if you go multi-part. If you do add a lid or a nesting insert, the two parts have to fit without being either loose or impossible to press together. Plastic prints a hair larger than the model, so leave a clearance of about 0.2 to 0.4 mm between any mating surfaces. Snug at 0.2, easier and more forgiving at 0.4. For the single-piece bowl you can ignore this entirely; there is nothing to mate.
Two ways to build the model
You have two clear paths to an actual 3D model. Pick the one that suits you.
Path A, by hand in Tinkercad (Chapter 8). You build the squeezer by combining simple shapes:
- The bowl is a big cylinder (outer diameter from the script, 72.8 mm for the medium lemon) with a slightly smaller cylinder dropped inside it as a "hole" and subtracted, which hollows it out and leaves the wall.
- The reamer is a cone, which Tinkercad makes as a cylinder you taper to a point, standing on the bowl floor. Set its base diameter and height from the script (43.4 mm and 24.8 mm).
- The ridges are thin rounded shapes arrayed evenly around the cone, eight of them, merged into it.
- The strainer is a row of small holes or thin fins subtracted from or added to the floor.
- The spout is a small wedge subtracted from the rim to leave a notch.
It is hands-on and you see the part grow. The cost is that changing the lemon size means nudging several shapes by hand again.
Path B, parametric in OpenSCAD (Chapter 10). The book ships a parametric model, lemon_squeezer.scad, that already encodes every ratio above. You open it, set one variable (the lemon diameter), and the whole part regenerates: bowl, reamer, ridges, strainer, spout, correctly sized. This is the same "change one number" idea as the Python helper, but it produces the actual geometry you print rather than just the dimensions. If you measured a 70 mm lemon, you type 70 and you are done.
Both paths end at the same place: a model on screen that matches the numbers you computed.
Takeaways
- The whole squeezer is a bowl with a ridged reamer cone, a low strainer floor, a pour spout, and a grippable rim. One slice of the cross-section shows how juice tears loose, drips through the strainer, pools, and pours out.
- Drive every dimension from one measured number, the lemon's diameter. Reamer base about 70% of it, reamer height about 80% of the radius, bowl inner diameter the lemon plus 6 mm, walls 2.4 mm (six lines at 0.4 mm).
- The
squeezer_geometry.pyhelper turns that one number into all the dimensions and a realistic juice estimate (about 22 ml per half from a 62 mm lemon). Change the diameter and everything resizes. - Each feature has a reason: about 8 rounded ridges to tear pulp, roughly 1.6 mm strainer gaps to pass juice but stop seeds, a notched spout to aim the pour, a rounded small body for the bag.
- Print open-side up so the juice surfaces are the smooth top-facing ones, keep it one piece to avoid crevices, and leave 0.2 to 0.4 mm clearance only if you add mating parts.
- Build it either by combining primitives in Tinkercad or by setting the lemon diameter in the parametric OpenSCAD model. Both end in an STL ready to print.
Your model is sized, shaped, and exported. Before you turn it into a thing you squeeze food onto, you need to be honest about what "food-safe" really means for a printed part, which materials and finishes get you there, and where the real limits are.
👉 Next: Food safety and printed parts.