When my EPSON 830U decided not to work for me anymore (printing heads clogged) I thought I could make some use of the still working mechanics of the printer. It's based on a couple of stepper motors for both axis of motion (print head and paper feed). So I replaced the original power supply and drive electronics for an arduino board and an stepper motor driver from Adafruit industries. Now I could move the printhead anywhere on a page. Next step was to add a laser on the printhead and to control it using a PWM output from arduino (so laser power could be modulated from the computer). Though it only cut thin back color cardboard, it has may uses. I wrote a C program for arduino to control the stepper motors and laser. It receives data from the computer and interfaces with the old printer guts.
Data format is very simple: each line contains a sequence of integer numbers separated by blank space. Each pair of numbers represents one XY coordinate. Line ends with a CR (0x0d) character (that also shuts down the laser to stop cutting). First coordinate of a line sets the starting point (before reaching that location the laser is off).
I wrote some software running on my iMac that reads a Inkscape SVG file (only straight lines are supported though, use Flatten Bezier on curves to get a sequence of straight line segments) and translates it to the desired data format for arduino and it shows a preview on the screen. Data is sent through a USB port to the arduino. iMac code was written using Processing language (Java-based) so it can run on Windows or Linux too.
If you have an old EPSON printer, you may want to give it a second thought before putting it to the trash.
Video was shot by taping an iPod to the printer's head. That's why it looks laser is static and only cardboard moves.
Update: After I published the above version of software, I kept working on the next one. Now flow control works ok and the Processing code shows a red dot over the drawing while cutting. One click is needed to start cutting once the SVG file is shown and some minor changes make the code a bit better (SVG parsing code is very lame and failure prone, only straight lines are understood). SVG filename is still hardcoded in the Processing file.