Week 15Mechanical and Machine Design
Click here to go to home page



Scott Mike Sylvia 

Scott, Mike, Abu and I started to work on our final project.  We have decided to build a machine that has an interchangeable head and will act as a printer, vinyl cutter or mill. 
 
Abu Scott Mike

We took a look at the parts we had and started to discuss options

Brainstorm Starts
We were brainstorming on paper.

Plan Begins
After we were done brainstorming and felt we had a reasonable plan we divided the work.  We will come together next week to build the machine.

Shredder Potential
In the mean time I had an old scanner laying around.
Shredder Parts I disassembled it hoping to find parts for the project.  If I can't use it here perhaps I can use it in the final project.
Final Board
One of the items we need to figure out is what to use for programming.  We will also need boards to control motors.  I have started running Anna's boards.  We had difficulty running the 10/1000 bit.  They kept breaking.  We tried slowing the bit down.  It did not help.  I spent some time one morning figuring out speed and feed rates.  We ended up speeding the bit up.  It worked!!  We have produced 4 boards so far with one bit.  This is much better than we had when we were using 2 or more bits per board.

Try first

My task was to model the bearing we will try to use.  I modeled this one with three centering points that will run down the track.  I think the drawing is too small as well.  We will see what tolerances need to be changed.
Try Alternate

The second bearing option does not have a centering point on the top.  This is probably what we will go with assuming we can get tolerances correct. 
2 Bearing Test

I printed the profiles of both bearings to see which option was best suited to our chosen application
Final Bearing
              Drawing

The team chose the bearing with the 3 centering points as the final option. 

3D Bearing Printed

I printed the selected option using the 3D printer

Molded Bearing

A silicon rubber mold was made of the profile.  I was concerned that the mold would not be flexible enough to accommodate the recesses for the bolt holes.  Mike was pretty sure it would work if we plugged the through holes with clay and just left the recesses for the bolt holes.

I followed his advise and the technique worked.  We will need to drill the through holes for the bolts separately.  This should be an easy enough task as I left recesses for drilling locations as part of the molding process.

4 of 8 final bearings

Here are 4 of the 8 bearing castings we will need for our final machine.  The edges need to be cleaned up a bit but they work well.

The parts can be removed from the mold after about 20 minutes but it takes longer for them to reach full strength and rigidity.

Mike Machine
              Assembly

Mike is working on drawing and redrawing components.  He is verifying that the machine will work on ProE.  He deleted the spacers for the bearings.  There wasn't enough room for the nuts that go with the screws, so he moved the screws above the rails.  An alternative option is to put the 'long screws' on the outside of the 'side plates'.

Things that Mike identifies as needing attention includes: 

1. Needs a name.
2.  Need to know which pulleys/belt is going to be used.  The motor mounting patterns need to be sized correctly.
3. Need to know which motor is going to be used.  Need dimensions of mounting hole pattern and boss by shaft end if there is one.  Datasheet dimensions seem incorrect.
4. With a little bit more info, I will cut / form the side plates and end plates. 

 We are also trying to figure out the electronic system.  We can fall back on Arduino or a computer with LinuxCNC or go all the way back to windows using Mach3.


Abu Motor Circuit
Abu is working on the circuitry.  He did the modification and now has the X, Y, Z and the spindle circuit. The code for stepper motors is:

//STEPPER MOTOR DRIVING PROGRAM
//MOTOR 4209L-03-01

//INPUT pin definition
//for step
int stepForward = PB0;
//for direction
int stepBackward = PB1;
//OUTPUT pin definition
int stepperPins[] = {PA0,PA1,PA3,PA4};

//initialize the constant
int znum = 1;

void setup(){
  //OUTPUT pin setting
  for(int i=0;i < 4;i++){
    pinMode(stepperPins[i], OUTPUT);
  }
  //INPUT pin setting
  pinMode(stepForward,INPUT);
  pinMode(stepBackward,INPUT);
}

void loop(){
   if(digitalRead(stepForward) == HIGH){ 
  switch(znum){
  case 1:
      //STEP4
      digitalWrite(stepperPins[0], LOW);
      digitalWrite(stepperPins[1], HIGH);
      digitalWrite(stepperPins[2], HIGH);
      digitalWrite(stepperPins[3], LOW);
      znum = 2;
      break;
  case 2:
      //STEP3
      digitalWrite(stepperPins[0], LOW);
      digitalWrite(stepperPins[1], HIGH);
      digitalWrite(stepperPins[2], LOW);
      digitalWrite(stepperPins[3], HIGH);
      znum = 3;
      break;
  case 3:
      //STEP2
      digitalWrite(stepperPins[0], HIGH);
      digitalWrite(stepperPins[1], LOW);
      digitalWrite(stepperPins[2], LOW);
      digitalWrite(stepperPins[3], HIGH);
      znum = 4;
      break;
  case 4:
      //STEP1
      digitalWrite(stepperPins[0], HIGH);
      digitalWrite(stepperPins[1], LOW);
      digitalWrite(stepperPins[2], HIGH);
      digitalWrite(stepperPins[3], LOW);
      znum = 1;
      break;
     }
    }



  if(digitalRead(stepBackward) == HIGH){ 
  switch(znum){
    case 1:
      //STEP1
      digitalWrite(stepperPins[0], HIGH);
      digitalWrite(stepperPins[1], LOW);
      digitalWrite(stepperPins[2], HIGH);
      digitalWrite(stepperPins[3], LOW);
      znum = 2;
      break;
    case 2:
      //STEP2
      digitalWrite(stepperPins[0], HIGH);
      digitalWrite(stepperPins[1], LOW);
      digitalWrite(stepperPins[2], LOW);
      digitalWrite(stepperPins[3], HIGH);
      znum = 3;
      break;   
    case 3:
      //STEP3
      digitalWrite(stepperPins[0], LOW);
      digitalWrite(stepperPins[1], HIGH);
      digitalWrite(stepperPins[2], LOW);
      digitalWrite(stepperPins[3], HIGH);
      znum = 4;
      break;
    case 4:

Stepper control program is as follows:
/* Stepper Bipolar
  */

int motorPins[] = {PA0, PA1, PA3, PA4};  // pin numbers in order of 13,12,10,9
int frontPin = digitalRead(PB0); //
int backPin = digitalRead(PB1);  //
int count = 0;
int count2 = 0;
int delayTime = 500;

void setup() {
  pinMode(frontPin, INPUT);
  pinMode(backPin, INPUT);
  for (count = 0; count < 4; count++) {
    pinMode(motorPins[count], OUTPUT);
  }
}
void moveForward() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motorPins[count], count2>>count&0x01);
  }
  delay(delayTime);
}
void moveBackward() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motorPins[3 - count], count2>>count&0x01);
  }
  delay(delayTime);
}
void loop() {
  if (frontPin == HIGH)                                                                                                                                                                                                                                           
    moveForward();
   
   else {
    delayTime = 1024;
   }

  if (backPin == HIGH)
    moveBackward();
   
  else {
    delayTime = 1024;
  }
}
Threaded carriage

In an attempt to make as many parts as possible I have used Smooth Cast 305 urethane resin to cast a z-axis tool carrier.  I did this by spraying threaded rod with mold release and using a quart-sized cardboard milk container as a mold.  It seems to have worked providing a solid mass to which to attach a tool of choice.  It provides movement with a minimum of backlash.