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.stlOpenSCAD 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