$fn = 100; module floor() { translate([0, 0, -10]) cube([250, 250, 10]); } module stand() { translate([100, 180, 0]) cube([80, 30, 120]); translate([100, 40, 0]) cube([80, 30, 120]); translate([140, 40, 120]) cube([40, 30, 40]); } module rotation_motor() { translate([100, 150, 40]) cube([40, 30, 40]); } module linear_motor() { translate([140, 180, 120]) cube([40, 30, 40]); } module tape() { translate([120, 145, 60]) { rotate([90, 0, 0]) { difference() { cylinder(30, 50, 50); cylinder(30, 40, 40); } } } } module linear_shafts() { translate([160, 180, 140]) rotate([90, 0, 0]) cylinder(110, 3.5, 3.5); translate([170, 180, 110]) rotate([90, 0, 0]) cylinder(110, 3.5, 3.5); } module sled(width = 20) { translate([150, 130, 100]) { difference() { cube([30, width, 50]); union() { translate([-30, width, -40]) rotate([90, 0, 0]) cylinder(width, 60, 60); translate([10, width, 40]) rotate([90, 0, 0]) cylinder(width, 4, 4); translate([20, width, 10]) rotate([90, 0, 0]) cylinder(width, 4, 4); } } } } color([0,0,0]) floor(); stand(); sled(); color([0,1,0]) { rotation_motor(); linear_motor(); linear_shafts(); tape(); }