source code for html website at https://zachdecook.com
Diffstat (limited to 'posts/tightchange/tight.scad')
-rw-r--r--posts/tightchange/tight.scad126
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] ],
+]);*/