Cletus' PM-935TS-3PH Mill Log

Rechecked the tram again today, now that I've used it a bit. Reassuring to note the X, Y and the vise are all within 0.0005"
 
I love the simplicity of the angled aluminum as a tilting mechanism tor ergonomics there, getting the micrometer to an angle better for viewing on a flat surface.
Hahaha, it did not start off simple. I had a pretty convoluted AutoCAD drawing of how I wanted to make it, with a whole bunch of machined parts. But once I played with the big endmill on that piece of scrap 2" angle aluminum, the drawing went in the trash and I just kept going at it freehand. I'm quite pleased with the outcome, it fits my needs perfectly, very comfortable to work with and I think there is some elegance in the simplicity :laughing:
 
Making tools for the tool with the tool!
Quick speed handle. Shaft and socket press fitted and pinned-through with M4 grub-screws.
Got to play with my boring head, reamer set, V-Blocks, hydraulic press and knurl tool.
.......My Shop-Vac's eating healthy these days! :laughing:
speed handle2.jpg

speed handle1.jpg
 
Last edited:
I'm refurbishing an Operating Room Light. Setting up the CNC Rotary Table to index some cuts and some holes. The machine is beginning to earn it's keep!
:cpa:
CNC Rotary Table Setup.jpg

 
Last edited:
….Here are some preliminary pics (note the blue HDPE glides I made, worked like a charm!)…
I recognize the look on the face of your daughter, it appears to be universal…

It’s the “I know I’m supposed to be supportive but this is asking too much” look. I got that look the other day when I told my wife I wanted to get a mill to keep the lathe company.
 
Last edited:
Very cool indexer, when are you going to start selling them. :frog:
 
If you are interested in making one, I can send you the Arduino code:teacher:
 
Last edited:
I recognize the look on the face of your daughter, it appears to be universal…

It’s the “I know I’m supposed to be supportive but this is asking too much” look. I got that look the other day when I told my wife I wanted to get a mill to keep the lathe company.
Oh Yeah! :laughing:
 
For those interested, here's my adaptation of the Arduino code for the stand-alone CNC Rotary Table (unclear who the original author is, so I cannot extend proper credit) :


/*
2021/05/28
ROTARY TABLE DRIVER
Edit the StepsPerRotation & TableRatio(# of turns for 360 degrees)in line 29

STEPPER DRIVER

LCD DISPLAY

4 X 4 MATRIX KEYPAD

*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'.','0','#','D'}
};

byte rowPINS[ROWS] = {11,10,9,8};
byte colPINS[COLS] = {7,6,5,4};

Keypad kpd = Keypad(makeKeymap(keys),rowPINS,colPINS, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x20 for a 16 chars and 4 line display
// SCL - A5, SDA - A4, VCC - +5, Gnd - Gnd
//setup vars
const int stp = 2; // connect pin 2 to step
const int dir = 3; // connect pin 3 to dir
const int StepsPerRotation = 400; // Set Steps per rotation of stepper NOTE the driver is set to Half step
const int TableRatio = 36; // ratio of rotary table
const int Multiplier = (StepsPerRotation * TableRatio)/360; // 200*90=18000/360 = 50
const int stepdelay = 1;
float Degrees = 0; // Degrees from Serial input
float ToMove = 0; // Steps to move
float bob = 0;
int cho = 0;

void setup()
{
lcd.init(); // initialize the lcd
pinMode(stp, OUTPUT);
pinMode(dir, OUTPUT);

// Print welcome message to the LCD.
lcd.backlight();
lcd.print("Rotary Table Control");

lcd.setCursor(0,1);
lcd.print("Ver.: 1.20 ");

lcd.setCursor(4,2);
lcd.print(" ");
lcd.setCursor(2,3);
lcd.print("Technidyne 2021");
delay(1000);
lcd.init();
cho = 0;
char key = kpd.getKey();
lcd.print("Enter Selection:");
lcd.setCursor(0,1);
lcd.print("Degrees (A)");
lcd.setCursor(0,2);
lcd.print("Divisions (B)");
lcd.setCursor(0,3);
lcd.print("JOG (C)");
while(cho == 0)
{
key = kpd.getKey();
switch (key)
{
case NO_KEY:
break;
case 'A':
Degrees=getdegrees();
lcd.clear();
cho = 1;
break;
case 'B':
Degrees=getdivisions();
cho=2;
break;
case 'C':
Degrees=getjog();
lcd.clear();
cho=3;
break;
} // end case
} // end while cho=0
} // end setup

void loop() // MAIN LOOP
{
lcd.clear();
char key = kpd.getKey();
bob = 0;
lcd.setCursor(7,0);lcd.print("Total: ");lcd.print(bob,2); // total steps
//lcd.setCursor(0,3);lcd.print("FWD=A REV=B X=C");
lcd.setCursor(0,3);lcd.print("FWD(A) REV(B) X(C)");
while(key != 'C') // C will return to start menu
{
lcd.setCursor(0,0);lcd.print(abs(Degrees),2);lcd.print((char)223);
key = kpd.getKey();
if(key == 'A') // FORWARD
{
bob = bob + Degrees;
ToMove = (Degrees*Multiplier);
digitalWrite(dir, LOW);
printadvance();
}
if(key=='B') // REVERSE
{
bob = bob - Degrees;
ToMove = (Degrees*Multiplier);
digitalWrite(dir, HIGH); // pin 13
printadvance();
}
} // end while not C loop
lcd.init();
setup();
} // end main VOID


float getjog()
{
float Degrees = 0;
float num = 0.00;
char key = kpd.getKey();
lcd.clear();
lcd.setCursor(6,0);lcd.print("Jogging");
lcd.setCursor(0,1);lcd.print("A=1 B=10 C=100 Steps");
lcd.setCursor(0,2);lcd.print("Enter Degrees:");lcd.setCursor(0,3);lcd.print("OK (#) ");lcd.print((char)60);lcd.print((char)45);lcd.print(" (D)");

while(key != '#')
{
switch (key)
{
case NO_KEY:
break;
case 'A':
Degrees = 1;
lcd.setCursor(14,2);lcd.print(Degrees);
break;
case 'B':
Degrees = 10;
lcd.setCursor(14,2);lcd.print(Degrees);
break;
case 'C':
Degrees = 100;
lcd.setCursor(14,2);lcd.print(Degrees);
break;
case 'D':
num=0.00;
lcd.setCursor(14,2);lcd.print(" ");
lcd.setCursor(14,2);
break;
}
key = kpd.getKey();
}
return Degrees;
}


float getdivisions()
{
float Degrees = 0;
float num = 0.00;
char key = kpd.getKey();
lcd.clear();
lcd.setCursor(0,1);lcd.print("Enter Division:");lcd.setCursor(0,3);lcd.print("OK (#) ");lcd.print((char)60);lcd.print((char)45);lcd.print(" (D)");
lcd.setCursor(16,1);

while(key != '#')
{
switch (key)
{
case NO_KEY:
break;

case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
num = num * 10 + (key - '0');
lcd.print(key);
break;

case 'D':
num=0.00;
lcd.setCursor(16,1);lcd.print(" ");
lcd.setCursor(16,1);
break;
}
Degrees = 360/num;
key = kpd.getKey();
}
return Degrees; //num;
}


float getdegrees()
{
//int key = 0;
float num = 0.00;
float decimal = 0.00;
float decnum = 0.00;
int counter = 0;
lcd.clear();
//lcd.init();
char key = kpd.getKey();
lcd.setCursor(0,1);lcd.print("Enter Degrees:");lcd.setCursor(0,3);lcd.print("OK (#) ");lcd.print((char)60);lcd.print((char)45);lcd.print(" (D)");
lcd.setCursor(15,1);
bool decOffset = false;

while(key != '#')
{
switch (key)
{
case NO_KEY:
break;

case '.':
if(!decOffset)
{
decOffset = true;
}
lcd.print(key);
break;

case 'D':
num=0.00;
lcd.setCursor(15,1);lcd.print(" ");
lcd.setCursor(15,1);
break;

case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if(!decOffset)
{
num = num * 10 + (key - '0');
lcd.print(key);
}
else if((decOffset) && (counter <= 1))
{
num = num * 10 + (key - '0');
lcd.print(key);
counter++;
}
break;
} //end case
decnum = num / pow(10, counter);
key = kpd.getKey();
} //end while not #
return decnum;
} // end getdegrees

void printadvance() // print function
{
lcd.setCursor(0,1);lcd.print("Status: ROTATING");
//lcd.setCursor(4,2);lcd.print("Steps ");lcd.print(ToMove,0);
lcd.setCursor(0,2);lcd.print("Steps: ");lcd.print(ToMove,0);
lcd.setCursor(13,0);lcd.print(bob,2);
rotation(ToMove,0);
lcd.setCursor(0,1);lcd.print("Status: LOCKED");
}

void rotation(float tm, int d)
{
for(int i = 0; i < tm; i++)
{
digitalWrite(stp, HIGH);
delay(stepdelay);
digitalWrite(stp, LOW);
delay(stepdelay);
}
}

void software_Reset() // Restarts program from beginning but does not reset the peripherals and registers
{
asm volatile (" jmp 0");
}
 
Last edited:
For those interested, here's my adaptation of the Arduino code for the stand-alone CNC Rotary Table (unclear who the original author is, so I cannot extend proper credit)
Thanks, that’s interesting. My programming skills are very rusty, but I could work out what was going on!

It looks like it would be a fun project!
 
Back
Top