TubeHolder.scad 4.84 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
/**
 * Genera un soporte para colocar un tubo como los usados en los armarios.
 *
 * @author  Joaquín Fernández
 * @url     https://gitlab.com/joaquinfq/openscad/blob/master/Home/TubeHolder.scad
 * @license CC-BY-NC-4.0
 * @see     http://www.thingiverse.com/thing:3165425
 */
//------------------------------------------
// Valores personalizables
//------------------------------------------
diam      = 25.4;  // Diámetro del tubo
height    = 48;    // Altura de la pieza (eje Y)
radius    = 2;     // Radio de las equinas.
screw     = 5;     // Diámetro del tornillo a usar.
thickness = 16;    // Grosor de la pieza (eje Z)
width     = 55;    // Anchura de la pieza (eje X)
test      = false; // `true` para generar una lámina delgada para hacer pruebas.
headType  = 2;     // Diferentes tipos de acabados en la cabeza del tornillo:
                   // 0 - Ninguno
                   // 1 - Hexagonal
                   // 2 - Avellanado
                   // 3 - Hueco
//------------------------------------------
// Otras variables
//------------------------------------------
margin = diam / 4;       // Margen entre el tubo y el borde superior.
rtube  = (diam + 2) / 2; // Radio del tubo. Sumamos 2 al diámetro para tener holgura.
eps    = 0.001;          // Ajuste de algunas medidas para que en Preview se vea bien
$fn    = 75;

/**
 * Dibuja el bloque sobre el que se coloca el tubo.
 */
module block()
{
    difference()
    {
        // Base
        hull()
        {
            for (x = [ radius, width - radius ])
            {
                for (y = [ radius, height - radius ])
                {
                    translate([ x, y, 0 ])
                    {
                        cylinder(r = radius, h = thickness, center = true);
                    }
                }
            }
        }
        // Ranura para el tubo
        translate([ width / 2, height - margin, 0 ])
        {
            cube([ rtube * 2, rtube * 2, thickness + eps ], center = true);
            translate([ 0, - rtube, 0 ])
            {
                cylinder(r = rtube, h = thickness + eps, center = true);
            }
        }
        // Redondeo de las esquinas internas.
        for (x = [ -1, 1 ])
        {
            translate([
                width / 2 + x * (rtube + radius - eps),
                height - radius,
                0
            ])
            {
                difference()
                {
                    translate([ - x * radius / 2, radius / 2, 0 ])
                    {
                        cube([ radius, radius, thickness + eps ], center = true);
                    }
                    cylinder(r = radius, h = thickness + eps, center = true);
                }
            }
        }
    }
}
/**
 * Dibuja los agujeros para los tornillos.
 */
module screws()
{
    dhead  = screw * 1.9;
    w      = width / 2 - rtube;
    screws = [
        [ w / 2,         height * 0.8, 0 ],
        [ width - w / 2, height * 0.8, 0 ],
        [ width / 2,     (height - margin) * 0.5 - rtube, 0 ]
    ];
    for (screwCoord = screws)
    {
        translate(screwCoord)
        {
            cylinder(d = screw, h = thickness + eps, center = true);
            if (headType)
            {
                translate([ 0, 0, thickness / 2 - 1.5 + eps ])
                {
                    if (headType == 1)
                    {
                        cylinder(
                            d      = dhead,
                            h      = 3,
                            center = true,
                            $fn    = 6
                        );
                    }
                    else if (headType == 2)
                    {
                        cylinder(
                            d1     = screw,
                            d2     = dhead,
                            h      = screw * 0.75,
                            center = true
                        );
                    }
                    else if (headType == 3)
                    {
                        cylinder(
                            d      = dhead,
                            h      = screw * 0.75,
                            center = true
                        );
                    }
                }
            }
        }
    }
}
//------------------------------------------
// Inicio del script
//------------------------------------------
difference()
{
    block();
    screws();
    // En modo test eliminamos la mayor parte del soporte
    // dejando solamente una lámina delgada para hacer pruebas.
    if (test)
    {
        translate([ width / 2, height / 2, 0 ])
        {
            translate([ 0, 0, thickness / 2 ])
            {
                cube([ width * 2, height * 2, 4.8 ], center = true);
            }
            translate([ 0, 0, -3.6 ])
            {
                cube([ width * 2, height * 2, thickness ], center = true);
            }
        }
    }
}