OpenSCAD render of the range-hood spare part with a wheel and axle

Spare part for the range hood

One of my first OpenSCAD designs: a spare part for our range hood — the part that finally reconciled my wife with the 3D printer. With a preview highlight and an optional reinforcement axle.

Article complete (.zip)

“Article complete” gives you the OpenSCAD source as ready .scad files plus a printable copy — a CARECOM.united member benefit. Membership is free and non-binding. About membership →

OpenSCAD render of the spare part

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) and d2 (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 an if. 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:

The printed spare part

An unhandled error has occurred. Reload 🗙

Rejoining the server…

Rejoin failed… trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.