Sometimes you want to mount something to another thing - this allows you to use the many many different variations of GoPro mount out there to attach your design.
There's aftermarket mounts all over the internet with sticky pads, windscreen suckers, ball joints, handles, clamps, helmet mounts, dog harnesses… you name it!
Bolt is an M5 bolt. A closed dome nut is a good touch for the captive nut.
/* * Make a Go-Pro Mount - Bracket to accept a GoPro */ module gopro_mount() { gp_finger = 3; gp_gap = 3; gp_hg = gp_gap/2; gp_screw = 5.1; gp_nut_af = 8.1; gp_nut_depth = 3; gp_od = 15; translate([gp_gap*2.5,gp_od,0]) rotate([0,90,180]) { difference() { // Body union() { cylinder(r=(gp_od/2), h=gp_gap*5); // Boss for nut translate([0,0,gp_gap*5]) { cylinder(r1=(gp_od/2),r2=(gp_od/2)-2, h=gp_nut_depth); } // Base block translate([-(gp_od/2),0,0]) { cube([gp_od,gp_od,gp_gap*5]); // Flared base translate([0,-gp_gap,0]) { minkowski() { cube([gp_od,gp_gap,gp_gap*5]); translate([0,gp_od,0]) { rotate([90,0,0]) { cylinder(r1=2.50, r2=0, h=gp_gap); } } } } } } // Negative union() { // Centre bore translate([0,0,-0.5]) { cylinder(r=(gp_screw/2), h=gp_gap*6); } // Slice #1 translate([0,0,gp_gap+gp_hg]) { cube([gp_od+1, gp_od+1, gp_gap], true); } // Slice #2 translate([0,0,(gp_gap*3)+gp_hg]) { cube([gp_od+1, gp_od+1, gp_gap], true); } // Recess for nut translate([0,0,gp_gap*5]) { cylinder(r=(gp_nut_af/2), h=gp_nut_depth+1, $fn = 6); } } } } }
/* * Make a Go-Pro Mount - Bracket to mount AS a GoPro */ module gopro_bracket() { gp_finger = 3; gp_gap = 3; gp_hg = gp_gap/2; gp_screw = 5.1; gp_nut_af = 8.1; gp_nut_depth = 3; gp_od = 15; translate([gp_gap*2.5,gp_od,0]) rotate([0,90,180]) { difference() { // Body union() { translate([0,0,gp_gap]) { cylinder(r=(gp_od/2), h=gp_gap*3); } // Base block translate([-(gp_od/2),0,0]) { translate([0,0,gp_gap]) { cube([gp_od,gp_od,gp_gap*3]); } // Support sides translate([gp_od,6,3]) { rotate([0,180,0]) { prism(gp_od, 3, 3); } } translate([0,6,12]) { rotate([0,0,0]) { prism(gp_od, 3, 3); } } // Flared base translate([0,-gp_gap,0]) { minkowski() { cube([gp_od,gp_gap,gp_gap*5]); translate([0,gp_od,0]) { rotate([90,0,0]) { cylinder(r1=2.50, r2=0, h=gp_gap); } } } } } } // Negative union() { // Centre bore translate([0,0,-0.5]) { cylinder(r=(gp_screw/2), h=gp_gap*6); } // Slice #1 translate([0,0,gp_gap*2.5]) { cube([gp_od+1, gp_od+1, gp_gap], true); } } } } }