Introduction: Drawing Plotter

Picture of Drawing Plotter

Welcome to my Instructable!

Thanks for everyone who voted for me in the contests!

More about Mk2 version Plotter.

Here I'll show you how to make 2 axis, gcode controlled drawing plotter.

I've already made a delta 3D printer which is awesome, the only thing that wasn't made by me was the Arduino program. This program was very long and complicated, so I've downloaded it from the Internet. I've started to think if I am able to also make it myself. But why should I start with something so hard, firstly let's make something easier - Plotter!

Step 1: Parts

Picture of Parts

Here are the parts you should have to make my drawing plotter.


  • 6mm aluminium pipes (more in step 2),
  • 3m of GT2 belt,
  • 3D printed parts,
  • screws and nuts (3x M2 12mm, 14x M3 20mm, 6x M4 12mm).


  • 3 stepper motors (28BYJ-48, 5V DC) with drivers (ULN2003),
  • microservo (Tower Pro 9g),
  • 16x2 LCD with I2C converter,
  • SD card reader,
  • DC 5,5x2,1mm plug and socket,
  • 5V 2A DC charger,
  • PCB parts (more in step 4),
  • wires, goldpins, heat-shrink tubing.

Arduino programmer or Arduino UNO board (only to upload program).


Screwdriver, soldering iron, marker, scissors etc.

Step 2: 3D Printing

Picture of 3D Printing

Firstly let's print all the parts that I've made in Fision 360.

You can download the .stl files below.

Step 3: Belts and Pipes Cutting

Picture of Belts and Pipes Cutting

Now you need to have 6mm aluminium pipes, of which you can make plotter frame.

I bought 5x 1m long pipes for 0.80$ each in a DIY store, and 3m of GT2 belt on the internet for 9$. Now cut the pipes so you will have 2x 53cm long, 2x 38cm long, 2x 28cm long and one 58cm long.

Than cut the belt - 3 times 2cm pieces, 1 64cm and 2 115cm long.

Step 4: PCB and Electronics

Picture of PCB and Electronics

Now I prefer to make a PCB (Printed Circuit Board). The other way to control this plotter is to use Arduino board, but it won't match the SD card module, there won't be enough power supply pins ant they will be away from each other so you will have to use a ridiculous amount of cables.

You can find more about making PCB's here.

Eagle files - schematic and board available to download below.

Than solder all the electronics parts (layout on the photos):

  • ATMega328P (with Arduino bootloader),
  • 28 pin socket for your ATMega,
  • 3x 10kΩ resistors (SMD version),
  • capitators: 3x 100nF, 2x 22pF, 1x 10nF,
  • button,
  • 16MHz crystal,
  • 10uH coil,
  • goldpins.

Now make all the cables needed to connect your board with stepper motor drivers and plug them in (photos).

Step 5: Wires

Picture of Wires

The next thing you should do is to make motors and servo cables longer.

First X axis motor wires are long enough - motor will be close to microcontroller. Second X axis motor will be placed on the other side of plotter, it's cables should be 53cm long.

Y axis motor will be moving across all X axis so his cables should be longer than it - 60cm will do the work.

Servo will move across all X axis and all Y axis, so it's cables should be longer than these two together - 90cm will be good.

Remember not to mix them, the order must be the same.

Step 6: Display

Picture of Display

Now it's time to make your display working. It will be connected to your main control unit with 4 cables (+, -, SDA, SCL). Solder them to I2C converter. GND wire (white on my photo) should go further to buttons, which opposite endings connect, using cables, to PCB.

Cables lenght actually doesn't matter, my are 15cm long so display isn't very close to control unit.

At the bottom of LCD panel stick 2 small parts which will hold it in right place. Make sure that screws or nuts didn't block the pipe.

The third photo shows cable endings, there is one very important thing:

order of LCD cables starts with -, + but ends with +, -.

Step 7: Stepper Motors & Servo

Picture of Stepper Motors & Servo

Start with sticking GT2 pulleys top with their bottom. Add M2 nuts and screw them to stepper motors. Than stick together 2 servo holding parts (3rd photo), add part which will hold marker. Screw servo to it.

Make sure that servo handle rotated fully right makes the same angle as shown on the fifth photo.

Step 8: Assembling the Frame

Picture of Assembling the Frame

Makig plotter frame is very simple, just follow the pictures and assemble it.

Put nuts into holes in 3D printed parts and screw it with aluminium pipes. Some Y axis parts require using glue (look at the photos)

Step 9: Microcontroller and LCD

Picture of Microcontroller and LCD

Mount on the longest pipe from the left microcontroller, and LCD with first cable chain segment next to it. Put all the remaining wires into chain, put it on it's place and plug wires to main control board.

Step 10: Charger

Picture of Charger

To power up plotter you can use charger from an old phone or buy it for like $10.

It must be 5V and minimally 1,5A DC charger (I recommend using 2A).

This chargers usually have micro usb cable, just cut off the end and solder 5,5x2,1 plug. Red charger wire (+5V) to inside of the plug and black (-) wire to outside.

Step 11: Arduino Program

Picture of Arduino Program

Now let's focus on Arduino program.

The first important thing is to check your's LCD I2C adress. Every I2C device have it's own number and to check it you will need special program called I2C scanner. Connect LCD to Arduino board or plotter PCB and upload it. Device adress will be printed on serial monitor. Than replace original 0x27 with your adress in 7th line of code.

Install LCD_I2C library on Arduino IDE:

  1. Go to Arduino installation directory (usuallly: C:\Program Files (x86)\arduino\libraries),
  2. Change LiquidCrystal name to something else (f.e. Old_LCD),
  3. Open Arduino IDE,
  4. Go to Sketch - Import Library - Add library,
  5. Select new downloaded LiquidCrystal library and click 'Open'.

Upload main program to plotter.

All files can be found on original Arduino website or downloaded below.

Step 12: Making G-Codes

Picture of Making G-Codes

To making Gcodes I'm using tha latest version of Inkscape. It's free and can be downloaded from original Inkscape website.

How to make them:

  1. Open Inkscape and draw or write something,
  2. Go to Extensions - Gcodetools - Orientation points,
  3. Select 3 points mode and click apply,
  4. Go to Extensions - Gcodetools - Tools library,
  5. Select cylinder and click apply,
  6. Using text tool (F8 key) change tool diameter to 0,
  7. Select your drawing and go to Path,
  8. Select Object to Path,
  9. Once again select your drawing and go to Extensions - Gcodetools - Engraving,
  10. Go to Preferences tab,
  11. Select file name GCODE.ngc and directory in which it will be saved,
  12. Go to Engraving tab and click apply,

You can also convert into G-code any picture that you want, import it to Inkscape, select it and go to Path - Trace Bitmap. Choose one of three first options depending on your picture (I recommend using Edge Detection). Click OK and path should be under original picture.

You probably will receive an error 'Cylindrical cutter has no shape', so just click ok.

If there will be error #CloseParts change text font to Arial, because in normal the letter 'u' is bugged.

File will be saved in the directory you've typed before, you can close Inkcsape. Open this file and remove header and footer (I'm woking on new program which will ignore it).

Move file to SD card and plug it into plotter.

Step 13: Final Printing

Plotter is very cheap, but his drawings looks very good for me.

If you have got any ideas how to improve this Plotter or any questions about it, make sure to leave a comment!

The next project I'm working on now is my own website. I will publish my projects also there.


zoubir.santouh (author)2017-12-27

Super !

gustavio101 (author)2017-10-24

I am not much of a programmer, however, I hope someone could help me solve this. I get this error message while trying to compile the sketch. I have replaced the name of the previous LCD library and placed the new folder inside Arduino library folder.

From what I can tell out of the context it has found multiple LCD files and does not know which one to pick. The problem however is that I don't know either. Any help is welcome.


Arduino: 1.6.12 (Windows 10), Board: "Arduino/Genuino Uno"

Plotter4:7: error: no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)'

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);


C:\Users\ooadsf\Desktop\Drawing plotter cnc\Kod\Plotter4\Plotter4.ino:7:50: note: candidates are:

In file included from C:\Users\dzfsbmkldsf\Desktop\Drawing plotter cnc\Kod\Plotter4\Plotter4.ino:5:0:

C:\Users\mkladskfklasd\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:3: note: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);


C:\Users\poabrde\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:3: note: candidate expects 3 arguments, 8 provided

C:\Users\ölasdflöfasd\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

class LiquidCrystal_I2C : public Print {


C:\Users\kldasfkfasd\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: candidate expects 1 argument, 8 provided

C:\Users\kdfasklfds\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)

C:\Users\kjasofji\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: candidate expects 1 argument, 8 provided

C:\Users\pokdsokdfs\Desktop\Drawing plotter cnc\Kod\Plotter4\Plotter4.ino: In function 'void setup()':

Plotter4:114: error: 'class LiquidCrystal_I2C' has no member named 'setBacklightPin'

lcd.setBacklightPin(3, POSITIVE);


Plotter4:114: error: 'POSITIVE' was not declared in this scope

lcd.setBacklightPin(3, POSITIVE);


Multiple libraries were found for "LiquidCrystal_I2C.h"

Used: C:\Users\mkldskldfs\Documents\Arduino\libraries\LiquidCrystal_I2C

Not used: C:\Users\öldaskdfas\Documents\Arduino\libraries\jm_LiquidCrystal_I2C

Not used: C:\Users\dasf\Documents\Arduino\libraries\LiquidCrystal

Not used: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal

exit status 1

no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)'

This report would have more information with

"Show verbose output during compilation"

option enabled in File -> Preferences.


Try to move all of the LCD libraries from C:\Program Files (x86) and from Documents to new folder. Than install the correct one (check some tutorials do do it properly).

Check also your LCD's custom I2C number.

I hope it will work eventually.

I switched to my laptop and did the same procedure as on my stationary computer. This time it worked! I recall installing some weird LCD-libraries a while ago, must have been some of which had the same file names.

I am close to finishing this build, thanks for this instructable!

I am glad to hear it!

Just out of curiosity, did you print the parts in ABS or PLA. I had no ABS at hand when I began so I used PLA. The parts are really brittle and I am thinking of changing some of them to a better plastic or cast them.

I had printed them in PLA.

The parts are indeed brittle, just don't overtighten the screws and you will be good. They don't have to be very robust at all because they carry only small forces.

pedrostudio (author)2017-10-08

What if I want to change the size of the page on which it is to be plotted.what should I do?Plz help

Basically make the plotter bigger (longer aluminium tubes and longer wires to motors). The electronics and program can stay intact. I don't thing max size was defined in the code, it just depends on your g-code.

ejanssen (author)2017-06-10

Hello TSS, nice prject but i have some problems with . Do you have a digram/schema to put board together on breadboard? Including the inductor. I have trouble figuring it out using only fotos and the cad schema. Biggest problem is jitter and noise soon after power up.

SpsinghW (author)2017-03-01

But how to convert any image into gcode

TheSuperSewcio. (author)SpsinghW2017-03-01

It is step 12, basically go to Path and trace bitmap

EugenM6 (author)2017-02-13

hi ! instead of PCB, I can use Arduino Uno?

and which the sketch to load from

TheSuperSewcio. (author)EugenM62017-02-13

1. Yes you can use Arduino Uno, pins are definde in the programm.

2. Extract on your desktop, or wherever else, open Plotter4 folder and Plotter4.ino in your Arduino software. The rest of the sketches are tabs which can you switch to at the top of Arduino IDE.

nandohaze (author)2017-02-08

is possible to add a cutter and become a cutting plotter (special knife from plotter like silouette)

Probably it is. But I will recommend using external power supply for the motors (9 or 12V) so they will have more power.

Plotter update including this feature comming soon, I have also hacked my motors and now they are bipolar style motors, and I will be using my custom stepper motors drivers in the next version.

erik_montesdeoca (author)2017-01-30

Excelente trabajo, veo que hiciste uso de materiales electrónicos +1P por eso, es muy importante compartir todo lo necesario para realizar el trabajo, y es de suma importancia también.

keep the good working, easy and very nice :)

There will also be plotter update soon, program for stepper motors will change, I will add some bearings and change plotter drawing head.

I am working on it right now and I will release this update as soon sa possible :)

The_Technocrat (author)2017-01-31


jimthree (author)2016-12-20

This might be an odd question, but do you think this plotter, or plotters in general would be able to function properly if they are mounted vertically on a wall? They would have to fight an uneven force of gravity, but would the steppers be strong enough to over come it? I guess there is no positional feedback so if the axis most impacted by gravity slipped, the plotter wouldn't be able to correct.

TheSuperSewcio. (author)jimthree2016-12-20

Plotters with stronger stepper motors like NEMA17 can easily draw on walls. There are also special types of plotters for vertical surfaces only, just type 'wall plotters' and you will find them on the internet. The are using motors to go up and than force of gravitation to go down.
There aren't any odd questions by the way :)

Achyuth cheekatla (author)2016-12-19

i have a doubt why can't we use z axis an in vertical plane and also make it as a 3d printer tooo...

3D printers are much more complicated than this plotter.

For printer you will need third axis to move it up and down and fourth 'axis' for extruder to push filament into nozzle. Than you have to melt it in 210 degrees Celsius. This causes lot of additional programming which ATMega328P won't handle (my 3D printer uses Arduino Mega).

It will actually be easier to make diffrent project than changing this one.

Thanks for support!

russ_hensel (author)2016-12-09

I like to two motors for one axis. I have thought ( but done nothing ) about this approach for a long time. Can you discuss.

Two motors on one axis works fine as long as they aren't losing steps. Than one side of Y axis could stop and other will still going - this will broke the drawing. You should also think more about endstops for each motor separately.

Right, good idea. If the motors are loosing steps, though, you are already pretty messed up. Yes?

If one of X axis motors lost step (or I'd better say lot of steps, one or two won't do anything), than Y axis could stop moving. Consequences for drawing will be terrible.

mr.incredible (author)2016-12-06

Nice design and ible. If your gantry can handle a little bit of pressure, you could affix a Roland style vinyl cutter to cut vinyl or paper. They are pretty cheap on I made my own CNC with a 3.5W blue diode laser. It does an excellent job on most things but some colored materials throw it off. I have added a Z axis, for a vinyl cutter but I don't have it wired up yet. I'm still trying to figure out how to get the focus back after moving the Z axis. To now I haven't worried with end stop or home switches but I may have to do something like that to give myself a reference point.

Simple design, I love it! CAD up for grabs?

Thanks, I haven't decided yet. I am contemplating selling this as a DIY build kit. I don't have a lot of time and I don't know if I could make any money off of it. There are several similar kits out there. sells one that is 30cm x 40cm but it is only X and Y, and uses 3 NEMA 17s for that. I may just do an ible and post everything open source, including the Sketchup files.

I did build mine directly off of the Sketchup CAD. Gantry Side plates and back plate was an exact fit, so all I had to do was bolt everything together. The hardest part was the Z axis. Keeping it small was quite a task. Some of the Z components were tricky to build. But other than the Z axis and the XY gantry side plates and the back side plate, everything was off-the-shelf and bolted toghther nicely. My design uses two NEMA 17 steppers for X and Y, and one NEMA 11 for the Z axis. My design gives about 40cm travel in both X and Y. Z travel is about 10cm. There is no bottom so you can etch or burn or cut on odd shaped things. (book, table...)

avinashk (author)mr.incredible2016-12-07

Awesome project.. Nicely done.. However could u pls tell if i can use nema 17steppers and an arduino board with stepper drivers?as i am not much take savy n just a layman with good experience on mechanical or hardware part n less on electronics.. Ur electronic set up looks to b bit complicated...i ve worked little bit with nema 17 n arduino in past .kindly shed some light.. Thanks..

jduf (author)2016-12-06


In plotter.ino::decode1() case 'F': ? Are you sure ? OK, it's not a matter because you don't care about commandType 3 but for a programmer like me, it's not anodyne ;-)

Good work anyway.

TheSuperSewcio. (author)jduf2016-12-06

Oh sorry, i forgot to remove it. There was before an option to change drawig speeed but i have removed it because these motors are so slow anyway and there wasn't any reason to slow them down even more. I left it there so plotter won't print that there is unknown command 'F' in the g-code. Than i have also removed serial and gorgot about this case.

Thanks for support :)

jduf (author)TheSuperSewcio.2016-12-06

Thanks for clarify this point. ;-)

perfo (author)2016-12-06

Nice Build..

Maybe a metal table and a magnet on the pen holder to make sure it retains a bit of force against the page ? I guess spring loaded could also work . Better still a return spring and an electro magnet you'd be able to pen up/down very quickly with a reliable repeatable force on the pen...

TheSuperSewcio. (author)perfo2016-12-06

I have small rubber holding marker down, if you want to draw with pencil or pen you will have to use springs or something stronger because they need more force to draw.

Ambrogio (author)2016-12-06

Very good project.

Where could I get the 3D printed parts please ?

Any more details on the pen lift system please ?



TheSuperSewcio. (author)Ambrogio2016-12-06

You can download 3D parts and print them on your 3D printer on buy them on the internet, for example on 3D Hubs.
The pen lift system will be upgraded soon, on my website that i'm wirking on now.

pfred2 (author)2016-12-04

I love plotting on my CNC machine. I get the best results with a plain ball point pen. Although I have not really tried felt tip markers with it yet. I am not too keen on Inkscape's built in G Code generator. For just artistic stuff F-Engrave works the best for me. If I need things scaled correctly I use DXF2gcode though.

Here' something I plotted on my machine. I put a lighter next to it for scale

TheSuperSewcio. (author)pfred22016-12-05

Thanks for your idea! I've changed my plotter header so now it can use any type of pencils, not only with 8mm diameter like before. I've tested some diffrent pens and that, in my opinion, is the best result. I've achieved it with the marker that is on the photo.

There is centimeter ruler underneath for scale


Thats some fine strait lines and almost typed.


WannaDuino (author)pfred22016-12-06


please upload a picture of your plotter.


russ_hensel (author)2016-12-04

Instructables should feature, perhaps they will?

Plotter just got featured!

Nikus (author)2016-12-04

Nice project, but slow down this 500% speed of your delta printer :)

TheSuperSewcio. (author)Nikus2016-12-04

my delta has 80mm/s limit, so it os not even 300%

Nikus (author)TheSuperSewcio.2016-12-04

alright 300% is not so much: D

About This Instructable




Bio: I am just a bit of electrons orbiting around neutrons and protons
More by TheSuperSewcio.:Black As LineDrawing Plotter1000 steps Servo
Add instructable to: