Drawing Machine

by cyul Apr 23, 2016
Download All Files

Thing Apps Enabled

Please Login to Comment

wanhao in the Chinese service is really bad

thanks sir.all is fine.and grbl.

What was wrong?

have no z axle Definition .sir

i think this grbl of pwoject is wrong, is have no z ??

Comments deleted.

i use the grbl 1.1f ,who can tell me what i change it ??/ and my 28BYJ-48 is still not working and hot......

There a several things that may have gone wrong:

  • check your stepper motor on another application (try the ULN2003 driver board that came with it)
  • check your cables, maybe you have inverted pairs of wire or a wire is cut or disconnected
  • check your feed rate (use the serial interface to grbl to query and change variable $112), if the feed rate is too high the motor will not move
  • check the voltage on the stepper driver, if it’s too low the stepper will not receive enough current to move

Hello! Thank you for all, but I can't do it. Simplify turn off with several stl...what happen? Thanks

Use Slic3r or Cura. They are free.

I convert .obj files to .stl and everything is fine

Dear Cyul. I wanted to make your machine, download files, but I could only open 2 files on drawing machine base and drawing machine base with nuts. Other files are corrupted. Can I get the right stl or obj files?

Dear Cyul, thank you for posting this project and being active in the comment section and hand holding so many people to create their own Drawing Machine!

After comparing the more common servo and the stepper (your) for z axis versions I deciced to build the stepper version as it doesn't need a custom grbl firmware. As it's the very first project with arduino and mechanics I have learnt a lot while building it.

Now the drawing machine is working but I am having a few issues...

  1. My drawing machine is very slow (although I have put the same setting as you have, but I am using Universal Gcode Sender as I am not able to run bCNC) - how to speed it up?

  2. I am unable to install bCNC on Windows 10 and find any instructions to do so.. is it still active? are you using bCNC on Windows?

Thank you once again! :)

The speed of the machine is determined by grbl settings. The software used to send commands is irrelevant. You can send commands with a serial terminal (and the serial speed doesn’t matter either, for all the machine cares, it could be 1200 bauds).
If you check the settings and they all seem okay, maybe something is wrong with the way your grbl was compiled?

I was using bCNC on a Mac. I do not know the state of the project. Currently I am not in a position to investigate. I just moved to a new place and everything is in boxes.

Thank you Cyul for the reply.

Which grbl settings should be changed?

$110=20000.000 (x max rate, mm/min)
$111=20000.000 (y max rate, mm/min)
$112=2200.000 (z max rate, mm/min)
$120=200.000 (x accel, mm/sec^2)
$121=50.000 (y accel, mm/sec^2)
$122=200.000 (z accel, mm/sec^2)

or is it some firmware settings that needed to be compiled with Arduino IDE?

Sorry, if it's a stupid question :(

The feed rate ($110, $111, and $112) is the maximum speed allowed on the axis.
If the feed rate is too large, the steppers will skip steps.
If the acceleration is too low ($120, $121, and $122), the movement will never reach the feed rate as the movement will start to slow down before hitting the maximum allowed distance.
I noticed your y and z accelerations are probably swapped.

Great project, thanks for sharing! I made one following your instructions, it can move but still have some issues:

  1. The X motors continue moving and clashed the Y motors, how to set the max X working range? and the max Y range?
  2. How to set the start point value for X/Y/Z axis?
    Thanks a lot!
  1. Grbl settings $130 and $131 define the x and y maximum travel (depends on the length of the rods you use)
  2. As there are no switches to detect home positions, you have to set the position manually at (0, 0) when the machine is unpowered.
    You’re welcome!

Great thanks sir! I've solved the x/y travel issue and direction problem. I've posted remixed picture. A new problem is that the 5V step motor become very hot after a few minutes of drawing. How to make it cooler? Thanks very much!

As Cyul said, turn the z driver potentiometer anticlockwise - my 5V stepper motor was also getting very hot but after adjusting the current it stays cool.

Thanks, it's much cool now, great method!

thanks, this really helps!

I am sorry but I cant understand......I want it kind of drawing machine.......I need make it? or are you sell it? for assembly my self? and what is model of it?

This is a DIY community. I do not sell anything.

Hi, I just made this machine and worked perfectly, but I have one issue, the z axis works fine when I control it manually on universal gcode sender, but it doesn't lift up when it should while drawing. It draws all the trace of the drawing when it shouldn't. I used a 28BYJ-48 5V stepper motor. What can I do? I re-arranged the cables, skipping the red one

Hi, it sounds like you have a problem at the step where the gcode file is generated. Check the commands in the file you are trying to draw, or make a file that contains simple commands (draw a square for example) and see if they are interpreted correctly.

Thanks a lot for sharing your knowledge! keep it up!!

You’re welcome. Take care.

Yeeesss, the config.h was the problem, the only thing I had to do is uncomment the //corexy line, no need to modify #define HOMING_CYCLE_0 (1<<X_AXIS) #define HOMING_CYCLE_1 (1<<Y_AXIS). I will post a make soon!!

I followed the same exact steps in generating the gcode from the video. I tried to draw segmented lines, yet I get a straight line. Maybe the problem is in the grbl itself, I uncommented corexy and also added the two other lines as shown in the video.
Also, I wanna know if the drawing should start with pen down or up?

Comments deleted.

Let me add for everyone what are the problems with Compiling Grbl for CoreXY.
I insert hex Grbl v1.1 - it works. (no servo)

For those who want to solve the problem themselves.
pay attention where he writes Arduino IDE libraries
File> Preferences> Sketchbook location> libraries


Greetings from Poland

Hello, first of all, thank you for sharing all your knowledge, that is invaluable, thank you, my question is: as I order inkscape the impression, I have a written text and I want to print it normally, in order from beginning to end, as if it really I was writing, not like the code g randomly, thanks again and greetings from Argentina

Hi Ariel, sorry for the delay. I don’t know of any filter that does that. Sorry. The program that generates the gcode would have to know about stroke order, maybe from the font itself, and I don’t see that being even feasible...

Hello. I had a question on the coding section of the machine. I originally had the machine coded correctly where both the X and Y motors moved in opposite directions at the same time to move the machine. I accidentally reset the code and I dont have the computer I used for previously coding it. When trying to code it again I have changed the config file to include coreXY and added the extra two lines to replace

define HOMING_CYCLE_0 (1<<Z_AXIS) and

define HOMING_CYCLE_0 ((1<<X_AXIS)|(1<<Y_AXIS))

but now only one step motor moves at a time instead of both of them moving simultaneously.
The Z axis works fine, I've tested that, but am I doing something wrong with the coding this time around?

No idea. Maybe a typo? I would have to see the code.

Thank you I will look into it

Comments deleted.

Hello! wonderful project you have made! but i have a problem that i did not see anyone else in the comments having trouble with. my X axi works fine, Z works fine (even though i did not put jumpers there) but Y axi is not rotating the motor shaft and I legitimately hear the motor on Z axi make noise but doesn't rotate the shaft, I have tried switching them around, and the drivers aswell, but the problem is the same, I used the exact same setting as you did but i don't know what could it be, do you have any idea?

Thank you for your comment.
I would suspect the driver on the shield. Does the faulty motor work on another axis?

Yes i can change the driver, and it would still work the same, I can also change the cables of the motors and then that motor would have that problem and the other would be completely fine.

Okay, then, if the motors and drivers are not the problem, I am afraid the clues point to the CNCshield or the arduino. I would check the jumpers on the shield, the shield connection to the arduino, and the arduino itself. I am sorry I can't help you further than that. Can you not try a different arduino?

Comments deleted.

sir i made one, but the while drawing circles it edge not correct, pls help me and advice.....
pls find the attached picture

Hmmm... I don’t know. Are the belts taut enough? Check belts tension as well as any play in the pen holder.

Sir, belt i ill check its tight, sir can u send one circle gcode file is possible then i will check it in my machine,
May be my gcode some setting error

I think what you see is your gcode being generated with too low a resolution. Circles are made of straight segments. I have no idea of the scale of your drawing, but it seems like that is what is going on.
For circles, I think grbl supports arcs, please check this tutorial.
If not, try to find a setting in the software you use to increase the resolution of circular paths.

sir which software is the best for grbl controlling, actually im using SOURCE RABBIT
If the circle error is depending up on grbl controller software
my grbl setting herewith attached..

See "Control Software" in the Thing Details. Your problem is not with grbl settings, but rather in the software you are using to produce gcode.

sir im using INKSCAPE for produce gcode can u advice a good software for producing gcode which one you using...
And control software is SOURCE RABBIT can u provide the both gcode and control software.
sir but one thing im excited is this machine is drawing big circles (20cm diameter , 16cm diameters ) are exactly perfect small circle some shape is not correct
pls refer the photo...

Thank u for your great reply sir, i ill check the tutorial and do it...

Which software do you use to draw?
28BYJ connect to the CNC sheild ,but it can't work ,how to test it ? Is there any Gcode could test it?

For control, I use bCNC.
Inkscape with Gcodetools extension generates gcode.
The links are in the main description.

bCNC has a nice web interface: you can send gcode and try your stepper motors.
The 28BYJ is a bit tricky to connect: check the comments.

Where is the model that shows how all of this goes together?

There is a video at the end of the how-to. And you're welcome.

Hello, and thank you for your tutorial, it is limpid.
I'm looking for an info that I can not find anywhere.
I would like to build a plotter robot that can write on a board a text that you type on an Android app (or other) via a Bluetooth connection. (HC06)
My question is about G-code. I would like to know if the g-code can be interpreted directly by arduino? Without going through a software "sender". The idea being to send a string by Bluetooth, that my program arduino reads it, character by character, and that, according to the letter that it finds, it triggers a function in which there will be the corresponding gcode .
Is the installation of the grbl library sufficient for the gcode typed in an arduino program to be interpreted and triggers the engines of my plotter?
Thank you for your help

Hi Arnaud,

Thanks for the compliment.

Yes, GRBL interprets its own flavour of G-code directly on the arduino. Communication through the USB port is in fact translated to serial by a chip on the Arduino as the Atmega 328, being quite ancient, does not "talk" USB, only TTL serial.

I don't see why you could not use a bluetooth serial module to talk to the arduino. Check this link for an interesting tutorial on bluetooth and arduinos. And this article on serial communications.

Hello Cyul and thank you for your answer and your help

I don't want to send a gcode by bluetooth,
Knowing that I want to prepare a gcode for each character of a single font, I imagine a program that reads a text sent via Bluetooth, it deduces a sequence of characters to be written to the robot, and for each character it calls a function that contains the gcode.
by including the grbl library, am I writing a classic arduino program including gcode ?

Oh sorry I misunderstood.
I would tweak GRBL for that.
To keep things simple, hack into the terminal interface in GRBL and add code to detect some escape sequence (such as ... 0x1B) to set the stage for your own interpreter, then interpret your one-letter commands from within GRBL. Don't forget to include a way to go back to the normal interpreter and you're all set.
There should be enough space left on the micro for that.

I don't think my coding level is high enough. Thank you very much for your help but I don't really understand what you mean in your last message. I'd love to understand but I don't know what you are talking about. I do not want to waste your time and I think I'm going to code every move for every letter and when the program will read a letter, it will call the function that will move the engines the right way. Without using G-code.
Another question, when I look at the passage of the belt, I imagine that your machine can not move on both axes at the same time is not it ?

It’s similar to a corexy system. You could read up on that. You can move axis simultaneously at different speeds.

Another solution for your problem would be to use another Arduino to do what you want and talk gcode to the GRBL arduino. A Chinese arduino mini is like 3$. This way you wouldn’t have to control the motors by yourself.

I had thought of having a second arduino that I already ordered, I have to study how to send the code. If you can give me a website where I could find the information it could be helpfull .Is it sufficient to send a g-code command line of the type "G00 X100 Y100", or should I learn like "a protocol" or a language to make the first arduino order a sequence to the second ?
Thank you very much.

Classic serial communications should do the trick. It is not overly complicated. Arduino pins 0 and 1 are RX and TX respectively. Just connect the TX of the first arduino to the RX of the second one, and again for RX(1) and TX(2), set the same speed as the default for GRBL (115200, n, 8, 1) and you're good to go. Now, you may have a problem communicating with the bluetooth module, as it also needs serial and there is only one serial port on the Atmega 328. So I would look for another bluetooth board that has its own embedded processor. Maybe something like this?

I am not sure I understand your insistence on transmitting one-letter commands. Surely it would be easier to send G-code directly from your Android app over bluetooth. G-code is not that mysterious, and it is quite compact as well.

Thank you for all your good advice.
I had thought of using a arduino mega if I still use G-code but, to explain the project, I noticed that a friend owning a restaurant waste a lot of time writing his menu of the day on all his many blackboards. He does not know anything about computers but I have time and I would like to make it easier for him.
The problem with the gcode is that I want the user interface to be as simple as possible and therefore it is necessary that the G-code is generated automatically by the application ... it seems more complicated. I'm inspired by your robot and that one: https://www.jjrobots.com/the-iboardbot/
I only need the "writing" part.
If you look at the iboardbot, when writing a text, it only does so in a single font, so either it gets a g-code prepared by the application (thanks to a Gcode database for each character) or he generates it himself according to what is sent to him. And I think it's more stable to send pure text to the arduino than a complete gcode. This avoids a too long connection between the application and the arduino. To complicate the task I want the text to adapt to the blackboard (with end-of-stroke sensor and stops moved according to the size of the table) so it seems to me easier to adapt the text by adding a variable of increasing "the size" of motor movements.

Looks quite the project indeed :-)
I would definitely do everything in the Android app (including the scaling: you could use the phone gyros to measure the board) and send complete G-code by Bluetooth. I don't think there are quite enough resources on an Arduino to do all that you need. Maybe use a SBC such as a Raspberry Pi as a front end?

I understand what you mean, but I do code in HTML, I also know a bit of JavaScript but I don't know enough java to code an app that could generate the complete g-code.
I still have the choice to work with an arduino mega in order to have more program memory. I have to choose between changing hardware or learn how to develop my software. I'm going to think about it. There is no rush, I can start with the arduino program, try to go to the end during the time my knowledge on app become better. Thanks.

Comments deleted.

ı need more schematic about assembly. for example gt2 belt assembly ?
motor cable assembly?
cnc shield and driver assembly ?

pls help me

Please check the instructions again.
I added new links such as CNC Shield

The last image shows how to loop the belt in the centre part. Check this page too, and look for T-bot.

Today, I've finished my Drawing Machine. The Problem is that I've got a weird bug which you can see in this video:

The X axis and the Y axis are moving without stopping at any point. Do I have the correct starting position? I did everything as shown in the video by @psYSIDe

Does someone have an idea?
Thank you and have a great day:)

The magic numbers are in grbl settings. They should reflect the dimensions of both your axis. Here is what I have:
$130=212.000 (x max travel, mm)
$131=312.000 (y max travel, mm)

If your numbers for steps/mm are good, it should work.

Try to move 1 cm and measure. Verify the jumpers for microstepping. If microstepping is not set to 1/16, the movements will not be what you expect.
This is what I set mine to:
$100=96.000 (x, step/mm) or 80.000 if you used 20 teeth pulleys
$101=96.000 (y, step/mm) or 80.000 if you used 20 teeth pulleys

Thank you, its's working perfectly now!

Is there any way in Inkscape to trace only one line instead of 2.
If I let it write something, the letters are always with 2 lines.

Here an example of a world map:

Ist there a way to draw only 1 line or make it thinner?
Thank you and have a great day:)

It all depends on the source image. Most drawings are made to be shown on a computer screen or printed in colour, not actually drawn on paper. You have to dig into the image and simplify it.
For text, there are single-line fonts out there. Check this link.

hi from Turkey :)

ı need help

is motor mount be 2 pcs ? and

drawing_machine_z_stage.obj, and
drawing_machine_z_stage_face.obj. are they duplicate ? ı mean 2 pcs ? please help me :/

could you help me pls ?

Please read the instructions carefully. Everything is in there.
Read Misan's machine post as well.

"Model Files The first model file shows all the pieces that are then isolated for your convenience into separate files."

hi from Turkey :)

First of all, thanks for everything. But ı need help :/

is motor mount be 2 pcs ? and

drawing_machine_z_stage.obj, and
drawing_machine_z_stage_face.obj. are they duplicate ? ı mean 2 pcs ? please help me :/


  1. You said I've to use shunts to select microstepping. I've bought the Cnc Shild and an Arduino on Aliexpress. But the problem is there aren't shunts to select the microstepping option. How are they called? I can't find a place to buy this shunts:(

Could you link me a store or something?:)

  1. In the Thing Files isn't the Stl/Obj File for the Arduino Holder. I can't find it:(
    Could you also link it?

Thanks and have a great day:)

The shunts (actually the correct word seems to be jumper) were delivered with the CNC shield. These should last you a while. Another source could be old motherboards and such. In a pinch you can also get away with bits of wire or even individual staples, or you could bend the pins so that they are in contact.

You can find several enclosures for the arduino. As yet, I have no definitive solution.

I'm not sure if this has been discussed already, but are there resources out there for better understanding the way these motors coordinate with each other? Rather than having a motor control the Y axis, and the other control the X axis, this configuration has both motors controlling a single belt, and depending on the direction of the motors, that determines the coordinates. I'm having a hard time wrapping my head around the coding for that.

Look up corexy on Google. I found http://corexy.com/theory.html

You can also play with the motors by turning them by hand and see what happens. I know it helped me.

I built this and thanks for posting the project and the Tinkercad files.

Few tips to help anyone new who's building this.

  • For the Z axis stepper, I had to open and cut the red wire. It didn't work without it. Then the order of wires to A4988 are (from the A4988's potentiometer's side), Blue, Yellow, Orange, Pink)
  • I noticed Z axis stepper was getting very hot even when just X and Y motors are moving. I guess this is because it's rated 5V. Then I reduced voltage by turning the potentiometer on A4988 counter-clockwise until the heating stopped.
  • The shield is powered by a regular 12V, 2A power adapter.
  • Used 20 teeth GT pullies on NEMA17 steppers. Then you need to leave $100 and $101 settings as their defaults at 80.

You are most welcome. And thank you for posting this. I will integrate your comments in the How-To section.
The 5V rating does not actually matter (much). Check this article. You did the right thing by adjusting the potentiometer on the A4988 to limit the current.
The order of the wires is important in pairs: (orange, pink) and (blue, yellow). However you can switch the pairs.

Hello again!!

I find this video on YouTube ( https://www.youtube.com/watch?v=qanuOqAqHyo&t=642s ), that made this project, and I follow this video too for made mine drawing machine.

In this video appear something diferent (or new for me);

What is that the boy puts in the CNC Shield (between 12:35 and 13:00) under where you then place the drivers???

Thank you in advance!

If we're using the GT2 belt you recommended with a 16 teeth pulley on the motor. What Microstep setting should we use for the A4988? 1/16?

Yes. I added instructions to explain that.

Thanks for your quick response.

I had never heard of it. Is it necessary to place it?

Thanks again.

Yes. Install all three shunts below all three stepper drivers.

Still a little unsure which smooth idler pulleys to get. Will the 6mm width, 3mm bore work? Since the belt is 6mm wide? I can't seem to find any 10mm width, 3mm bore out there?


I'd like to build one, I've build all 3D parts so far but I struggle about the same question too, which pulleys to get? Is there bit more clarification or a link of what to choose?

Thanks and well done!

10 mm refers to the internal diameter of the smooth pulley. These pulleys are the smooth equivalent in size to the 16-teeth pulleys.
16 teeth circumference x 2 mm ÷ π ≈ 10.2 mm.

Do you think I could use a Printrboard?

Ah, I just checked the Printerboard page on RepRapWiki and it says "Compatible Firmware: Grbl: No official support yet, but works with Lincomatic's fork."

Maybe. I don't know if grbl can run on the board or of any alternative firmware though.

Hello again!

I would like to try to solve another doubt...

First of all, I have a4988 Driver for the NEMA17 stepper motors.
But now, I have to buy that motors... and I have seen that there are different sizes. All motors have 42x42mm but different heights: from 34 mm to 60 mm (between: 38, 48, ...)

Could you recommend the most appropriate size for this project?

Thankyou very much!

Torque is a function of the motor length. The longer, the more elements and the more torque. Amps will of course increase accordingly.

I bought 40 mm motors. I went for the cheapest NEMA 17 I could find on eBay, given the load on the motors, there is not much torque needed.


I need to resolve a question.

I have a 12V power supply from a RC car, in which stiker I can read:

"4 Hours quick battery charger. For 6.0V NiCad battery pack."
" PRI: 230 V - 50 Hz"
"SEC: 12V - 200 mA"

I want to know If I can use this power supply for the arduino of this project.

If not... can you recomend some 12v power supply??

Thank you very much in advance.

It depends entirely on the steppers you are using, and I hesitate to recommend a value but 200 mA definitely won't cut it.
Please check here and here for more information.

The power supply I use is rated at 12V/12.5 A, and I know it's overkill (it was meant to drive a 3D printer, including a hotend and a heated bed). 2.5 A would be about what I need with the steppers I have.

I would look for discarded laptop power supplies at thrift stores.


With the info in the links I understood what´s it works (for next times). And I will try to look it at thrift stores.

Thank you very much again,

My pleasure.

I think there is something wrong with the OBJ files. The files do not convert correctly to STL, also Cura refuses to load it, while Slic3r crashes.

You can export the model directly from Tinkercad

Hi! What configuration did you use on the CNC SHIELD where the 28BYJ MOTOR is connected? COMPLETE STEPS, 1/2 STEPS, ...?
Or place the three JUMPERS as you do with NEMA motors? Thanks!

All three jumpers are installed.


can i use the 5mm bore version instead of the 5 x smooth idler pulleys (16 teeth or 10 mm, 3 mm bore) mentioned by you. pls reply

Sure, but you would have to either modify the model to use 5mm screws or find a way to reduce the diameter of the bore on the pulley to 3mm.
I may have printed small cylinders of PLA for that exact purpose in the past. ;-)


I need the STL files. Is there someway to convert them? Most online services fail to convert all the files to STL. Any idea what to do?


Open an account on TinkerCad, make a copy of the project on your account, and export to STL. You could even improve the models.

Here is the link: https://www.tinkercad.com/things/d7ghroB3kTO

Cyul, Have you made the connection indicated by misan? A cable from Vin to + header on CNCShield

No. The arduino is powered through USB and the CNC shield by a 12V power supply. Only the ground is common (obviously).

Almost done! My machine doesn't move very smoothly though, I'm not sure what the problem is. It seems like it has a hard time moving diagonally.

It all has to be square of course.
Check the belt tension (it should be tight but not to the point of bending anything) and look for overtightened screws that may block a pulley.

I fixed it last night, this morning I woke up to try and work with it again but now I get a weird issue where when I move the X axis the Y moves with it. Nothing has really changed. Any ideas?

Seems one of the steppers does not get power maybe?

You were right! I think one of the stepper drivers went bad, replaced it and now everything works! Thanks so much. :D

For the electronic connection you followed this image?

Can you pass some link or image where you explain how you connected the stepper motor of the Z axis to the CNC Shield?
Thank you.

This question has been answered not two weeks ago, on June 22. Please look in the comments.

anyone else have issues with the stability? i have cheap v2a 8mm rails and when the arm is fully extended the complete arm springs down. any ideas? should i buy hardened rails?

The problem is not in the rails, it's in the weight that is below the rails on the Y axis (where the threaded rods are installed) or in the weight of the Z assembly.
To correct this you could clamp the Y axis to the drawing surface.
I thought about adding screw holes in the end blocks for a more permanent installation but there was some argument at home about the finality of the dining table...

Yes it's a little bit heavy. I see the rail bending. I have clamps and it's fixed to a plate. I have ordered hardened reprap rails and try it

Since the wires on the 28byj-48 have to be orange pink blue yellow does that mean you have to solder the wires in those points or anything? I'm having issues with getting my z axis to work correctly.

The insides of a stepper motor are quite simple in fact.
Please check this article that will help you identify which wire goes where.
This article too although I did not find you need to cut anything.

That all gives me some idea of what to do. From the looks of your picture though, you just simply ignored the red wire and it worked right?

Yes exactly.

Sweet! If that's the case then I won't make any changes. Thanks for the help Cyul!

Any time!

So I'm coming across some issues. Not sure if the tolerances of my parts are off or what but the 28byj-48 motor doesn't seem to. Even working properly. I plugged in all the wires except the red and the motor only seems to go in one direction. Also when I hook everything up together I can't get the motor to move at all, it's almost like it doesn't have enough power. I'm using a wall wart supply 12V. Any ideas on this? I'm so close! I just want to finish this.

Comments deleted.

Recheck the order of the wires on the 28byj, one inverted pair and it doesn't work.
Drastically reduce the feed rate on the Z axis (if you go too fast the stepper cannot follow) see setting $112. If it works, increase the value progressively until it doesn't, then reduce by 20% to be safe, that's how I found 2200 mm/s.
As a guideline, when everything is off, you should be able to move the z-stage up and down with enough force (you're running the reduction stage of the motor backwards, so be careful to apply progressive force). If it's stuck, concentrate on your mechanical parts.
Finally, you need a beefy power supply. I reused that of a small 3D printer (remember Makibox?). Not sure about the wall wart.

Comments deleted.

Hi cyul!! Can you uploading STL archives? I can't open OBJ archives! Thanks!

The question has been answered many times already.

Thanks for the quick reply cyul.
One more question i have is i want to set up end stops to totally automate the machine. As axidraw goes to its home location on every startup and after every drawing. How can that be done using endstops or something?(Please explain Wiring software changes etc.)

I think you would have to recompile grbl. Not sure though as I have not implemented this.
I guess you're on your own

Okk let me know if you something about it.

And btw what is the procedure you use. Do you manually set the carraige and then reset to zero and then start drawing?

What is the initial position of your carraige

Yes, that's how I do. I just set the head to the bottom left of the page, the pen down just touching the page, and power up. The machine is pretty good at remembering its home position.

What are your $110 , $111 values?
Also please tell your values for $120 and $122 (acceleration). And what does it mean. ($110 and $120)

It is all in the original posting:
$110=20000.000 (x max rate, mm/min)
$111=20000.000 (y max rate, mm/min)
$112=2200.000 (z max rate, mm/min)
$120=200.000 (x accel, mm/sec^2)
$121=50.000 (y accel, mm/sec^2)
$122=200.000 (z accel, mm/sec^2)

110/111/112 is the speed at which the axis (X, Y, Z) can move without breaking anything or skipping steps,
120/121/122 are accelerations, or allowable rate of change of the speed per second, given in millimeter per second, per second. The higher the value, the longer it will take to reach maximum speed or to slow down to a stop (negative acceleration). If the value is too high, the axis may never reach its maximum speed.

I have completed the build yesterday. X and Y axis are working correctly but Z axis is weird. I press the up and down buttons from gcode sender and the movement of the Z axis is random. Sometimes up, sometimes down. Also should we setup the Vref of the steppers? I tried to do that but after connecting the shield to 12v and when the arduino is idle, there is no voltage between vref pins of the steppers, so I couldn't do a vref setup.

It looks like either the driver, or the wiring, or the stepper motor is faulty or not connected properly.
Given the power used by those small steppers, I would be surprised if the driver was overloaded. With the pot set in the middle, it should work. If not, try to connect a stepper motor from another axis and see what happens.
Another thing to try would be to remove the jumpers on the drivers and try without microstepping.

Have you tried to draw in layers? Can I change the pen during the drawing (between the layers)?

I suppose you could create a file per layer and change the pen between printing files on the same paper. At least that's how I would go about it.

I am anxious to receive the components.

My doubts are now about how the Z lift system will be compared to the Misan servo's system. I do not know much about programming, and I do not know if I'll have problems with it. I think there is an inkscape extension made to work with the Misan 4xidraw, but I imagine it will have to be with SG90 micro servo system.
I hope in a few weeks my prototype will be running. The printed parts are ok!

Hi again! I have seen in my shopping cart that my 28BYJ motor is 12V. Is it a problem? t´s necesary to change it for a 5V stepper motor? Thanks.

No, it's the right voltage. I used a 5V and got away with it, that's all.

Hi! Nice remake. I have decided to do this variation of the Misan´s Machine. I have buyed in aliexpress all the pieces I need (absolutely all the vitamines) The total cost, sending included has been 64€.
I have done recently the eggbot, and I hope to apply my experience in it (CNC, Pololus, etc).
I have a question: I have seen the axidraw´s videos. Does this prototipe similar in quality resoults? I would like to write letters with it.
Thanks for your excellent work, and sorry for my bad English!

Don't ever apologize for your English. It's perfect! :-)

I got pretty good writing out of it. Once everything is fixed solidly on the table (maybe use clamps) the resolution is more than enough for normal sized handwriting.

Fantastic! And another question more: Can I use the axidraw´s extension for inkskape? Thanks!

I guess. I can't be positive, I haven't tried. As long as the output is a flavor of gcode that grbl understands it should work.

Do you use ABS or PLA material ?

Any advantages over Misan's version?

I'll leave that determination to you. I reworked Misan's on two aspects:

  • the Z stage is entirely different and uses a stepper instead of a servo, as well as a different attachment for the pen
  • the system that holds the rods is quite different too.

Other than that, I won't hold it against you if you prefer to go Misan's way. I had my fun, now it's your turn.

Hi! I think your design is pretty awesome. More than likely I'll go with yours. I really like that you decided to include slots for screw to fasten the rods in place! Also it seems like they're both pretty similar in function. I like the idea of a stepper as a opposed to a servo to run the pen as I the level of accuracy seems to be better on steppers than servos, not sure if that is the case here. I will be building soon! The cost will run me about $150 because I basically have nothing but some of the screws.

I got some of the rods from old printers. The steppers are the most expensive. With lots of patience (because shipping takes "forever") you can get very good prices on eBay. The problem is when something does not arrive or is DOA, then you have to wait "forever" again for the replacement part.

Sorry if i am asking too many questions .
Is there a way to find out what this speed is or we can only find out through experimenting with the machine?

You could start with the following values and see what you can get away with:
$110=20000.000 (x max rate, mm/min)
$111=20000.000 (y max rate, mm/min)
$112=2200.000 (z max rate, mm/min)

There could be a theoretical limit out there, but I wouldn't know the first thing about how to calculate it. It all depends on how much current you throw at your motors and how well they tolerate the heat, the number of microsteps you chose, how well your electronics behaves (noise, impedance, etc.), and finally, obviously, you can't go faster than the speed of light :-)


I see.
Thanks a lot for your reply!
Our machine is working fine , we have a little balance issue with the y axis other than that is all good :) !
We will try and see where we can go with the speed and if we came up with anything we can give you a feedback if you are interested.

Sure! Thank you!

So as long as the speed doesn't make the machine skip steps we are good to go?

Pretty much.

Regarding the speed of the machine , is there boundaries to the speed we can set the motors to work with ?

As fast as it will go without skipping steps.

Hello again !
Thanks for the video it helped , we set the current and where gonna test it and see if the problem is solved.
One more question, for the grbl settings written down where exactly are we supposed to add them ?

You need to recompile grbl. See the instructions on their Wiki page.

The other list of settings ($1..$132) are set though the serial interface when grbl is running and stored in the eeprom.

hello cyul!
we have the machine all set and assembled but we are facing problems:
1.the 28byj 5v keeps overheating i read your comments about setting the current , how excatly do we do that ? do we write the code in the page you have mentioned in the arduino code?
2.how do we set the machine home coordinators ?


There should be a small pot on the stepper drivers. You could check (this video)[https://www.pololu.com/blog/484/video-setting-the-current-limit-on-pololu-stepper-motor-driver-carriers].

When the machine is unpowered, you can easily move the head to {0, 0, 0} (bottom, left, pen down) by hand. As there are no limit switches, the only way to get it to work is to start from a known position. I guess you could mod the design to add limit switches.

Hello, we are using your method for engineering project and we have a couple of questions:

  1. The diameter of the rods. Is it the outer dismayed or inner diameter?? (8mm and 6mm)

  2. For the 6mm rods, won't they be loose for the ball bearings or should I get a 6 mm ball bearing???

Please help us and thank you!

The X and Y rods and bearings are 8mm.

The Z stage uses 6mm rods but the original design does not use bearings, these are 3D printed and embedded in the design.

I tred to use actual 6mm linear ball bearings, and published the design, but I did not find any advantage compared to the original design.

Someone also designed a 8mm version and you can find it by following this link.

Hope that helps. Good luck with your project!

Drawing Machine, LM8UU derivative
by gigl

nice rework of Misan's machine.
I want to build your machine but there are some problems.
The distance between the rods are 60.4mm and not 60.0 as the Misan Files.
The holes for Rods are 8.4mm and not 8mm.
Regards Toby

Did You import contours from external CAD (at least y ends)?

Some shapes are misan's.

Some tips coming from my mistakes for other people planning to make this:

  • Be careful of chosing screws that are not too long for the NEMA 17 steppers, I had 2 motors of poor quality and I broke the opposing screws just by screwing mines (I didn't even realise it until I had put all 8) which somehow broke both motors.

  • If you buy the rods from your local home depot, you will probably not end with rods as sturdy as the ones you find in printers. Be careful not to bend them.

  • When buying the 3mm idler pulleys, make sure you're getting smooth ones (@cyul you should update that)

  • I would suggest not setting any brim when printing the two parts holding 4 LMUUs each. Otherwise you may have troubles making the difference between the brim and the socket (which is going to be 1 layer thick on the inside bottom edges).

That's all for now, but don't worry I'll be back with more failures.

Excellent build! Congrats! https://www.thingiverse.com/make:347182

Drawing Machine
by Valiox

Hello !
I have a question about one of the equipments listed
For the 10mm threaded rod with bolts they have the same length for the X rods as in here they will be 400mm?

please help me set z stage, I used 28BYJ-5V but it not work.


I'm trying to picture how the belt passes through the center piece. My best guess is this: http://i.imgur.com/VJHItT8.jpg

But then I bought idler pulleys with teeths thinking that the belt would crank them... is it going to be a problem?

Yes that's how it's supposed to go. Do you mind if I put your drawing in the pictures for this thing?

I am not sure about your pulleys, as the teeth on the smooth side of the belt might prevent smooth travel, but maybe it works.

Well it's not quite Da Vinci but I'd sell you the rights for 250$

You're kidding right?


I also built your drawing machine, but i cannot yet start it because z stage works quite poor, it always tilt/twist along the axis.
I used a 12V 28 BYJ motor and drilled 6mm outside and 6.5mm inside, used lots of oil, still tilts.
can you tell me what to care for ?

I would need a more detailed description, or better, pictures to understand what is going on.

I know I had to tweak my printing settings to get the Z stage to print right. The printed linear "bearings" are pretty difficult to get exactly right. You might want to try and play with the Tinkercad model. I could also upload a model I made that uses actual LM6UU bearings.

Hi Cyul,
Thank you for the instant response. I think I like to go with the LM6UU option, but i only have LM8UU instead.
Can you also export STL Files of the 2 things instead , so I can do the tweak by myself. I know its too long.

You can easily make a copy of the objects in TinkerCad and export them in any format you like.
If you want to use LM8UUs, I suspect the easiest way would be to change the model on TinkerCad rather than modify an STL file. Try it, you may be surprised how easy it is to become proficient.

Where can I find the Tinkercad design. I cannot see it under "Thing Files". I dont have experience with TinkerCad yet.
I use to import STL files in openscad and mofify them before export. With the LM8UU bearing i got the Z stage working now. it works like a charm. if you provide your email i can share with you.

Hey would you mind sharing your customisation here? I also can't get the standard z stage working and the lm6uu bearings i have are really poor quality but i have some nice lm8uu bearings which would be good. I have also designed a spring loaded pen holder for this to account for variance in the surface you are writing on, etc. I'll post it online soon

Hi cursedagger,

I created a brief derivative of the genious drawing machine containg the two missing puzzles.
Please let me know if you can use it!

Drawing Machine, LM8UU derivative
by gigl

The links are all in the summary. Here is the link to the LM6UU Z stage:

Any PDF that Explaining how to connect and use?
Can i Drawing any think i want?

You can draw anything you want. There are tons of example of vector drawings on the internet.
As for more explanations, I am sure you can figure it out by exploring Evil Mad Scientist Laboratories's Axidraw and Misan's drawing machine.

can i just put this on my normal 3d printer

Not sure what your question is. Could you rephrase ?

What is the difference between the 5 y_end1/2s ? Which should I take?

edit1: Ah I should have checked the update on the frontpage. Nevermind!

edit2: hmm there are two drawing_machine_y_end2_v2.obj. One with a capital Y and one with lowercase y. Also why do they have friction bearings?

Sorry about that. I removed the offending file (they were the same).
Because of the way the belt travels, you need a bearing on this end.

Could we use official ink scape extensions?

Not sure what you mean. You can use anything that outputs gcode.

you have
define HOMING_CYCLE_0 (1<<X_AXIS)
define HOMING_CYCLE_1 (1<<Y_AXIS)
did you use END STOP Switches?

Good afternoon. What and how to create g code for this device?

Currently, the resource is locked in the territory of the Russian Federation ...

Thank you! I found a way out of this situation.

You don't need to register to use GitHub.
Both links seem to be online.

Can you please share the Arduino + cnc shield + stepper motor connecting diagram. Which will be much appreciated as i am stuck now.


  • The Arduino gets its power from the USB cable, so don't bother with the barrel connector. Just get a good quality USB cable.
  • Install the CNC shield on the Arduino, it only fits one way.
  • The motors get their power from a 12V power supply connected to the CNC shield, make sure you have the polarity right, and your power supply is beefy enough. I soldered connectors and printed a box to make things easier to move around.
  • For fine control of the motors, I used 3 jumpers on the CNC shield before installing the motor drivers.
  • Connect NEMA 17 motors on the X and Y ports.
  • Connect the 28BYJ motor on the Z port: when the power connector is on your left, from the top, the order is orange, pink, blue, and yellow (skip the red wire). You might have to make an extension.

Don't power anything before you have double-checked your connections.

Small adjustable pots on the motor drivers are used to adjust the motor current, follow these instruction.

Good luck!

Thanks a lot, I have 28BYJ motor with 5v and has cable colors with (yellow,orange,red,pink and blue) was still figuring how to connect to CNC shield. Do we require 12v 28BYJ or is 5v ok. Please help me out.

I have a 5V motor supplied with 12V. I set the current very low and it doesn't overheat.

Thanks Again, Let me also know the print application to be used. I have tried with GRBL Controller and CNC. If you have a connection diagram for CNC shield that will help me.

The CNC shield just plugs on the Arduino. I am not sure what you are asking.
Follow the instructions (the link is in the presentation) to download, configure then flash GRBL on the Arduino. Once it is running, you can communicate with GRBL using a serial console.

What bearing did you use inside the "drawingmachine-_base" and "drawingmachine-_base_with_nuts" ? Just to be sure before printing?

Inside are four smooth idler pulleys, see the write-up for a link.

Спасибо. Что то меня зашкалило. Хочу попробовать сделать. Вот только печатать учусь.


Good afternoon. Five rollers must be 16 teeth or smooth surface?

I used smooth.

Hello and thanks you again . I use Inkscape Laser Plug-In | J Tech Photonics, Inc. NJ generate g code , but I do not know how to activate the Z-axis .
What soft do you use?
Another question , I took the step motor 48 28byj 5v and it is very hot all the time, even when it does not work .

I use Gcodetools and it lets me insert a configuration page (Tools Library.../Apply) in which you can change speeds. Z movement is controlled in the Path to Gcode/Preferences tab.

For the 28byj, see here on how to adjust the current. It should not overheat when doing nothing.

Check the new update for the Z stage!

I have one more question, if I increase the length of the rods to 700 and 510 to get a2, would work correctly Drawing machine?

You would have to increase the length of the belt, but that would work. Make sure you calculate the dimensions correctly to achieve A2 if that's your goal.
The only problem when increasing the size is stability. The X axis, the one tha lays on the surface, is not very wide and as you increase Y, the weight of the pen assembly may tilt or flex the X rods.

SImplify3D cannot open your OBJ files.
While openning drawing_machine.obj there is an error:
Error parsing OBJ file. Non-numeric data detected at the line 9546.
Can You please advise how to repair it?

I used slic3r without a problem. You may want to contact support for Simplify3D.
Alternatively, download slic3r. You can export to an STL from within slic3r.
Finally, the model is available on TinkerCad, here: just make a copy of the model in your account and export in your preferred format.

What do you mean "it gives you finer control on the pen position."

The servo technology is very crude: a simple motor rotates the axis and the position of the motor is fed back to the control circuit through a potentiometer. The circuit is constantly fighting to balance the PWM signal it receives with the analog value read from the potentiometer. The resolution (and repeatability) sucks. It's good to jerk the pen up and down and that's about it (plus, I hate the noise it makes).
The JYB28 stepper motor, on the other hand, is so demultiplicated that it takes about 2000 full steps to do one rotation (and it's almost silent). I don't remember from the top of my head how it translates in movement but let's say 3 cm per revolution. Provided you don't skip any step, and ignoring the play here and there, that's about 15 microns per step. Precise enough?

Thank you for your project. I have a question, why the stepper motor is better than a servo?

Because that is what I had in my stash :-)
More seriously, it gives you finer control on the pen position.

Comments deleted.

Can you share the source file of the actuator? I want to use different Rod size. is this possible to use 4mm?

You are free to copy the model on TinkerCad and modify it to your heart content here.

Hi, could you please post a photo of the xy assembly opened. It is not clear how to set up the idlers inside the central part. Thank you!

Will do over the weekend. Sit tight.

It is a very cool design. Thanks!

Please explain in detail how to connect the A4988 to 28BYJ .

For prototyping I used 10cm Dupont male to female connectors like those.

Then I caved in and bought a crimping tool and made a proper connector.

Does that answer your question?

NIce. Could work as a plasma cutter :D

Great work. I am curious what speed you get on the Z-axis with this arrangement.

It starts skipping steps at about 2500 mm/min so I went down to 2000 and it works reliably.

Thanks, it seems it would be fast enough then.