This commit is contained in:
Neale Pickett 2022-09-25 16:39:13 -06:00
commit 2fa95acb83
4 changed files with 114 additions and 0 deletions

2
LICENSE.md Normal file
View File

@ -0,0 +1,2 @@
No rights reserved.
I place these files in the public domain.

14
README.md Normal file
View File

@ -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.

85
headrest-button.scad Normal file
View File

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

13
headrest-rod.scad Normal file
View File

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