I got an XYZ DaVinci 1.0a, hacked to have Repetier 0.92mod firmware, and wanted to use it as a plotter / cutter as well as a 3D printer. Some use cases:
It was important to me that the printer mod be easily and quickly installable and uninstallable, so one can quickly switch between plotting, cutting and 3D printing.
The software side of this is a Python script / Inkscape plugin that I wrote to convert SVG / HPGL path files into gcode that the printer can print.
My total cost was under $20, not counting the printer.
For versatility and easy of printing, I went with a two-part approach:
The attachment clip provides a mounting surface, with screw holes or gluable mounting holes, that clips onto the print head. The tool holder then screws or glues to it.
The attachment clip needs to be customized for your particular print head. Mine is for the XYZ DaVinci 1.0a. You may be able to use my OpenSCAD file to to customize for other printers. Experience shows that you'll have to measure, print, modify, print again.
I've used three tool holders. All of them need to be printed in ABS, and get their springiness from built-in ABS springs. The springiness is essential to compensate for imperfections in the surface (though you also may get some bonus springiness from your bed's leveling springs--but that may screw up your leveling).
As long as the mounting screw/glue holes on your attachment clip has the same placement as on mine, you should be able to just print my tool holders without change. I used ABS juice (ABS dissolved in acetone) to attach the two piece holder to the attachment clip. The bond is surprisingly strong. The rest uses M3 screws and nuts.
The dimensions my pen holders are designed to hold up to a 15mm fabric marker, but you can use Thingiverse's Customizer to change the size. All of them are designed to use M3 screws and nuts to hold the tool in place. There are screw nut holes that are printed by the file. On my printer, these tend to come out very snug and I had to run a drill bit (sometimes just handheld) through the screw holes, and then use a screw to force a nut into the hole. The nice thing about that is that the nuts then tend to stay in the hole.
The two-piece pen holder is really cool looking, but takes up a lot of space, which limits your print area. Hence I designed my low-profile holder instead.
On my printer, because the tool is off to one side of the print bed, a large chunk of the print bed can't be used for drawing and cutting. However, there is also a chunk of space that could be used if the print bed were large. In my scrap collection, I had the remains of a plywood jigsaw puzzle, and I glued on some extra pieces of wood that made it into an extended print platform, which ties on with bungee cord. A bonus of this is that I can use thumbtacks to attach work to the wood. This is ugly and hackish, but worked.
I wouldn't use this for cutting, as it's going to be hard to make the plywood as level as a glass bed would be, and leveling is much more crucial for cutting.
Level your printer bed. If you're going to be cutting, level it very carefully.
Attach your clip and tool holder, and insert the tool you will use. The calibration will be different for different combinations, and the Z-calibration will need to be done each time you level, as the heights will change slightly.
Make sure you can home your printer without the clip, holder or tool bumping into the bed. If not, you will need to do some careful hardware/software working around.
Now, use your printer panel or software (I used Repetier Host) in manual mode to move the printhead around.
First, move the printhead away from the bed for safety. Then locate the minimum and maximum XY coordinates of the available print area (make sure printer can move freely over it without bumping into any clips that you will use to hold the work in place). On my printer with the two-piece holder, the coordinates are minX=10, minY=8, maxX=192 and maxY=150, all in millimeters.
Now comes the crucial point. This is so crucial, I recommend doing it before every print. Find the Z coordinate that the tool will be in while drawing and cutting. To do this, attach whatever you want to draw on (paper, fabric, etc.) on the bed, or attach the cutting mat. Then very slowly lower the tool until it is at the desired height. To prevent marking the object when drawing, you can put a piece of aluminum foil between the pen/marker and the object.
For drawing, you want the pen to exert some pressure on the drawing surface. You'll need to experiment to get the right amount of pressure. For cutting, you want the very tip of the blade to slightly penetrate the cutting mat.
Make a note of the Z coordinate.
Then check how many millimeters you need to lift the tool for movement. Typically two or three millimeters of lift will do. The less you lift, the faster the print will be.
Finally, if you're cutting, measure the "tool offset". This is the distance from the swiveling knife pivot to the far edge of the knife. Typically, this will just be the width of the knife.
You will now have this data, all in millimeters:
There is a pretty good chance you can use the bundled gcodetools extension to drive your printer as a plotter, but I ended up writing my own python script and extension.
1. Make sure you have Inkscape installed.
2. Download the latest release of my gcodeplot scripts. Drag the contents of the zip file into your Inkscape's extensions directory. E.g., C:\Program Files\Inkscape\share\extensions in a typical Windows installation (you will get a UAC prompt in Windows, and will need to use an account with admin privileges; if you don't have such an account, do a single-user install of Inkscape).
3. Restart or start Inkscape.
4. Load the SVG file you want to draw or cut into Inskcape. The lower-left corner of the page in Inkscape corresponds to the minimum X and Y coordinates you measured in the previous step. Make sure your images fit into the print area.
5. Convert the drawing to a path: ctrl-A to select everything, then Path | Object to Path.
6. Save to gcode:
Make sure your work is attached well enough to the print bed. Here are some hints:
Load the gcode file into your printer control program and print. I used Repetier Host. Kill the print (know what your printer's reset button sequence is) if anything goes wrong to avoid damage.
While saving the gcode with my gcodeplot Inkscape extension, you can fill out a serial port name (e.g., "COM4") and have it simultaneously send the code to your printer. I don't recommend this when starting out as you have no control during sending, and the reliability is likely lower than using something like Repetier Host. But eventually you can try it.
If you have python installed, gcodeplot.py can also be used directly from the commandline, and applied to a path-only SVG file (i.e., an SVG file where objects were converted to paths with Select-All and then Path | Object-to-Path in Inkscape) or an HPGL file. Run python gcodeplot.py (assuming you have python in your path, and you're in the root gcodeplot directory) to list the options. One particularly useful option is adjusting the x/y/z coordinates right inside gcodeplot.py. To do that, include --pause-at-start --send=portname in the commandline, e.g.:
python gcodeplot.py --pause-at-start --send=COM4 mydrawing.svg
The printer will start up, but before any printing starts, you will get a gcodeplot commandline that lets you move the printhead around. Here are some pause-mode commands:
After you set the left, bottom and work values, the drawing/cutting will be adjusted to use them.
Finally, you can do multicolor plotting by using a pen control file. Make a text file, e.g., named pens.txt, with contents like this:
1 (0,0) red Red marker 2 (0,0) #00FF00 Green marker 3 (0,0) black Black marker 4 (0,2) yellow Highlighter
The general format is penNumber (offsetX,offsetY) svgColor Description:
If you then include --pens=pens.txt on your gcodeplot.py commandline, gcodeplot.py will match the colors in the drawing to the closest colors in your pens file, and insert a pause command in the gcode for pen changes. The challenge is either making sure that the pens all stick out the same distance (you'll have to do this if you are using a 3rd party program like Repetier Host to send the gcode to the printer) or else re-callibrating the z-coordinate using gcodeplot's pause-mode commands (i.e., move the printhead to the correct work position with zn or z+n commands--with aluminum foil to protect the work--and then do work=z).
I have yet to test the multiple color feature, as I haven't had a use for it.