pre-bemis

This commit is contained in:
Marcelo
2026-04-22 05:04:19 +00:00
parent ac1a7900c8
commit 80d27f83b6
91 changed files with 11769 additions and 820 deletions

View File

@@ -0,0 +1,95 @@
// Adjustable Phone/Tablet Stand
// Parametric stand with customizable angle and size
// === Device Parameters ===
device_width = 80; // [50:200] Device width in mm
device_thickness = 12; // [6:20] Device thickness (with case)
// === Stand Parameters ===
stand_angle = 65; // [45:85] Viewing angle in degrees
stand_depth = 80; // [50:150] Base depth in mm
stand_height = 100; // [60:200] Back support height in mm
// === Construction ===
material_thickness = 4; // [2:0.5:8] Material thickness
slot_depth = 15; // [10:30] How deep device sits in slot
// === Features ===
cable_hole = true; // Add cable pass-through hole
cable_diameter = 15; // [8:25] Cable hole diameter
add_feet = true; // Add anti-slip feet
// === Quality ===
$fn = 48;
module stand_profile() {
// 2D profile of the stand side
polygon([
[0, 0], // Front bottom
[stand_depth, 0], // Back bottom
[stand_depth, material_thickness], // Back bottom inner
[stand_depth - material_thickness, material_thickness], // Base top back
[slot_depth + material_thickness, material_thickness], // Base top front (behind slot)
[slot_depth + material_thickness, slot_depth * tan(90 - stand_angle) + material_thickness], // Slot back
[material_thickness, slot_depth * tan(90 - stand_angle) + material_thickness + device_thickness / sin(stand_angle)], // Slot front top
[0, slot_depth * tan(90 - stand_angle) + material_thickness], // Front face bottom of slot
[0, 0] // Close
]);
}
module back_support() {
// Back angled support
translate([stand_depth - material_thickness, 0, material_thickness]) {
rotate([0, -90 + stand_angle, 0]) {
cube([stand_height, device_width, material_thickness]);
}
}
}
module cable_cutout() {
if (cable_hole) {
translate([stand_depth/2, device_width/2, -1])
cylinder(h = material_thickness + 2, d = cable_diameter);
}
}
module foot() {
cylinder(h = 2, d1 = 10, d2 = 8);
}
module stand() {
difference() {
union() {
// Left side
linear_extrude(material_thickness)
stand_profile();
// Right side
translate([0, device_width - material_thickness, 0])
linear_extrude(material_thickness)
stand_profile();
// Base plate
cube([stand_depth, device_width, material_thickness]);
// Front lip
cube([material_thickness, device_width, slot_depth * tan(90 - stand_angle) + material_thickness]);
// Back support
back_support();
}
// Cable hole
cable_cutout();
}
// Feet
if (add_feet) {
translate([10, 10, 0]) foot();
translate([10, device_width - 10, 0]) foot();
translate([stand_depth - 10, 10, 0]) foot();
translate([stand_depth - 10, device_width - 10, 0]) foot();
}
}
stand();