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);
                }
                
            }
        }
    }
}