How to Make GRBL + CNC V3 Shield Based Mini CNC Machine From Scrap DVD Drive




About: Electrical engineer by profession

This CNC is based on GRBL0.9 Firmware and CNC V3 shield GRBL is Hacked for Z-axis Servo.

CNC Shield & GRBL combinly works very preciselyIt is loaded with very useful functions like Hard limit, Soft limit, Homing, etc

This is about how to make

GRBL+CNCV3 shield+Arduino based CNC machine

This guide include all necessary instruction required

like How to assemble CNC machine

How to Load GRBL to arduino

Inkscape extension installation

GRBL Configuration & G-code streaming

It is loaded with very useful functions like Hard limit, Soft limit, Homing, i will guide you in detail how to Make GRBL Based mini CNC machine at home

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Watch Video to Know How to Make

Watch this video it will clear you how to make and operate CNC machine

Step 2: Material Required

This are the list of some use full material required

  1. Arduino UNO--------------------------------------QTY- 1
  2. CNC V3 Shield------------------------------------QTY-1
  3. servo motor----------------------------------------QTY-1
  4. A4988 Stepper driver shield--------------------QTY-2
  5. Old scrap DVD Drives---------------------------QTY-2
  6. Some push buttons as limit S/W---------------QTY-2
  7. A acrylic sheet for base
  8. Pen holder (slavege from DVD Drive)
  9. Some wires
  10. Hardware like nut bots etc.

Step 3: Software Required

1. Arduino IDE

GRBL LIBRARY :- Click here to download



SERVO CONTROL EXTENSION :-Click here to download


3. UNIVERSAL G-CODE SENDER : - Click here to download


Step 4: Machine Assembley

  1. Place X-axis Horizontally on the bolt mounted on acrylic sheet
  2. Four bolt mounted on a metal sheet to fit Y-axis on it
  3. Now place the Pen up down holder on y axis whit the help of A bolt through the center
  4. Now place Y-axis on metal sheet and place it vertically on X-axis
  5. Now fit servo motor so that it will move z-axis which is our pen up and down
  6. Now mount CNC shield on Ardunino
  7. Do wiring A shown in wiring circuit as in Next step

For better understand please watch Video & pic attached here

Step 5: Wiring Diagram

Do wiring as shown here in image

Limit switch are optional

You can use them by changing the GRBL setting as below

$21=0 (hard limits, bool)


$21=1 (hard limits, bool)

Step 6: GRBL Loading to Arduino

Link to download GRBL Setup

Download the library file unzip it

and load to arduino

Now go to File>Example>grbl upload compile and upload code to arduino

Note:- delete any previously loaded GRBL library

Step 7: G-CODE Setup in Inkscape

Again we are using here INKSCAPE software to make G-code

As we are using GRBL & CNC Shield for this machine s

o it will not support a servo motor as a Z-Axis

so here some hack by doing so we can able to manage Servo works on Z-axis

you need to add MI Extension here to get it work with Z-axis Servo

Download link

after download add this files to the

inkscape directory>Share>Extension folder

Now open inkscape set page size 40 x 40mm

draw what you want to plot

select image go to convert to path

then go to extension click on MI GRBL Z-AXIS SERVO CONTORL

Servo up = M3

Servo down = M5

X-axis speed = 2000

Y-axis speed = 2000 S

ervo angle = 90

Delay = 1

Directory = as per you convenient or keep as it is

File name = as per you convenient or keep as it is

Clik on Apply now you G-code is saved @ location you mention

Step 8: GRBL Configuration & Streaming G-code

Download link for Universal Gcode sender

Open Universal G-code sender (Arduino must stay connected with PC/LAPTOP)

Select COM port

Set Baud rate 115200

clik on "OPEN"

go in "COMMANDS" Tab

enter $$ for GRBL configuration

Example Suppose we want to change the $0(step pulse, usec) value from 10 to 20

so enter in command line $0=20 & hit enter its done


$0=10 (step pulse, usec)

$1=25 (step idle delay, msec)

$2=0 (step port invert mask:00000000)

$3=0 (dir port invert mask:00000000)

$4=0 (step enable invert, bool)

$5=0 (limit pins invert, bool)

$6=0 (probe pin invert, bool)

$10=3 (status report mask:00000011)

$11=0.010 (junction deviation, mm)

$12=0.002 (arc tolerance, mm)

$13=0 (report inches, bool)

$20=0 (soft limits, bool)

$21=0 (hard limits, bool)

$22=0 (homing cycle, bool)

$23=0 (homing dir invert mask:00000000)

$24=25.000 (homing feed, mm/min)

$25=500.000 (homing seek, mm/min)

$26=250 (homing debounce, msec)

$27=1.000 (homing pull-off, mm)

$100=5.000 (x, step/mm)

$101=5.000 (y, step/mm)

$102=100.000 (z, step/mm)

$110=500.000 (x max rate, mm/min)

$111=500.000 (y max rate, mm/min)

$112=500.000 (z max rate, mm/min)

$120=10.000 (x accel, mm/sec^2)

$121=10.000 (y accel, mm/sec^2)

$122=10.000 (z accel, mm/sec^2)

$130=40.000 (x max travel, mm)

$131=40.000 (y max travel, mm)

$132=200.000 (z max travel, mm)


Now time to stream Gcode to machine go to "FILE MODE" Tab Brows your gcode file and hit enter thats it

youR machine start plotting Hope you like this Comment below if any doubt

3 People Made This Project!


  • Made with Math Contest

    Made with Math Contest
  • Cardboard Speed Challenge

    Cardboard Speed Challenge
  • Multi-Discipline Contest

    Multi-Discipline Contest

36 Discussions


Question 3 months ago

encuentro esta solucion
Gracias por este informe. Ha pasado un tiempo desde que miré esta extensión y parece que el buen equipo de Inkscape ha roto la función unittouu nuevamente. La última ruptura fue la versión 0.91.
La buena noticia es que esto no debería ser difícil de arreglar, la mala noticia es que no tengo tiempo en absoluto esta semana para arreglarlo y realizar pruebas.
Si desea probar y parchear usted mismo, de acuerdo con esta página, todo lo que debe hacer es eliminar el "inkex". Prefijo cada vez que se llama unittouu:

pero no se como cambiar las lineas


Question 3 months ago

hola buen dia hace tiempo que lo e intentado pero aun
no e podido resolver el error de inkscape Traceback (most recent call last):
File "", line 3172, in <module>
File "", line 283, in affect
File "", line 3156, in effect
self.orientation( self.layers[min(0,len(self.layers)-1)] )
File "", line 3085, in orientation
doc_height = inkex.unittouu(self.document.getroot().get('height'))
AttributeError: 'module' object has no attribute 'unittouu'

quisiera que me pudiaran ayudar gracias


3 months ago

thank you very much


Question 3 months ago

Can I use this program to engrave on metal sheets by replacing the blue pen with this type of pen. Will it cause too much vibration or load the Z Axis stepper motor heavily?


7 months ago

I have a 180x200 mm table. What to do to draw the whole table?


Question 1 year ago on Step 8

Hello. Servo SG90 is controlled by M3 code but angle was not 90º of action. it went to end of limit servo sg90. M5 code didnt work. servo couldnt turned manually when code M3 was active. Servo could turned by hand when M5 code active. What is the problem? can someone help me?

2 answers

Answer 9 months ago

same problem. Anyone got an answer? M3 and M4 moves same direction to max, but nothing moves it the other way


Answer 1 year ago

Hi! I have the same problem. Did you find the solution. I use programm GRBL Controller and I added the command M3 S200 the servo turned. Then I entered M5 and servo didn't move ((( I enter M3 S10 and I hear the sound of the motor but it doesn't move.

Does anybody knows what heppens?


10 months ago

You forgot Something, You don't mention how to calibrate the Vref on the A4988 Drivers, in order to set the appropriate current that the DVD Servomotors need.

Remember, If you set a lower value than the motors needs, you will loose strength, otherwise if you set a higher value than motors needs, you will overheat the motors, or burn the motors.

Of Course, How many Current this DVD servomotors needs?

NEMA 17 Stepmotors uses 1.7Amps.



Question 1 year ago

Buen día gracias por compartir tu proyecto . Me podrás ayudar mi moto es un 28byj-48 pero alconectar solo gira hacia un lado a si de movimiento a la derecha o a la izquierda gira en una solo.direccion


1 year ago

Hi, thanks for the instructable. One simple question: What's the Vref at the driver for these type of motors, considering that my driver has an R100 resistor? My calculation is 0.24 8*0.1 = 0.192 Volt, but I want to be sure. Thanks!!


Question 1 year ago on Step 7

What will be do if directary show not be exist after apply


1 year ago

my stepper motors works fine but not my servo and I tried 2 arduino unos, 2 cnc shield and 3 servos sg90 ( i have another attached to my 3d printer), I have no idea what to do anymore, connecting the servo to the arduino itself works for a bit but because is drawing the 5 v from my computer usb stops after a few movements. I reinstalled the grbl a few times with no luck


1 year ago

Now the X Axis is doing it! I tried using another arduino and another driver. I guess I've fried the steppers.


1 year ago

I build one almost exactly like this, then found this Instructable. Only differences were the use of RJ45 jacks for X, Y, & Z axis inputs; and, floppy drive stepper for pen up/down.

Unfortunately, I'm still trying to get it to work. The X axis works beautifully, moving strongly and smoothly. The Z is a little weak, but will probably suffice. The Y axis, however, has been a PITA from the beginning! First, it wouldn't do anything, which I fixed by re-soldering the connection and covering with U-cure glue for strength. Then it would twitch a little, but not really move. I was able to adjust the trimmer on the driver to get it to move. It's weak, but at least moves most of the time.

Only problem is, it only moves in one direction - regardless of whether I press +Y or -Y! I tried another stepper: same result. Switching another A4988 driver board didn't make a difference either. Should I bump up the voltage a little more? I'm at a measured voltage of 12.02V now. If I go higher, will I fry the steppers?

Any ideas why? Any suggestions? I've added pics of the front and back, and a video of X, A, and Y movement.



1 year ago

I made one almost exactly like this one, before seeing this. The physical build went well, using polycarbonate and steel. I used RJ45 jacks to connect the X, Y, and Z axis, so I can switch machines.

The x-axis stepper works great - seems good and strong. The z is okay, after I got it to work. The Y, however, has been giving me a hard time. I finally got it working - kind of. At first it would only twitch. By fiddling with the driver trimmer, I got it to turn. Only problem is, it goes the same direction whether I jog +Y or -Y. I tried switching drivers, switching steppers, moving the cables around on the Y stepper outputs. Still, no change.

Any ideas?


1 year ago

Guys, anyone know why stepper motors become very hot ? thanks

1 reply

Reply 1 year ago

Attention you must use the tension of 5 Volt for these engines, even if on the shield there is written 12_36 Volt, otherwise they will end up burning