X-Y Plotter





Introduction: X-Y Plotter

About: Hey! I'm Henri and I love making things. I'm currently studying to become an architect

Update 12.04.2015 - Have added a step to cover adding a cutting tool.


Thank you for taking the time to check out my instructable for an Arduino based X-Y plotter. I decided to build this as an accompanying piece of work for my 4th year architecture dissertation at the University of Edinburgh the topic of which is open source architecture and the challenges it poses for the architectural profession.

Inspired by Wikihouse founder, Alastair Parvin, and his proposition that “if design’s great project of the 20th century was the democratisation of consumption… design’s great project in the 21st century is the democratisation of production” I set about the task of building a machine that would be capable of printing my own customised open source Wikihouse from the commons at a 1:100 scale.

For the real Wikihouse project you would use a CNC router and 18mm plywood, but due to time constraints I opted to build a smaller more manageable desktop pen plotter which would still plot accurate CAD drawings.

The plotter is comprised of 3 stepper motors each powered by a V4.4 EasyDriver and runs off a 12V DC supply. Since all three axes are running a stepper motor the pen could be replaced with a router and become a CNC milling machine (in theory).

I use grbl with the Arduino to send G-Code to the printer and a really great way to create G-Code is with the totally free software Inkscape, which has a built-in feature, G-Code tools. Inkscape will convert your drawings to G-Code which grbl will interpret and send instructions to the plotter.

With that brief introduction out of the way I will show you how I went about building the plotter, I will provide drawings like the .dwg for the laser cut base however please use the material with caution and check measurements yourself before cutting your precious materials.

This instructable is intended as a resource for people who are thinking about building a similar CNC machine, or have already started and are looking for answers and troubleshooting problems. I would not suggest that people copy this design completely as it was only my second project of this nature as as such has its limitations, but it may serve as a valuable point of research for those interested.

Step 1: X-Axis

So I began by taking apart an old printer that had stopped working as I had seen a few examples of plotters that use running gear from obsolete or broken hardware and liked the idea of using parts that would otherwise go to land fill. I took the bracket that the ink cartridges originally were fixed to and cut away pieces of the black plastic caddy you see in the video until i had a nice clean surface where I would later attach a pen.

Originally there was a motor at one end of the bracket and an idle at the other with a belt in between, had the motor been a stepper motor l would have been able to leave these in place, however I instead removed both and after a fair bit of manipulation I mounted an idle gear at one end and a stepper at the other (these are the gears you see in the video).

The belt would then run between the motor and idle and attached to the black plastic caddy will pull my pen along the x-axis. I mounted a couple of L shaped brackets off the printer component by which I would later suspend the x-axis over the rest of the plotter.

Step 2: Z-Axis

This is not how I ended up doing the Z Axis exactly but I thought it would be good to show alternatives and reasoning as to why it wasn't done this way finally. Here I have mounted a servo off the plastic ink cartridge caddy. I also mounted an old floppy disk component from my mum's computer (please do consult whoever is the owner of the floppy disk drive, chances are they won't need it though) off the caddy and tensioned a belt between the servo and worm gear of the floppy drive.

I didn't end up doing it this way for two reasons. 1: Servos only turn 180º and with the worm gear this allowed very little movement up and down (although probably enough to raise a pen) 2: Later on when we are configuring grbl it is much easier to use all stepper motors rather than servos as well, that said you can manipulate the code to work with a servo.

Step 3: X-Axis Fixed to Base

The basic design of this plotter is such that the X-Axis is suspended over the bed on which the drawing will be made. The Y-Axis pulls the bed perpendicular and underneath the X-Axis. The video here shows the X-Axis mounted to a length of aluminium angle that i picked up from B&Q, this angle then spans between two 8mm threaded rods that are fixed to a 12mm MDF base. Threaded rods are really useful in this context since they allow for essential adjustment.

Step 4: X-Axis Motor Driven

Next I decided to run some tests and see if I could send some instructions to the stepper motor via an Arduino to get the caddy to move up and down the X-Axis. Brian Schmalz's page on example stepper motor code is really helpful if you haven't got experience of using EasyDrivers and stepper motors with the Arduino platform.

Step 5: Y-Axis

The way I decided to set up the Y-Axis was with a stepper motor that would pull the middle of the bed back and forth. The bed would have two linear bearings mounted to it which would run along two 8mmø rails I picked up from B&Q (note I am intending on swapping these aluminium rails out for stronger linear shaft rods)

The rails would need to be lifted from the base so that the bed would run over the top of the motor and the idle. The mounts shown in this picture are not the final method but again good to show the plotter's evolution.

Step 6: Y-Axis Moving

Just as with the X-Axis I decided to test the motor and the way I had setup the running gear. This is where I began to realise the problems with making all of the components thus far by hand. Very minor inaccuracies cause problems and as such you can see in the video that the bed vibrates and shakes, it was shaking more before I put the jockey wheels in that you can see under the bed.

What has been covered up to this step was all done in the limbo between Christmas and New Year at home, in January I would return to Uni and I had plans to remake many of the components with the University's laser cutter 3D printer etc.

Step 7: Laser Cut Base

Back at Uni I drew up a base and bed in AutoCAD to cut on the laser cutter so that I could make my whole setup more accurate. I decided also to place some guides down the side of the base which would ensure the bed could not rotate off course as it had been doing previously. These guides would cause a lot of friction but I know how strong the Y-Axis' stepper is and as such I wasn't worried. The stepper motor linked will fit in the recess that is cut out in the .dwg I have uploaded.

The assembly of the base is very simple, the 6mm MDF boards go one on top of the other, the top one has a recess for the stepper cut out of it as well as a recess for the breadboard and Arduino. The majority of the holes are 6mmø for bolts to go through to hold up things like the mounts for the rails.

The MDF discs are to be wood glued together to form feet for the base so that you don't need to counter sink the bolts (three to a corner, don't throw away the ones that are from the main base)

Use plastic weld to fix the rail mounts together (the toothed pieces below the acrylic bed)

The other acrylic pieces below the bed are to fit over the stepper motor and hold it down

Step 8: Pen Holder

Earlier I showed how the X-Axis was arranged, I swapped out the servo for a little stepper motor. I have linked to the one I bought, a "5V 28BYJ-48". Do not bother with one like this, they are so so slow and as a result printing takes much longer, you have to wait at least two seconds for the stepper to raise the pen by 1mm clear of the paper. This is down to the fact that I have an interesting gear ratio going on with my floppy driver worm gear as much as the stepper motor but anyway, I would recommend using a superior stepper motor or just redesign the way I have set the Z-Axis up.

Anyway, the penholder. I designed a pen holder in Rhinoceros 5 that I 3D printed and glued to the floppy drive component, I have included a .3dm file should you wish to edit the design in Rhino or another software of your choice and I have also included a .stl file ready for 3D printing.

Step 9: Grbl

So now that we have all our axes working the next thing to do is get started with grbl. The best thing to do follow this link and just follow the comprehensive explanation provided. It does seem daunting at first however the information available through their website is great and makes a lot of sense.

Follow the wiring diagram I have uploaded from grbl and get Universal g-code Sender. Universal g-code Sender makes using grbl easier since it allows features such a jogging each axis and visualising the g-code you are sending to your printer.

Step 10: Test Print

Ok so now that we have grbl configured it is time to send some g-code. At this point i didn't actually have my Z-Axis finished so I used a bulldog clip to fix the pen to the X-Axis. My first print was the outline of a gecko, don't ask me why a gecko, it just was. Because I didn't have the X-Axis finished the included piece of g-code has no movement in the Z direction, it is a continuous line.

The first print was painfully slow, this is because I hadn't understood how to properly configure grbl. Playing about with the settings and fine tuning is necessary.

Be wary that if you use the included g-code, your settings for mm/step need to be correct, the gecko is about 12cm long, if your mm/step are incorrect the size maybe too large for the print area you have and unless you have enabled soft limits in grbl you may damage your machine.

Step 11: Creating Your Own G-code

With everything in place you are now ready to make your own g-code. The best way I have found to do this is to use inkscape, it is free and has a built in feature, g-codetools. I found this tutorial really helpful to understand how to use g-codetools.

If you are, like me, wanting to print drawings you made in AutoCAD (.dwg/.dxf) then I found a good free way is to download Apache Open Office, open up you .dxf and then save them as .svg files. These files are then easier to work with in inkscape and can be simply converted to paths which work with g-codetools. I could not get .dxf files imported directly to inkscape to be processed by g-codetools. You may have better luck.

Step 12: Wikihouse Print

So if you set out with the same intentions as me you might like to access the Wikihouse Commons, download a project manipulate it, and print it on your new DIY plotter.

I hope you have found this instructable to be of some use, maybe not all of it will be, but it is hoped that you might take parts, change them and make them better. I would really love to know if you found it helpful or have tried bits out, changed them etc.

Thank you for taking the time to read my first ever instructable.

All the best,


Step 13: Cutting Tool

Following the comments made by "Raitis", "dollarseed" and "dan3008" I went ahead and bought a Silhouette replacement blade from amazon for £8. I had to do a bit of sanding and cutting away of the plastic housing so that it would fit beneath my pen holder.I then araldited a bolt to the housing as the diameter of the plastic was too large to fit inside the holder.

The results of the cut could be better, the blade does drag and the cut lines are therefore not straight, but it did work so I cannot complain. An easy and fairly cheap mod.

Automation Contest

First Prize in the
Automation Contest

CNC Challenge

First Prize in the
CNC Challenge



    • Clocks Contest

      Clocks Contest
    • Woodworking Contest

      Woodworking Contest
    • Planter Challenge

      Planter Challenge

    We have a be nice policy.
    Please be positive and constructive.


    4 Questions

    can I get a copy of your defaults.h and your config.h files?

    what is the scale on the base drawing? I see the base and top plate

    but there are no scale

    Hey, the .dwg file is just at 1 to 1 scale. If you download the .dwg and open in AutoCAD or something similar it should be the correct dimensions :)

    Add more images step by step how to costruct base


    overall power supply you used in this plotter ? (mention voltage and ampere also)

    Hello! @scalpshifter This is great. By any chance do you have a list of parts for me? Thanks!

    Hello, you thought to add a Lcd display i2c 16x02 to the machine?
    Thanks, Stefano

    I am building a device that is a lot like an ultra-miniaturized plotter. Instead of steppers it uses small electromagnetic actuators that are controlled by PWM signals from an Arduino. I've managed to write some sketches to control the actuators but would like to, ultimately, be able to use a GUI to define patterns (the device prints molecules and other micro to nanoscale materials in a fashion directly analogous to a pen printing ink, except on a spatial scale maybe 100 to 1000 times smaller). Based on your experience do you think that grbl and the Universal G-code Sender would be applicable to this project and, if so, since I am a novice programmer, would it be too much to attempt (for me)?


    2 replies

    Hi @scalpshifter,

    Wow, this project sounds amazing! Judging by the ambition of your project you sound as if you will have no problem whatsoever in employing universal G-code sender - I am barely even a beginner programmer and I got it to work!

    What are you using to make your G-code sketches? Being an architecture student I created my vector drawings in autoCAD and then used Inkscape to generate the G-code which I could then send to universal G-code sender.

    Thanks for your interest in te project and if I can help in anyway let me know, the project sounds awesome.

    Thanks for the response - I have never made a G-code sketch -just arduino sketches (a different kind of sketch I reckon) so I have to learn about that. I have a little autocad experience but again I am low on the learning curve - using Fusion 360 to create parts to 3D print for the various elements of the device I am trying to make. I would love to have some guidance so thanks for the offer! I guess the next thing for me to do is experiment with Inkscape and figure out what that does - this is the first I've heard of it. You know that cliche about old dogs learning new tricks - well that pretty much defines my life! Thanks again.

    Why not use a roller for the Y axis.
    Save the linear rods, slide blocks and belt. It will be a lot smaller too. Connect the stepper directly to the roller with another spring loaded roller underneath to hold the paper

    我也想试试看,哈哈 i would like to have a try,thanks for your inspiring instruct

    Great, I have just bought a Silhouette blade from amazon, will fit it when it arrives and put the results up. Thanks

    8 replies

    Good luck with that one! I'm not sure how are you going to adjust it without their special key, but it should be possible. Or maybe it comes with the blade, I don't know.

    An alternative way would be to use it with the top cap off as it unscrews. You'll see as it arrives.

    Blade arrived and I finally had some time to have a go at attaching it, have added a step to the end of the instructable if you want to have a look. Thanks for making the suggestions :)

    Hey, nice to see it somewhat worked. What do you mean by blade drags though? Is it not spinning in the direction of the cut? That could be due to that threaded rod you placed there interacting with the spindle or bearing maybe?

    No I think the problem is that the bed of the plotter is not at a consistent height, so sometimes the blade digs in too far. Could a spring loaded blade holder work better do you think? Like this: https://www.instructables.com/id/Spring-loaded-CNC-Penholder-for-Rapidograph-techni/

    I do believe that you could probably make a spring holder yourself, but the blade needs only to protrude enough to cut through the thickness of one piece of paper. Anything more, and you can kiss any vinyl projects good bye, as it will tear the vinyl on the turning points. My MH-MK2 allows me to set the pressure applied when the knife is in use, but forgives that when I change over to a sharpie marker for seeing the cut lines. (The sharpie marker is slightly smaller in diameter than the blade holder, so I wrap teflon pipe threading tape around it, to make up for the difference. This allows me to put the cap back on when not in use, so as not to let it dry out).

    a piece of advice: if you buy "propper" paper cutting exacto knife (the one with free spinning blade), measure distance from spin-centre of the blade and it's tip and adjust accordingly (see image below)


    *forgot to finish my comment after adding image...

    so if you adjust your code, you should be able to get perfect cuts!

    I'll correct myself - just got myself a new blade and it comes with the adjusting key, so no worries and share your results with the blade when you try it out :)

    Since you've discussed using a blade instead of a pen, I found a great source to be USCutter.com unfortunately, as of today, the blade holders for the MH design are on back order, but they allow you to finely adjust the blade depth, as well as allow it to spin freely. I broke down and purchased the MH-MK2 vinyl plotter, but would have been much better off designing a larger unit myself, and saved some money. Very nice design work.

    2 replies

    Blade arrived and I finally had some time to have a go at attaching it, have added a step to the end of the instructable if you want to have a look. Thanks for making the suggestions :)

    I will check them out, thanks for the heads up. Still waiting on my amazon order for the Silhouette blade, will post an update when it arrives/I have time to experiment :)