$fn = 80;
// --- DIMENSIONES DE LA PARED ---
Hole_d = 8.6; // diámetro del agujero (mm)
Pitch = 38.0; // distancia entre los agujeros, de centro a centro (mm)
Clearence = 0.25; // espacio (PETG 0.20–0.35, PLA 0.15–0.25)
panel_t = 3.5; // espesor del panel (mm) (ajusta si lo sabes)
// --- DIMENSIONES DE KOUKUN ---
hook_len = 70; // salida de orina (mm)
hook_drop = 25; // El lanzamiento de Koukoun hacia abajo (mm)
hook_thk = 8; // espesor del gancho (Z)
hook_w = 18; // anchura del pasador (Y)
nose_r = 4; // redondeamiento de la esquina.
// --- MÉTODO DE FIJACIÓN ---
stem_d = hole_d - clearance; // La parte que pasa a través del agujero.
stem_len = panel_t + 2.0; // un poco más
head_d = hole_d + 3.0; // etulaippa
head_thk = 2.2;
// --- LUKITUSHARJA (barba flexible) ---
barb_h = 1.0; // ulkonema (mm)
barb_len = 3.2; // longitud (mm)
barb_t = 1.6; // espesor (mm)
barb_zpos = panel_t - 0.4; // detrás del disco Osuu
Módulo de caja redondeada (x,y,z,r) {
minkowski(){
cube([x-2*r,y-2*r,z-2*r], centro=true);
Esfera (r=r);
}
}
Módulo barb() {
translate([stem_d/2 - 0.3, 0, barb_zpos])
extrusión lineal (altura=longitud de la barba, centro=falso)
polígono(puntos=[
[0, -barb_t/2],
[barb_h, 0],
[0, barb_t/2]
]);
}
Módulo stem_with_head().
// etulaippa
translate([0,0,head_thk/2])
Cilindro (d=diámetro de la cabeza, h=espesor de la cabeza, centro=verdadero);
// varsi
translate([0,0, head_thk + stem_len/2])
Cilindro (d=stem_d, h=stem_len, centro=true);
// 2 cepillos opuestos
translate([0,0, head_thk]) barb();
Rotar([0,0,180]) Traducir([0,0, head_thk]) Barb();
}
Módulo hook_body().
// Kaula + koukku
neck_len = 18;
// Kaula (desde la línea central de los hombros hacia adelante)
translate([0,0, head_thk + stem_len + hook_thk/2])
rotar([90,0,0])
rounded_box(hook_thk, hook_w, neck_len, 1.2);
// Gancho de equilibrio
translate([neck_len/2 + hook_len/2, 0, head_thk + stem_len + hook_thk/2])
rotar([90,0,0])
rounded_box(hook_thk, hook_w, hook_len, 1.2);
// ¡Ay, caída!
translate([neck_len/2 + hook_len - hook_thk/2, 0, head_thk + stem_len - hook_drop/2])
rotar([90,0,0])
rounded_box(hook_thk, hook_w, hook_drop, 1.2);
// Puntita redondeada.
translate([neck_len/2 + hook_len, 0, head_thk + stem_len - hook_drop])
Esfera (r=nariz_r);
}
Placa trasera del módulo().
// Soporte entre los postes + un poco más arriba
// Esto hace que la fijación sea rígida.
plate_w = pitch + head_d + 8; // X
plate_h = hook_w + 8; // Y
plate_t = 4.0; // Z (detrás de la placa)
translate([0,0, head_thk + plate_t/2])
rounded_box(plate_w, plate_h, plate_t, 1.2);
}
unión(){
// 2 toques: izquierdo y derecho
translate([-pitch/2, 0, 0]) stem_with_head();
translate([ pitch/2, 0, 0]) stem_with_head();
// Rigidez + gancho en el medio.
Placa trasera();
hook_body();
}