saltylab-firmware/gopro_mount.scad
sl-mechanical f92389e3b5 feat: Add Issue #195 - GoPro mount adapter for T-slot rail
- 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
2026-03-02 11:16:41 -05:00

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