commit 2fa95acb8380c3ed49fe3b6f2e2f57a41bcb6a85 Author: Neale Pickett Date: Sun Sep 25 16:39:13 2022 -0600 Add docs diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..6a94e3a --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,2 @@ +No rights reserved. +I place these files in the public domain. diff --git a/README.md b/README.md new file mode 100644 index 0000000..910565c --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +This is a head restraint button I made for a 2019 Chevrolet Bolt. + +When we bought ours, used, +one of these was missing. +What's here now does a good job staying in the hole, +and flips the headrest back. +The one I have in there now sticks a little, +so you have to bang it or massage it to pop back out, +and stop triggering the tilt mechanism. +But it's good enough: +we hardly ever use this button anyway. + +Print in PETG or ABS or something that can withstand a lot of heat. +You don't need supports. diff --git a/headrest-button.scad b/headrest-button.scad new file mode 100644 index 0000000..76706d3 --- /dev/null +++ b/headrest-button.scad @@ -0,0 +1,85 @@ +button_od = 23.6; // Outside diameter of button +tab_offset = 22; // How far down the button the little tabs are +tab_width = 4; // Size of the tabs +tab_protrusion = 1.5; // How far tabs stick out +guide_size = 2.5; // How wide the guide channels are +wall_width = 1.8; // How thick should the walls be +rod_od = 3.5; // The outside diameter of the rod + +button_curvature_depth = 5; +button_wall = 1; + + +// Computed values +button_id = button_od - wall_width*2; +rod_width = rod_od / sqrt(2); // It's easier to print if the rod is square +button_height = 24; // How tall the button is +inset_height = button_curvature_depth + button_wall; + +module rod(width, height) { + translate([-width/2, -width/2, 0]) cube([width, width, height]); +} + +rotate(180, [1, 0, 0]) { + difference() { + union() { + // Outer button + difference() { + cylinder(h=button_height, r=button_od/2, $fn=360); + + // Inner cup for the rod + translate([0, 0, inset_height]) { + rod(rod_width + 0.2, button_height); + } + + // There's this guiderail thingy + for (a = [30, 150, 270]) { + rotate(a=a, v=[0,0,1]) { + translate([button_id/2 + wall_width - 0.8, -guide_size/2, 0]) { + cube([wall_width, guide_size, button_height+1]); + } + } + } + + // The part you press with your finger + rotate(a=-60, v=[0,0,1]) { + // The button is actually sloped + rotate(a=-4, v=[1,0,0]) { + translate([-button_od, -button_od, -1.185]) { + cube([button_od*2, button_od*2, 2]); + } + } + // A little curvature on outside where you press the button + resize([button_od*.75, button_od*.75, button_curvature_depth+3]) { + sphere(r=10); + } + } + + + // There's a cutout on the right side at the end. I just eyeballed it. + rotate(a=-50, v=[0,0,1]) { + translate([button_od*.39, -button_od/2, button_height-4]) { + cube(button_od); + } + } + + } + + // Tabs on the side for stops + intersection() { + union() { + for (a = [0, 180]) { + rotate(a=a, v=[0,0,1]) { + translate([(button_od - wall_width)/2, 0, tab_offset+1]) { + cube([wall_width+tab_protrusion, tab_width, 2], center=true); + } + } + } + } + cylinder(h=button_height, r1=button_od, r2=button_od/2, $fn=360); + } + + } + + } +} diff --git a/headrest-rod.scad b/headrest-rod.scad new file mode 100644 index 0000000..ffefb0c --- /dev/null +++ b/headrest-rod.scad @@ -0,0 +1,13 @@ +rod_od = 3.5; // The outside diameter of the rod +rod_width = rod_od / sqrt(2); // It's easier to print if the rod is square +rod_height = 92; // How long the rod is + +module rod(width, height) { + translate([-width/2, -width/2, 0]) cube([width, width, height]); +} + +translate([0, rod_height/2, 0]) { + rotate(a=90, v=[1, 0, 0]) { + rod(rod_width, rod_height); + } +}