RepRap Controlled Time-Lapse Photography

While capturing the time-lapse last week, John and I ran into two irritating issues.  The first is that the moving platform causes the object being printed to come in and out of the focal plane of the camera and makes for a jarring video.  The second is that because the interval between photos is constant, some large and slow layers will have multiple shots taken while several consecutive quick layers can be skipped entirely.  The solution to both of these is to dynamically remote trigger the camera from the printer.

I wrote a Skeinforge photograph plugin that inserts a new G-code command, M240, which tells the printer to trigger a photograph.  The module offers three modes.  End of Layer, as demonstrated by Yoda above, is the simplest.  It takes one picture at the start of the first layer and then another at the end of each layer of the print, resolving only the second of the aforementioned issues.  Corner of Layer takes a picture at the minimum Y,X of each layer.  Least Change between Layers tries to take shots that are as close as possible to each other from layer to layer.  I had the most visually interesting results with the last setting, as shown in the Flower print up top.  The module can be downloaded from github, and installation instructions are included within its text.

Infrared Trigger

The other half of the control scheme is triggering the camera from the RepRap.  Since I didn’t want to risk coupling my T2i directly to the printer, I went for emulating a Canon RC-1 Remote, which has been thoroughly reverse engineered.  The hardware is simply an 850nm infrared LED in series with a 180 ohm resistor connected to one of the I/O pins on the Arduino Mega.  I chose pin 23 because I could solder to it without pulling my RAMPS board off.  The software side is equally simple.  For this, I forked the excellent Sprinter firmware to respond to M240 and send the correct pulse over the IR LED.  My fork is on github, but the diff that adds M240 support is the interesting bit.

For Sale: RepRap Parts for Bitcoins

SAE Prusa Mendel RepRap Parts

Bitcoin is exactly the kind of fantastic real life science fiction kind of project that I enjoy: a peer to peer, anonymous, cryptographically secure currency.  I’m not even an armchair economist, but I suspect the hardest part of starting any new economy is the chicken and the egg problem.  Sellers won’t join the market unless there are potential buyers, and buyers won’t join unless there are people selling things they want to buy.  Unfortunately in the case of Bitcoin, both the chicken and the egg have been eaten by the monster called currency speculation.  It is likely that the majority of actual transactions are between speculators and exchanges, taking advantage of volatility to make a profit in BTC or USD.  Half a paragraph later, I’m still not an economist, but I also suspect that as a larger fraction of the economy goes to goods and services, the currency will stabilize, encouraging more people to use it.  Therefore, I am doing my part in bootstrapping the Bitcoin economy by using a project that loves to bootstrap.

Wade's Extruder and spare parts

I’m selling a set of SAE Prusa Mendel parts printed on the Mendel used in many of my recent projects.  The parts are from the current files in the PrusaMendel git repository, and are printed in PLA.  They are quite clean and strong, but may need a little work with a knife or drill bit.  The Wade’s Extruder and PLA bushings from the repository are also included.  But wait, there’s more!  Between getting misaligned on the trip home from Maker Faire and a torn belt, my printer was in fairly rough shape for a few weeks.  While repairing it, I printed RepRap parts to test the calibration.  I’m including the usable parts printed during that time and some more good spare parts I printed recently; this is the pile on the left in the bottom picture.  The full set of good parts from the top picture and the Wade’s Extruder are in separate bags.

I’m selling this set for the hopefully reasonable price of 5 BTC, shipped USPS Priority Mail to anywhere in the US.  At the exchange rate at this moment, that is roughly $72.50.  It could be $20 or $200 by tomorrow for all I know, but I’m willing to take the risk if you are.  Email me, and we can arrange the transaction. Sold!  There was less interest than I was hoping for, so I probably won’t be doing it again.

Gestural Printing: Jumping the Shark on Kinect Hacks

We’ve seen a seemingly endless array of amazing Kinect hacks over the last few months, from superhero generators to obstacle avoiding quadcopters.  However, it was only a matter of time before someone came up with a hack so inane and irrelevant that it would bring shame to the entire hobby.  That time is now, and that someone is me.  I bring to you, gestural 3D printing!  Using the Kinect to track your hand, you can draw one layer at a time, with the printer following your every move.  Pushing forward extrudes plastic, while pulling your hand back will start a new layer.  Who needs difficult and confusing CAD software when you can just directly draw the object you want to print?

Really though, you can only get through 4 or 5 layers before your arm feels like it’s going to fall off, and the resulting object will look like a stringy blob of plastic vomit.  The source is in the FaceCube GitHub repository.  I don’t recommend actually using it, but if for some reason you want to, the dependencies are mindbogglingly complex.  You’ll need to install OpenNI and NITE to start with; this guide at Keyboardmods is helpful.  You’ll also need my branch of OSCeleton, which improves on hand tracking.  With the Kinect hooked up, you can run ./osceleton -n -f to start hand tracking in an Open Sound Control server.  You can then run the script, which requires pyOSC, pygame, and the RepRapArduinoSerialSender script from Skeinforge, which is also in the FaceCube repository.  Of course, you’ll also need both a Kinect and a 3D printer that is compatible with the Gcode that RepRap firmwares use.  The script is set up for my printer specifically, but it should be straightforward to tweak for others if you dare.

Gestural Print

FaceCube: Copy Real Life with a Kinect and 3D Printer

Thumbs Up

This project is a tangent off of something cool I’ve been hacking on in small pieces over the last few months.  I probably would not have gone down this tangent had it not been for the recent publication of Fabricate Yourself.  Nothing irks inspires me more than when someone does something cool and then releases only a description and pictures of it.  Thus, I’ve written FaceCube, my own open source take on automatic creation of solid models of real life objects using the libfreenect python wrapper, pygame, NumPy, MeshLab, and OpenSCAD.

The process is currently multi-step, but I hope to have it down to one button press in the future.  First, run, which brings up a psychedelic preview image showing the closest 10 cm of stuff to the Kinect.  Use the up and down arrow keys to adjust that distance threshold.  Pressing spacebar toggles pausing capture to make it easier to pick objects.  Click on an object in the preview to segment it out.  Everything else will disappear; clicking elsewhere will clear the choice.  You can still use the arrow keys while it is paused and segmented to adjust the depth of what you want to capture.  You can also use the H and G keys to adjust hole filling to smooth out noise and fill small holes in the object.  If the object is intended to have holes in it, press D to enable donut mode, which leaves the holes open.  Once you are satisfied, you can press P to take a screenshot or S to save the object as a PLY format point cloud.

FaceCubeSegmentedPoint Cloud

You can then open the PLY file in MeshLab to turn it into a solid STL.  I followed a guide to figure out how to do that and created a filter script attached below.  To use it, click Filters -> Show current filter script, click Open Script, choose meshing.mlx, and click Apply Script.  You may have to click in the preview, but after a few seconds, it will say that it Successfully created a mesh.  You can click Render -> Render Mode -> Flat Lines to see what it looks like.  You can then click File -> Save As, and save it as an STL.  You can probably get better results if you manually pick the right filters for your object, but this script will be enough most of the time.


You can then open the STL in OpenSCAD or Blender and scale it and modify to your heart’s (or printer’s) content.  Of course, the real magic comes from when you take advantage of all that OpenSCAD has to offer.  Make a copy of yourself frozen in carbonite, put your face on a gear, or make paper weights shaped like your foot.  This is also where the name FaceCube comes from.  My original goal going into this, I think at my roommate’s suggestion, was to create ice cube trays in the shapes of people’s faces.  This can be done very easily in OpenSCAD, involving just subtracting the face object from a cube.

difference() {
	scale([0.15,0.15,0.15]) translate([85,140,120]) rotate([180,0,0]) import_stl("face.stl");

FaceCube Tray

Since all of the cool kids are apparently doing it, I’ve put this stuff into a GitHub repository.  Go ahead and check it out, err… git clone it out.  The script requires the libfreenect from the unstable branch and any recent version of pygame, numpy, and scipy.  You’ll need any recent version of MeshLab or Blender after that to do the meshing.  I’ve been using this on Ubuntu 10.10, but it should work without much trouble on Windows or OS X.  The latest code will be on git, but if you are averse to it for whatever reason, I’ve attached the script and the meshlab filter script below.  Since Thingiverse is the place for this sort of thing, I’ve also posted it along with some sample objects as thing:6839.

git clone

AC Powered Heated Build Platform for RepRap

Heated build platform

One of the unpleasant surprises you come across when first learning how to operate a RepRap is that any object longer than an inch or so in any dimension printed in ABS will warp quite a lot as the lower layers cool.  The workaround, other than switching to another plastic, is to print onto a heated build platform.  There a few varieties available to buy, but I decided to build one out of parts I could get at Halted.  I found a ~2mm thick sheet of aluminum in roughly the correct dimensions with holes predrilled for $2, and a few 50 watt resistors for about $2 each.


My primary design goal was to avoid putting more load on my (fused) RAMPS board and mini-ATX power supply by directly powering the bed off of AC.  As a purely resistive load, this is also by far the most efficient way of doing it.  I connected the resistors in series with 16 gauge high temperature teflon insulated wire and JB-Welded them to the sheet.  I also used JB-Weld to mount a thermistor near the middle resistor to get temperature readings.  I then mounted the board on springs above the normal build platform and covered the surface with Kapton tape.  The relay is being switched by one of the MOSFETs on the RAMPS board.  A red LED indicates that the relay is powered, and there is a flyback diode across the relay coil.  The Arduino Mega was resetting randomly partway through prints until I added a decoupling capacitor in parallel to the coil as well.

Overall, it works well.  With roughly 80 watts of power, it heats up to 110C in around 5 minutes, which is sufficient for ABS.  I managed to print a 150mm long object with no warping.  I’ve also been using it with PLA at 60C.  Right now it poses a mild electrocution hazard sitting on my desk, but I plan on printing out an enclosure for it as soon as I figure out how to use OpenSCAD.