Drawing robot

Collaborating with an imperfect machine.

My fascination with machines and computers goes way back. To this day, I still remember my childhood realization that a few lines of code can make a CPU process thousands of calculations a second to perform a task.

Much later, I got to see the poetry in all of this. Under certain conditions, machines can produce art (I did not say create—that’s another conversation).

More recently, I’ve been curious about plotters—the AxiDraw V3 being a good example. They are simple machines: a mechanical arm holds a pen and follows a precise trajectory to draw. The programming it takes, and the resulting art are fascinating.

Making my own

I decided to make one at home, with what I had in terms of supplies, but also time. I drew a quick sketch on a Sunday afternoon, and a few days later, I started.

It took me:

  • two evenings, 
  • some strips of softwood, 
  • 9g servos, 
  • my glue gun, 
  • an Arduino clone, 
  • some jump wires

to build a prototype.

The code

Arduino sketches (programs) are written in C++. The two servos needed to move at the same time, so I relied on a for loop that increments two variables.

The polar coordinates are generated randomly and stored in two arrays.

It takes less than 20 lines of code to get the robot to draw.

Removing myself

I decided to use random coordinates instead of trying to plot them for two reasons:

  • The robot is not that precise.
  • I wanted to experiment (and fail) a lot. 

I ended up tweaking the arrays a bit when a drawing is not interesting.

When to stop?

Since I’ve programmed the drawing sequence as a loop, I had to come up with some rules to decide when to stop the robot.

I decided to let the robot run for longer (an hour) if I felt that the drawing would look better with a lot of lines. Others would have lost their character, and I stopped them after a few cycles (~20 or 30).

From perfection to imperfection

I’ve enjoyed this process because it takes me from the idea of perfection and repeatability (the code) to imperfection and noise.

Because the servos are not robust or precise, and because of how loose the overall structure is, the lines are never superimposed. The robot drifts a bit more at every iteration, and although the code does not change, gaps appear. Some lead to gradients, other to patterns.

To stress this contrast, I print the code next to every drawing. The code can be copied. The drawing is unique.

Don't miss projects like this

I send a bi-monthly newsletter. If you’ve enjoyed learning about this project, I think you’ll be inspired to make stuff.

Which is also the name of my newsletter!