include <syringePumpConstants.scad>
/* === Model-specific Constants === */
add some clearance, we don't want this against the 8020 rails spaceAboveFloor = 2; plunger plungerDiameter = 26.5; plungerThickness = 2.2; plungerInnerDiameter = 15; plungerClipThickness = 3; plungerWellDepth = plungerThickness + plungerClipThickness;
trap nut nutAcross = 13.2; nutDepth = 6.5; nutWellDepth = nutDepth + 0.05; tight so it won't rattle nutWallThicknessFront = plungerWellDepth+3; nutWallThicknessBack = 4;
nutSlotSizeX = nutWallThicknessFront; nutSlotSizeY = nutAcross; nutSlotSizeZ = nutAcross/2;
linear bearing LM8UU_dia = 15.4; LM8UU_length = 24; cube containing nut, linear bearing, and plunger mountXSize = nutWellDepth + nutWallThicknessFront + nutWallThicknessBack; mountZSize = syringeCenterHeight + plungerDiameter/2 + 3;
/* === Model === */
main cube, holds the two axes difference(){ translate([0,0,spaceAboveFloor]){ cube(size=[mountXSize,baseSizeY,mountZSize]); } nut
translate([-floatCorrection+nutWallThicknessFront,centerY,threadedAxisHeight]){
rotate(a=[0,90,0]){
nutWell();
}
//nut insertion slot
translate([0,0,nutAcross/sqrt(3)]){
rotate(a=[0,90,0]){
nutWell();
}
}
translate([nutWellDepth,0,nutAcross/sqrt(3)]){
rotate(a=[0,90,0]){
nutWell();
}
}
}
//bore hole for threaded rod
translate([-floatCorrection,centerY,threadedAxisHeight]){
rotate(a=[0,90,0]){
cylinder(h=mountXSize+floatCorrection2, r=smoothRodRadius);
}
}
//hole for LM8UU
translate([-floatCorrection,centerY,smoothAxisHeight]){
rotate(a=[0,90,0]){
bearingLM8UU();
}
}
//U-shaped hole for syringe plunger to go in
translate([plungerClipThickness,centerY,syringeCenterHeight]){
rotate(a=[0,90,0]){
cylinder(h=plungerThickness, r=plungerDiameter/2);
}
translate([0,-plungerDiameter/2,0]){
cube(size=[plungerThickness,plungerDiameter,mountZSize]);
}
}
translate([-floatCorrection,centerY,syringeCenterHeight]){
rotate(a=[0,90,0]){
cylinder(h=plungerClipThickness+floatCorrection2, r=plungerInnerDiameter/2);
}
translate([0,-plungerInnerDiameter/2,0]){
cube(size=[plungerClipThickness+floatCorrection2,plungerInnerDiameter,mountZSize]);
}
}
//remove excess volume from sides
translate([-floatCorrection,centerY+plungerDiameter/2 + 4,0]){
cube(size=[mountXSize + floatCorrection2, baseSizeY, mountZSize+spaceAboveFloor]);
}
cube(size=[mountXSize + floatCorrection2, centerY-plungerDiameter/2-4, mountZSize+spaceAboveFloor]);
}
module nutWell(){
//compose the outline of the 6-sided nut using 3 cubes. Yay geometry.
nutEdgeLength = nutAcross / (sqrt(3));
translate([-nutEdgeLength/2, -nutAcross/2, 0]){
cube(size=[nutEdgeLength,nutAcross,nutWellDepth+floatCorrection2]);
}
rotate(a=[0,0,60]){
translate([-nutEdgeLength/2, -nutAcross/2, 0]){
cube(size=[nutEdgeLength,nutAcross,nutWellDepth+floatCorrection2]);
}
}
rotate(a=[0,0,-60]){
translate([-nutEdgeLength/2, -nutAcross/2, 0]){
cube(size=[nutEdgeLength,nutAcross,nutWellDepth+floatCorrection2]);
}
}
}
module bearingLM8UU(){
cylinder(h=LM8UU_length, r=LM8UU_dia/2);
}