Fab Academy 2018 - Thierry Dassé

Week 15 : Mechanical Design

Group assignment

Rotocasting machine

Machine design

For this group assignment, we have chosen to make a roto molding machine.
This machine is usefull to make empty parts to use less material or to have a light piece. Process is to put a low quantity of powder or liquid and to fix it to faces using centrifugal acceleration by rotating the mold. By heating or chemical reaction, powder or liquid will become solid.
To have a good repartition of material, rotation usually are around at two perpendicular axis like x and z for example.
3D axis
The two rotations can be done using two motors or one motor and transmission between first axis and second with gears and belt.
roto molding

We want to try a more simple system with only one motor wich create x axis rotation and a second free axis. I believe that first axis rotation can create second axis rotation because of gravity, low friction and system inertia. This second rotation can be chaotic but I think it's not a problem for roto molding.
To create second rotation, we have two options. First is to add a mass on the frame to destroy symetry and move center of inertia. Second is not to have a two perpendicular axis.
We choose second option and put our second axis 45 degrees from first axis.
our roto molding
After discussion about what our machine will look like, we divide work in three part. I was in charge of building a strong structure able to carry two frames and a center mold.

Structure

To be strong, I made machine base in square-section profile. I built this profile with 6mm MDF sheets using a laser cutter to cut parts.
To assembly parts, I made oversized slots to allow tight fit. I design slot sides with bezier curve for extra material to be only in the center part. It's easier to enter and to go to slot back. With 0.2mm extra material, tight fit is very strong and parts won't take off. I had to assembly with a hammer. 0.1mm is enough to assembly a prototype you want to take off in order to modify.
Slots
Not to design all slots, I made one and clone it each time I need one.
Basic structure is 20 parts.
Structure (MDF 6mm) Structure axe (PLA) axe (aluminium) part between axe and motor (PLA) Cut the structure Assembly the structure Cut axis First tests
Structure
Structure axe (3D printing)
axe (aluminium)
axe motor (3D printing)

Program stepper motor

To move frames, we have chosen a stepper motor because we can easily control speed and turn slowly if we want to.

On first program, we send pulse to A4988 step pin each 10 milliseconds.
As Nema 17 is 200 steps a turn, rotation speed is half-turn a second.

/*
 * Machine design : Rotomolding machine
 * stepper motor constant speed rotation
 */

const int stepPin = 2; // A4988 step pin
const int dirPin = 3; // A4988 dir pin
 
void setup() {
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
  digitalWrite(dirPin,HIGH); // set dir pin to high : clockwise rotation
}

void loop() {
  digitalWrite(stepPin,HIGH); // send a pulse to step pin
  delayMicroseconds(500);
  digitalWrite(stepPin,LOW);
  delayMicroseconds(500);
  delay(9); // wait 9 milliseconds
}

With this program, second axis oscillate or reach a stable position but we dont have a good rotation.
So we decided to test variable speed on stepper motor.
To set smooth acceleration on stepper motor in order to force second axis rotation, I code a sinusoidal speed with:

  delay(5+2.5*sin(0.031416*i));

where i is step number (between 0 to 200), 0.031416 turn step number to angle in radians, 5 is mean delay and 2.5 variation amplitude.
We tested different values and found that mean delay 4 and amplitude 1.8 are very good values to force second axis rotation.

/*
 * Machine design : Rotomolding machine
 * stepper motor variable speed rotation
 */

const int stepPin = 2; // A4988 step pin
const int dirPin = 3; // A4988 dir pin

int i = 0;
 
void setup() {
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
  digitalWrite(dirPin,HIGH); // set dir pin to high : clockwise rotation
}

void loop() {
  digitalWrite(stepPin,HIGH); // send a pulse to step pin
  delayMicroseconds(500);
  digitalWrite(stepPin,LOW);
  delayMicroseconds(500);
  delay(4+1.8*sin(0.031416*i)); // variable speed
  i = (i+1) % 200;
}