Introduction: Become Your Own 3D Printer

About: I am a PhD student at the UC Berkeley School of Information researching new ways to interact with digital fabrication machines and technologies. I studied computer science and art and I like to hack things tog…

This project is my attempt to build a 3D printer for makers who prefer chance to control. The design of this system grew out of my shared interest in computational design, art-making, feminism in tech, and instruction art. I want this system to call values embodied in the design of 3D printers into question: why must working with 3D printers require us to delegate work to a machine? Could there be a way to work with 3D printing that was more cooperative, allowing for human and mechanical modes of making to inform one another? These questions are important because not all modes of working are regarded with the same value to society. Delegation, control,and other "hard" or abstract styles of working are often seen as more sophisticated as work engages unpredictability, negotiation, time, and cooperation. The former can be seen as a way of attempting to impose the wills of the human maker onto the world of passive materials, the latter may be seen as a way of making by coming to understand the properties and behaviors of the world that cannot be controlled and working with them. Where the former is accomplished by closing off making to forces of unpredictability (i.e. placing fabrication in a controlled lab, limiting participation, engineering custom materials) the latter is accomplished by radically opening up the processes to unpredictable forces, creating more opportunities for materials to be resistant and reacted to. A "good result" in the former is a object that meets expectations exactly, a "good result" in the latter is one that emerges over time and practice and could not be predicted ahead of time. I built a 3D printer for the latter by subjecting the machine instructions to human interpretation and human motivation to machine interpretation. If you want to join me in my attempt to carve a space for unpredictability, abstraction, slowness in digital fabrication, keep on reading and make one for yourself. I keep an ongoing log of my projects with the system at

Step 1: The Gist

I created an Arduino controlled laser guide that walks you though the process of building something like a 3D printer. The Arduino code translates G-Code (the language of 3D printers) into coordinates that can be drawn by a laser connected to two servo motors. If you follow the dot with your hand while laying down material, eventually you'll end with something that's more or less like your 3D model.

It's a bit easier to understand how to follow the laser if you watch the process in 2D. When the light turns on, you put the pencil down. When the dot moves, you move your pencil to the dot. When the light turns off, you pick the pencil up, ending the line you were drawing. When the light turns on again, you put your pen down again and follow it, and so on and so on. Eventually the dot will just stop moving and you'll be done.

In 3D, you do the same thing but you replace a pencil with something with volume and form. Like pipe cleaners. The code controlling the laser adjusts for the height of the model and will draw on top of the layer that you already put down. So, instead of drawing lines on a single plane, you'll start laying materials on top of each other and build something in 3D. Each time you move up a level the systems will make a sort of video game "level up" sound letting you know that you've finished a layer.

Step 2: Build It

Here's what you'll need to make the laser guide - I included links to the parts I used:



Optional but Really Helpful

Note: I've created an updated version that stores G-Code instructions on an SD Card rather than the Arduino hardware. This allows for larger files to be uploaded. The software I wrote to drive the system allows the maker to select whether they want output on the Arduino hardware or SD Card.

Step 3: Get the Parts for the Laser Guide

First we'll assemble the servo bracket so grab these parts:

  • 3D printed bracket parts
  • 2 servos
  • laser module
  • tiny hex nuts and screws
  • 1/4" 20 hex nut
  • tiny screw driver

Step 4: Start Assembling

Press the 1/4" 20 Hex nut into the base.

Step 5: Remove Servo Horns

Use the tiny screw driver to remove the default horns from the servo. Hold on to the screw that has holding the horn on.

Step 6: Place Hex Nuts

Press the 4 tiny hex nuts into the corresponding holes in the mount.

Step 7: Screw the Servos Into the Mount

Place the servos into the mount. I've included photos of the servos from several vantage points. It's important to get them aligned in the correct way, so make sure they are attached just like the photos.

Once you have the servo placed in the right orientation, use the tiny screws (not the ones from the servo horn, the other tiny screws) to fasten the servos into place.

Step 8: Cut Wires

Cut wires to connect the servos to the Arduino. Also grab some male headers and break them into

  • 1 x 4 pin blocks
  • 3 x 3 pin blocks

I also cut some heat shrinking tubing to keep the joints secure.

Step 9: Solder Connections

Place a little solder on the tips of your short red and black wires. Also put a little solder on the end of your longer red and black wires. Then, solder the 3 short wires to the 1 long wire of the same color. When you solder all the wires together, the little solder you added to the tips will help keep them joined.

This will provide power and ground to all of the components while only using one pin on the Arduino. I used the shrink tubing to seal the joints.

Step 10: Solder More Connections

Grab a long green, blue and yellow wire and place then with the red and black wires you just soldered.

Grab one small red, small black, and the long blue wire. Solder them to a 3 pin male header to connect to your servo. The order matters so make sure you match the ground (black) and power (red) to the appropriate pins on the servos.

Repeat this with one red, black, and green cables. This will connect to your other servo.

Step 11: Keep Soldering!

The laser has four wires connected to it but you only need to use 3 to control it red, black and white. I use a 4 pin male header so it's easer to clip them in and out. Just solder the red, and black to the corresponding spots on the header and then skip a pin and solder yellow last pin on the header.

Step 12: You Guessed It, Soldering!

Turn the wires around and grab the yellow, blue and green wire ends that are not already soldered to headers.

Solder them to your last 3 pin header in the order: yellow - blue - green. This is going to make it easy for you to just plug your chords into the breadboard.

Step 13: Center the Servos

Before we go ahead, we'll need to power up our servos and get them centered.

Place the Arduino in your breadboard. Connect the black-red-blue pin header to the servo closest to the base, connect the black-red-green header to the other servo. Connect the red wire to 5V and the black to GND. Connect the yellow-blue-green pin header to pins 8-9-10.

Power up your Arduino and upload this Arduino Sketch. Make sure you have the correct port and board selected in Arduino. Sometimes the Micros act funny and will give you errors when you upload. Try two or three time and see if the error persists. If so, just hit reset on the board and try a few more times. I know it sounds terrible but it generally works for me on the second or third try.

Once the sketch is uploaded and your servos are centered, unplug the Arduino.

Step 14: Assemble Mount

Without moving the servo heads, gently place the base and laser holder into place. Use the tiny screws that you saved from the servo horns to screw them into place. Make sure there isn't power running when you do this, it might break your servos.

The screw is difficult to get into the laser mount, if you can't do it, don't worry, it still works fine!

Step 15: Place the Laser

Slip the laser into the laser holder and reconnect your wires. Remember black-red-blue goes to the servo near the base, black-red-green goes to the servo by the mount. Line up the red and black wires on the laser with the red and black wires on the header.

Step 16: Add RF Components

The RF transmitter and receiver allow you to control the speed at which the laser draws the instructions for printing. Place the receiver somewhere on your breadboard and connect the pins to the appropriate locations on the arduino.

I soldered four wires to a 4 pin male header block on both sides to make connecting the wires easier. I connect 5V and GND to the appropriate locations on the board. And then connect D0 to pin 2, D1 to 3, D2 to 4 and D3 to 5.

I added stickers to the keys to make the function of each key more clear. I'll describe the functions when we talk about actually using the system.

Step 17: Add Piezo Speaker

Connect the black wire of the Piezo to GND and the red wire to Pin 7.

Step 18: Add Battery & Switch

I add the switch in series to the battery voltage output so that I can turn power to the board on and off with the switch. First, I solder the end of the red batter connection wire to one pin on the switch. Then I solder a red wire to the other pin on the switch.

I clip the battery into the switch and make sure it works correctly. When the switch is open, voltage should be close to 0, when closed, it should be close to 9V.

Once I know it's working, I open the switch (so power isn't coming through) and connect the leads to GND and Vin on my Arduino.

Step 19: Wrap It Up All Pretty-Like

I laser cut a little box for my system which I'll add the files for shortly, it's not beautiful but it gets the job done. I place the battery in first, then put the breadboard with Arduino on top. I tape the Piezo in place and tape the switch somewhere to the box. When traveling, I disconnect the servo mount from the wires and pack it in with everything else. This keeps things nice and compact and makes sure I don't break anything when I carry it from place to place.

Step 20: Use It!

So now that you've build the guide system, you're ready to actually use it. The next few steps will guide you through building from getting a file, to uploading it, to running the system.

Step 21: Download an STL

Find an STL Model online that you would like to build. I've had good luck finding things on Thingiverse but you can go anywhere you please to fine STLs, you can even make them yourself in 123D Design or other CAD programs.

For my first construction, I used this hand on Thingiverse.

Step 22: Drag Your STL Into Slic3r

Slic3r is an open source G-Code generator that has a nice interface and was the easiest g-code generator for me to use. Download it for free at

Drag your model into Slic3r and you should see something like the first image above. The 3D model doesn't show by default but click the "view" icon in the top banner to open the viewing window.

The "info" panel on the bottom right will tell you the size of your model (in mm). If you want something larger or smaller, use the scale feature to resize.

Step 23: Measure Your Material

This is the part where you have to use your brain a bit. You're going to be converting your model into paths that you'll draw with your materials. You need to tell your model how big your material is. For the most accurate results, choose a relatively small materials (< 10mm) that has a uniform size. Good n' Plenties, BB's, yarn, spaghetti, would all work great.

For sake of example, I'll pretend I'm making the hand out of pipe cleaners which are about 8mm across. Err on the side of too small if you're not sure how big you material is.

Step 24: Enter Fields in Slic3r

  1. Select "Print Settings" in the top tab bar
    1. Select "Layers and Perimeters" form the left side panel
      1. Change Layer Height & First Layer Height to your material size
      2. Change the "Perimeters (minimum)" value to whatever you think you'll need for your model. You can think of "perimeters" as outlines. If you're model angles in or out a lot as you travel up and down the model (like in a hand) you'll want more perimeters so that each new layer has something to build atop
      3. Leave all the other parameters the same (or play with them to see what happens)
    2. Select "Infill" from the left side panel
      1. Change "fill density" to your desired value. 0 will give you a hollow model (only perimeters will be drawn) and 1 will give you a solid model. Any value between 0 and 1 will add some support between complete hollow and completely solid.
      2. Leave all the other parameters the same (or play with them to see what happens)
    3. Select "Advanced" from the left side panel
      1. Change "Default extrusion width" to your material size
  2. Select Filament Settings from the top tab bar
    1. Select "Filament" from left side panel
      1. Change "Diameter" to your material width
  3. Select Printer Settings from the top tab panel
    1. Select "General" form left side panel
      1. Make sure G-code flavor is set to "RepRap (Marlin/Sprinter/Repetier)
      2. Optional: You can change the bed size as you please. For instance, if you scaled your model larger than the bed, make the bed bigger. If your model looks tiny on the bed, make the bed smaller
    2. Select "Extruder 1" from left side panel
      1. Change Nozzel Diameter to your material length

When you're done changing the parameters go back to the Plater tab and hit "Export G-Code" on the far right, bottom of the interface.

Note to the tech savvy: Slic3r can also be downloaded and run from the command line. That would save you tons of time entering each value in on the interface.

Step 25: Preview Your Model

Drag your file into the G-Code visualizer I built at:

You can also fork the entire project on GitHub if you so desire:

This interface lets you see exactly what you'll be drawing. You can use the forward and back keys to go through the instructions and see how the laser point will move. Use the up and down keys to move through the layers.


At this point, ask yourself if you think you're materials can work in this structure. If it is large enough, if you think they'll have enough support etc. If it looks like it won't work, go back to Slic3r fiddle with some parameters and visualize again. In a perfect world, this wouldn't require so many chained programs but I am but one small artist and couldn't find the time to make it seamless (a tear drops).

Use the options panel to set custom parameters. You can specify if you are building in 3D (making a model) or 2D (making a drawing). This option will change the way the angles for the servo are calculated since 3D models will change height and the laser point will account for that and 2D models will have constant height.

You can also change the view of the simulation. Arduino doesn't have the same resolution of the screen so checking the box for Arduino view will update the visualization to what the laser will actually draw. It will probably be a bit more rasterized than the original.

The last option will let you override the layer height used in G-Code. Sometimes you need the resolution on each layer to be higher than the actual width of your material. So, you could say the width is small than reality and then change the layer height in the interface to account for the actual height of the model.

Step 26: Download the Arduino Code

Click the link that says "Download Code for Arduino" to open up a window with the Aruduino code. Copy that code and paste it into an Arduino window, then upload it to your Arduino.

Write down the value on the bottom right of the screen that says, "Distance from Base to Laser." You'll use this to set up your system to build.

Step 27: Prep the Build Platform

I used an Irwin clamp to clamp to the side of a table and a magic arm tripod mount to extend out from the clamp.

I fasten the laser mount onto the end of the magic arm and then hang the rest of the equipment from the based of the magic arm. Alternatively, you could tape the Arduino and components to the clamp.

Turn the Arduino on and both the servos will point towards the center. Adjust your laser to make sure it's pointing directly downward. Once pointing downward, measure the distance from the laser to the base and make sure it matches the value on the interface for "Distance from base to laser."

Step 28: Build!

Use the key fob to control the laser.

Here's how the buttons work (in the image above, I covered the buttons with stickers indicating their function):

  • A: move the laser to the last position (i.e. last G1 instruction)
  • B: move the laser to the next position (i.e. next G1 instruction)
  • C: draw the bounding box or footprint of the model - this works well to position whatever you are building on.
  • D: play - this will cycle through "next" instructions automatically. It does the same thing as holding down B.

The attached video shows how I follow the laser in 2D. I'm following the laser as it runs on "play" mode.

Step 29: Some Things I've Made

I've been keeping a blog of all my successes and failures with the project at On the blog you will see more about the drawing I made from a model of 12 hands at the AiR show, the initial tests I made with craft supplies and my attempt to make a 5 foot tall bunny made of balloons.

Step 30: Plans

This project is part of my ongoing dissertation research exploring how fabrication systems would look differently if we drew from different theories of making. You can read more about the project and the work that I have published about it at I'm currently updating the system to run from a mobile device via bluetooth.

You can also fork the entire project on GitHub if you so desire:

If you want to know more about the background of this project, I created a "process" Instructable that describes the generation of this project from idea to implementation and the future vision of human 3D printing:

Thanks to:

  • Kimiko Ryokai - my advisor and collaborator
  • Paolo Salvagione - brilliant pan-tilt design director!

Related Reading (things I read while building that helped me shape the design):

  • Tim Ingold: Making
  • Jane Bennett: Vibrant Matter