4-Wire Horizontal Plotter

11,780

166

25

Introduction: 4-Wire Horizontal Plotter

About: 55+ years in electronics, computers, and teaching ... now retired.

This instructable explains how to make a 4-wire plotter using the wheel-rims from a toy car, four stepping motors, a scrap of sheet aluminium, some pulleys, and an Arduino UNO R3.

Unlike 2-wire vertical plotters the drawing surface for this plotter is horizontal.

Construction is simple:

  • the “base” requires a ruler, a few drills and a saw.
  • the “gondola” requires an electric drill, a set of circle cutters, and a sharp knife.

Features include:

  • an on-board interpreter that recognizes the g-code output from “Inkscape”.
  • accurate ... approximately 1mm with nylon
  • scaleable ... just increase the cable lengths
  • easy to make
  • low cost

The estimated cost of parts, excluding the power supply, is less than $100.

Images

  • Photo 1 shows a close-up of the plotter
  • The video shows the plotter in action

Step 1: Parts List

The following parts were obtained from https://www.aliexpress.com/

  • 1 only Arduino UNO R3 + USB cable
  • 1 only SG90 servo
  • 4 only 12VDC Nema17 17HS3430 stepping motors
  • 4 only NEMA 17 Motor L-mount stepping motor brackets with screws
  • 4 only 2A per phase Big Easy Driver v1.2 A4988 stepper motor driver board
  • 4 only 65mm RC Car wheels with tyres on 50mm drums (see photo 1)
  • 4 only hexagonal brass couplings with 5mm bore to fit the motor shafts and a 4mm hole for attaching the wheels. The short ones in photo 1 are satisfactory.
  • 4 only miniature V624ZZ pulleys with V-groove size 4*13*6mm

Optional:

  • 1 only CPS-3205 Compact Mini Variable Adjustable DC Power Supply 0-32V 0-5A AC110-240V (not required if you already have a 12 volt 2 amp DC power source)

The following parts were obtained locally:

  • 1 only sheet of 6mm composition board approx. 800mm x 600mm
  • 1 only length 60mm x 20mm timber for corner supports
  • 1 only reel of 0.5mm diameter nylon fishing line
  • 1 only switch
  • 1 only MBR735 diode for reverse voltage protection
  • 1 only pkt of assorted Arduino jumper cables
  • 1 only scrap of thin acrylic sheet for gondola annular ring
  • 4 only M3 threaded Nylon spacers for supporting the acrylic annular ring
  • 1 only scrap of thin sheet aluminium for pulley mounts
  • 4 only M3 x 9mm tubular spacers for pulleys
  • 12 only wood screws for assembling corner supports
  • assorted M4 nuts and bolts to suit your particular build
  • assorted M4 nuts and biolts to suit your particular build

The estimated cost of parts, excluding the power supply, is less than $100.

Step 2: Circuit Diagram

Photo 1 shows the circuit diagram of the 4-wire plotter.

The Big Easy Driver “direction” lines are on Arduino PORTC pins A0, A1, A2, and A3

The Big Easy Driver “step” lines are on Arduino PORTB pins D8, D9, D10, and D11

The SG90 servo “control” wire is connected to pin D3

The MBR735 diode provides reverse voltage protection.

Motor Wiring

It may be necessary to reverse the two center wires from each of the 17HS3430 Nema17 12 volt stepper motors as the Big Easy Driver v1.2 A4988 stepper motor driver boards expect the wires from each of the coil-windings to be adjacent.

The default color sequence for the 17HS3430 cables (for my motors) is red, blue, green, black. The color-sequence following the modification is red, green, blue, black.

The red, green winding is connected to the “A” terminals of the Big Easy Driver.

The blue, black winding is attached to the “B” terminals of the Big Easy Driver.

Big Easy Driver Current Limits

The current-limit on each of the Big Easy Driver must be set to 400mA (milli-amperes) .

To achieve this:

  • Switch off the power [1]
  • Unplug your Arduino
  • Unplug all motor cables
  • Turn each of the current-limit potentiometers on the A4988 Big Easy Driver Boards fully clockwise
  • Insert a motor cable into its designated Big Easy Driver
  • Apply 12 volts to the Big Easy Driver
  • Rotate the current-limit potentiometer counter - clockwise until the supply current reads 400mA .
  • Turn off the 12 volt supply [1]
  • Remove the Motor cable.
  • Repeat the above steps for each of the remaining motors
  • Plug all motor cables in to their respective controllers.
  • The total supply current will be approximately 1.6 amps when power is applied

Note

[1]

NEVER plug, or unplug, a stepping motor with the power applied. The inductive “kick” (voltage spike) is likely to damage the controllers.

Step 3: Theory

Photo 1 shows the general equations for a 4-wire plotter.

The white square represents a sheet of paper with dimensions x,y. The Inkscape (0,0) coordinate is shown as (0,0)

M1, M2, M3, M4 represent four motors ... one at each corner of a (virtual) box. The motors are offset from the sheet of paper to maintain a pulling force on the pen at all times.

D1, D2, D3, and D4 represent the cables from each motor to the diagonally opposite corner of each (virtual) box to meet at Inkscape coordinate (x,y).

If a line is drawn from the (x,y) coordinate to the point immediately below each motor we get four vertical right-angle triangles. The hypotenuse of each triangle represents each cable length and may be calculated using the 3D formula for Pythagoras.

hypotenuse = sqrt (X^2 + Y^2 + Z^2 )

The formulas for distances D1, D2, D3, D4 are given in photo 1.

The cables need not meet at the pen if we reduce the Z-axis to zero and attach them to pulleys free to run around an annular ring as shown in photo 2.

Nylon cable has a small amount of stretch which, when the Zoffset is zero, provides strain relief should a cable wind unevenly on a drum.

Alternately a small amount of Zoffset will provide strain relief in the form of a lifting force.

Calibration is explained further on.

Step 4: Gondola Construction

Images

  • Photo 1 shows the assembled gondola
  • Photo 2 is a close-up of the annular rings and pulleys
  • Photo 3 shows a side-view of the pen-lift
  • Photo 4 shows is a close-up of the plastic pen attachment
  • Photo 5 shows the concentric circle cutters

Annular Rings

Two discs were cut using a set of concentric circle-cutters (photo 5). The actual disc sizes are not critical ... mine are 100mm.

The annular ring was cut from a sheet of white acrylic ... the base was cut from 6mm composition board.

Before drilling, attach your material to a piece of wood using two wood screws close to the drill-hole. This will prevent your work from spinning. The wood must be larger than the diameter of your discs.

Cut the outside diameters first, change blades, then make the inner cut. The rings will spin when the final cut is completely through. Don’t be alarmed ... they can’t come off.

Pulleys

Cut some 10mm strips from a scrap of aluminium sheet using the method described in https://www.instructables.com/How-to-Cut-Fold-She...

Press lightly downwards with the knife and cut away from your body when scoring the metal. Watch that your fingers don’t protrude over the edge of your steel rule !!!

The pulley holes are 4mm in diameter

The holes for the tubular spacers are 3mm

I drilled one set of 3mm and 4mm holes then folded the aluminium strip around the edge of a scrap of 6mm composition board using finger pressure. The strip was then placed in a vice and the 3mm and 4mm holes used as “templates” for drilling the others.

The Pen-lift

The pen-lift in photo 3 and photo 4 was fashioned from a 25mm strip of aluminium. The strip should be long enough so the bends fit your gondola.

Drill the two pen-holes and the two 3mm mounting holes before bending.

Mark 5mm from the edge of one pen-hole towards the other and repeat for the other.

Use the edge of a vice and finger pressure to bend the aluminium at each of these marks ... your pen will now stand vertical.

The measurements are not critical apart from the pen-holes which should be a sliding fit. A round file, or taper reamer, is helpful if your pen diameter is not a standard drill size.

Use a pencil to mark the mounting hole positions on the gondola base when the pen-tip is centered

The pen is raised when the SG90 servo horn makes contact with a plastic disc attached to the pen.

The brass center in my disc (photo 4) is from a radio knob that has been drilled out. The grub-screw prevents the disc from sliding up and down the pen.

Step 5: Base Construction

The baseboard

  • Mark a rectangle out on a sheet of 6mm composition board. The dimensions are not critcal ... mine were 600mm x 500mm.
  • Drill a 1mm diameter hole in each corner.
  • Position your drawing paper in the center of the rectangle and mark the X-axis and y-axis edges.
  • Record your XMS, YMS, Xoffset, and Yoffset distances ... we will use these later

The support legs

The legs were made from eight pieces of 60mm x 20mm timber ... two pieces for each leg. The lengths are not critical.

The legs are attached the baseboard using three wood screws as shown in photo 2.

The motor mounts

The L-shaped motor brackets shown in photo 3 are mounted beneath the baseboard

Each motor is positioned such that a nylon cable passed through the 1mm corner holes winds onto the center of each wheel-rim.

Step 6: Assembling the Plotter

  • Pass a length of 0.5mm diameter nylon through one of the baseboard corner holes and through the hole that is in the center of each wheel-rim.
  • Tie the nylon end to a 3mm nut using any fishing knot that won’t unravel.
  • Attach a hexagonal wheel coupler to the motor.
  • Attach the wheel-rim to the hexagonal wheel coupler.
  • Pull the nylon tight and stretch it past the opposite corner by approximately 300mm before cutting.
  • Tie this free end to the closest gondola pulley using a fishing knot.
  • Position the gondola over the (0,0) coordinate
  • Now wind the nylon on to the wheel-rim by rotating the wheel-rim such that the nylon winds on to the side of the wheel-rim furthest from the baseboard as shown in photo 1. Apply a slight tension to the nylon while doing this.
  • Repeat for all motors.

Step 7: Software

  • Download the attached file “four_wire_horizontal_plotter_V2.ino”
  • Copy the file contents into a new Arduino sketch.
  • Enter the XMS, YMS, Xoffset, Yoffset, and Zoffset dimensions into the software header [1]
  • Save your sketch as “four_wire_horizontal_plotter_V2” without the quotation marks and upload it to your Arduino.

Note

[1]

The Zoffset is the point you see on your pen when you look along the nylon from the corner-hole in the base.

Software Update 19 May 2021

The attached file "four_wire_motors_above_v3.ino" is compatible with this plotter and produces higher resolution plots

Sample plots are shown in Step 5 and Step 7 of https://www.instructables.com/4-Wire-Horizontal-Pl...

Step 8: Calibrating

Calibration is fairly simple.

  • Place a sheet of A4 paper at the (0,0) coordinate
  • Position the gondola over the (0,0) coordinate
  • Set your Arduino Serial Monitor to 9600 bauds
  • Tension the cables using menu option T4
  • Now send the following commands:
  • G00 X50 Y50
  • G01 X50 Y200
  • G00 X0 Y0
  • Measure the resulting line
  • Change your K value in the Arduino header to read 150/measured-length
  • Recompile and upload your software

Step 9: Sample Plots

Photo 1 shows a 100mm square target using menu option T5. The slight trapezoid is due to my camera angle.

Large file handling

A scribble image (photo 3) was sent to the 4-wire plotter using CoolTerm.exe available from https://freeware.the-meiers.org/

Some 27000+ coordinates later I got the image shown in photo 4 which, when viewed at a distance (photo 5) looks remarkably similar to the original image (photo 1).

When this plot finished the cables still had the same tension and the pen was back over the (0,0) coordinate.

Step 10: Summary

This instructable explains how to make a 4-wire plotter.

The plotter is able to handle large files

Features include:

  • an on-board interpreter that recognizes the g-code output from “Inkscape”.
  • accurate ... approximately 1mm with nylon
  • scaleable ... just increase the cable lengths
  • easy to make
  • low cost

The estimated cost of parts, excluding the power supply, is less than $100.

  Click here   to view my other instructables.

Anything Goes Contest

Runner Up in the
Anything Goes Contest

Be the First to Share

    Recommendations

    • Make It Modular: Student Design Challenge

      Make It Modular: Student Design Challenge
    • Science Fair Challenge

      Science Fair Challenge
    • Woodworking Contest

      Woodworking Contest

    25 Comments

    0
    yyds
    yyds

    Question 2 months ago

    Great plotter and great instructabl!Can I ask you a question? If you turn it into a 3-wire, can you tell me the formula for it? Is it the same formula as the 3D printer Kossel/delta?On the Kossel if you set the push rod to the same value as the centre distance it will be considered to be in the limit position and will not respond to the X and Y move commands. How should I fix this? I look forward to your reply! Thanks!

    0
    lingib
    lingib

    Answer 2 months ago

    Thank you for your interest in my plotter.

    The formulas for a three-wire plotter are shown in the attached image ... just set the Z-height to zero. This formula is from Step 5 "Theory" in my instructable https://www.instructables.com/3-Wire-CNC-Plotter/...

    Be aware that the usable plot area for a three-wire plotter is restricted to LESS than a triangle drawn between the motors. The limit condition for a three-wire plotter is when the pen is positioned on a line drawn between any two motors. In this situation there is no tension on the third cable in which case the pen can vibrate side to side. To overcome this you need tension in all wires which means the plot area is greatly reduced.

    A 4-wire plotter has a greater plot area as all four cables experience tension.

    My instructable https://www.instructables.com/4-Wire-Horizontal-P... contains some useful three-wire observations in Step 2 "Design 1".

    I am unable to comment on your Kossel/delta. You may be able to rework the delta plotter equations shown in Step 3 "Theory" of my instructable https://www.instructables.com/Delta-Plotter/

    3-wire plotter.JPG
    0
    Epiphany12313
    Epiphany12313

    Tip 2 months ago

    Good news, I have successfully driven a stepper motor! But I found a very strange problem. After I send the motion code (G00 X50 Y50), the plotter should stop moving after moving forward, but the motor makes another backward motion and the motor moves about 90 degrees. What is the reason for this (I test one motor alone)?
    Looking forward to your guidance

    0
    lingib
    lingib

    Reply 2 months ago

    Do as I have previously suggested ... "get all motors working and observe the actual plotter motion."

    The way a motor moves depends on the type of plotter ... for example the motor movements required to draw a square are completely different for cartesian, coreXY, omni-wheel, angle-distance, and hanging plotters. A video showing a coreXY motor in operation is shown in my instructable https://www.instructables.com/How-to-Control-a-Se...

    Your four-wire plotter uses a diferent motor configuration which means the motors movements will also be different from those shown in the video.

    With a string plotter it is entirely possible for a motor to change direction when plotting a diagonal ... see Step 2 "Some Design Considerations" in my instructable https://www.instructables.com/CNC-HANGING-PLOTTER/... for an explanation.

    You will see from that diagram that unless the motors reverse the command G00 X50 Y50 will move the pen in an arc.


    0
    Epiphany12313
    Epiphany12313

    2 months ago

    i bought arduino uno
    For the r3 board, the TB6600 driver is used, and the minimum current is set to 500mA, but after sending the command, the motor still does not respond, where is the problem? Hope to get your guidance.

    0
    lingib
    lingib

    Reply 2 months ago

    My circuit, as published, works. My guess is that you have substituted a component.

    The following sequence should locate the problem

    (1) Wiring ... Check that your circuit wiring matches mine.

    (2) Motors ...What current do your motors require. My motors require a coil current of 400mA. Check the specifications of your motors.

    Example ... the motors in https://wiki.dfrobot.com/TB6600_Stepper_Motor_Dri... each require 1.7A . If your motors are similar then the current limit for your TB6600 driver will need to be increased. Motors requiring 1.7A will not step with 400mA

    Check that your motor coil windings are continuous before connecting them to your controller ... the motor lead colors are not always the same between brands.

    (3) Motor Controllers ... Are the specifications for your TB6600 drivers the same as for the Big Easy Driver controllers used in my project. Compare the specifications ... there could be a timing issue ... your motors may require a wider step pulse?

    Check that the voltage logic levels are compatible with an Arduino UNO R3.

    Check that your controller is not using inverted logic.

    (4) Power Supply ... check that your power supply can supply enough current. Try connecting just a single motor. A single motor with 1A coils will require a 2A power supply ... four motors will draw more current.

    (5) System check ... Check that your motors work with your controllers. Use whatever circuit you have used before or a known test circuit.

    (6) Code ... Reinstall my code on your Arduino UNO R3 ... it may have accidently been corrupted. Make certain to use a text editor ... not a word processor.

    Run the Serial Monitor ... does a menu appear ... if not check your baud speed.

    Use the Serial Monitor to raise and lower the pen ... this will check that the code is working.

    (7) G-code ... Now try moving the motors using Serial Monitor commands such as G00 X100 Y100 followed by G00 X0 Y0 ... the motors should move in one direction then back.

    If there is no movement try increasing the PULSE_WIDTH in code line 93 and the DELAY_MIN in code line 96 ... motors need a certain amount of time before they will respond.

    My code is unlikely to work without modification on a MEGA as it references PORT numbers rather than specific pins. For example pins 8~11 are connected to UNO PORTB whereas they are connected to MEGA PORTH. Likewise pins A0~A3 on an UNO are connected to PORTC whereas pins A0~A3 are connected to MEGA PORTF.

    At this point I have no further suggestions.

    0
    Epiphany12313
    Epiphany12313

    Reply 2 months ago

    Thanks a lot for your guidance. The machine I made has come a long way

    0
    lingib
    lingib

    Reply 2 months ago

    Glad to hear that you have a motor working :)

    I do not understand what you mean when you say "your motor performs a rotary motion" ... motors do that?

    I suggest that you get all motors working and observe the actual plotter motion.

    The way a motor moves depends on the type of plotter ... for example the motor movements required to draw a square are completely different for cartesian, coreXY, omni-wheel, angle-distance, and hanging plotters. A video showing a coreXY motor in operation is shown in my instructable https://www.instructables.com/How-to-Control-a-Se... Your four-wire plotter uses a diferent motor configuration which means the motors movements will also be different from those shown in the video.

    Motor movement also depends on the previous commands ... issuing the same command twice will only produce a single response ... the second command will produce no movement as the plotter is already at the target location. Likewise a command sequence such as G00 X100, Y0 followed by G00 X110 Y0 will produce a 100mm movement after the first command but only a 10mm movement after the second since the plotter is almost there.

    Regarding test patterns ... there is a test pattern built in to the plotter ... select menu option "T5" to draw the target shown in Step 9 "Sample Plots".

    My circuit does not require a card reader ... the large graphics file of 27000+ steps shown in Step 9 was sent using CoolTerm.exe via a USB cable.

    The g-code interpreter in my four-wire plotter will accept g-code text files from any "terminal emulator that responds to XON and XOFF commands. "Coolterm.exe" from https://freeware.the-meiers.org/ works well once the timing is adjusted. A video showing how to send a g-code text file to a plotter using CoolTerm.exe is shown at 8:30 into the video in my instructable https://www.instructables.com/Servo-Deadband-Correction/

    Another alternative is the terminal emulator in my instructable https://www.instructables.com/CNC-Gcode-Sender/.

    0
    Epiphany12313
    Epiphany12313

    2 months ago on Step 10

    I uploaded the arduino uno r3 code to the arduino mega2560, and the wiring is in the same way as the uno r3 above. The serial monitor is set to 9600 baud, there is no movement of the machine part after sending the command on the arduino IDE, I don't know where the problem is. Hope to get your advice

    0
    lingib
    lingib

    Reply 2 months ago

    Thank you for your interest in my plotter :)

    My plotter works using the components shown in Step 2."Circuit Diagram"

    My code is unlikely to work without modification on a MEGA as it references PORT numbers rather than specific pins. For example pins 8~11 are connected to UNO PORTB whereas they are connected to MEGA PORTH. Likewise pins A0~A3 on an UNO are connected to PORTC whereas pins A0~A3 are connected to MEGA PORTF.

    Another possibility for no movement ... the motors used in my project only require 400mA current. Most other motors draw upwards of 1.5A in which case the controllers will current limit.

    0
    Epiphany12313
    Epiphany12313

    Reply 2 months ago

    Thank you very much for your guidance

    0
    Epiphany12313
    Epiphany12313

    2 months ago

    I uploaded the arduino uno r3 code to the arduino mega2560, will this create a problem?

    0
    lingib
    lingib

    Reply 2 months ago

    Yes ...

    My code is unlikely to work without modification on a MEGA as it references PORT numbers rather than specific pins. For example pins 8~11 are connected to UNO PORTB whereas they are connected to MEGA PORTH. Likewise pins A0~A3 on an UNO are connected to PORTC whereas pins A0~A3 are connected to MEGA PORTF.

    If you choose to use a MEGA then you will need to amend my code.

    0
    Epiphany12313
    Epiphany12313

    Reply 2 months ago

    Thank you very much for your guidance

    0
    lingib
    lingib

    Reply 1 year ago

    Thank you :)

    0
    Aric Caley
    Aric Caley

    1 year ago

    This is super cool. I am wondering how hard it would be make something scaled up a bit and use a hand router to carve wood...

    0
    lingib
    lingib

    Reply 1 year ago

    That's what I am working towards :)

    This project started off as a horizontal two-wire plotter with a rubber bungee replacing gravity.

    This wasn't successful as gravity pulls downwards but a fixed horizontal bungee pulls diagonally in places.

    It then occurred to me to add a mirror-image two-wire .plotter ... the gravity vector from the second two-wire should always pull outwards.

    Tried stacking CDs and the ends off wire spools (see photos). This works up to a point but the cable lengths vary as you go up the stack of discs ... plus there is an overturning moment.

    The annular ring has solved these issues and raises the possibilty of dremels and routers

    Current accuracy is about 1mm across the plotter ... whether this accuracy can be maintained when the design is scaled up remains to be seen.



    stacked_discs2.jpgstacked_discs1.JPG
    0
    hugheswho
    hugheswho

    1 year ago

    Clever approach. Well done and thanks for posting!