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




About: Electrical engineer by profession

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

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

3 People Made This Project!


  • Metalworking Contest

    Metalworking Contest
  • Fix It! Contest

    Fix It! Contest
  • Tiny Home Contest

    Tiny Home Contest

28 Discussions


Question 8 weeks 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?

1 more answer

Answer 1 day 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?


3 months 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 3 months ago on Step 7

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


4 months 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


6 months ago

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


6 months 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.



6 months 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?


8 months ago

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

1 reply

Reply 7 months 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


10 months ago

servo motor get stuck at 180 and doesnt WORK. 100 TESTED.

1 reply

Reply 7 months ago

Reduce the laser power while converting the image to gcoded
in inkscape (use J tech Photonic extension)


8 months ago

Hi! I'm having troubles when I try to use the extension: I got an error and the gcode file is not generated. Please see the attached image for details. I'm using Inkscape 0.92 Thanks!

1 reply

10 months ago


When I send gcode, x and y axis work perfect but servo spins for 180° and stops. Do you know what is the problem? Thank you in advance.

2 replies

Reply 9 months ago

HAd the same problem - dont use just USB to power arduino. Connect a real power source to arduino and everything worked.


Reply 9 months ago

Too late unfortunately, but thank you.

I put stepper from floppy disk for Z axis and it works better than servo.


1 year ago

how to make servo setting my servo is didnt work up and down