====== GoPro Mount Design ======
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.
====== Bracket to accept a GoPro ======
/*
* 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);
}
}
}
}
}
====== Bracket to mount in place of a GoPro ======
/*
* 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);
}
}
}
}
}