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




Introduction: 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

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

4 People Made This Project!


  • Make it Glow Contest

    Make it Glow Contest
  • First Time Author Contest

    First Time Author Contest
  • Microcontroller Contest

    Microcontroller Contest



Question 4 months ago on Step 8

Plz provide the link for arduino program.


Question 5 months ago

Sir ,
I'm trying this project for a year , still not yet completed . Ive finished all the construction works , circuit works , and coding works . All are working . But i can't get the proper output . When the gcode is running , the stepper motor vibrates but not spinning in right way . X axis stepper works somewhat active , but y axis stepper doesn't respond for any commands , At start and at the end of the code it shows response . I don't know what to do , I can't even find what is the problem . I've changed stepper motors . Ive done this with two driver shields , (L293d driver shield and Cnc sheild v3 with A4988 sriver ) . Both shows this kind of output . And servo doesn't respond at all . Please someone help me out .


8 months ago on Step 1

Hello sir i found this error at InkScape

File "", line 52
def bezierslopeatt(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)),t):
SyntaxError: invalid syntax


Answer 1 year ago

Neither do I...


Question 2 years 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?


Answer 1 year ago

Same problem. Too bad...


Answer 2 years ago

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


Answer 2 years 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?


Question 1 year ago

HELLO ONLY this istruction is??
I see in your video that you have a different file for the arduino that I downloaded


Question 1 year 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 1 year 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


1 year ago

thank you very much


Question 1 year 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?


1 year ago

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


2 years 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 2 years 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


2 years 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 2 years ago on Step 7

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