Saturday 22 April 2017

Two years on

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 )