aboutsummaryrefslogtreecommitdiff
path: root/MTBCanHolder/CanHolder.scad
blob: 08f64a799c009f88e037310f44330a6b0b974a06 (plain)
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
159
160
161
162
$fn = 100;

/*
Can holder MTB

Tested w/ Giant Talon 2 (2022) and Marin Drift Zone 1

Infill: 40%
*/

/*

Type: can_height_offset / base_width / base_depth_offset

Normal 12oz can: 122 / 20 / 0
Keystone 12oz: 133
Yerba Mate: 15.5 oz
Red Bull: 8.4oz: 136 / 15 / -6.5

*/

can_height_offset = 122;
base_width = 20;
base_depth_offset = 0; // For Non-12oz Cans

can_height = can_height_offset + 8; // 12.cm
base_depth = 10;                    // 1cm
screw_small_depth = 3;
screw_thread_diameter = 9;
bolt_head_diameter = 12;                        // 6mm for M5 bolt
dist_between_holes = 55;                        // 2.14inch / 64mm
hole_offset = 25;                               // 2cm from origin
bottom_lip_height = 4.5;                        // 4.5mm 2cm (1cm + xyz)
bottom_lip_thickness = 5;                       // 5mm
bottom_lip_base = 5;                            // 10mm
bottom_lip_extrusion = 12.5 + base_depth - 6.5; // 10.5mm
upper_lip_base = 5;
upper_lip_thickness = 23 + base_depth - 6.5; // height basically
upper_pushness_thickness = 4;
upper_pusher_base = 15;
upper_can_hook_height = 10;
upper_can_hook_base = 5;
upper_can_hook_width = 5;
upper_hook_radius = 10;
upper_lip_difference = 2.50;

/*
translate([-20,120,base_depth-2]) {
rotate([64,0,20]){
color([1,0,0]) {
import("soda_can.stl");
}
}
}
*/

module
pieSlice(a, r, h)
{
    // a:angle, r:radius, h:height
    rotate_extrude(angle = a) square([ r, h ]);
}

// Base w/ Screw Holes
linear_extrude(base_depth)
{
    difference()
    {
        difference()
        {
            square([ base_width, can_height ]);
            translate([ base_width / 2, hole_offset, 0 ])
            {
                circle(d = bolt_head_diameter);
                translate([ 0, (bolt_head_diameter) + dist_between_holes, 0 ])
                {
                    circle(d = bolt_head_diameter);
                }
            }
        }
    }
}

// Screw Hole Padding
linear_extrude(screw_small_depth)
{
    translate([ base_width / 2, hole_offset, 0 ])
    {
        difference()
        {
            circle(d = bolt_head_diameter);
            circle(d = screw_thread_diameter);
        }
        translate([ 0, (bolt_head_diameter) + dist_between_holes, 0 ])
        {
            difference()
            {
                circle(d = bolt_head_diameter);
                circle(d = screw_thread_diameter);
            }
        }
    }
}

// Upper Hook
difference()
{
    linear_extrude(upper_lip_thickness)
    {
        translate([ 0, -upper_lip_base, 0 ])
        {
            square([ base_width, upper_lip_base ]);
        }
    }

    translate([ -2.5, -upper_lip_difference, base_depth / 2.5 ])
    {
        linear_extrude(upper_lip_thickness - 10 - (base_depth / 2.5))
        {
            square([ base_width + 5, upper_lip_difference ]);
        }
    }
}

// Upper Hook Push Lip
translate([ 0, 0, (upper_lip_thickness * 7 / 8) - upper_pushness_thickness ])
{
    linear_extrude(upper_pushness_thickness)
    {
        translate([ 0, -upper_pusher_base - upper_lip_base, 0 ])
        {
            square([ base_width, upper_pusher_base ]);
        }
    }
}

// Upper Hook - Curved Hook
translate([ base_width, 0, upper_lip_thickness - 10 ])
{
    rotate([ 0, -90, 0 ])
    {
        pieSlice(90 + 25, upper_hook_radius, base_width);
    }
}

// Bottom Lip

linear_extrude((bottom_lip_extrusion) + bottom_lip_thickness)
{
    translate([ 0, can_height, 0 ])
    {
        square([ base_width, bottom_lip_base ]);
    }
}

translate([ 0, can_height - bottom_lip_height, (bottom_lip_extrusion) ])
{
    linear_extrude(bottom_lip_thickness)
    {
        square([ base_width, bottom_lip_height ]);
    }
}