Table of contents:
Most of the project is already explained on the README of the project on GitHub.
π§ Concept
I took a course at EPFL that taught students about the two sides of building things: the hardware part and the integration with software.
During this course, I learned to use a laser cutting machine and 3D printers. It was my first time doing CAD, and the process was really amazing to go from an idea, design it, and have it printed over the course of only a few hours.
I build a 2D Plotter Robot: a device that can draw user defined drawings on a small sheet of paper based on a provided computer program.
β³ Process
Here are a few pictures demonstrating the whole process of building this robot:
I started by laser cutting all the parts for the core structure. Then I assembled the robot and soldered the cables to the external alimentation.
I initially 3D printed a static pen holder and wrote the basis of the software to test every component and make sure the plotter was drawing precise shapes. Later, I designed the dynamic pen holder that can lift the pen up and down in order to draw more complex shapes. I went through about 4 or 5 design iterations before having a convincing piece that would not be imprecise when lifting the pen.
I also added limit switches to automatically set the βhomeβ/origin position of the plotter. Additionally, I connected a buzzer to the Arduino. It gives a nice audio feedback to the person using the plotter about the current state of the procedure (started, ready to draw, finished).
Turtle language
I implemented a turtle language interpreter/REPL (Read Eval Print Loop) in C so that we can provide instructions to the plotter using this language.
Note: learn more about the turtle language here https://turtleacademy.com/playground.
One can input turtle programs directly using the Arduino Serial Monitor. No modifications have been made to the original syntax of the language. It supports multi-lines input (with indentation) and it is not spacing dependent.
Code
The code for the project was mostly written in C (a few .cpp
and .ino
were required to interact with the Arduino ecosystem).
To add a bit more to the challenge, I also decided not to use any external libraries (except for the Arduino.h
).
I wrote the code that manages the servo and the steppers from scratch (see 2d_plotter/src/hardware
for more information).
π Result
Here are a few pictures showing the final plotter from different angles:
Here is a short video demonstrating the result:
Here are a few pictures of example drawings that the robot made:
I ended up receiving the maximum grade for this project, so the teaching staff seemed to also agree that I managed to produce a great 2D plotter robot.