Download some bookends
This commit is contained in:
parent
3ecece5910
commit
1bfe08028e
26 changed files with 418 additions and 0 deletions
BIN
bookends/bookend modern v1.stl
Normal file
BIN
bookends/bookend modern v1.stl
Normal file
Binary file not shown.
BIN
bookends/bookend_generative_design v4.stl
Normal file
BIN
bookends/bookend_generative_design v4.stl
Normal file
Binary file not shown.
BIN
bookends/bookend_simple_v7.stl
Normal file
BIN
bookends/bookend_simple_v7.stl
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bookends/brooklyn-bridge-bookend-model_files/Bridge Cables.3mf
Normal file
BIN
bookends/brooklyn-bridge-bookend-model_files/Bridge Cables.3mf
Normal file
Binary file not shown.
BIN
bookends/brooklyn-bridge-bookend-model_files/Bridge Tower.3mf
Normal file
BIN
bookends/brooklyn-bridge-bookend-model_files/Bridge Tower.3mf
Normal file
Binary file not shown.
BIN
bookends/hdd_end.stl
Normal file
BIN
bookends/hdd_end.stl
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-10-bars.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-10-bars.stl
Normal file
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-17-pins.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-17-pins.stl
Normal file
Binary file not shown.
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-bar.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-bar.stl
Normal file
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-left-wall.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-left-wall.stl
Normal file
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-long-pin.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-long-pin.stl
Normal file
Binary file not shown.
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-right-wall.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-right-wall.stl
Normal file
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-short-pin.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-short-pin.stl
Normal file
Binary file not shown.
Binary file not shown.
BIN
bookends/pantograph-bookend-model_files/bookend-spacer.stl
Normal file
BIN
bookends/pantograph-bookend-model_files/bookend-spacer.stl
Normal file
Binary file not shown.
185
bookends/pantograph-bookend-model_files/bookend.scad
Normal file
185
bookends/pantograph-bookend-model_files/bookend.scad
Normal file
|
@ -0,0 +1,185 @@
|
|||
/* PANTOGRAPH BOOKEND */
|
||||
|
||||
side_width = 100;
|
||||
side_height = 150;
|
||||
thickness = 2;
|
||||
bar_width = 15;
|
||||
hole_diameter = bar_width/2;
|
||||
thread_tolerance = 0.05;
|
||||
threaded_pins = true;
|
||||
|
||||
translate([0, -bar_width, 0])
|
||||
left_wall2();
|
||||
right_wall();
|
||||
//bars(10);
|
||||
//pins(17);
|
||||
|
||||
|
||||
|
||||
/******************************************************************/
|
||||
include <polyScrewThread_r1.scad>
|
||||
$fn=180;
|
||||
max=1000; //some high number for diff purposes
|
||||
hd=hole_diameter;
|
||||
bw=bar_width;
|
||||
sw=side_width;
|
||||
sh=side_height;
|
||||
t=thickness;
|
||||
tr=0.85;
|
||||
|
||||
module pins(count) {
|
||||
//2 long pins
|
||||
translate([-3*bw,bw,0]) pin(true);
|
||||
translate([-3*bw,2*bw,0]) pin(true);
|
||||
|
||||
//rest are short pins
|
||||
for(i=[3:count])
|
||||
translate([-3*bw,bw*i,0]) pin(false);
|
||||
|
||||
//spacers
|
||||
for(i=[-1:2:1])
|
||||
translate([-3*bw+i*bw/2*1.1,0,t/2]) spacer();
|
||||
}
|
||||
|
||||
module spacer() {
|
||||
difference() {
|
||||
cylinder(h=t, d=bw, center=true);
|
||||
cylinder(h=max, d=hd, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module pin(long) {
|
||||
height = (long?3:2)*t+1;
|
||||
translate([-bw/2,0,0]) pin_male(height);
|
||||
translate([bw/2,0,0]) pin_female(height);
|
||||
}
|
||||
|
||||
module pin_female(height) {
|
||||
if(threaded_pins) {
|
||||
translate([0,0,.5]) cylinder(h=1, r=bw/2.5, center=true, $fn=6);
|
||||
translate([0,0,1])
|
||||
difference() {
|
||||
translate([0,0,height/2]) cylinder(h=height, d=hd*.95, center=true);
|
||||
translate([0,0, height+1]) rotate([180,0,0]) screw_thread(hd*tr, 3, 65, height+1, PI/8, 1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
difference() {
|
||||
translate([0,0,1.5]) cylinder(h=3, r=bw/2.5, center=true);
|
||||
translate([0,0,3]) cylinder(h=4, d=hd*.97, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module pin_male(height) {
|
||||
if(threaded_pins) {
|
||||
translate([0,0,.5]) cylinder(h=1, r=bw/2.5, center=true, $fn=6);
|
||||
translate([0,0,1]) screw_thread(hd*(tr-thread_tolerance), 3, 65, height, PI/8, 1);
|
||||
}
|
||||
else {
|
||||
translate([0,0,.5]) cylinder(h=1, r=bw/2.5, center=true);
|
||||
translate([0,0,(height+2)/2+1]) cylinder(h=height+2, d=hd*.95, center=true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module bars(count) {
|
||||
for(i=[1:count])
|
||||
translate([bw+1.2*bw*i,0,0]) bar();
|
||||
}
|
||||
|
||||
module bar() {
|
||||
difference() {
|
||||
plate(bw, sh-bw);
|
||||
translate([0, sh/2-bw,0])
|
||||
difference() {
|
||||
translate([0,max/2,0]) cube([max,max,10], center=true);
|
||||
cylinder(h=max, d=bar_width, center=true);
|
||||
}
|
||||
translate([0, -sh/2+bw,0])
|
||||
difference() {
|
||||
translate([0,-max/2,0]) cube([max,max,10], center=true);
|
||||
cylinder(h=max, d=bar_width, center=true);
|
||||
}
|
||||
translate([0,(sh-2*bw)/2,0]) cylinder(h=max, d=hd, center=true);
|
||||
translate([0,0,0]) cylinder(h=max, d=hd, center=true);
|
||||
translate([0,-(sh-2*bw)/2,0]) cylinder(h=max, d=hd, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module right_wall() {
|
||||
translate([-10,0,0]) mirror([1,0,0]) left_wall();
|
||||
}
|
||||
|
||||
module left_wall() {
|
||||
//side wall
|
||||
translate([0,0,side_width/2])
|
||||
rotate([0,270,0])
|
||||
difference() {
|
||||
plate(side_width, side_height);
|
||||
translate([-(side_height-side_width)/2,0,0])
|
||||
difference() {
|
||||
translate([500,500,0]) cube([1000,1000,10], center=true);
|
||||
cylinder(h=1000, d=side_height, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
//back
|
||||
translate([bw/2,0,0])
|
||||
difference() {
|
||||
plate(bw, sh);
|
||||
translate([0, (side_height - bar_width)/2,0])
|
||||
difference() {
|
||||
translate([max/2,max/2,0]) cube([max,max,10], center=true);
|
||||
cylinder(h=max, d=bar_width, center=true);
|
||||
}
|
||||
translate([0,(sh-bw)/2,0]) cylinder(h=max, d=hd, center=true);
|
||||
translate([0,(sh-bw)/2-bw,0]) cylinder(h=max, d=hd, center=true);
|
||||
translate([0,-bw/2,0]) cube([hd, sh-2*bw, 100],center=true);
|
||||
translate([0,-(sh-bw)/2,0]) cylinder(h=max, d=hd, center=true);
|
||||
}
|
||||
|
||||
//bottom
|
||||
translate([bar_width/2,-side_height/2+thickness,side_width/2])
|
||||
rotate([90,0,0])
|
||||
plate(bar_width, side_width);
|
||||
}
|
||||
|
||||
module left_wall2() {
|
||||
//side wall
|
||||
translate([0,0,side_width/2])
|
||||
rotate([0,270,0])
|
||||
difference() {
|
||||
plate(side_width, side_height);
|
||||
translate([-(side_height-side_width)/2,0,0])
|
||||
difference() {
|
||||
translate([500,500,0]) cube([1000,1000,10], center=true);
|
||||
cylinder(h=1000, d=side_height, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
//back
|
||||
translate([bw/2,0,0])
|
||||
difference() {
|
||||
plate(bw, sh);
|
||||
translate([0, (side_height - bar_width)/2,0])
|
||||
difference() {
|
||||
translate([max/2,max/2,0]) cube([max,max,10], center=true);
|
||||
cylinder(h=max, d=bar_width, center=true);
|
||||
}
|
||||
translate([0,(sh-bw)/2,0]) cylinder(h=max, d=hd, center=true);
|
||||
translate([0,(sh-bw)/2-bw,0]) cylinder(h=max, d=hd, center=true);
|
||||
translate([0,-bw/2,0]) cube([hd, sh-2*bw, 100],center=true);
|
||||
translate([0,-(sh-bw)/2,0]) cylinder(h=max, d=hd, center=true);
|
||||
}
|
||||
|
||||
//bottom
|
||||
translate([-bar_width,-side_height/2+thickness,side_width/2])
|
||||
rotate([90,0,0])
|
||||
plate(bar_width * 4, side_width);
|
||||
}
|
||||
|
||||
|
||||
module plate(width,height) {
|
||||
translate([0,0,thickness/2]) cube([width, height, thickness], true);
|
||||
}
|
Binary file not shown.
233
bookends/pantograph-bookend-model_files/polyScrewThread_r1.scad
Normal file
233
bookends/pantograph-bookend-model_files/polyScrewThread_r1.scad
Normal file
|
@ -0,0 +1,233 @@
|
|||
/*
|
||||
* polyScrewThread_r1.scad by aubenc @ Thingiverse
|
||||
*
|
||||
* This script contains the library modules that can be used to generate
|
||||
* threaded rods, screws and nuts.
|
||||
*
|
||||
* http://www.thingiverse.com/thing:8796
|
||||
*
|
||||
* CC Public Domain
|
||||
*/
|
||||
|
||||
module screw_thread(od,st,lf0,lt,rs,cs)
|
||||
{
|
||||
or=od/2;
|
||||
ir=or-st/2*cos(lf0)/sin(lf0);
|
||||
pf=2*PI*or;
|
||||
sn=floor(pf/rs);
|
||||
lfxy=360/sn;
|
||||
ttn=round(lt/st+1);
|
||||
zt=st/sn;
|
||||
|
||||
intersection()
|
||||
{
|
||||
if (cs >= -1)
|
||||
{
|
||||
thread_shape(cs,lt,or,ir,sn,st);
|
||||
}
|
||||
|
||||
full_thread(ttn,st,sn,zt,lfxy,or,ir);
|
||||
}
|
||||
}
|
||||
|
||||
module hex_nut(df,hg,sth,clf,cod,crs)
|
||||
{
|
||||
|
||||
difference()
|
||||
{
|
||||
hex_head(hg,df);
|
||||
|
||||
hex_countersink_ends(sth/2,cod,clf,crs,hg);
|
||||
|
||||
screw_thread(cod,sth,clf,hg,crs,-2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module hex_screw(od,st,lf0,lt,rs,cs,df,hg,ntl,ntd)
|
||||
{
|
||||
ntr=od/2-(st/2)*cos(lf0)/sin(lf0);
|
||||
|
||||
union()
|
||||
{
|
||||
hex_head(hg,df);
|
||||
|
||||
translate([0,0,hg])
|
||||
if ( ntl == 0 )
|
||||
{
|
||||
cylinder(h=0.01, r=ntr, center=true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ntd == -1 )
|
||||
{
|
||||
cylinder(h=ntl+0.01, r=ntr, $fn=floor(od*PI/rs), center=false);
|
||||
}
|
||||
else if ( ntd == 0 )
|
||||
{
|
||||
union()
|
||||
{
|
||||
cylinder(h=ntl-st/2,
|
||||
r=od/2, $fn=floor(od*PI/rs), center=false);
|
||||
|
||||
translate([0,0,ntl-st/2])
|
||||
cylinder(h=st/2,
|
||||
r1=od/2, r2=ntr,
|
||||
$fn=floor(od*PI/rs), center=false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cylinder(h=ntl, r=ntd/2, $fn=ntd*PI/rs, center=false);
|
||||
}
|
||||
}
|
||||
|
||||
translate([0,0,ntl+hg]) screw_thread(od,st,lf0,lt,rs,cs);
|
||||
}
|
||||
}
|
||||
|
||||
module hex_screw_0(od,st,lf0,lt,rs,cs,df,hg,ntl,ntd)
|
||||
{
|
||||
ntr=od/2-(st/2)*cos(lf0)/sin(lf0);
|
||||
|
||||
union()
|
||||
{
|
||||
hex_head_0(hg,df);
|
||||
|
||||
translate([0,0,hg])
|
||||
if ( ntl == 0 )
|
||||
{
|
||||
cylinder(h=0.01, r=ntr, center=true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ntd == -1 )
|
||||
{
|
||||
cylinder(h=ntl+0.01, r=ntr, $fn=floor(od*PI/rs), center=false);
|
||||
}
|
||||
else if ( ntd == 0 )
|
||||
{
|
||||
union()
|
||||
{
|
||||
cylinder(h=ntl-st/2,
|
||||
r=od/2, $fn=floor(od*PI/rs), center=false);
|
||||
|
||||
translate([0,0,ntl-st/2])
|
||||
cylinder(h=st/2,
|
||||
r1=od/2, r2=ntr,
|
||||
$fn=floor(od*PI/rs), center=false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cylinder(h=ntl, r=ntd/2, $fn=ntd*PI/rs, center=false);
|
||||
}
|
||||
}
|
||||
|
||||
translate([0,0,ntl+hg]) screw_thread(od,st,lf0,lt,rs,cs);
|
||||
}
|
||||
}
|
||||
|
||||
module thread_shape(cs,lt,or,ir,sn,st)
|
||||
{
|
||||
if ( cs == 0 )
|
||||
{
|
||||
cylinder(h=lt, r=or, $fn=sn, center=false);
|
||||
}
|
||||
else
|
||||
{
|
||||
union()
|
||||
{
|
||||
translate([0,0,st/2])
|
||||
cylinder(h=lt-st+0.005, r=or, $fn=sn, center=false);
|
||||
|
||||
if ( cs == -1 || cs == 2 )
|
||||
{
|
||||
cylinder(h=st/2, r1=ir, r2=or, $fn=sn, center=false);
|
||||
}
|
||||
else
|
||||
{
|
||||
cylinder(h=st/2, r=or, $fn=sn, center=false);
|
||||
}
|
||||
|
||||
translate([0,0,lt-st/2])
|
||||
if ( cs == 1 || cs == 2 )
|
||||
{
|
||||
cylinder(h=st/2, r1=or, r2=ir, $fn=sn, center=false);
|
||||
}
|
||||
else
|
||||
{
|
||||
cylinder(h=st/2, r=or, $fn=sn, center=false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module full_thread(ttn,st,sn,zt,lfxy,or,ir)
|
||||
{
|
||||
if(ir >= 0.2)
|
||||
{
|
||||
for(i=[0:ttn-1])
|
||||
{
|
||||
for(j=[0:sn-1])
|
||||
assign( pt = [ [0, 0, i*st-st ],
|
||||
[ir*cos(j*lfxy), ir*sin(j*lfxy), i*st+j*zt-st ],
|
||||
[ir*cos((j+1)*lfxy), ir*sin((j+1)*lfxy), i*st+(j+1)*zt-st ],
|
||||
[0,0,i*st],
|
||||
[or*cos(j*lfxy), or*sin(j*lfxy), i*st+j*zt-st/2 ],
|
||||
[or*cos((j+1)*lfxy), or*sin((j+1)*lfxy), i*st+(j+1)*zt-st/2 ],
|
||||
[ir*cos(j*lfxy), ir*sin(j*lfxy), i*st+j*zt ],
|
||||
[ir*cos((j+1)*lfxy), ir*sin((j+1)*lfxy), i*st+(j+1)*zt ],
|
||||
[0, 0, i*st+st ] ])
|
||||
{
|
||||
polyhedron(points=pt,
|
||||
triangles=[ [1,0,3],[1,3,6],[6,3,8],[1,6,4],
|
||||
[0,1,2],[1,4,2],[2,4,5],[5,4,6],[5,6,7],[7,6,8],
|
||||
[7,8,3],[0,2,3],[3,2,7],[7,2,5] ]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("Step Degrees too agresive, the thread will not be made!!");
|
||||
echo("Try to increase de value for the degrees and/or...");
|
||||
echo(" decrease the pitch value and/or...");
|
||||
echo(" increase the outer diameter value.");
|
||||
}
|
||||
}
|
||||
|
||||
module hex_head(hg,df)
|
||||
{
|
||||
rd0=df/2/sin(60);
|
||||
x0=0; x1=df/2; x2=x1+hg/2;
|
||||
y0=0; y1=hg/2; y2=hg;
|
||||
|
||||
intersection()
|
||||
{
|
||||
cylinder(h=hg, r=rd0, $fn=6, center=false);
|
||||
|
||||
rotate_extrude(convexity=10, $fn=6*round(df*PI/6/0.5))
|
||||
polygon([ [x0,y0],[x1,y0],[x2,y1],[x1,y2],[x0,y2] ]);
|
||||
}
|
||||
}
|
||||
|
||||
module hex_head_0(hg,df)
|
||||
{
|
||||
cylinder(h=hg, r=df/2/sin(60), $fn=6, center=false);
|
||||
}
|
||||
|
||||
module hex_countersink_ends(chg,cod,clf,crs,hg)
|
||||
{
|
||||
translate([0,0,-0.1])
|
||||
cylinder(h=chg+0.01,
|
||||
r1=cod/2,
|
||||
r2=cod/2-(chg+0.1)*cos(clf)/sin(clf),
|
||||
$fn=floor(cod*PI/crs), center=false);
|
||||
|
||||
translate([0,0,hg-chg+0.1])
|
||||
cylinder(h=chg+0.01,
|
||||
r1=cod/2-(chg+0.1)*cos(clf)/sin(clf),
|
||||
r2=cod/2,
|
||||
$fn=floor(cod*PI/crs), center=false);
|
||||
}
|
||||
|
Loading…
Reference in a new issue