- Implement GoPro 3-prong interface with standard mount compatibility - T-slot clamp base for sensor rail attachment - Tilt adjustment mechanism (0-90 degrees) - 7-position detent system (0°, 15°, 30°, 45°, 60°, 75°, 90°) - M5 thumbscrew retention for secure locking - Comprehensive BOM with sourcing and assembly instructions - Print settings, weight analysis, and QA procedures Issue: #195
256 lines
6.9 KiB
OpenSCAD
256 lines
6.9 KiB
OpenSCAD
// GoPro Mount Adapter for T-Slot Sensor Rail
|
|
// Issue #195 - GoPro 3-prong interface with tilt detents
|
|
// T-slot mounting with thumbscrew retention
|
|
|
|
// GoPro 3-Prong Interface Standards
|
|
// Center prong: 14.5mm wide
|
|
// Side prongs: 12.5mm wide
|
|
// Prong depth: 8-10mm
|
|
// Spacing between prongs: ~25mm
|
|
|
|
// Constants
|
|
GOPRO_PRONG_WIDTH_CENTER = 14.5;
|
|
GOPRO_PRONG_WIDTH_SIDE = 12.5;
|
|
GOPRO_PRONG_DEPTH = 9;
|
|
GOPRO_PRONG_SPACING = 25; // Between center of side prongs
|
|
|
|
T_SLOT_WIDTH = 20; // T-slot rail 20x20mm
|
|
CLAMP_JAW_DEPTH = 18; // Clamp jaw depth
|
|
CLAMP_WIDTH = 40; // Clamp internal width
|
|
|
|
TILT_PIVOT_DIAMETER = 12; // Pivot pin diameter
|
|
TILT_MIN = 0; // Minimum tilt angle
|
|
TILT_MAX = 90; // Maximum tilt angle
|
|
TILT_DETENT_INTERVAL = 15; // Detent every 15 degrees
|
|
|
|
THUMBSCREW_DIAMETER = 10; // M5 equivalent
|
|
THUMBSCREW_DEPTH = 8; // Engagement depth
|
|
|
|
// Detent positions: 0, 15, 30, 45, 60, 75, 90 degrees
|
|
DETENT_POSITIONS = [0, 15, 30, 45, 60, 75, 90];
|
|
|
|
// ==================== GOPRO INTERFACE ====================
|
|
|
|
module gopro_mounting_base() {
|
|
// Base plate that receives GoPro 3-prong connector
|
|
// Dimensions accommodate standard GoPro mounts
|
|
|
|
linear_extrude(height = 8) {
|
|
// Main base: 50x35mm
|
|
square([50, 35], center = true);
|
|
}
|
|
}
|
|
|
|
module gopro_prong_slot_center() {
|
|
// Center prong slot (larger for main mounting)
|
|
// Slot dimensions: 14.5mm wide x 9mm deep x 12mm tall
|
|
translate([0, 0, 4]) {
|
|
cube([GOPRO_PRONG_WIDTH_CENTER, GOPRO_PRONG_DEPTH + 2, 12], center = true);
|
|
}
|
|
}
|
|
|
|
module gopro_prong_slot_side(x_offset) {
|
|
// Side prong slots (two of them, mirrored)
|
|
translate([x_offset, 0, 4]) {
|
|
cube([GOPRO_PRONG_WIDTH_SIDE, GOPRO_PRONG_DEPTH + 2, 12], center = true);
|
|
}
|
|
}
|
|
|
|
module gopro_interface_slots() {
|
|
// All three prong slots for GoPro mount
|
|
gopro_prong_slot_center(); // Center
|
|
gopro_prong_slot_side(GOPRO_PRONG_SPACING / 2); // Right
|
|
gopro_prong_slot_side(-GOPRO_PRONG_SPACING / 2); // Left
|
|
}
|
|
|
|
module gopro_mounting_assembly() {
|
|
difference() {
|
|
gopro_mounting_base();
|
|
gopro_interface_slots();
|
|
}
|
|
|
|
// Add retaining tabs (small lips to keep mount from sliding out)
|
|
translate([0, GOPRO_PRONG_DEPTH/2 + 1, 7]) {
|
|
cube([50, 2, 2], center = true);
|
|
}
|
|
}
|
|
|
|
// ==================== TILT MECHANISM ====================
|
|
|
|
module tilt_pivot_pin() {
|
|
// Central pivot for tilt adjustment
|
|
// M8 equivalent bolt hole with shoulder
|
|
|
|
// Main pin body
|
|
cylinder(h = 40, r = TILT_PIVOT_DIAMETER/2 + 1, $fn = 32);
|
|
|
|
// Bolt hole through center
|
|
cylinder(h = 42, r = 2.2, $fn = 16, center = true);
|
|
}
|
|
|
|
module detent_pocket(angle) {
|
|
// Spherical detent pocket at specific angle
|
|
// Located on tilt arm, engages with detent spring ball
|
|
|
|
sphere_r = 2;
|
|
translate([0, 0, 15]) {
|
|
rotate([angle, 0, 0]) {
|
|
translate([0, TILT_PIVOT_DIAMETER/2 + 4, 0]) {
|
|
sphere(r = sphere_r, $fn = 16);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module detent_pockets() {
|
|
// Create all detent pockets for 0-90 degree range
|
|
for (angle = DETENT_POSITIONS) {
|
|
detent_pocket(angle);
|
|
}
|
|
}
|
|
|
|
module tilt_arm() {
|
|
// Arm that connects GoPro mount to T-slot clamp
|
|
// Rotates around pivot pin for tilt adjustment
|
|
|
|
// Main arm structure (tapered for strength)
|
|
hull() {
|
|
// Top section (connects to GoPro mount)
|
|
translate([0, 0, 35]) {
|
|
cube([40, 25, 10], center = true);
|
|
}
|
|
|
|
// Bottom section (connects to T-slot clamp)
|
|
translate([0, 0, 0]) {
|
|
cube([35, 20, 8], center = true);
|
|
}
|
|
}
|
|
}
|
|
|
|
module tilt_mechanism_assembly() {
|
|
// Pivot pin at center
|
|
translate([0, 0, 8]) {
|
|
tilt_pivot_pin();
|
|
}
|
|
|
|
// Tilt arm with GoPro mount
|
|
translate([0, 0, 8]) {
|
|
rotate([0, 0, 0]) { // Default position: 0 degrees tilt
|
|
difference() {
|
|
union() {
|
|
tilt_arm();
|
|
gopro_mounting_assembly();
|
|
}
|
|
|
|
// Pivot hole
|
|
translate([0, 0, -5]) {
|
|
cylinder(h = 50, r = 2.2, $fn = 16);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Detent ball pockets (visible for assembly reference)
|
|
translate([0, 0, 8]) {
|
|
detent_pockets();
|
|
}
|
|
}
|
|
|
|
// ==================== THUMBSCREW RETENTION ====================
|
|
|
|
module thumbscrew_mechanism() {
|
|
// Thumbscrew for locking tilt position
|
|
// M5 equivalent (10mm head)
|
|
|
|
// Engagement hole on tilt arm
|
|
translate([15, 0, 20]) {
|
|
cylinder(h = THUMBSCREW_DEPTH + 2, r = THUMBSCREW_DIAMETER/2 + 0.5, $fn = 16);
|
|
}
|
|
}
|
|
|
|
// ==================== T-SLOT CLAMP ====================
|
|
|
|
module tslot_clamp_base() {
|
|
// Base connector for T-slot mounting
|
|
// Similar to phone mount but simplified for GoPro (lighter load)
|
|
|
|
linear_extrude(height = 12) {
|
|
square([25, 25], center = true);
|
|
}
|
|
}
|
|
|
|
module tslot_mounting_holes() {
|
|
// M4 bolt holes for T-nut attachment
|
|
hole_inset = 7;
|
|
translate([hole_inset, hole_inset, -1])
|
|
cylinder(h = 14, r = 2.2, $fn = 16);
|
|
translate([-hole_inset, hole_inset, -1])
|
|
cylinder(h = 14, r = 2.2, $fn = 16);
|
|
translate([hole_inset, -hole_inset, -1])
|
|
cylinder(h = 14, r = 2.2, $fn = 16);
|
|
translate([-hole_inset, -hole_inset, -1])
|
|
cylinder(h = 14, r = 2.2, $fn = 16);
|
|
}
|
|
|
|
module tslot_clamp_assembly() {
|
|
difference() {
|
|
tslot_clamp_base();
|
|
tslot_mounting_holes();
|
|
}
|
|
}
|
|
|
|
// ==================== PIVOT HOUSING ====================
|
|
|
|
module pivot_housing() {
|
|
// Connects T-slot clamp to tilt mechanism
|
|
// Houses the pivot pin
|
|
|
|
translate([0, 0, 12]) {
|
|
// Main housing body
|
|
cube([30, 30, 15], center = true);
|
|
|
|
// Pivot socket (receives pivot pin)
|
|
translate([0, 0, 2]) {
|
|
cylinder(h = 10, r = TILT_PIVOT_DIAMETER/2 + 1.5, $fn = 32);
|
|
}
|
|
}
|
|
}
|
|
|
|
module pivot_housing_assembly() {
|
|
difference() {
|
|
pivot_housing();
|
|
|
|
// Clearance hole for pivot pin
|
|
translate([0, 0, 10]) {
|
|
cylinder(h = 20, r = TILT_PIVOT_DIAMETER/2 + 0.2, $fn = 32);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ==================== COMPLETE ASSEMBLY ====================
|
|
|
|
module complete_gopro_mount() {
|
|
// Fixed base: T-slot clamp
|
|
tslot_clamp_assembly();
|
|
|
|
// Pivot housing
|
|
pivot_housing_assembly();
|
|
|
|
// Tilt mechanism with GoPro mount
|
|
tilt_mechanism_assembly();
|
|
|
|
// Thumbscrew engagement hole marker
|
|
thumbscrew_mechanism();
|
|
}
|
|
|
|
// ==================== RENDER ====================
|
|
complete_gopro_mount();
|
|
|
|
// Visualization aids (comment out for export):
|
|
// Show tilt range visualization
|
|
// translate([80, 0, 0]) rotate([15, 0, 0]) complete_gopro_mount();
|
|
// translate([160, 0, 0]) rotate([90, 0, 0]) complete_gopro_mount();
|
|
|
|
// Show T-slot envelope
|
|
// %translate([0, 0, 0]) cube([20, 20, 30], center = true);
|