switch to smaller plinko balls for back caster
[challenge-bot] / 3d-printables / caster-standoff.scad
CommitLineData
858028a5 1// challenge-bot
2// GNU AGPLv3 (or later at your option)
3// project available at these locations:
4// https://gitorious.org/ozzloy/challenge-bot
5// https://github.com/waynegramlich/challenge-bot
6
6b308c7a 7use <oshw.scad>
8
2b2202ff 9// use 10 ish for development, 60 or so for printing
10$fn = 60;
5063fec3 11
6a7062ce 12/* measured with calipers */
25dc4aac 13ball_diameter = 11 + 1.0; // extra bit added for printing imprecision
6a7062ce 14ball_radius = ball_diameter / 2;
15
6b308c7a 16standoff_height = 60; // kyle eyeballed
aa19128c 17
25dc4aac 18gap = 3;
0d3ed0b8 19wall_thickness = 1;
ea032771 20holder_floor = 3;
6b308c7a 21holder_arms_length = 20;
46516c11 22holder_height =
23 holder_floor + holder_arms_length + (11 / 16) * ball_diameter;
6a7062ce 24
25holder_radius = ball_radius + wall_thickness;
26holder_diameter = holder_radius * 2;
27
28standoff_radius = holder_radius; // 0.580 / 2 inches from spec sheet
aa19128c 29standoff_lower_portion_height = standoff_height - holder_height;
4b158a5e 30
6bb05589 31// eyeballed caster flange height, (0.580/5) inches, times 2 to be stronger
7a0bd024 32caster_flange_height = 5;
6bb05589 33caster_flange_width = 20.32; // 0.800 inches
4b158a5e 34caster_flange_screw_radius = 2.286 / 2; // 0.090 inches
35caster_flange_screw_length = 8; // eyeballed
36
89da9d5e 37deck_pitch = 25.4; // measured center to center on grid on pegboard
969236b8 38deck_flange_height = 2.9464;
cbc5ea88 39deck_flange_screw_radius = 3.556 / 2; // For #6 machine screws
89da9d5e 40deck_flange_radius = (deck_pitch) / 2 + deck_flange_screw_radius + 3;
4b158a5e 41
42module deck_flange(){
89da9d5e 43 deck_pitch_diagonal = sqrt(2 * pow(deck_pitch, 2));
4b158a5e 44 difference(){
89da9d5e 45 scale([0.35, 0.35, 1]){
6b308c7a 46 linear_extrude(height = deck_flange_height){
47 oshw();}}
4b158a5e 48 for(ii = [-1, 1]){
89da9d5e 49 translate([deck_pitch_diagonal / 2 * ii, 0, -.1])
4b158a5e 50 cylinder(h = deck_flange_height * 1.1,
17891d41 51 r = deck_flange_screw_radius);}
89da9d5e 52 translate([0, deck_pitch_diagonal / 2, -.1])
17891d41 53 cylinder(h = deck_flange_height * 1.1,
54 r = deck_flange_screw_radius);}}
4b158a5e 55
56module deck_flange_reinforcement(){
57 translate([-deck_flange_radius,
969236b8 58 -.5 * deck_flange_height / 2,
4b158a5e 59 deck_flange_height]){
60 difference (){
969236b8 61 cube([deck_flange_radius, deck_flange_height / 2, deck_flange_radius]);
4b158a5e 62 translate([-.1, -.05 * deck_flange_height, 0]){
63 rotate([0, -45, 0]){
64 cube([deck_flange_radius * 1.5, // 1.5 is bigger than sqrt(2)
65 deck_flange_height * 1.1, // 1.1 is bigger than 1
66 deck_flange_radius]);}}}}}
6bb05589 67
5455dacb 68module ball_holder(){
5455dacb 69 difference (){
0d3ed0b8 70 union(){
71 cylinder(r = holder_radius, h = holder_height);
72 translate([0, 0, holder_arms_length]){
73 cylinder(r1 = holder_radius,
74 r2 = holder_radius + wall_thickness,
75 h = wall_thickness);
76 translate([0, 0, wall_thickness]){
77 cylinder(r = wall_thickness + holder_radius,
78 h = holder_height
79 - holder_arms_length
80 - wall_thickness); }}}
ea032771 81 translate([0, 0, ball_radius + holder_floor + holder_arms_length]){
5455dacb 82 sphere(r = ball_radius);}
ea032771 83 translate([0, 0, holder_floor + (holder_height - holder_floor) / 2 + 0.5]){
0d3ed0b8 84 cube([holder_diameter + wall_thickness * 2 + 0.1,
85 gap,
86 holder_height - holder_floor + 0.1],
5455dacb 87 center = true);}}}
88
35552d31 89module caster_standoff(){
aa19128c 90 cylinder(h = standoff_lower_portion_height,
35552d31 91 r = standoff_radius);
92 deck_flange();
93 for(ii = [0:3]){
94 rotate([0, 0, 45 + 90 * ii])
95 deck_flange_reinforcement();}
aa19128c 96 translate([0, 0, standoff_lower_portion_height]){
35552d31 97 ball_holder();}}
98
46516c11 99caster_standoff();