| 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 | |
| 7 | standoff_height = 55; // eyeballed |
| 8 | nut_short_side = 4.7; // from calipers |
| 9 | nut_height = 1.6; // from calipers |
| 10 | standoff_radius = 14.732 / 2; // 0.580 / 2 inches from spec sheet |
| 11 | screw_radius = 2.286/2; // 0.090 inches |
| 12 | caster_flange_screw_length = 8; // eyeballed |
| 13 | // eyeballed caster flange height, (0.580/5) inches, times 2 to be stronger |
| 14 | caster_flange_height = 2.9464 * 2; |
| 15 | caster_flange_width = 20.32; // 0.800 inches |
| 16 | ziptie_width = 4.7625; // 3/16 inch |
| 17 | ziptie_height = 3; // i'm guessing |
| 18 | |
| 19 | module caster_flange_screws(){ |
| 20 | translate([standoff_radius, 0, 0]) |
| 21 | cylinder(h = caster_flange_screw_length, r = screw_radius, $fn = 20); |
| 22 | translate([-standoff_radius, 0, 0]) |
| 23 | cylinder(h = caster_flange_screw_length, r = screw_radius, $fn = 20);} |
| 24 | |
| 25 | module caster_flange(){ |
| 26 | side_radius = caster_flange_width / 2 - standoff_radius; |
| 27 | hull(){ |
| 28 | cylinder(h = caster_flange_height, r = standoff_radius); |
| 29 | translate([standoff_radius, 0, 0]) |
| 30 | cylinder(h = caster_flange_height, r = side_radius); |
| 31 | translate([-standoff_radius, 0, 0]) |
| 32 | cylinder(h = caster_flange_height, r = side_radius);}} |
| 33 | |
| 34 | module nut(size, height){ |
| 35 | width = size/1.75; |
| 36 | for (r = [-60, 0, 60]) rotate([0,0,r]) cube([width, size, height], true);} |
| 37 | |
| 38 | module nuts(){ |
| 39 | translate([standoff_radius, 0, nut_height/2]) |
| 40 | nut(nut_short_side, nut_height); |
| 41 | translate([-standoff_radius, 0, nut_height/2]) |
| 42 | nut(nut_short_side, nut_height);} |
| 43 | |
| 44 | module ziptie(){ |
| 45 | translate([-standoff_radius, -ziptie_width/2, 0]) |
| 46 | cube([standoff_radius * 2, ziptie_width, ziptie_height]);} |
| 47 | |
| 48 | module caster_standoff(){ |
| 49 | difference(){ |
| 50 | union(){ |
| 51 | cylinder(h = standoff_height, r = standoff_radius); |
| 52 | caster_flange();} |
| 53 | translate([0, 0, -.1]) scale([1, 1, 1.1]) |
| 54 | caster_flange_screws(); |
| 55 | translate([0, 0, caster_flange_height]) |
| 56 | nuts(); |
| 57 | translate([0, 0, standoff_height * 3 / 4]) scale([1.1, 1, 1]) |
| 58 | ziptie(); |
| 59 | rotate([0, 0, 90]) translate([0, 0, standoff_height * 1 / 2]) |
| 60 | scale([1.1, 1, 1]) |
| 61 | ziptie();}} |
| 62 | |
| 63 | caster_standoff(); |