Introduction: Super Cheap 3D Printer From CD-Rom Drives

This idea was inspired by all of the CD-Rom CNC machines that I've seen on Instructables. I've seen them used as drawbots, laser cutters, drill presses, but I haven't seen one yet used for a 3D printer...at least not a reasonably priced one. So the goal of this instructable is to show you how to make your own 3D printer from old CD-Rom drives an a cheap 3D printing pen.

Step 1: Don't Like Reading? Watch the Video Instead.

If you're a visual learner in that you like to see what's being done instead of reading about it, then check out the video version of this project that I created just for you! Actually, I created it for me in the event that I lose my long term memory and want to remember how to do this. But feel free to benefit from my odd anxieties.

Step 2: Gathering the Parts

The intent of this project is to re-use old computer parts that should be easily accessible. Aside from the 3D printing pen, if you don't have these parts, see if you can scavenge them from thrift shops, college dumpsters, government or school buildings that are getting rid of them, etc. It shouldn't be to hard to find a free old CD-rom drive these days. Here's the bill of materials:

  1. 3 x CD/DVD Rom drives(Scavenged/Free)
  2. 3 x Stepper Motor drivers ($6)
  3. PC Power supply (Scavenged/Free)
  4. Arduino Uno ($10)
  5. 3D Printing Pen & Filament ($45)
  6. Various screws, nuts, standoffs (Scavenged/Free)
  7. 2 x Electrical Box Covers(useful but not requred. Use whatever you can scavenge)
  8. Soldering Equipment
  9. Hot Glue

Total Cost: $55 (depending on what you're able to scavenge)

Step 3: Disassembling the Optical Drives

Taking apart Desktop optical drives is really very easy. The first thing to do, that is often overlooked, is to remove the front panel on the drive tray. To do this, force eject the drive tray by sticking a paperclip into the eject hole. Once the tray is pulled out, the front panel should snap off by pulling the bottom of it forward and then pushing it up.When that’s done, you can then unscrew the bottom plate of the drive and remove the metal drive casing as well as the plastic front panel.

Now you should be able to see all of the beautiful guts of the drive: motors, lasers, LED’s, gears…all sorts of cool tech stuff. You can take apart and salvage anything that you think you might have a use for, but for this project, we are specifically interested in the metal motor tray with the stepper motor (the one with the spiral rod) and the laser housing. The reason we want this specific part of the optical drive is because it offers a motor, track, and housing that can mechanically provide a smooth back and forth movement, which is ideal for a CNC axis. So you will need to disconnect any wires leading to the motor tray and separate it from the rest of the optical drive parts. You can remove the brush-less DC motor from the tray if it is attached. While not used in this project, brush-less motors make great motors for quadcoptors. You’ll also want to remove the laser and any other glass parts, magnets, or stray pieces from the laser sled to make sure that it doesn’t have anything that can hinder movement or mounting of other screws. You also want to extend the stepper motor wires. On most stepper motors have a ribbon cable that connects to the main board. It’s fine to leave this, but just cut off the extended part of the ribbon cable (see image to the left at the bottom). Solder four new wires to the pin terminals. They should be at least 6″ long. I color coded mine so that I could keep all through motor wires organized. Repeat this process for all three optical drives so that you have three bare motor trays and are ready for the next step.

Step 4: Mounting the Motor Trays

We need some type of casing to mount the motor trays onto. I used the optical drive cases themselves. Let’s start with the Y-Axis. The Y-Axis will go back and forth, so take one of the motor trays and mount it parallel to the length of the casing close to one end. Make sure it’s aligned as straight as possible and use some motherboard mounting screws to mount it.

For the X-axis mount it perpendicular to the length of another optical drive case, again making it close to one end and aligning it as straight as possible. Then mount it using motherboard mounting screws as well. As for the Z drive, we will need to mount it to the laser housing sled of the X-drive. In order to do this, we need to find some way to extend and create a platform to mount it to. I used more motherboard mounts and an electrical plate cover. Then I fastened the final motor tray to the electrical plate cover ont he X-Axis. I also mounted another electrical plate cover to the laser housing sled on the Y-axis to provide it a flat platform as well.

Step 5: Finishing the Stand

Once you have all of the drives mounted, the final step is to attach the X & Z axis to the Y axis. You want to mount the X axis perpendicular to the Y axis( looks like an “L” shape) and adjust them so that the Z axis is aligned over the Y axis. Scrub through each axis to make sure none of them are overshooting or running into each other. After you have the alignment set, screw everything together. I ended up using an L Bracket, but you may be fine just screwing one case directly into the other case.

Step 6: Connecting the Electronics

To get everything wired up so that it works, we need 5 components:

  • 1 x Arduino
  • 3 x Easy Stepper Motor Driver
  • 1 x PC Power Supply

You’ll also need various wires and maybe some soldering equipment to connect everything together. To see how everything connects, it’s best to download this Fritzing schematic (to use with the Fritzing software). It will show you the ports and pins that everything runs to. Along with that, I’ll try to explain everything here as well. Ok, here we go.

The Arduino Uno is the device that will be controlling everything. It is essentially the “brains” of the device. But by itself, it has issues controlling the stepper motors directly. To resolve all Arduino/Stepper motor issues, we’ll need a “Stepper Motor Driver” for each motor (in this case, we’ll need 3). Use the reference images above to wire up the stepper motor drivers to the motors, the Arduino, and the power supply (which will cover later in this step).

After you have the motors connected to the stepper motor drivers, and the stepper motor drivers connected to the Arduino, all we need now is power. Since this project focuses on scavenging most of the parts from old computers, I will be using and old computer Power Supply Unit (PSU). PSU’s have a mess of different colored wires coming out of it and you can use the color chart to the left to determine what the voltage is for each wire.

On all ATX power supplies, there is a green wire that senses when the PSU is plugged into a motherboard, and if this green wire is not plugged in or connected to anything, the PSU will not turn on. So to bypass this, we can use a small piece of wire as a jumper to connect the green wire to a black ground wire (use photo above as reference). Then to power the stepper motor drivers, you will also need to run a wire from a 5v (red) wire and one from a GND (black) wire. These wires are the ones that should be split out and connected to all 3 of the stepper motor driver boards. Again, you can use the photo below as reference.

Step 7: Hacking the 3D Pen

The 3D Pen has 3 (or more) controllers. The primary controls are thickness, forward extrustion, and backward extrusion. It would be nice to automatically control all of them, but the one that is almost a necessity to control is the forward extrusion. This button pushes the filament out of the hot-end, an action which is required for 3D printing.

What we need to do is create a circuit connected to the forward extrusion button that will allow us to use an Arduino to simulate pressing it. So let’s start taking apart the 3D pen to get at the button. Here are the basic steps to dissasembling the Pen:

  • Unscrew and remove the back plate
  • Disconnect the wiring to the top power jack/motor insert.
  • Unscrew top section and pry off the power jack/motor insert.
  • Remove the slide button by pushing it down away from the pen.
  • Remove the metal side button bar.
  • Unscrew the filament tube holder.
  • Lift up on top end of filament tube and main board and pull out.
  • Pry off hot end/nozzle.

Once that’s done, you should see the forward extrusion button. It should have 4 leads coming out of it, one at each corner. We want to test to see which combination of leads trigger the motor. Before we can do this, however, we need to reconnect some parts: the hot end/nozle and the wiring to the power jack/motor insert. With those two items reconnected, you can power up the 3D pen. Once the heating element light is green, take a 1k Ohm resistor and touch one end to one of the leads, and the other end to another lead. Test each lead until you hear the extrusion motor start to spin. Once you’ve found a correct combination of button leads, the next step is to solder a wire to each lead. The leads are very tiny, so be careful not to use too much solder and end up getting solder all over components that you shouldn’t.

Test The LeadsSolder Wire To The Leads

Before re-assembing everything back together, touch the wires together using a 1k Ohm resistor to make sure that everything works and is soldered properly. And to make sure the connections don’t come unsoldered, a good trick is to put a dab of hot glue on each connection to hold them into place. And once you have the wires secured, you can start re-assembling the device. Using a drill or a knife, you can bore a small hole into the back panel of the device to make a place for the wires to run through.

Hot Glue The ConnectionsReassemble

Step 8: Creating a Switching Circuit

DOWNLOAD FRITZING DIAGRAM FOR SWITCH

The next step is to make a circuit that we can control from an Arduino that simulates switching the forward extrusion button on and off. The secret to make the circuit work is called a transistor. It’s purpose is to amplify and switch electronic signals, so it’s switching ability will be perfect for what we need.

All transistors have 3 pins: a collector, a base, and an emitter. The order of those pins, however, will depend on what type of transistor it is, so be sure to google your “transistor number pin layout” so that you know which pin is which. What you want to do is connect one of the button wires to the collector pin on your transistor and one to the emitter pin. At this point, it doesn’t really matter which wire goes to each pin. After that, we want to connect the Arduino to the transistor. First connect a ground wire to the collector pin on your transistor, and connect pin 12 on the Arduino to the base pin. This is what will do the switching. You will want to connect a resistor between pin 12 and the base pin, but the resistor value depends on the type of 3D printing pen you have, but in the next section, I’ll show you how to determine what resistor value you need.

To determine what value resistor works best for your 3D pen and transistor, here are a few steps you can take. Start by connecting the pen to the emitter and collector pins on the transistor. Connect an Arduino ground pin to the collector pin on the transistor. At this point, go ahead and power up your 3D pen to start testing, but leave your Arduino powered off completely. Once your 3D pen is powered up and ready to go, take a wire and connect the base pin of the resistor to a ground pin on the Arduino. If this causes the switch on the 3D pen to turn on, that’s fine, it just means the resistance is too low. So now we need to start adding resistors. Start with a 1K ohm resistor and connect it from the Arduino ground to the transistor base pin. If the switch still turns on, try a 10k ohm resistor. If it continues to turn on, keep adding higher and higher resistors (ex. a 100k ohm resistor) until the switch no longer turns on.

Now we know what value of resistance will keep the switch off when it’s connected to ground. The next step is to determine what value will turn it back on when current is applied. So take the resistor that is running from the base pin to the Arduino ground wire and connect it to the Arduino 5v pin and power on the Arduino. If the switch does not turn on, that means the resistance is too high, so we need to start stepping down the resistor values. I jumped down at a 47kohm resistor, but it still didn’t switch on. After that, I tried a 22k Ohm resistor and it worked! So 22k ohm is a value that provides enough resistance to prevent ground from switching the transistor on, but will still allow a current to switch it on.

Step 9: How to Determine Which Resistor Will Work for Your 3D Pen

To determine what value resistor works best for your 3D pen and transistor, here are a few steps you can take. Start by connecting the pen to the emitter and collector pins on the transistor. Connect an Arduino ground pin to the collector pin on the transistor. At this point, go ahead and power up your 3D pen to start testing, but leave your Arduino powered off completely. Once your 3D pen is powered up and ready to go, take a wire and connect the base pin of the resistor to a ground pin on the Arduino. If this causes the switch on the 3D pen to turn on, that’s fine, it just means the resistance is too low. So now we need to start adding resistors. Start with a 1K ohm resistor and connect it from the Arduino ground to the transistor base pin. If the switch still turns on, try a 10k ohm resistor. If it continues to turn on, keep adding higher and higher resistors (ex. a 100k ohm resistor) until the switch no longer turns on.

Now we know what value of resistance will keep the switch off when it’s connected to ground. The next step is to determine what value will turn it back on when current is applied. So take the resistor that is running from the base pin to the Arduino ground wire and connect it to the Arduino 5v pin and power on the Arduino. If the switch does not turn on, that means the resistance is too high, so we need to start stepping down the resistor values. I jumped down at a 47kohm resistor, but it still didn’t switch on. After that, I tried a 22k Ohm resistor and it worked! So 22k ohm is a value that provides enough resistance to prevent ground from switching the transistor on, but will still allow a current to switch it on.

Step 10: Mounting the 3D Pen

With the switching circuit wired up and functional, we now need to start putting everything together. You want to mount the 3D pen to the Z-axis of the CNC machine. I simply used clothes pins and hot glue to secure it into place. You want to make sure it doesn’t wobble around.

Step 11: The Software

At this point, all the hardware should be completed. The only thing that’s left to do now is to install the software that will make it run. The CNC machine runs off of a programming language called G-Code. It essentially tells the X, Y, and Z axis which specific coordinates it needs to go to. By itself, Arduino has a difficult time interpreting G-Code, so we will need to install a G-Code interpreter program called Grbl. Here are the steps you need to take to install Grbl on your Arudion (Uno).

  • Download the Grbl Hex file for your specific version of Arduino (I used version 0.8c for my Atmega328 Arduino Uno)
  • Download the XLoader software.
  • Connect your Arduino to your PC.
  • Using the Xloader software, select the Grbl Hex file you downloaded, select your Arduino from the dropdown menu, and select the COM port that the Arduino is connected to.
  • Click “Upload” to upload the Grbl software to your Arduino.

Now that the Arduino is prepped and ready to go, we need to install some software that lets us control the CNC machine. A great easy to use program is called Grbl Controller. After downloading and installing it, you can open it up, select your Arduino port and click “Open” to connect.

Make sure your power supply and 3D pen are power up and that your Arduino is plugged into your computer. Now you can use the arrows on the lower right to jog through the motors. Make sure that the dropdown box in the lower right corner is set to 1 instead of 10. If any of the platforms are running backwards, you can go to Tools > Options and then invert the axis for the backwards motor. To control the 3D pen, toggle the “spindle on” checkbox. Whenever you do that, the 3D Pen motor should turn on and off. And if you look at the command screen on the left of the software, it shows you that “M3” is the code that turns the switch on, and “M5” is the code that turns it off. We will need to remember this for the next step.

Step 12: Creating a Test Image

I will be using MakerCam.com to create a test image for our machine. You are free to use 3D printing software such as Slic3r, but the code will have to be heavily edited in order to make it work for our machine. In MakerCam, you can create a test image by following these steps:

  • Insert a new basic image by going to “Insert” and selecting a shape.
  • Using the Arrow tool (from top left toolbar), select your entire image.
  • Move it to the bottom leftcorner of the grid.
  • You can pan around the grid by selecting the Hand tool from the toolbar. Use it to drag the image back to the center of the screen.
  • From the upper right corner of the page, change the measurements to cm.
  • Using the scale option from “Edit > Scaled Selected”, scale the object down and move it so that it fits within the single square that is in the corner of the grid (use the picture to the left as reference).
  • With the image still selected, go to “Cam > Follow Path Operations” and use these values as a test basis:
    • The “target depth” will be the height of your object. I used -1.
    • “Safety Height” and “Stock Surface” are set to 0.
    • “Step Down” will be the height each layer of filament will be. For starters, I set mine to 0.2, but if you want thinner layering, you can make it lower.
    • “Feed Rate” is the speed at which the print goes. Setting it to 50 worked will with my 3D pen at it’s lowest extrusion speed.
    • The “Plunge Rate” is the speed at which the nozzle moves up and down. This doesn’t really matter, but I set mine to 50.
  • Then go to “Cam > Calculate Selected” to calculate the path.
  • Lastly, go to “Cam > Export Gcode” to save the G-Code of your image.

Before we can run this Gcode through GRBL Controller, we need to make a few edits to ensure that it works with our 3D printer. So open up the file that you saved from makercam.com in a text editor such as Notepad. You should see a bunch of different lines of letters and numbers. These are the GCode coordinates that are sent to the machine that tells it what to do. We want to add “M3” and “M5” commands to tell the filament extruder when to extrude and when to stop extruding. Here’s what you need to do:

  • Below “G17” is the first “M3” command. Since this starts the extruder way too early (at the beginning of the script), we want to move it until after the nozzle has moved to its starting position, which is immediate after the first “F50” (feedrate 50) command on the next line.
  • Throughout the rest of the code, everytime you see an “F50” command, place an “M3” command immediately after it on the next line.
  • Next, look for the first Z0 command. Z0, moves the nozzle to 0mm, which we do not want. That would push it down to the base platform and ruin our print. Instead of moving the Z axis at this point, we want to just stop the extrusion motor. So everytime you see a Z0 command, delete it and replace it with an M5 command.
  • At the very end of the script, after the final M5 command, we want to move the Z axis so that it is above our final print. Since I set my print height to be -1, I’m going to set the final Z axis height to be -2 (G0 Z-2)
  • After setting the final Z height, a helpful thing to do would be to move the X and Y axis back to their original starting positions. So right below the Z axis movement, put “G0 X0 Y0” to move them.

Save your code and then your ready to print

M3 & M5 ExampleEnding Code Example

Step 13: Making Your First Print

This last part is easy. Take the 3D Pen on the Z-axis and move it all the way down so that it barely touches the Y-axis platform. Make sure everything is turned on and heated up, and make sure your Arduino is connected to your computer. Open up the GRBL Controller software and open up the link to your Arduino. Click “Choose File” and choose the file that you just edited. You should see the image of that file show up on the right. Then just click “Begin”. If everything works well, the axis should start moving, and the the 3D pen should begin to print!

Now feel free to mess around with your own images and designs to see what this machine is capable of!

Robotics Contest

First Prize in the
Robotics Contest

Tech Contest

Second Prize in the
Tech Contest