Necesitaba un inserto para el yeso laminado para mi altavoz Polk. La IA creó un archivo OpenSCAD:
$fn = 64;
IN_TO_MM = 25.4;
// 1 = Mitad izquierda (Pines)
// 2 = Mitad derecha (Agujeros)
// 3 = Ambos (Solo visualización)
PARTE = 1;
// --- UBICACIÓN Z DEL PIN ÚNICO ---
// 0 es la cara tocando el drywall. 12.7 es el centro del marco de 1".
PIN_Z_POS = 12.7;
// --- Ajustes de Pines ---
PIN_RADIUS = 4; // diámetro de 8 mm.
PIN_HEIGHT = 8; // 8 mm de largo
PIN_TOLERANCE = 0.25; // Espacio extra para el agujero.
// --- Dimensiones ---
INNER_X = 12.75 * IN_TO_MM;
INNER_Y = 8.75 * IN_TO_MM;
FRAME_WALL = 1.00 * IN_TO_MM;
CONTACT_THICK = 0.50 * DE_INCH_A_MM;
REINFORCE_THICK = 0.50 * IN_TO_MM;
TOTAL_THICK = CONTACT_THICK + REINFORCE_THICK;
OUTER_CLEARANCE = 0.03 * IN_TO_MM;
REINFORCE_INSET = 0.25 * IN_TO_MM;
OUTER_X = (12.75 + 2*1.00)IN_TO_MM - (2OUTER_CLEARANCE);
OUTER_Y = (8.75 + 2*1.00)IN_TO_MM - (2OUTER_CLEARANCE);
REINF_OX = OUTER_X - (2 * REINFORCE_INSET);
REINF_OY = OUTER_Y - (2 * REINFORCE_INSET);
Módulo de anillo rectangular (ox, oy, ix, iy, h) {
difference() {
cube([ox, oy, h], centro=falso);
translate([(ox-ix)/2, (oy-iy)/2, -0.1])
cube([ix, iy, h+0.2], centro=false);
}
}
Módulo full_model() {
union() {
Anillo rectangular (OUTER_X, OUTER_Y, INNER_X, INNER_Y, CONTACT_THICK);
translate([(OUTER_X-REINF_OX)/2, (OUTER_Y-REINF_OY)/2, CONTACT_THICK])
Anillo rectangular (REINF_OX, REINF_OY, INNER_X, INNER_Y, REINFORCE_THICK);
}
}
Módulo pin_geometry(extra=0) {
// Cilindro cónico para una fácil inserción.
rotate([0, 90, 0])
Cilindro (r1=PIN_RADIUS+extra, r2=(PIN_RADIUS*0.8)+extra, h=PIN_HEIGHT);
}
// ===== ASAMBLEA =====
SPLIT_X = OUTER_X / 2;
PIN_Y_TOP = OUTER_Y - (FRAME_WALL / 2);
PIN_Y_BOT = FRAME_WALL / 2;
si (PARTE == 1 || PARTE == 3) {
union() {
intersección() {
full_model();
cube([SPLIT_X, OUTER_Y, TOTAL_THICK]);
}
// Pines añadidos a la cara cortada (SPLIT_X)
translate([SPLIT_X, PIN_Y_TOP, PIN_Z_POS]) pin_geometry(0);
translate([SPLIT_X, PIN_Y_BOT, PIN_Z_POS]) pin_geometry(0);
}
}
// --- PARTE 2: LADO DERECHO ---
si (PARTE == 2 || PARTE == 3) {
// Muévete ligeramente si estás viendo ambos.
VIS_OFFSET = (PART == 3) ? 10 : 0;
translate([VIS_OFFSET, 0, 0])
difference() {
// Desplaza la mitad derecha al origen para facilitar la impresión.
translate([-SPLIT_X, 0, 0])
intersección() {
full_model();
translate([SPLIT_X, 0, 0]) cube([SPLIT_X, OUTER_Y, TOTAL_THICK]);
}
// Sustrae los agujeros de la cara cortada (ahora en X=0)
translate([0, PIN_Y_TOP, PIN_Z_POS]) pin_geometry(PIN_TOLERANCE);
translate([0, PIN_Y_BOT, PIN_Z_POS]) pin_geometry(PIN_TOLERANCE);
}
}
모델 소스
