This project was inspired by a commercial product called AxiDraw that I saw a video of recently from Evil Mad Scientist Laboratories.

It was a combination of reasons that made me consider to do it myself, cost, availability and customs playing a role in the equation (that, and having a 3D printer at home).

This is just a drawing machine quite similar a to a pen plotter but that can adapt to any size of document and any type of paper.

It can use regular felt-tip pens, ball pens or fountain pens as pen orientation is variable. It is a new version of an XY plotter using a single belt and two stepper motors in a configuration called h-bot.

Step 1: What You Need

I started the project using laser cut parts but eventually evolved the model to 3D printed parts. So you can grab the STL files of the printed parts from here or here.

Bill of materials

  • 2 nema 17 steppers (*)
  • 4 8mm smooth rods (two 400mm-long and two 320mm-long)
  • 8 LM8UU
  • 2 20-tooth GT2 pulleys
  • 10 F623ZZ bearings
  • 1 micro servo SG90 (plus a 250mm cable extender)
  • 1 Arduino UNO
  • 1 CNCshield
  • 2 Pololu stepsticks
  • 1 GT2 belt ( 1.4 meters long )
  • 2 M10 threaded rods (400mm-long each)
  • 8 M10 nuts
  • 8 30mm M3 screws with nuts
  • 8 6mm M3 screws
  • 4 16mm M3 screws with nuts
  • 4 M3 washers
  • 2 4mm OD, 100mm-long carbon fiber tubes
  • 2 15mm M3 screws
  • 1 12V 2A power supply
  • 1 USB cable
  • 1 felt tip pen (or many for more fun)

(*) Stepper motors should be 40mm or shorter, unless you chose the taller parts that I later created for some users willing to use 48mm tall steppers (like many use for 3D printers).

<p>Great work misan. just help me with this question. How do i check the default values(angles) for servo and how to set them up?. i.e pen up and down. how can i change these angles. one more thing, i don't know why my servo buzzes continuously when it is in the pen down position. it does &quot;not&quot; happen with pen up position. tried with 2 servos</p>
<p>Any solution for the buzzing of servos? And please tell the way of changing pen up and down positions </p>
<p>As he programmed it</p>
<p>I do not know how to program it</p>
<p>Hi, do you need to lube the axis ? Thanks</p>
<p>Is there any difference between F623ZZ bearings and 623ZZ bearings?<br>Can i use 623ZZ bearings?</p>
yes, F stands for flange, in our case flanges help to keep the belt on the bearing.
<p>So i can't use 623ZZ bearing.</p>
<p>what to do?</p>
<p>and an M3 washer in between the two bearings.</p>
You need two of them, mounted with the flange oposite to each other and 6mm witdh belt.
<p>F623ZZ bearings are too small</p>
<p>i dont understand how are the belts conected, where can i see how the belts work?</p>
<p>asked and replied in the comments below</p>
<p>Hola misan!! Felicitaciones y muchas gracias por la gu&iacute;a!! Respecto de la modificaci&oacute;n para motores 48mm, &iquest;S&oacute;lo es una pieza m&aacute;s y d&oacute;nde ir&iacute;a agregada? Muchas gracias</p>
Es un soporte de motor m&aacute;s alto, que reemplaza al otro m&aacute;s bajo.
<p>can we use L293D Motor Driver Shield instead of cnc shield and pololu stepsticks</p>
I guess you can but you will need to find a software solution that works for you with that hardware.
<p>Hello,</p><p>Need help with servo control. M3 and M5 commands when entered manually in the &quot;Command Line&quot; of Universal Gcode Sender controls the servo OK. But the M03Sxxx command in the Gcode file regardless of the S value,just moves the servo a small click only.</p>
That is odd, can you try M3 instead of M03? Are XY moves working ok?
<p>Yes I have tried M3. XY moves seem to be working OK but I cannot be sure since I cannot get the pen down.</p>
<p>servo motor doesnt have different wires. they all are clubbed. how to connecgt it to different ports. Also please show all the circuit diagram</p>
servo motor will certainly require some extension to its wires, these do not need to be clustered together.
<p>please tell all the model numbers of the objects like arduino uno, cnc shield pololu stepsticks</p>
<p>also please give full details regarding software. </p>
<p>please give detailed circuit diagram. ur input would be very much appreciated</p>
<p>Hey!</p><p>I need a little help :) Everything works fine but if I move on X or Y axis some distance, real distance is half then I set. Also if I export gcode from inkspace I have to set 7.1 scale on both axes or final result is very small. Do anyone know where could be a problem? Here is '$$' result:</p><p>&gt;&gt;&gt; $$</p><p>$0=10 (step pulse, usec)</p><p>$1=25 (step idle delay, msec)</p><p>$2=0 (step port invert mask:00000000)</p><p>$3=0 (dir port invert mask:00000000)</p><p>$4=0 (step enable invert, bool)</p><p>$5=0 (limit pins invert, bool)</p><p>$6=0 (probe pin invert, bool)</p><p>$10=3 (status report mask:00000011)</p><p>$11=0.010 (junction deviation, mm)</p><p>$12=0.002 (arc tolerance, mm)</p><p>$13=0 (report inches, bool)</p><p>$20=0 (soft limits, bool)</p><p>$21=0 (hard limits, bool)</p><p>$22=0 (homing cycle, bool)</p><p>$23=0 (homing dir invert mask:00000000)</p><p>$24=25.000 (homing feed, mm/min)</p><p>$25=500.000 (homing seek, mm/min)</p><p>$26=250 (homing debounce, msec)</p><p>$27=1.000 (homing pull-off, mm)</p><p>$100=80.000 (x, step/mm)</p><p>$101=80.000 (y, step/mm)</p><p>$102=250.000 (z, step/mm)</p><p>$110=500.000 (x max rate, mm/min)</p><p>$111=500.000 (y max rate, mm/min)</p><p>$112=500.000 (z max rate, mm/min)</p><p>$120=10.000 (x accel, mm/sec^2)</p><p>$121=10.000 (y accel, mm/sec^2)</p><p>$122=10.000 (z accel, mm/sec^2)</p><p>$130=200.000 (x max travel, mm)</p><p>$131=200.000 (y max travel, mm)</p><p>$132=200.000 (z max travel, mm)</p>
<p>I figure it out! :) For my steppers I needed to set 1/16 step mode on pololu, so solution was to remove first two jumpers below drivers. Everything works ok now. I still need to figure out dimensions from InkSpace but I can use scale axis for it when exporting to gcode.</p>
well done.
<p>How much torque does nema 17 stepper motor need?</p>
I am using 34mm-tall stepper from an old copy machine. I'd say any nema17 motor you can get most likely can do the job. <br><br>If a figure is needed let's talk about 1Kg.cm or better.
<p>I bought 2 nema 17 stepper motor with torque 25 Ncm, I hope it works, and thank you for your instructions</p>
<p>Hi, worked your engines with 25Ncm? thank you</p>
Hello misan plz help ....everything is ok but my servo is not working properly :(
The &quot;smiling face&quot; part is mounted upside-down in yours. Servo arm lever would it up when mounted right.
<p>Hola MiSAN:</p><p>Estoy haciendo progresos con el plotter. Ya lo tengo configurado bien.</p><p>Pero el plugin del inkscape siempre me da esto:</p><p>Built gcode for image3344 - will be cut as raster.</p><p>Finished processing.</p><p>Es decir, que me hace todo el dibujo sin saltos, de una sola l&iacute;nea.</p><p>Sabes porqu&eacute; me pasa esto?</p>
Deber&iacute;as fe partir de un gr&aacute;fico vectorial. No de una imagen.
<p>Bueno, hago lo siguiente:</p><p>Importo la imagen, la doy objeto a trayecto, le doy a vectorizar mapa de bits, le doy a dev&iacute;o din&aacute;mico, y ahora me sale este otro mensaje:<br>Built gcode for path3349 - will be cut as vector.</p><p>Finished processing.</p><p>Vale, me sigue haciendo un solo trazo. (!)</p><p>Estoy intentndo hacer el perro que viene de muestra.</p>
<p>Hola misan,</p><p>Te escribo desde Argentina, te cuento que hace tiempo que con un amigo hicimos la maquina, y quer&iacute;a felicitarte por el gran aporte!</p><p>Solo tenia una pregunta, quer&iacute;a saber como hacer las firmas y las letras de un solo trazo como las del video comercial del AxiDraw, y los rostros con sombras, me encantar&iacute;a alg&uacute;n tutorial.</p><p>desde ya muchas gracias!</p>
Gracias.<br><br>Todo depende de c&oacute;mo hayas creado el archivo gr&aacute;fico. En Inkscape puedes unir varios trayectos para que sean uno s&oacute;lo.<br>
<p>Hi Misan,</p><p>Can I ask you whether/why it is necessary to power the shield through the arduino? I am now powering the shield directly from the screw terminals and the machine seems to be working fine (with your version of the firmware and no other changes). The reason I tried that is that I seem to have destroyed two arduino Uno clones (Sintron) when I was powering everything from the arduino using the soldering trick. I don't know what went wrong: the machine was working fine, but sometimes when plugging the usb in would turn my macbook screen blank and force my laptop to reboot, while permanently making the arduino invisible to the arduino IDE... Any ideas? Another minor problem/concern I have is that the servo (SG90) slowly builds up heat and eventually becomes hot, though it works fine. Your input would be very much appreciated. </p>
Hi, The way apply power makes sure Arduino is always powered when motors are powered and it does so in a way wrong polarity is ruled out. <br><br>On top of that, it helps if you plan on using it without USB (which I did through a Bluetooth adaptor). <br><br>Are you powering the SG90 with 5v? Mine does not get hot but it gets warm with use.<br><br>From the two screw terminals one is GND and is shared with Arduino. The other is 12-30V and it is independent. I use 12V for my shield and and send the 12V from the Arduino Vin pin to the shield with the soldered cable I mentioned.<br><br>Powering the shield and not the Arduino may be a bad thing when you connect the USB.
<p>Thank you! Do you know/can you guess what may have gone wrong when plugging the uno to power and the usb to my laptop, which forced laptop to reboot and permanently damage the arduino? I've checked the power supply gives const voltage ~11.8 V in operation and is only 1.25A. I've done the soldering correctly, maybe with a little too thin wire, but it did not get hot. My only guess (because on pololu clone was burnt at some point) is that a pololu clone was faulty and short-circuited something. But how did this destroy two arduinos? When I now plug those arduinos in my laptop, the arduino IDE does not even detect the port... Any clues/help? I am too afraid to try with a third arduino and the soldering trick...</p>
<p>Pololu can be mounted in two ways, if connected upsisde down it might send 12V to the Arduino and kill it (just a guess).</p>
<p>how i can change the GRBL Code ( servo pins or add some thing else ??</p>
Not easy as GRBL uses up most of available code space. You may want to got GRBL github though.
<p>yeah it seems not easy . but I need to know about ! would you give me idea about it or guide me where i can start ?! </p>
You should have a look a the issues on grbl master github repo. You may find some problems and solutions there.

About This Instructable




More by misan:4xiDraw 
Add instructable to: