← Home

Easel 10cm

A print-in-place tripod easel for displaying small canvases, photos, or cards. Optimized for Ender 3 v2 with 0.4mm hinge clearances.

Download

easel_10cm.stl

10cm tall · 0.4mm clearances · no supports needed

OpenSCAD Source

Render the STL yourself with OpenSCAD to customize dimensions or fit your printer. Save the source as easel_10cm.scad and press F5 (Preview) or F6 (Render).

// 10cm Print-in-Place Easel
// Optimized for Ender 3 v2 (0.4mm nozzle, 0.2mm layer height)
//
// Instructions:
//   1. Slice with 0.2mm layer height, 0.4mm nozzle, no supports.
//   2. Print flat on the build plate (the largest face down).
//   3. After printing, gently work the hinges back and forth to
//      break them free. The 0.4mm gap turns into a working joint.
//   4. Fold the legs out and stand the easel up.

/* [Dimensions] */
TOTAL_H  = 100;        // total height (mm)
MAT_W    = 4;          // thickness of the legs (perpendicular to hinge axis)
MAT_T    = 3;          // width of the legs (in the hinge plane)
CLR      = 0.4;        // print-in-place hinge clearance
LEG_QTY  = 3;          // tripod
LEG_SPREAD = 12;       // degrees each front leg splays from center
SHELF_DEPTH = 14;      // how far the canvas tray sticks out
SHELF_W     = 44;      // width of the tray
SHELF_T     = 2.4;     // thickness of the tray floor
HINGE_R     = 2;       // hinge pin radius
HINGE_L     = 6;       // hinge knuckle length
TAB_H       = 6;       // top connecting block height

/* [Hidden] */
$fn = 28;

module rounded_square(w, h, r) {
    offset(r = r) square([w - 2*r, h - 2*r], center = true);
}

module leg_profile() {
    rounded_square(MAT_W, MAT_T, 0.6);
}

module leg(length = TOTAL_H - TAB_H) {
    linear_extrude(height = length, center = false, convexity = 4)
        leg_profile();
}

module top_block() {
    h = TAB_H;
    w = MAT_W * 2 + HINGE_L;
    d = MAT_T * 3 + HINGE_L;
    translate([0, 0, TOTAL_H - h/2])
        cube([w, d, h], center = true);
    translate([0, 0, TOTAL_H - h])
    linear_extrude(height = 1.2, convexity = 4)
        offset(r = 1.2) square([w - 2.4, d - 2.4], center = true);
}

module back_leg() {
    dx = MAT_W/2 + HINGE_L/2;
    translate([0, 0, (TOTAL_H - TAB_H)/2])
        leg(length = TOTAL_H - TAB_H);
    for (side = [-1, 1]) {
        translate([side * dx, 0, 0]) {
            translate([0, -MAT_T/2 - CLR/2, TOTAL_H - TAB_H - HINGE_L/2])
                cube([MAT_W, MAT_T, HINGE_L], center = true);
            translate([0, -MAT_T/2 - CLR - HINGE_R, TOTAL_H - TAB_H - HINGE_L/2])
                cylinder(h = HINGE_L, r = HINGE_R);
        }
    }
}

module front_leg(side) {
    spread = LEG_SPREAD;
    dx = MAT_W/2 + HINGE_L/2;
    len = TOTAL_H - TAB_H - 8;
    translate([side * dx, 0, 0]) {
        translate([0, CLR/2, TOTAL_H - TAB_H - HINGE_L/2])
        rotate([0, 0, side * spread]) {
            difference() {
                translate([0, MAT_T/2 + CLR + HINGE_R, 0])
                    rotate([90, 0, 0])
                        cylinder(h = HINGE_L, r = HINGE_R + MAT_W/2, center = true);
                translate([0, MAT_T/2 + CLR + HINGE_R, 0])
                    rotate([90, 0, 0])
                        cylinder(h = HINGE_L + 1, r = HINGE_R + CLR/2, center = true);
            }
            translate([0, MAT_T/2 + CLR + HINGE_R * 2, 0])
            rotate([90, 0, 0])
            rotate([0, 0, 90])
            linear_extrude(height = len, center = false, convexity = 4)
                rounded_square(MAT_W, MAT_T, 0.6);
        }
    }
}

module shelf() {
    z = 18;
    overhang = 4;
    translate([0, MAT_T/2 + overhang/2, z])
        cube([SHELF_W, SHELF_DEPTH, SHELF_T], center = true);
    translate([0, MAT_T/2 + overhang + SHELF_DEPTH/2, z + SHELF_T/2 + 1.5])
        cube([SHELF_W - 2, 1.5, 3], center = true);
    for (s = [-1, 1]) {
        translate([s * (SHELF_W/2 - 0.75), MAT_T/2 + overhang + SHELF_DEPTH/4, z + SHELF_T/2 + 1])
            cube([1.5, SHELF_DEPTH/2, 2.5], center = true);
    }
    for (s = [-1, 1]) {
        hull() {
            translate([s * SHELF_W/4, MAT_T/2, z])
                cube([2, 1.5, SHELF_T], center = true);
            translate([s * SHELF_W/4, MAT_T/2, z - 4])
                cube([2, 1.5, 1], center = true);
        }
    }
}

top_block();
back_leg();
front_leg(-1);
front_leg(1);
shelf();

Print Settings

Nozzle0.4mmLayer height0.2mmSupportsNoneOrientationPrint flat - back of easel on the build plateMaterialPLA or PETGPost-processingFlex hinges back and forth to break them free