Introduction: Mini CNC Plotter

This is a miniature desktop vector plotter made from a compact photo printer and a DVD drive.

Here is the Bill of Materials:


-Rotring Rapidograph Pen (or any other pen)

-DVD Drive

-Compact Photo Printer like the Canon Selphy (

-Card Stock

-x3 Easy Stepper Motor Drivers (

-Arduino Uno


-Grbl firmware uploaded on the Uno (

-A universal G-Code sender such as this (

Step 1: Extract DVD Laser Focusing Mechanism

Isolating the laser focusing mechanism has been documented in other instrutables very well already:

The main challenge here is to find a CD/DVD drive with stepper motors instead of DC motors. I usually do this by trial and error though I do find that most DVD drives are stepper controlled.

Step 2: Extract Paper Reeling Mechanism

You will need a compact photo printer which uses stepper motors to take apart. I lucked out and found an Canon Selphy CP720 Compact Photo Printer ( for $5 which has a sleek reeling mechanism and was stepper controlled. I have also had luck with Epson compact photo printers. I needed to remove a bunch of rollers and idlers in order to expose the stepper controlled roller (so that it could push the piece of foam through). Everyone's printer will be different so this will require a bit of improvisation.

I recommend finding a place which has lots of junk and will let you look around and take things apart before purchasing. If this is not possible, I would try and buy defective compact photo printers from ebay and trying your luck at finding one that is stepper controlled.

Make sure to keep the extra parts around as they can be useful for the next step (setting up the Z-axis) as well as making any desired modifications.Try not to pull out too many parts of the printer out as some can be useful for setting up a built-in Z axis.

Step 3: Z Axis

Because every DVD mechanism and compact photo printer reeling system is slightly different, coming up with a plan for the Z axis might involve some improvisation. For this version of the machine I used a scrap stepper motor (harvested from a Silhouette Cameo paper cutting machine) and reused some other scrap parts from the photo printer to mount it. For the lever arm I used a standard servo adapter and drilled a hole to allow for a set screw to hold the arm in place. I also used a dremel to made a flat edge from the stepper axle to allow for the set screw to find purchase.

In previous versions of this machine I have used the stepper motor mechanism already built into the compact photo printer and adapted it so that it can just lift the hinged DVD mechanism. This is a far more elegant solution and keeps the size of the printer down as well.

Step 4: Breadboarding the Electronics

I am using three easy stepper motor drivers and an arduino and using the Grbl pinout connections (which I will get to in the next step).

One thing to remember is that keeping everything here neat and tidy (i.e. short wires) will avoid making a machine that is extra sensitive to noise. Noise is very frustrating for CNC builds because it causes your machine to behave in strange unpredictable ways that are infuriating to debug. I use torroidal magnets (harvested from some old computer monitor wires) on each side of the set of motor wires and wirewrap with zipties to keep everything tidy.

Step 5: Hardwiring the Electronics

I discovered that stacking three Easy Stepper Motor Drivers on top of the Uno can be an efficient way to save some space. Wiring was done with braided wire and some patience. I used a small amount of electrical tape on the USB female connector on the Uno to avoid shorting any circuit traces on the underside of the third Easy Stepper Motor Driver.

I added four bolts to the bottom of the compact photo printer to allow for the Uno/Stepper Drivers to fit underneath. I positioned the USB and power jack close to the outer edge for easy access.

I used double sided tape to attach the Uno to the bottom of the printer. Make sure to not short any of the arduino leads against the metal surface. To avoid this try using double sided tape which has volume (foamy double sided tape) or first sticking a piece of non conductive material to the metal underside and then attaching the Uno to this.

Step 6: Wire Management

I try to use whatever connectors are left over from the consumer devices to make plugging and unplugging motors easier.

Because noise is a serious concern for CNC machines, taking the time to use heat shrink tubing, toroidal magnets, wire wrap or zip ties is worth it. It also makes your life easier when debugging.

Step 7: Adding the Plotter Pen

If you buy a rotring rapidograph pen in a set like this one,

you also receive a threaded mounting piece which can be useful for attaching the plotter pen to the DVD mechanism.

Finding a nice place to mount the pen can take some time. I ended up using a dremel to flatten out an area of plastic to help keep things flat. The way the mounting piece is currently installed it's possible to easily unscrew the pen when you have finished with a drawing.

Step 8: Making a Drawing Surface

By adding a piece of scrap metal taken from the compact photo printer it is possible to create a nice drawing surface for the plotter pen. This piece of metal lifts up the paper that is passing through so that it is always at a nice height for the pen.

Step 9: Software Toolchain

This Desktop CNC machine works with G-Code, the standard for CNC machine interfacing. To start drawing you will need to first generate some drawing instructions for the machine.

CamBam is a great piece of software for producing G-Code:

You get 40 uses and if you keep the program open all the time you can stretch that to last quite a while. I use the Engrave command to draw vectors and change the liftoff to whatever works for my Z-axis solution. Once you have output G-Code instructions there are various software options to send this to the Arduino.

Grbl is a great open source firmware which you may choose to upload to the Arduino: . This program listens to the serial port for G-Code instructions. You may also want to use this G-Code sending program to relay your G-code file to the Arduino:

To get the Grbl G-Code Sender working you will need to set the port to whatever port the Arduino is plugged in to, unlock the machine, set the feedrate, and calibrate the number of steps per mm for each axis. I set my Y-axis DVD rom to: 50 steps / mm and my X-axis compact photo printer to: 345 steps / mm. I use a feedrate of anywhere between 10 and 400 depending on the kind of pen I am using and the quality of print I am looking for.

Step 10: Start Drawing!

If this machine is calibrated correctly it can make nice miniature plots and paintings too.

I find the set-up works well for making a small run of slender business cards.

Thank you for checking out this Instructable!