Become Your Own 3D Printer

by ldevendorf in Workshop > 3D Printing

33280 Views, 143 Favorites, 0 Comments

Become Your Own 3D Printer

IMG_0185.JPG
G0012466.JPG

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 beingthemachine.com

The Gist

btm_hand.png
Drawing 3D Printer Toolpaths
Laura pipe cleaner hand 2

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.

Build It

IMG_1465.JPG
IMG_1446.JPG
IMG_1355.JPG
Screen Shot 2014-08-20 at 11.46.18 AM.png

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

Electronics

Assembly

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.

Get the Parts for the Laser Guide

IMG_1359.JPG
IMG_1362.JPG
IMG_1364.JPG

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

Start Assembling

IMG_1366.JPG

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

Remove Servo Horns

IMG_1367.JPG

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

Place Hex Nuts

IMG_1371.JPG

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

Screw the Servos Into the Mount

IMG_1424.JPG
IMG_1426.JPG
IMG_1427.JPG
IMG_1429.JPG

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.

Cut Wires

IMG_1391.JPG
IMG_1393.JPG

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.

Solder Connections

IMG_1394.JPG
IMG_1396.JPG
IMG_1397.JPG

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.

Solder More Connections

IMG_1400.JPG
IMG_1406.JPG
IMG_1404.JPG
IMG_1409.JPG

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.

Keep Soldering!

IMG_1410.JPG

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.

You Guessed It, Soldering!

IMG_1413.JPG
IMG_1414.JPG

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.

Center the Servos

IMG_1357.JPG
IMG_1415.JPG

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.

Assemble Mount

IMG_1435.JPG
IMG_1437.JPG
IMG_1436.JPG
IMG_1440.JPG
IMG_1439.JPG
IMG_1438.JPG

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!

Place the Laser

IMG_1442.JPG
IMG_1443.JPG
IMG_1444.JPG

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.

Add RF Components

IMG_1361.JPG
IMG_1448.JPG
IMG_1449.JPG
IMG_1451.JPG

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.

Add Piezo Speaker

IMG_1458.JPG

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

Add Battery & Switch

IMG_1454.JPG
IMG_1452.JPG
IMG_1453.JPG
IMG_1455.JPG

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.

Wrap It Up All Pretty-Like

IMG_1456.JPG
IMG_1457.JPG
IMG_1459.JPG

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.

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.

Download an STL

thing_hand.png

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.

Drag Your STL Into Slic3r

Screen Shot 2014-08-29 at 10.29.05 AM.png

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 slicr3r.org

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.

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.

Enter Fields in Slic3r

Screen Shot 2014-08-29 at 10.35.13 AM.png
Screen Shot 2014-08-29 at 10.35.38 AM.png
Screen Shot 2014-08-29 at 10.35.47 AM.png
Screen Shot 2014-08-29 at 10.36.07 AM.png
Screen Shot 2014-08-29 at 10.36.20 AM.png
Screen Shot 2014-08-29 at 10.36.28 AM.png
Screen Shot 2014-08-29 at 10.36.42 AM.png
Screen Shot 2014-08-29 at 10.36.51 AM.png
Screen Shot 2014-08-29 at 10.37.08 AM.png
Screen Shot 2014-08-29 at 10.29.05 AM.png
  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.

Preview Your Model

Screen Shot 2014-08-29 at 10.56.42 AM.png
Screen Shot 2014-08-29 at 10.57.01 AM.png
Screen Shot 2014-08-29 at 10.56.51 AM.png
Screen Shot 2014-08-29 at 10.57.09 AM.png

Drag your file into the G-Code visualizer I built at: beingthemachine.com/app

You can also fork the entire project on GitHub if you so desire: https://github.com/Devendork/BeingTheMachine

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.

Options

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.

Download the Arduino Code

btm_hand.png

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.

Prep the Build Platform

IMG_1463_edited.jpg
IMG_1460.JPG
IMG_1461.JPG
IMG_1465.JPG

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."

Build!

IMG_1361.JPG
Drawing 3D Printer Toolpaths

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.

Some Things I've Made

IMG_0609-1024x649.jpg
IMG_0168.JPG
IMG_0141.JPG
IMG_0185.JPG
20140813_173151.jpg

I've been keeping a blog of all my successes and failures with the project at beingthemachine.com. 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.

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 beingthemachine.com. 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: https://github.com/Devendork/BeingTheMachine

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: https://www.instructables.com/id/Becoming-a-Human-3D-Printer/

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