Build this project at our next weekend-long Arduino workshop!

ArcBot Drawing Robot

The ArcBot uses two servo motors to draw concentric arcs. In this version, you control the servos with two potentiometers.

Inspired by the Arc-o-Matic drawing bot.

Hardware

You’ll need the following components:

Additionally, you’ll need something to mount your drawing medium on, such as MDF (medium-density fiberboard), likely available at your local hardware or art supply store.

Mechanical

  1. Make sure your servos are in the middle of their range.

  2. Pick a large plastic horn (these probably came with your servo) and screw it into your servo.

  3. Attach one end of each dowel to each servo by wrapping the dowel and the attached plastic horn with electrical tape. Use zipties for greater strength.

  4. Mount one motor on your base; attach the second motor to the first motor’s dowel, again using electrical tape and/or zipties.

  5. Attach the clothespin to the end of the second motor’s dowel.

Get creative with this project! The general idea is to have two motors on sticks, one attached to the other. For some pictures, see Pete Prodoehl’s setup of the original Arc-o-Matic.

Wiring

  1. Build this circuit:

    Two potentiometers, connected to pins A0 and A1

  2. Connect the two servo motors to your Arduino: the two brown (ground) wires should be connected to GND, the two red (power) wires to 5V, and the two orange (signal) wires to digital pins 9 and 10.

Software

  1. Copy this code into a new Arduino sketch and upload it:

     #include <Servo.h> 
    
     int potPin1 = 0;  
     int potPin2 = 1;
     int servoPin1 = 9;
     int servoPin2 = 10;
     Servo servo1, servo2; 
    
     void setup() 
     { 
       servo1.attach(servoPin1);
       servo2.attach(servoPin2);
       Serial.begin(9600);
     } 
    
     void loop() 
     { 
       int reading1 = analogRead(potPin1);     // 0 to 1023
       int reading2 = analogRead(potPin2);
       int angle1 = reading1 / 6;             // 0 to 180-ish
       int angle2 = reading2 / 6;
       servo1.write(angle1);
       servo2.write(angle2);
    
       Serial.print(angle1);
       Serial.print(", ");
       Serial.println(angle2);
     } 
    
  2. Rotate the potentiometers to rotate the servo motors!

Variations

  1. Once you’ve got the hang of the ArcBot, try drawing some automated minimalist arc art. Ignore the potentiometer inputs in your code. Try sweeping one servo back and forth in the loop function; with each sweep, move the other servo by just a few degrees.