\$100 Mural drawing robot (also works as a giant etch-a-sketch)
7 Steps
Featured on Hack-a-day!

What I love about robots is that you can make a thing that makes other things.  So meta!  It uses gcode draw any picture you like, or you can drive it around like an etch-a-sketch.  You can scale this robot up to almost any size.  The version in the photograph is my smallest model.  I've built three of these now, the largest of which was 3m*2m.  This particular robot costs \$150 in parts and, if assembled correctly, can be up & running in about 20 minutes.

You can now buy this robot as a kit on the Drawbot's official page.

Remove these ads by Signing Up

## Step 1: How does it work?

The basic trick of this robot is high school trigonometry.

If you know the distance between the steppers and you know the length of the strings then you can calculate the XY position of the pen. If you know the XY position of the pen and the distance between the steppers you can find the length of the strings.  From there you can figure out how much the strings have to change to move from one place to another and then you can draw lines and curves.

The rest is boring tricky stuff, nice but not vital.  There's some code to make sure you can't draw outside the drawing area, and some code uses trapezoidal motion interpolation to draw accurate pictures faster.
zen.webb says: May 20, 2012. 12:36 PM
Hey! I was wondering if you could post a photo or two of your pulleys with the line wound onto it? I used fishing line and sewing machine bobbins on my plotter, but the small changes in diameters as the plotter goes about its business seems to be causing a bit of distortion (pen won't go to the same place twice when a polygon is drawn :P).

At first I thought my problem was indeed the software I was using - it uses linear interpolation, rather than your cool trapezoidal interoplation. However, the author of the code I'm using states that if I were to use timing belts and pulleys, it would work just fine :S

Do you wind your pulleys with a great deal of line? Or just enough to allow the pen carriage to address the entire canvas and no more? Also, what kind of line do you use? I used some cheap fishing line, but maybe there is something even smaller I could try.

Thanks! :)
zen.webb says: May 1, 2012. 11:19 AM
Can you briefly describe the process you are thinking of to auto-center the pen carriage? It would be a very useful feature, I'm curious about how you plan to execute it.
aggrav8d (author) says: May 1, 2012. 12:51 PM
http://www.marginallyclever.com/2012/05/drawbot-automatic-calibration/
zen.webb says: May 1, 2012. 1:13 PM
404 :P Perhaps it hasn't been published yet?
aggrav8d (author) says: May 1, 2012. 2:05 PM
Argh, I set the two answers to publish tomorrow and the day after because I've already published today. Sorry :(
zen.webb says: May 7, 2012. 6:23 PM
Sweet! Just got around to reading both the links - great answers! The idea of using limit switches is brilliant, can't believe I couldn't think of it :P Its very common in CNC machines for the same exact purpose, there's no reason it wouldn't work well in a wall plotter :) Once I get my plotter producing decent prints, I'll definitely add some end stops and play around!

I've been building a wall plotter based largely on the Der Kritzler bot (http://tinkerlog.com/2011/09/02/der-kritzler/ )

My blog posts: http://cs.unk.edu/~webb/tag/wall-plotter/
My personal wiki article: http://cs.unk.edu/~webb/wiki/index.php/Wall_plotter

In my opinion, the Kritzler software and hardware execution is far more elegant and clean than most of the others I've seen, so I have been really drawn to it. He uses two A4988 motor drivers from Pololu to drive his motors. Each of those drivers only require two data pins to be connected to an Arduino to work, so it is very easy to expand and hack. I was thinking of actually using my extra Arduino pins to interface with a bunch of sensors so that users can eventually draw images like an etch-a-sketch (distance sensors, photocells, etc).
aggrav8d (author) says: May 7, 2012. 7:02 PM
Your machine is good, and inexpensive. One challenge is that it's much harder to assemble, making adoption difficult.

Have you read my code? I'd be interested to know if you consider it "cleaner". I borrowed a lot from GRBL. Most of it is sanity checking for silly humans.
zen.webb says: May 7, 2012. 7:50 PM
What aspects do find challenging to assemble about the plotter I'm working on? It looks to me that we use identical components aside from the motor drivers. The motor drivers took only a couple of minutes to wire up, but I could see that it would be more difficult for someone without much experience in electronics. I felt like the Adafruit driver locked me into too many design decisions that I wasn't really comfortable with - it wouldn't be easy to add more stepper motors, more servos or other components to the Arduino without digging through the schematics a bit. I like having one board = one motor. Plus, I didn't want to sacrifice a \$30 Arduino board to stack the shield onto - I wanted to eventually use a raw ATMEGA328 on a breadboard w/ the drivers to keep the BOM down and simplify the electronics system (from my perspective).

I think your code is decent and better than a few of the other plotters I've come acorss, but I still really enjoy the Der Kritzler code more. At the end of the day, if the bot performs the functions that you wanted it to perform, that trumps any bugs or programming mistakes, so I'm just expressing my personal taste in code (not how it 'should be'). The Der Kritzler code completely decouples the various aspects of the system so that you don't have to trace phenomena down through different files. For example, all of the geometry to be drawn by the plotter comes from a single external SVG file. A Processing sketch processes it as a series of vertices and lines, and uses a simple object to send commands to the Arduino. This way, if I change the protocol (to say, Bluetooth or XBee), I don't have to rewrite the main code - just implement a new class to handle it. Neither the Arduino or the Processing code have any hard-coded behavior about how to draw features, so artifacts and distortion can easily be traced to physical mechanics or faulty input.

The Der Kritzler designer did a great job of implementing very smooth object-oriented code, and ended up with far fewer lines of code than any other project I've seen. I feel that Processing is a good choice over raw Java for helping to reduce unnecessary complexity and 'sketch' out ideas, just like Arduino does for electronics. Also has the benefit of resulting in much simpler, easier to read code.

Here's a link to the Kritzler Github if you're interested in browsing around: https://github.com/tinkerlog/Kritzler

Like I said, if you get the results you want with your code, that's more important than what any internet 'expert' has to say! I just wanted to discuss my own style and reasoning for my choices :)
zen.webb says: May 1, 2012. 11:21 AM
Can you elaborate a little bit on the gondola design you used? I see multiple versions in the photos, but I'm personally pretty interested in the simple ring design. It looks like it might be 3D-printed, or did you source it from someplace else?
aggrav8d (author) says: May 1, 2012. 1:42 PM
http://www.marginallyclever.com/2012/05/drawbot-pen-holder/

Great question!
rimar2000 says: Mar 15, 2012. 3:57 PM
Very good work, sir!
Kiteman says: Mar 15, 2012. 1:31 PM
Ooh, can we see it in action, please?
aggrav8d (author) says: Mar 15, 2012. 1:40 PM
Oh snap, I forgot the video link.
Kiteman says: Mar 15, 2012. 1:46 PM
Cool.

I'm looking forward to the update promised in step 3...
aggrav8d (author) says: Mar 15, 2012. 1:58 PM
Me, too. It shouldn't be hard, I've just had other drawbot priorities. It's easy to manually center the pen, either by turning the bobbins or using the etch-a-sketch program. This upgrade will just take it from a 3 step process to a no-step process.