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.
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 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).
The laser cut test piece to hold the servo motor and the hand bracket (later substituted with a 3D printed piece)
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.
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"); }