Badge Holder
Lanyard style badge holder. Takes a standard credit-card-sized badge.
It is based on this design. The changes I made improve ruggedness by re-enforcing the clip-hole and increasing the overall thickness. I also adjusted the hexagon design because I didn't like how the hexagons were aligned.
It requires supports to print, a single wall to support the edge of the overhang is enough. In Cura that requires these settings:
- Support Pattern: Grid
- Support Density: 0%
- Support X/Y Distance: 2.5mm
- Enable Support Interface: No
$fn=80; module backArea() { translate([4.5,4.5,0]) cube([80,48,2]); } module blank() { scale(25.4) rotate([90,0,0]) import("reference/thingiverse-2810500.stl"); // https://www.thingiverse.com/thing:2810500 translate([2,5,0]) cube([85,50,1]); translate([91,20,0]) cube([4,18,1]); } module blankBottom() { intersection() { blank(); cube([98,57.2,1]); } } module blankTop() { intersection() { blank(); translate([0,0,1]) cube([98,57.2,3]); } } module extendedBlank() { blankBottom(); translate([0,0,1]) { linear_extrude(0.5) projection() blankBottom(); } translate([0,0,0.5]) { blankTop(); clipRenforcement(); } } module clipRenforcement() { translate([92.5,23.48,0.5]) { hull() { cylinder(d=11, h=1.5); translate([0,10.2,0]) cylinder(d=11, h=1.5); } } } module clipHole() { translate([92.65,23.48,0]) { hull() { cylinder(d=4.5, h=20); translate([0,10.2,0]) cylinder(d=4.5, h=20); } } } module hexagon(diameter) { rotate([0,0,30]) cylinder(d=diameter,h=2, $fn=6); } module hexagons() { diameter=10; for(x = [1 : 1 : 8]) { for(y = [1 : 1 : 20]) { gap=0; offsetX = ((y/2) == round(y/2)) ? (diameter/2)-(gap/2):0; offsetY = 3; translate([((diameter-gap)*x)-offsetX,((diameter-gap-1)*y)-offsetY,0]) hexagon(diameter); } } } module triangle(size) { cylinder(d=size,h=2, $fn=3); } module triangles() { size=10; for(x = [1 : 1 : 8]) { for(y = [1 : 1 : 20]) { gap=5; offsetX = ((y/2) == round(y/2)) ? (size/2)-(gap/2):2; offsetY = 3; translate([((size-gap)*x)-offsetX,((size-gap-1)*y)-offsetY,0]) rotate([0,0,180*y]) triangle(size); } } } module star(size) { rotate([0,0,0]) cylinder(d=size,h=2, $fn=3); rotate([0,0,60]) cylinder(d=size,h=2, $fn=3); } module stars() { size=11; for(x = [1 : 1 : 8]) { for(y = [1 : 1 : 20]) { gap=-2; offsetX = ((y/2) == round(y/2)) ? (size/2)-(gap/2):0; offsetY = 3; translate([((size-gap)*x)-offsetX,((size-gap-1)*y)-offsetY,0]) rotate([0,0,180*y]) star(size); } } } module wineGlass() { linear_extrude(height=2) projection(cut=true) { scale(0.03) surface(file="reference/wine-glass.png", center=true, invert=true, convexity=5); } } module wineGlasses() { for(x = [1 : 1 : 5]) { for(y = [1 : 1 : 5]) { gapX=17; gapY=9; offsetX = ((y/2) == round(y/2)) ? (gapX/2):0; offsetY = 3; translate([(gapX*x)-offsetX,(gapY*y)-offsetY,0]) rotate([0,0,-90]) wineGlass(); } } } module badgeHolder() { difference() { union() { extendedBlank(); translate([0,0,0.5]) { clipRenforcement(); } } clipHole(); } } module holderWithHexagons() { difference() { badgeHolder(); union() { intersection() { backArea(); hexagons(); } } } } module holderWithStars() { difference() { badgeHolder(); union() { intersection() { backArea(); translate([-1,2,0]) stars(); } } } } module holderWithWineGlasses() { difference() { badgeHolder(); translate([-8,4.5,0]) wineGlasses(); } } holderWithHexagons(); //Part: holderWithHexagons(); //Part: holderWithStars(); //Part: holderWithWineGlasses();