source code for html website at https://zachdecook.com
Diffstat (limited to 'posts/tightchange/tight.scad')
| -rw-r--r-- | posts/tightchange/tight.scad | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/posts/tightchange/tight.scad b/posts/tightchange/tight.scad new file mode 100644 index 0000000..767ad45 --- /dev/null +++ b/posts/tightchange/tight.scad @@ -0,0 +1,126 @@ +width=85.6; +height=53.98 + 3; + +bobbyh = .7;//measured at .6 height and 1.6 at the bubble for a single stalk +// it's also 1.5 wide, but we're not using that measurement here. +bobbyl = 50; // length of bobby pin +bobbyscooch = 10;// how much the bobby pin can scooch up: should be at least 7. + +coinThick=1.75+.2; +coinR = 12.13 + .1 + (bobbyh/2) + .1; + +thumbSlot = 7-1; +walls=.8; +roundy=.5; +invisit = 1; + +$fn = 30; + + +dollarR=13.254+.1 + .7 + (bobbyh/2); +dollarT=2+.1 + .2; + +/** + * @param Tracks: array of arrays like [ [y,z,thumb,rad,thick], [y,z] ] + */ +module coinCard(tracks) +{ + difference(){ + //Base block + minkowski(){ + cube([dollarT+2*walls-2*roundy,width-2*roundy,height-2*roundy]); + translate([roundy,roundy,roundy])sphere(roundy); + } + for( track = tracks ) + { + // Inner slot + for(i=[1:1:len(track)-1]) + { + hull() + { + #translate([walls,track[i][0],track[i][1]])rotate([0,90,0]) + cylinder(r=track[0][3],h = track[0][4]); + #translate([walls,track[i-1][0],track[i-1][1]])rotate([0,90,0]) + cylinder(r=track[0][3],h = track[0][4]); + } + } + //thumb slot + if(track[0][2]) + { + for(i=[1:1:len(track)-1]) + { + color(c=[i/(len(track)-1),i%2/(len(track)-1),i%3/(len(track)-1)])hull() + { + translate([-invisit,track[i][0],track[i][1]])rotate([0,90,0])cylinder(r=thumbSlot,h = coinThick+invisit); + translate([-invisit,track[i-1][0],track[i-1][1]])rotate([0,90,0])cylinder(r=thumbSlot,h = coinThick+invisit); + } + } + } + } + // cut through the model (easier debugging) + //translate([-1,0,0])cube([25,45,100]); + } +} + +// dollar coins and quarters +/*translate([-10,0,0])coinCard([ + [ [width-coinR-walls,height-coinR-walls,true,coinR,coinThick], [0,height-coinR-walls] ], + [ [width-dollarR-walls,dollarR+walls,true,dollarR,dollarT], [0, dollarR+walls] ], +]);*/ + +pennyR = (19.05/2) + .7; +pennyT = 1.52 + .2; + +dimeR = (17.91 /2) + .7 + .1; +dimeT = 1.35 + .2; + +nicR = (21.21/2) + .7; +nicT = 1.95 + .2; + +angle = 50; +zigZ = cos(angle)*2;//6/5;//sqrt(2); +zigY = sin(angle)*2;//8/5;//sqrt(2); + +difference(){ + union(){ + // A nickel in front of the dimes, and pennies + translate([0,0,0])coinCard([ + [ [width-pennyR-walls,height-pennyR-walls,true,pennyR,pennyT], [0,height-pennyR-walls] ], + [ + [width-dimeR-walls, + dimeR+walls+(dimeR*zigZ),true,dimeR,dimeT], + [width-dimeR-walls - (dimeR*zigY), + dimeR+walls ], + [width-dimeR-walls - (dimeR*zigY*2), + dimeR+walls+(dimeR*zigZ)], + [width-dimeR-walls - (dimeR*zigY*3), + dimeR+walls], + [nicR+walls, height-(pennyR*2)-walls - nicR-walls] + + ], + [ + [nicR+walls, + height-(pennyR*2)-walls-nicR-walls,true,nicR,nicT], + [0, height-(pennyR*2)-walls - nicR-walls] + ], + ]); + // dollar coins and quarters + color("green")translate([dollarT+2*walls + dollarT + 1*walls+.1,0,0])mirror([1,0,0])coinCard([ + [ [width-coinR-walls,height-coinR-walls,true,coinR,coinThick], [0,height-coinR-walls] ], + [ [width-dollarR-walls,dollarR+walls,true,dollarR,dollarT], [0, dollarR+walls] ], + ]); + } + // cut a little hole for us to put our bobbypin through + #translate([4,bobbyl-bobbyscooch,dollarR*2 + walls-invisit])cube([dollarT,bobbyscooch,2+invisit]); + #translate([walls,bobbyl-bobbyscooch,height - (pennyR*2) - (walls*2)-invisit]) + cube([dollarT,bobbyscooch,2+invisit]); + // a spot for the bobby pin to slide next to the dime zig-zag + #translate([walls,0,height - (pennyR*2) - (walls*2)-1.6-.4]) + cube([dollarT,bobbyl,1.6+.4]); +} + +/*translate([20,0,0])coinCard([ + [ [width-pennyR-walls,height-pennyR-walls,true,pennyR,pennyT], [0,height-pennyR-walls] ], + [[width-pennyR-walls,height-pennyR-walls,false,pennyR,pennyT],[width-pennyR-walls,pennyR+walls]], + [ [width-pennyR-walls,pennyR+walls,true,pennyR,pennyT], [pennyR+walls,pennyR+walls] ], +]);*/ |