Introduction: SIMPLEST Arduino Vertical Plotter

We made a simple "proof of concept" vertical plotter out of things that we found lying around, two stepper motors, and an Arduino! You could probably make it too, by following these simple steps.

Parts List :

Arduino Uno + USB Power Cable

Stepper Motor x 2

Breadboard x 3

SN754410 Chip x 2

Joystick (or other potentiometers)

22 Gauge Wire (amount varies)

Pulley Wires (material of choice)

Pulley Attachment x 2 (for steppers)

Counterweights

Wood

Scrap Metal

Screws

Power Source

Writing Utensil

Duct Tape

Step 1: Walk the Plank

  1. Find a piece of wood (or any material really) that is roughly the length of the drawing space you desire.
  2. Attach two stepper motors in line with each other at each end of the plank. (We bent scrap metal and screwed it directly into our plank.)
  3. Attach hooks to the back of the plank so that it can hang wherever you like; an easel, on your wall, or on top of a whiteboard like us. (We found already bent metal and cut it in half.)
  4. Attach Arduino in the center between the two motors.
  5. Attach breadboard(s) in between the Arduino and the motors.
  6. Move onto wiring.

Step 2: Wiring

  1. Follow the schematic shown, repeating it for both motors.
  2. Make sure to attach the second motor to pins 3, 4, 5, 6 so that you have three PWM ports (just like 8, 9, 10, 11).
  3. Attach joystick(s) to a separate breadboard that will be used as the controller, as shown. Attach one of the motors to pin A0 on the Arduino and the Left/Right axis, and the other to pin A1 and the Up/Down axis. (This could be done with any sort of potentiometer with an analog output, and could even be done wirelessly if you so choose. This is where the project would become a lot better.)
  4. Distribute power in whatever way is easiest, preferably with two separate 9 volt power sources for each motor. (We split it from one outlet so our motors ran at half speed.)

Step 3: Whiteboard Marker Mount

  1. Find a piece of metal and beat it with a hammer in a vice so that it wraps around the pen and hold its tight. (This is the only way this will work.)
  2. Assemble some sort of pulley system, using treaded rubber cable like we did, or you can use something like fishing line or even a rope.
  3. Attach the pulleys to the piece of metal, we attached screws and wrapped the pulley around the screws.
  4. Add counterweights at the ends of the pulleys, as well as the bottom of the marker mount to keep tension.
  5. If everything has been done perfectly so far, your marker will lay perfectly against your writing surface. Ours was far from perfect so we had to attach a magnet near the tip of the marker to lightly hold it against the whiteboard.

Step 4: Arduino Code

You could make this code as complex as you want, but since this is the SIMPLEST plotter, that's what you get.

Using this code, all you have to do is rotate the joystick 45 degrees counter-clockwise and you have an intuitive controller with an inverted vertical axis.

Arduino Code :

/*
* MotorKnob * * A stepper motor follows the turns of a potentiometer * (or other sensor) on analog input 0. * * http://www.arduino.cc/en/Reference/Stepper * This example code is in the public domain. */

#include

// change this to the number of steps on your motor #define STEPS 100

// create an instance of the stepper class, specifying // the number of steps of the motor and the pins it's // attached to Stepper stepper(STEPS, 8, 9, 10, 11); Stepper stepper2(STEPS, 3, 4, 5, 6);

// the previous reading from the analog input int previous = 0;

void setup() {

// set the speed of the motor to 100 RPMs

stepper.setSpeed(100);

stepper2.setSpeed(100);

Serial.begin(9600);

}

void loop() {

int lr = analogRead(A0);

int ud = analogRead(A1);

Serial.println("------------------------------------");

Serial.print ("LR: ");

Serial.println(lr);

Serial.print ("UD: ");

Serial.println(ud);

delay(100);

// get the sensor value

int val = analogRead(0);

if(val > 525) {

stepper.step(1);

}

else if(val < 475) {

stepper.step(-1);

}

int val2 = analogRead(1);

if(val2 > 525) {

stepper2.step(1);

}

else if(val2 < 475) {

stepper2.step(-1);

}

// remember the previous value of the sensor

previous = val; }