Friday night turned into Robotics/Art night at the 2XL Makerspace. I remembered seeing this Drawbot Project, and while you can modify normal servos to be continuous rotation servos, I already had some continuous rotation servos on-hand, so we got to work. (Or play, if you prefer.)
The Drawbot consists of just a handful of parts. Here’s a list of the items we used:
- DC Boarduino
- Continuous Rotation Servos (2 of them)
- Servo Wheels (2 of them)
- Half-size breadboard
- 9V battery holder with switch & 2.1mm plug
- Breadboarding wire bundle
All of these pieces are available from our friends at Adafruit Industries. You can probably find the parts elsewhere as well, and you don’t need a Boarduino specifically, as any Arduino board will work. I just used the Boarduino because it’s small.
Oh, you’ll also need some Sharpie markers (I recommend a nice 8-pack of various colors) and a 9 volt battery, a platform, and something to hold it all together.
Servo motors held together with some tape
The building of the Drawbot was pretty simple. I started by using a bit of tape to stick the servos together with the wheels facing out. This gave me the width of the “platform” I would need. (It had to fit between the wheels.) I used corrugated plastic because it was handy. It’s very lightweight, easy to cut, and pretty strong. You could certainly use cardboard or something like a plastic CD case, but I’m telling you now… corrugated plastic is awesome. (I’m already using it in my next project!)
Once I had the servos secured to the platform with some rubber bands, I put the battery and the breadboard on top of the platform. The placement may be a little tricky, as you need to determine the correct balance. I wanted it to be a bit heavier on the side that would hold the marker, but didn’t want too much weight on that side. Rubber bands make it really easy to move things around.
With most of the pieces in place, I added the jumper wires between the servos and the breadboard. That’s it for the wiring.
At this point I wanted to test it out. I was impatient and just wanted to find some continuous rotation servo code. A quick search led me to the post Controlling a Parallax (Futaba) Continuous Rotation Servo with Arduino. I ended up simplifying my code even more. Right now the Drawbot just goes in a circle. Yeah, it’s simple, but that’s the way I like to start things. Get the simplest thing working first, and then go from there. (Code is at the bottom of the post.)
Marker holders made out of corrugated plastic
So we now had a robot that went in circles. At this point we figured it was time to draw something! Back to the corrugated plastic. This is another place where the plastic shines. I cut a small piece, and then cut a hole with an X-Acto knife where the marker was going to go. I cut the hole a bit small, and when i slide the marker it, it held it nice and tight. I’m glad I didn’t use cardboard, as it just doesn’t have the strength of the plastic.
With the marker in, it was time to test it. We put it down in the center of a 24″ x 18″ drawing pad and turned it on. It spun around drawing circles. Success! We managed to build a robot that can create artwork. :)
Since things were all loosey goosey, meaning, our marker holder could shift around, the pad was on an uneven floor, the servos were probably not perfectly matched, etc. We got a circle, and another circle, and another one, all overlapping. In a perfect world I’d suppose you’d just get a circle with every other circle drawn directly on top of it. I think it turned out better our way.
Drawbot making overlapping circles
We figured that two markers would be better than one, so we tried that next. The results were pretty good. Here you can see how the circles start to overlap. We’re hoping to try with some bigger paper to see what happens when it doesn’t run out of room.
Here’s our code…
/* * Drawbot.pde */ int servoPinL = 9; int servoPinR = 10; void setup() { pinMode(servoPinL,OUTPUT); pinMode(servoPinR,OUTPUT); } void loop() { digitalWrite(servoPinL,HIGH); digitalWrite(servoPinR,HIGH); delayMicroseconds(1500); digitalWrite(servoPinL,LOW); digitalWrite(servoPinR,LOW); delay(50); }
Again, this code is really simple. All you’ll get is a circle, or, a bunch of circles. But now that we’ve got the Drawbot working, we can start playing around with modifying the code to change it up a bit. We look forward to more robot-created artwork in the future!
Note: Check the project page for more info.
1 reply on “Friday Night Drawbot”
Did your drawing robot get dizzy from spinning in all those circles?