Search models, users, collections, and posts

Costomizable Sun Visor Garage Remote Holder

IP Report

Print Profile(2)

All
A1
H2D Pro
H2S
X1E
H2D
P2S
P1S
X2D
P1P
H2C
X1 Carbon
X1
A1 mini
A2L

0.16mm layer, 5 walls, 15% infill | PETG SUPPORT ONLY
0.16mm layer, 5 walls, 15% infill | PETG SUPPORT ONLY
Designer
1.5 h
1 plate

Here are all objects. You can choose which to print
Here are all objects. You can choose which to print
Designer
4 h
1 plate

Open in Bambu Studio
Boost
6
8
0
0
5
2
Released 

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

 

 

 

 

 

 

If this clip helped fix your garage remote setup, please consider giving it a Boost and sharing a photo of your print in the comments!

Comment & Rating (0)

(0/1000)