
This spare part for our Siemens or Bosch range hood was in fact one of my first OpenSCAD designs. And once it was fitted, my wife made her peace with my purchase! ;)
That's exactly where the real value lies: measuring a broken part that's no longer available, modelling it and printing it — instead of throwing out the whole appliance. The code only fits this particular hood; what carries over, though, are the techniques showing through here.
What you can learn from it
- Highlighting in the preview:
#cylinder(7, d1=41.5, d2=25);— the leading#makes a part stand out in the preview window. Handy, while you're fiddling, to see which element you actually have in front of you. - Cylinder into cone: with
d1(bottom) andd2(top) the cylinder becomes a truncated cone — here the "wheel" it's named after. - Variants via a switch:
verstaerkungAchse = true;("reinforcement axle") enables a reinforcement over the original through anif. That keeps an improvement optional and comparable, without chopping up the code.
And yes — if I were designing the part again today, it would use named variables instead of fixed numbers. That's part of it too: early designs are allowed to be pragmatic; what matters is that the part fits.
verstaerkungAchse = true;
$fn=40;
cube([20,29.3, 2]);
translate([(20/2) - (10/2), 29.3,0])
cube([10,7, 2]);
translate([-2/2, 29.3 + 7-2/2 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 3-2/2 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
/* fill attempt */
if (verstaerkungAchse) {
translate([-2/2, 29.3 + 3-1/2 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 3 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 3+1/2 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 4 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 4.5 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 5 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
translate([-2/2, 29.3 + 5.5 , 2/2])
rotate([0,90,0])
cylinder(6.2*2+10, d=2);
}
/* --- */
translate([0, 0, -8])
rotate([0, 0, 0])
cube([20,3, 8]);
translate([0,6.2,0])
rotate([0,90,0])
cylinder(6.2*2+10-2, d=2);
difference() {
translate([20/2-1/2-1,29.3 + 1 , 2/2])
rotate([0,90,0])
cylinder(2, d=10);
translate([(20/2) - (10/2), 29.3 -5,-20])
cube([15,15, 20]);
}
// "wheel"
difference() {
union() {
translate([20/2-7/2, 2.5/2-41.5/2, 0])
rotate([0, 90, 0])
#cylinder(7, d1=41.5, d2=25);
translate([20/2-7/2, -30 -20, 41.5/2 -2])
cube([7,30,2]);
translate([20/2-7/2, -20, 41.5/2 - 8.1])
cube([7,2, 8.1]);
translate([7, -7, 0])
cube([13, 7, 2]);
}
translate([20/2-7/2 - 0.1, 2.5/2-41.5/2, 0])
rotate([0, 90, 0])
cylinder(7.2, d1=41.5-2*2, d2=25-2*2);
};
And this is what the printed part looks like:



