Print Profile(2)


Description
This is to hold your garage remote on your car's sun visor. It is fully customizable via the included code.
Boost Me (for free)
I am glad if I helped you : )
Which File to Choose?
I have included three different STL files depending on your needs:
- 1_Best_Print_in_Place.stl: The highly recommended, finalized version. It features a closed front loop, allowing it to print perfectly on its side with zero supports. This horizontal layer orientation gives the PETG maximum mechanical strength so it acts like an unbreakable spring.
- 2_Open_Top.stl: The original prototype with an open top. Note: This version requires supports under the retention lip.
- 3_Narrow_Clip.stl: Features a narrower back clip. Choose this file if the wider clip interferes with your sun visor's vanity mirror or hinge.
Essential Print Settings
- Material: PETG ONLY. PLA will melt in a hot car and snap under tension.
- Orientation: Print lying completely flat on its side.
- Wall Loops (Perimeters): Set to 4. This is critical for the clip's spring tension and durability.
- Supports: OFF (for the Best and Narrow versions).
Customization
If your remote or visor dimensions are different, you can instantly generate a custom STL using CadQuery (a Python-based CAD tool). Just update the top 4 variables in the script below to match your measurements:
import cadquery as cq
# =========================
# 1. PARAMETERS (CHANGE THESE TO FIT YOUR SETUP)
# =========================
remote_w = 31.0 # Width of your remote
remote_l = 76.5 # Length of your remote
remote_t = 9.0 # Thickness of your remote
visor_t = 21.0 # Thickness of your car's sun visor
# --- Core geometry ---
wall = 2.0
clearance = 0.8
bleed = 2.0
grip_force = 1.2
tab_overhang = 1.2
pocket_w = remote_w + clearance
pocket_l = remote_l + clearance
pocket_t = remote_t + clearance
outer_w = pocket_w + 2 * wall
outer_t = pocket_t + 2 * wall
outer_l = pocket_l + 2 * wall
clip_w = outer_w
clip_len = 50.0
clip_gap = visor_t - grip_force
clip_wall = 2.5
# =========================
# 2. MAIN BODY (OPEN TOP)
# =========================
body = cq.Workplane("XY").box(outer_w, outer_t, outer_l).edges("|Z").fillet(3.0)
cavity = cq.Workplane("XY").box(pocket_w, pocket_t, pocket_l + bleed).translate((0, 0, wall))
holder = body.cut(cavity)
# =========================
# 3. FRONT FACE WINDOW (CLOSED LOOP)
# =========================
window_cutter = (
cq.Workplane("XY")
.box(pocket_w * 0.8, outer_t + bleed, pocket_l * 0.8)
.edges("|Y")
.fillet(3.0)
.translate((0, -outer_t/2, 0))
)
holder = holder.cut(window_cutter)
# =========================
# 4. RETENTION TABS
# =========================
tab_left = (
cq.Workplane("XY")
.box(wall, pocket_t, 4)
.translate((-pocket_w/2 + wall/2 - tab_overhang, 0, outer_l/2 - 2))
)
tab_right = (
cq.Workplane("XY")
.box(wall, pocket_t, 4)
.translate((pocket_w/2 - wall/2 + tab_overhang, 0, outer_l/2 - 2))
)
holder = holder.union(tab_left).union(tab_right)
# =========================
# 5. SUN VISOR CLIP
# =========================
clip_outer = cq.Workplane("XY").box(clip_w, clip_gap + 2 * clip_wall, clip_len).edges("|Z").fillet(1.5)
clip_inner = cq.Workplane("XY").box(clip_w + bleed, clip_gap, clip_len).translate((0, 0, -clip_wall))
clip = clip_outer.cut(clip_inner)
y_shift = outer_t/2 + (clip_gap + 2 * clip_wall)/2 - 0.5
z_shift = outer_l/2 - clip_len/2
clip = clip.translate((0, y_shift, z_shift))
holder = holder.union(clip)
# =========================
# 6. LANYARD HOLE
# =========================
lanyard_hole = (
cq.Workplane("XZ")
.workplane(offset=0)
.center(0, outer_l/2 - 12)
.circle(2.5)
.extrude(100)
)
holder = holder.cut(lanyard_hole)
# =========================
# 7. EXPORT (Pre-rotated for optimal printing)
# =========================
holder = holder.rotate((0, 0, 0), (0, 1, 0), 90)
show_object(holder)
cq.exporters.export(holder, "custom_garage_remote_holder.stl")








Comment & Rating (0)