/* Organizador paramétrico de cables 3dprintingmodel.com Versión 0.3 Modelo paramétrico para impresión 3D. Modifica los parámetros de la sección "PARÁMETROS DEL USUARIO" para crear variantes. */ // ========================================== // PARÁMETROS DEL USUARIO // ========================================== numero_cables = 5; // Número de cables (recomendado: 1-10) diametro_cable = 4; // Diámetro exterior del cable en mm holgura = 0.8; // Holgura adicional del alojamiento separacion = 5; // Material entre alojamientos margen_lateral = 5; // Material en los extremos profundidad = 15; // Fondo de la pieza altura = 10; // Altura de la pieza ancho_ranura = 4.2; // Anchura mínima de entrada ensanchamiento = 1.4; // Ensanchamiento de la boca superior radio_esquinas = 2; // Redondeo exterior // ========================================== // CÁLCULOS AUTOMÁTICOS // ========================================== diametro_alojamiento = diametro_cable + holgura; radio_cable = diametro_alojamiento / 2; paso = diametro_alojamiento + separacion; ancho_total = numero_cables * diametro_alojamiento + (numero_cables - 1) * separacion + margen_lateral * 2; z_centro = altura - radio_cable - 2; // ========================================== // COMPROBACIONES // ========================================== assert(numero_cables >= 1, "El numero de cables debe ser al menos 1."); assert(numero_cables <= 10, "Se recomienda un maximo de 10 cables."); assert(diametro_cable > 0, "El diametro del cable debe ser mayor que 0."); assert(separacion >= 2, "La separacion entre alojamientos es demasiado pequena."); assert(ancho_ranura <= diametro_alojamiento, "La ranura no debe superar el diametro del alojamiento."); // ========================================== // CUERPO PRINCIPAL // ========================================== module cuerpo_redondeado() { hull() { for (x = [ radio_esquinas, ancho_total - radio_esquinas ]) for (y = [ radio_esquinas, profundidad - radio_esquinas ]) translate([x, y, 0]) cylinder( h = altura, r = radio_esquinas, $fn = 40 ); } } // ========================================== // ALOJAMIENTO DE UN CABLE // ========================================== module alojamiento_cable(x) { // Canal cilíndrico longitudinal translate([ x, -1, z_centro ]) rotate([-90, 0, 0]) cylinder( h = profundidad + 2, r = radio_cable, $fn = 64 ); // Ranura vertical translate([ x - ancho_ranura / 2, -1, z_centro ]) cube([ ancho_ranura, profundidad + 2, altura - z_centro + 2 ]); // Ensanchamiento progresivo de entrada hull() { translate([ x - ancho_ranura / 2, -1, altura - 2 ]) cube([ ancho_ranura, profundidad + 2, 0.1 ]); translate([ x - (ancho_ranura + ensanchamiento) / 2, -1, altura + 0.1 ]) cube([ ancho_ranura + ensanchamiento, profundidad + 2, 0.1 ]); } } // ========================================== // MODELO FINAL // ========================================== difference() { cuerpo_redondeado(); for (i = [0 : numero_cables - 1]) { x = margen_lateral + radio_cable + i * paso; alojamiento_cable(x); } }