I have failed to update this blog for two years.
I have no excuse, I am now retired and am active in a number of ways on Amateur Radio and Light engineering.
I am playing with in no particular order:-
- WSPR
- SDR Receivers and Transmitters
- Raspberry Pi's
- Encrypted Internet Links
- Remote Web-servers
- Laser Cutters (Solid state)
- CNC Milling (Small scale)
- 3D Printing
These all interact in interesting ways, for instance I am using 3D printing to make parts to improve my Laser Cutter which I intend to use for PCB etch resist removal which gives me small circuit boards cut and drilled by the CNC Mill to make RF circuits for my electronic and radio experiments!
So not of interest to many but an early attempt at creating a support component for this tangled chain I used
OPENSCAD to produce a replacement carriage for the laser cutter with tighter tolerances to reduce the side slip that was affecting the reliability and repeat-ability of the laser cutter.
OpenSCAD uses a simple language to define 3 Dimension shapes mathematically. So in this case a source code of :-
/* Plate
units mm
*/
$fn=45;
PlateType = 2;
Toplen = 114.5;
Thick = 6.7;
Height = 112.75;
ShaftH = 5.2;
Hole3 = 4.6;
Hole4 = Hole3;
Hole5 = 24;
Hole6 = 4;
Hole7 = Hole6;
Hole8 = 3.6;
Hole9 = Hole8;
Hole10 = Hole8;
HoleS1 = Hole8;
HoleS2 = Hole8;
KHole1a = 6;
KHole1b = KHole1a;
KHole2 = KHole1a;
HoleRow = 5.6;
HoleRow2 = 62;
HoleRow3 = 22;
HoleRow4 = 45.7;
HoleRow5 = 88;
HoleRow6 = HoleRow5-31/2 ; /* Nema17 */
HoleRow7 = HoleRow5+31/2 ;
HoleRow8 = 16.4;
HoleRow9 = 56.3;
HoleRow10 = 95;
HoleSLen = 1.6;
HoleS1a = 37.7;
HoleS1b = HoleS1a + HoleSLen;
HoleSS = 33.5;
HoleS2a = HoleS1a +HoleSS;
HoleS2b = HoleS1b +HoleSS;
KHoleR1 = 31;
KHoleR2 = 70.5;
HoleIn = 11.3;
HoleIn2 = 19;
HoleSep3 = 17;
HoleSep4 = HoleSep3;
HoleSep6 = 31;
HoleSep7 = 31;
HoleSep8 = 20;
HoleSep9 = HoleSep8;
HoleSep10 = HoleSep8;
HoleSSep = 50;
KHole1Sep = 15;
KHoleBH = 6;
KHoleBW = 3.3;
difference() {
union(){
cube([Toplen, Height,Thick],center=true);
}
union(){
/* Wheels */
translate([0,(Height/2) - HoleRow,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=ShaftH, true) ;
translate([0- (Toplen / 2) + HoleIn ,(Height/2) - HoleRow,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=ShaftH, true) ;
translate([ (Toplen / 2) - HoleIn ,(Height/2) - HoleRow,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=ShaftH, true) ;
translate([0- (Toplen / 2) + HoleIn2 ,(Height/2) - HoleRow2,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=ShaftH, true) ;
translate([ (Toplen / 2) - HoleIn2 ,(Height/2) - HoleRow2,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=ShaftH, true) ;
if (PlateType == 1){
translate([ HoleSep3/2 ,(Height/2) - HoleRow3,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole3, true) ;
translate([ 0 - HoleSep3/2 ,(Height/2) - HoleRow3,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole3, true) ;
translate([ HoleSep4/2 ,(Height/2) - HoleRow4,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole4, true) ;
translate([ 0 - HoleSep4/2 ,(Height/2) - HoleRow4,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole4, true) ;
/* NEMA17 */
translate([0,(Height/2) - HoleRow5,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole5,true);
translate([ HoleSep6/2 ,(Height/2) - HoleRow6,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole6, true) ;
translate([ 0 - HoleSep6/2 ,(Height/2) - HoleRow6,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole6, true) ;
translate([ HoleSep7/2 ,(Height/2) - HoleRow7,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole7, true) ;
translate([ 0 - HoleSep7/2 ,(Height/2) - HoleRow7,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole7, true) ;
}
else
{
/* Holes */
translate([ HoleSep8/2 ,(Height/2) - HoleRow8,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole8, true) ;
translate([ 0 - HoleSep8/2 ,(Height/2) - HoleRow8,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole8, true) ;
translate([ HoleSep9/2 ,(Height/2) - HoleRow9,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole9, true) ;
translate([ 0 - HoleSep9/2 ,(Height/2) - HoleRow9,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole9, true) ;
translate([ HoleSep10/2 ,(Height/2) - HoleRow10,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole10, true) ;
translate([ 0 - HoleSep9/2 ,(Height/2) - HoleRow10,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=Hole10, true) ;
/* Key Holes */
translate([ KHole1Sep/2 ,(Height/2) - KHoleR1,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=KHole1a, true) ;
translate([ KHole1Sep/2 ,(Height/2) - KHoleR1 - KHoleBH + 1 ,0]) rotate([0,0,0]) cube([KHoleBW,KHoleBH,3*Thick],true) ;
translate([ 0 - KHole1Sep/2 ,(Height/2) - KHoleR1,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=KHole1b, true) ;
translate([0- KHole1Sep/2 ,(Height/2) - KHoleR1 - KHoleBH + 1 ,0]) rotate([0,0,0]) cube([KHoleBW,KHoleBH,3*Thick],true) ;
translate([ 0 ,(Height/2) - KHoleR2,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=KHole2, true) ;
translate([0 ,(Height/2) - KHoleR2 - KHoleBH + 1 ,0]) rotate([0,0,0]) cube([KHoleBW,KHoleBH,3*Thick],true) ;
/* Slots */
translate([ HoleSSep/2 ,(Height/2) - HoleS1a,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS1, true) ;
translate([ 0 - HoleSSep/2 ,(Height/2) - HoleS1a,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS1, true) ;
translate([ HoleSSep/2 ,(Height/2) - HoleS1b,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS1, true) ;
translate([ 0 - HoleSSep/2 ,(Height/2) - HoleS1b,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS1, true) ;
translate([ HoleSSep/2 ,(Height/2) - HoleS2a,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS2, true) ;
translate([ 0 - HoleSSep/2 ,(Height/2) - HoleS2a,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS2, true) ;
translate([ HoleSSep/2 ,(Height/2) - HoleS2b,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS2, true) ;
translate([ 0 - HoleSSep/2 ,(Height/2) - HoleS2b,0-(1.5*Thick)]) rotate([0,0,0]) cylinder(3*Thick,d=HoleS2, true) ;
translate([ HoleSSep/2 ,(Height/2) - (HoleS1a+HoleS1b) / 2,0]) rotate([0,0,0]) cube([HoleS1,HoleSLen,3*Thick], true) ;
translate([ 0 - HoleSSep/2 ,(Height/2) - (HoleS1a+HoleS1b) /2 ,0]) rotate([0,0,0]) cube([HoleS1,HoleSLen,3*Thick], center=true) ;
translate([ HoleSSep/2 ,(Height/2) - (HoleS2a+HoleS2b) / 2,0]) rotate([0,0,0]) cube([HoleS2,HoleSLen,3*Thick], true) ;
translate([ 0 - HoleSSep/2 ,(Height/2) - (HoleS2a+HoleS2b) /2 ,0]) rotate([0,0,0]) cube([HoleS2,HoleSLen,3*Thick], true) ;
}
}
}
Can generate two different 3D shapes depending on the value of Platetype.
For Platetype = 1
For Platetype = 2
These are of course simpler than the original parts that had shaping for clearance and minor style reasons.
Comparing these with the Clear Acrylic originals shows the disadvantages of the PLA I used to print it being opaque and prettier than my new test replacements, however the big advantage is that the slop is now gone from the mechanism so I will use these simple replacements for further experimentation.
(For interest the Laser Cutter is an
EleksMaker® EleksLaser-A3 Pro 2500mW Laser Engraving Machine CNC Laser Printer )