Earlier this week, I tried to print out the first version of my Arduino bumper. Sadly, our Replicator 2 had a malfunction mid print, and it’s still offline (a problem with the temp sensor) but that doesn’t mean I’ve been entirely stationary. I mentioned on twitter that I was having trouble using the minkowski operator to generate interior offset surfaces, and @kitwallace responded this pointer to some code he used which helped me generate a “lip” inside the outer wall that would snugly fit the Arduino. I also realized that this wall would bump into the backside of some of the pins, particularly around the DC jack, but also on the ICSP and header pins. So, I revised this a bit, and came up with this program:
[sourcecode lang=”cpp”]
module arduino_outline() {
polygon([[0, 0],
[0, 2100],
[2540, 2100],
[2600, 2040],
[2600, 1590],
[2700, 1490],
[2700, 200],
[2600, 100],
[2600, 0]]) ;
}
px = 2505.512 ;
py = 1198.031 ;
module icsp() {
translate([px, py-200, 31.25]) minkowski() {
cube([100, 200, 62.5]) ;
cylinder(r=50) ;
}
}
eps = 0.001 ;
s = 25.4/1000. ;
cl = 8 ;
th = 62.5 ;
module os() {
linear_extrude(height=250)
minkowski() {
arduino_outline() ;
circle(r=th+cl) ;
}
}
module is() {
translate([0, 0, -eps]) linear_extrude(height=250 + 2 * eps)
minkowski() {
arduino_outline() ;
circle(r=cl) ;
}
}
module final() {
difference() {
os() ;
is() ;
}
}
module neg() {
union() {
intersection() {
minkowski() {
difference() {
translate([-200, -200, eps]) cube([3000, 3000, 62.5]) ;
os() ;
}
cylinder(r=200+th+cl*2) ;
}
os() ;
}
final() ;
}
}
module holes() {
union() {
translate([550, 100]) cylinder(r=125/2., h=500, center=true) ;
translate([600, 2000]) cylinder(r=125/2., h=500, center=true) ;
translate([2600, 300]) cylinder(r=125/2., h=500, center=true) ;
translate([2600, 1400]) cylinder(r=125/2., h=500, center=true) ;
}
}
off = 31.25 ;
d = 31.25 ;
w = 31.25 ;
module relief() {
translate([1100, 100, 62.5]) translate([-w, -w, -d])
cube([1400+2*w, 2*w, 2*d]) ;
translate([740, 2000, 62.5]) translate([-w, -w, -d])
cube([1740+2*w, 2*w, 2*d]) ;
}
module slots() {
union() {
translate([-100, 125, 63+off]) cube([550, 350, 500]) ;
translate([-250, 1275, 63+off]) cube([625, 500, 500]) ;
translate([-cl, 125, 0]) cube([450+cl, 350, 500]) ;
}
}
$fn = 24 ;
scale([s, s, s]) difference() { neg() ; holes() ; slots(); relief() ; icsp() ; }
[/sourcecode]
Here’s a quick picture:
It might be a few days before I can get this printed. If anyone uses this to generate STL and print it, I’d love to hear about what you think.
If not, stay tuned. I’ll get there eventually.
I was just going to point out that your local machinist could probably run parts off like this with a mill in metal and not break the bank.
Yeah, but this part in particular has modest structural requirements and consists of mostly empty space. 3D printing one costs about $0.05 per gram of material (I haven’t computed how many grams it is, but it isn’t a lot). If you were going to mass produce one, injection molding would probably be the way to go, but for prototypes, 3d printing is pretty reasonable. I should have one printed tomorrow, we’ll see how it goes.