Skip to content

Machine Design

Group Assignment


Main structure

For the main structure of the machine, we used a system that we developed before in our Fablab. We use 2020 aluminum profiles with L shaped 90° joints and T-Nuts to assemble everything. Then we lasercut simple plates to hold the stepper motor and the pulley and we connect the timing belt to a 3D printed connector that can be screwed directly on the linear guide slider. This system allowed us to rapidly assemble a prototype and then modify each part to the need of our specific machine.

Structural components of the machine

The basic structural components of the machine, based on Fablab Shanghai’s original drawing machine.

All the documentation about the structure we started from can be found on this repository on Wikifactory

These laser cut plates are connected to the 2020 aluminum frame by two T-Nuts. During the assembly of the motor, pulley and timing belt, it is better to keep the screws loosely tightened, then tighten one plate, pull with the hand the motor plate to increase the tension of the belt and tighten the T-Nuts of the motor plate while holding it in place.

lasercut plates

Lasercut plates to hold the stepper motor and pulley

Actuator: Hand bracket

We initially designed a simple lasercut plate with a slot for the servomotor and a vertical bracket with a hole. Also, we lasercut a longer bracket to hold the “hand”. With these two simple pieces, we made some tests and took some measurements and better understood the way the servo motor rotates and make the hand braket tilt (using a bent metal paper clip).

servo mount test

The laser cut test piece to hold the servo motor and the hand bracket (later substituted with a 3D printed piece)

bracket

The laser cut bracket to hold the hand

After testing this structure, we designed and 3D print the final actuator piece. It is based on the linear guide slider attachment piece that serves as a connection for the timing belt and it incorporates the Servo mount and the joint for the rotational axis of the hand bracket.

3D printed servo mount

The 3D printed actuator piece: servo motor mount, hand bracket joint, timing belt connection and attachment to the linear guide slider)


Programming

To control the machine with buttons, we used a second Arduino. The first Arduino has a simple program that reads the press of 4 buttons (two for up and down, two for left and right) and send 4 different G-code as a message over Serial Communication, depending on which button was pressed.

The first Arduino TX pin is connected to the RX pin of the second Arduino (the one with GRBL). Same for the RX pin of the first with the TX pin of the second, and they also share the GND line.

The second Arduino receives G-code via Serial Communication and it works without any modification to the GRBL firmware. This way the machine can be used without being connected to a computer, but the choice of movements is limited to the 4 different G-code short commands send by the press of the 4 buttons.

const int button1 = 8;        // button right 
const int button2 = 9;        // button up 
const int button3 = 10;       // button left 
const int button4 = 7;        // button down 

void setup() {
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  if (digitalRead(button1) == HIGH) {
    sendPath1();
    delay(500);
  } 

  else if (digitalRead(button2) == HIGH) {
    sendPath2();
    delay(500);
  } 

  else if (digitalRead(button3) == HIGH) {
    sendPath3();
    delay(500);
  }

  else if (digitalRead(button4) == HIGH) {
    sendPath4();
    delay(500);
  }
}

void sendPath1() {                 // move right
  Serial.println("G21");           // mm
  Serial.println("G91");           // relative   
  Serial.println("G1 X50 F10000");
}

void sendPath3() {                 // move left
  Serial.println("G21");           // mm 
  Serial.println("G91");           // relative  
  Serial.println("G1 X-50 F10000");
}

void sendPath2() {                 // move up
  Serial.println("G21");           // mm
  Serial.println("G90");           // absolute
  Serial.println("G1 Z1 F5000");
}

void sendPath4() {                 // move down
  Serial.println("G21");           // mm
  Serial.println("G90");           // absolute
  Serial.println("G1 Z-1 F5000");
}

Design files