100€ EWaste 3D Printer
This project was developed for 'Electrónica Creativa' (Creative Electronics), a BEng Electronic Engineering 4th year module at the University of Malaga, School of Telecommunication (http://etsit.uma.es/). It was created by Sergio López Vioque and Raúl Fernández Fernández and inspired by some projects from the web.
https://www.instructables.com/eWaste-60-3DPrinter/
https://www.instructables.com/Curiosity-120-eWaste-Educational-3D-Printer/#intro
Additionally, we also used a YouTube channel for configuring certain aspects of the printer.
The goal is to build a 3D printer with limited resources using recycled materials. At first, we thought it would be easier than it actually was. This project involves many details and aspects to consider, and we didn’t expect to encounter so many issues, which we were ultimately able to resolve and will discuss in the following sections. This is a project to enjoy the process and learn a lot if you’re passionate about 3D printing, not to end up with a printer identical to a commercial one. However, if you manage to complete a similar project, you’ll be capable of building any printer.
Supplies
One of the most challenging aspects was understanding and becoming familiar with all the components the project requires. To help with this, we will describe them clearly here. However, these are not fixed; you can use whichever components you prefer. We recycled as much as possible, but some parts had to be purchased. Additionally, since this was a university project, the UMA provided us with some materials, such as wires, Dupont connectors, etc. In total, the project's cost can amount to approximately €120.
Recycled Materials:
- 2 CD/DVD Drives
- 1 Floppy Drive
- 12V Power Supply
From these materials, we will extract the motors we need, the printer's structure, and the power supply to power the motors. We are aware that obtaining a floppy drive can be challenging nowadays, so it could be replaced with another motor from a CD/DVD drive, which could even result in a larger print bed.
Materials That Need to Be Purchased:
- 1 Arduino Mega
- 1 RAMPS 1.4 Controller Board
- 1 Hotend
- 1 Extruder
- 1 NEMA 17 Motor with 42 Ncm Torque
We’ll provide the links to where we purchased these components, but you can choose other options if you prefer.
Hotend: https://www.amazon.es/dp/B07SJQRKGC?ref=ppx_yo2ov_dt_b_fed_asin_title
Nema: https://www.amazon.es/dp/B0B38GX54H?ref=ppx_yo2ov_dt_b_fed_asin_title
Extrusor: https://www.amazon.es/dp/B09H6T3NNT?ref=ppx_yo2ov_dt_b_fed_asin_title
RAMPS and Arduino MEGA: https://www.amazon.es/dp/B07KVYR3P4?ref=ppx_yo2ov_dt_b_fed_asin_title
We recommend, as it was one of the major mistakes we made, that you purchase an LCD if possible, which costs around €11 and is included in some 3D printer kits. In fact, there are more comprehensive kits than the one we used, but they are also more expensive. We opted for the essentials, but if you buy everything, the results will be better, and some steps will be easier.
Finally, a set of tools is required to assemble the structure and prepare the motors. Here, we’ll describe the tools we used and provide some alternatives in case you want to build the frame using different materials, etc.
Required Tools:
- Allen wrenches
- Screwdrivers
- Angle grinder for cutting
- Spray paint
- Metal drilling tool
- Dupont connector
- Wires
- Soldering iron, flux, and solder
- Adhesive product (a hot glue gun is highly recommended, although we didn’t use one)
- 4mm screws, nuts, and washers for the motors
- 2mm screws, nuts, and washers for the controller
- Multimeter
To attach the motor housings to the printer frame, we recommend using screws, though you can use another method if preferred. The advantage of using nuts and screws is that you can adjust the height of the housings and make other adjustments. Similarly, you can use screws to attach the floppy drive to the structure, depending on your tools and capabilities.
CD/DVD and Floppy
To obtain the stepper motors we need, we have to dismantle the CD/DVD drives and the floppy drive. For this, you need to gradually take them apart until you are left with the structure shown in the figure. It can be a bit tricky to disassemble them, and some parts of the drives may even break, but that is irrelevant since we will only be using the bodies shown in the image.
For the floppy drive, it is necessary to cut the metal structure to make use of the shaft it comes with, as we need a structure that can move up and down. The area to be cut is shown in the figure.
Be patient during this step and don’t get frustrated; the components will eventually come apart piece by piece. As a tip, remove all the screws you find first before attempting to take anything out. It’s also important to avoid damaging or bending the outer casing of the CD/DVD drives if you plan to use it. The floppy drive is easier to disassemble than the CD/DVD drives. While we can’t guarantee all CD/DVD drives are identical (we imagine they’re not), here are the steps we followed:
- Remove the screws from the top cover and take off the cover.
- Once open, start removing the screws holding various components in place and remove them one by one (ensure you disconnect any cables or connections between boards before removing them).
- Once everything is removed and the required frame is exposed (there are some screws that are part of the frame and shouldn’t be removed), use a screwdriver or a strong object to pry apart the frame from the bottom cover (this is the most challenging step).
- Once you’ve managed to extract the frame, it’s very easy to work with, and you’ll end up with something resembling the image.
For the floppy drive, the process is similar but much simpler, as there’s no need to force anything. Just keep removing pieces and slots until you’re left with the frame shown in the image. Later, this frame will need to be cut to retain only the part we need.
Motors and Power Supply
Motors
Once we have everything disassembled, we need to wire the motors. The 4-step stepper motors work with 2 coils. Therefore, the motor has 4 pins, 2 for each coil. We need to identify which pins belong to each coil. Since this is old electronics, finding the datasheet for the motors can be a difficult task. To do this, it can be checked manually. Using a multimeter, we need to measure the resistance between some of the pin pairs. If the resistance is very small, that pair of pins corresponds to one coil, and the other pair to the other coil.
This is done for both the floppy drive and the CD/DVD drives. Once the wires are soldered and the coils identified, we need to determine the order in which they will be connected, as connecting them in the wrong order to the RAMPS board will not work correctly.
The order would be black, orange, blue, red. Once we have this order, there are two ways to connect it to the RAMPS board: in that order or reversed, which changes the motor's rotation direction. This can also be changed in the Marlin software.
Once we have the wires soldered, we need to attach Dupont connectors to connect the motors to the RAMPS board. The image does not match the mentioned colors because they were changed later, but the correct order is the one already mentioned.
It’s important to ensure that the connectors and soldering are well done therwise, it could cause issues and lead to improper functioning. We used rigid wire, but we don’t recommend it at all. While rigid wire is cheaper, in a project like this, where the wires will be bent frequently and the female-to-male pin connections are not very strong, the rigid wire can stay under tension and cause the pins to come loose. Therefore, if your budget allows, use flexible wire. It’s a bit more expensive, but the result will be much better.
Power Supply
We also need to prepare the 12V power supply. In our case, we will use one repurposed from a PC, but any 12V power supply can be used. It is important to note that the printer will consume about 2 or 3 A, so if the power supply cannot provide enough current, it will not work. If you want to use a PC power supply, there are a few things to consider.
All the wires supply a voltage, which is usually the same across all power supplies, except for one green wire. This green wire is used to control the power supply’s activation, which is normally managed by the PC motherboard. To use it, we need to bridge this green wire to ground, as shown in the figure, so that the power supply stays on. Once this is done, simply connect the power supply to the mains and turn it on. Since we need a 12V supply, we will use the yellow wire and a black wire for ground. There are several of these, and you can choose any of them.
Software Marlin
Marlin is open-source firmware designed to control 3D printers with great flexibility for different components. For our project, we will use the RAMPS 1.4 board, and we will provide the code for you to download. We used version 2.0.9.7, which at the time of this project was the most updated and stable version. We do not recommend using a beta version of Marlin, as that is for experienced users. If this is your first time with this software, stick to a stable and tested version.
This code requires some configurations to work correctly. We have modified the most basic elements, but you can review the code and customize it to suit your needs.
As a development environment, we used Arduino IDE 2.2.1. During our research, we found that some Marlin versions only work with specific Arduino IDE versions, but the versions we used work perfectly together. Below, we provide links for you to download them:
- Marlin Firmware 2.0.9.7: https://marlinfw.org/meta/download/
- Arduino IDE 2.2.1: https://www.filehorse.com/es/descargar-arduino/82588/descargar/
Make sure to follow the installation steps carefully to avoid issues during setup.
Some configurations need to be made to this code to make it work properly. We have modified the most basic elements, but you can take a look at the code and modify it as you wish.
Specifically, we have modified the two basic necessary elements: the bed size and the motor movement. To do this, we need to modify the Configuration.h file in Marlin.
For the motor movement, we need to modify line 1087:
#define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 170, 91.425}
The values correspond to the X, Y, Z motors, and the extruder. To obtain that value for your motors, you need to calculate how many steps per millimeter each motor provides. We will see later how to do this.
Additionally, we need to set the bed size. In our case, the bed will be 4cm x 4cm x 1cm. The size of the print bed is determined by the range of movement of our motors. However, when printing, not all of this range may be effective. We will explain this in more detail later. The relevant lines start from line 1577, where we will find these lines that need to be modified:
// The size of the printable area
#define X_BED_SIZE 40
#define Y_BED_SIZE 40
// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 10
If your motors have a longer range, the bed size can be larger. These values can also be adjusted later when testing the motors to see how far they can travel. For easier bed configuration, it is recommended to have a separate module with an LCD that connects to the RAMPS, allowing you to level the bed and configure other aspects. However, these elements still need to be modified in the code. Once this is done, we upload it to the Arduino MEGA.
Connections
If you need more information about the board or any other RepRap component, you can find it at the following link:
- RepRap Wiki RAMPS 1.4 Link: https://reprap.org/wiki/RAMPS_1.4
To connect the motors, we refer to the images in the RAMPS board datasheet. To connect the motors, we need to place the jumpers on the 6 pins located underneath the drivers. This is necessary for them to function correctly. We will share a problem we encountered. Initially, identifying the coils and arranging the wires in the correct order might be a bit tricky, even if it seems simple. This is because the information provided is not always consistent—what the datasheet calls the coils might not match the naming convention on the RAMPS board. On the RAMPS board, the pins for the coils are labeled as 2B, 2A, 1A, 1B. This means pins 2B and 2A refer to one coil, while 1A and 1B refer to the other. In some datasheets, the coils are referred to differently, which can make proper connections confusing.
We also need to connect the drivers, which are the green boards with heat sinks that control the motors. Additionally, we need to connect the rest of the components: the NEMA17, the hotend temperature sensor, the hotend, and its fan. We also need to connect the 12V power supply to the pins beneath the green terminal block as indicated in the image. For the initial testing, it is not necessary to connect all the components. For the next step, it is not necessary to connect everything. In fact, we will connect everything only when the printer's frame is complete, all components are assembled, and the motors have been tested.
Downloads
Motors Tests
To test the motors, we will use a program called Pronterface, which we will provide for you to download.
- Pronterface link: https://www.pronterface.com/
This program will be very useful for us; it will allow us to test the motors individually, as well as load print files and monitor the progress of the print. This enables us to verify that everything is functioning correctly.When we connect the board, we select the port where the Arduino MEGA with the Marlin firmware has been loaded and click on connect. If everything is working correctly and there are no issues with the port, the connection should be established, allowing us to interact with the elements on the left side of the interface.
On the other hand, we need to limit the current of the motors to prevent overheating. To do this, we must connect the multimeter in series with the power supply and the board, as shown in the figure, and measure the current consumed by each motor individually. For the CD/DVD motors, we set the current to approximately 300mA, and for the floppy motor, around 200mA, as it is smaller and requires less force and movement during printing.
Your motors may support slightly higher current, or if the current is set too low, they may move very slowly and not operate smoothly. Thus, you need to test and make adjustments until the motors function properly. To modify the current, each motor driver has a potentiometer that can be adjusted with a small screwdriver. Carefully turn the potentiometer, avoiding abrupt movements to prevent motor damage, and monitor the current consumption for each motor.
Motors should be connected individually during this process to measure the consumption of only the specific motor being adjusted. The NEMA 17 motor generally does not require current limiting, as it can handle higher currents, but it is recommended to measure it as well for verification.
Motor Configuration
To calibrate the motors, we need to calculate how many steps per millimeter each motor must take. For this, in the line we mentioned earlier, we will do the following:
#define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 170, 91.425}
These values correspond to [X axis, Y axis, Z axis, extruder]. To determine the correct value, we need to perform some calculations.
To start with an approximation and test the motors, we will configure them to perform a full 360º rotation.
Once configured, using the Pronterface program, we will press the button to move 1mm (the one with a 1 in the image) and measure how far it moves. If 1mm is too small and difficult to measure, we can move 10mm for easier measurement. Once measured, we will use a simple rule of three, where we compare the steps per mm we added to the Marlin configuration, the 10mm the motor should have moved according to Pronterface, and the actual distance it traveled. With this, we will calculate the correct steps per mm to add to the configuration.
For the NEMA 17, we follow the same procedure, but with the extruder already attached. This allows us to extrude a small amount of plastic and verify if it outputs the specified amount. This step is crucial to ensure that the motors move the correct distance and that subsequent movements are accurate.
Printer Structure
Once we have tested the hardware, we need to prepare the structure of the printer. In this step, we will show you how we did it, but you can design and build it however you like.
For the structure, we will use the bodies of CD/DVD drives. One of the bodies will serve as the base, and the other as the wall, forming an "L" shape. The printer will be mounted on a 3D-printed base. To join these bodies, we will use the rails cut from where the drives were screwed into the PC case. Before joining these two bodies, we need to drill holes for the screws that will secure the bodies of the E and Y axes and paint all the pieces. We also need to drill holes at the back to screw in the Arduino Mega and the RAMPS. Once everything is ready, we assemble everything.
The next step is to install the bed and the floppy with the hotend. There are several options for the bed, but we chose the most economical one. We used a thin glass from a photo frame and a small 3D-printed piece to give it some height. To attach it, we used cold welding for metals and plastic, but hot glue can also be used.
For the floppy, we followed a similar approach. We attached the floppy to the movable structure of the X-axis, ensuring it was as centered as possible. To that, we added a piece of aluminum cut from the PC case and mounted the hotend there, as shown in the figures. There isn’t a single way to do this; it can be done in more complex ways, but this is what we found to work.
To adjust the bodies of the axes, we used the heights of the nuts. You need to ensure the holes are well-aligned and that the axes are level. This step is one of the most challenging and much more critical than we initially thought. Eighty percent of the printer's functionality depends on this step being done correctly.
This step is VERY important because the axes must be perfectly level; otherwise, the prints will not come out well. In a commercial printer, this adjustment can be made, but in this custom printer, it cannot. Once the axes, the floppy, and the hotend are in place, that is their final position, and no further adjustments can be made. We emphasize that this step is VERY important because the alignment of the structure is crucial for good print results. If the final structure is not correctly assembled, fixing it will be difficult or impossible, so pay close attention and be careful.
For the extruder, we need to attach a commercial extruder (we will include the purchase link) to the Nema motor. To make it easier to attach to the base, we will connect it to the Nema using a 3D-printed piece that allows the extruder to fit into the base.
Once we have all the motors tested, calibrated, and assembled, we can connect everything and start printing.
First Impresion
Once everything is configured and connected, we can start our first prints. With Pronterface, we can control the prints. Before we begin, let's mention some issues we encountered.
The main problem in printing is setting the home position of the bed. With the RAMPS LCD and using endstops, this is very easy, as placing the endstops where you want automatically configures the home. If you don't have either, like in our case, you can look for alternative solutions.
First, in Pronterface, go to settings and adjust the bed size to match yours. Once done, there are two main problems: the home position and the height of the first layer. The home issue would be resolved with an LCD, but without it, we haven't been able to configure it properly. We'll now discuss how to fix it.
The second major issue is the height of the first layer. We’ll address this by adjusting some parameters in the slicer. In our case, we’ll use the Ultimaker Cura 5.9.0, which you can download for free.
- Ultimaker Cura link: https://ultimaker.com/es/software/ultimaker-cura/
In any slicer, you can create custom profiles for non-commercial printers. Once the slicer is set with the correct bed size, we need to modify some more complex aspects.
In the printer settings, we can modify two sections of the Gcode. The Gcode is the code generated by the slicer that dictates the sequence of movements for printing. This code specifies movements, speeds, and positions. All slicer-generated codes include a standard initial and final structure. In the initial structure, two key actions occur: a home command and lowering the hotend to the first layer height.
The line that performs the home command, which is G29, should be removed, as we don’t want it to home in our case. If your home is properly configured, this step is unnecessary.
The other important line looks like this:
G1 Z14.4 F6000
This line lowers the hotend by 14.4 mm. Therefore, we need to adjust this value until it reaches the correct height.
Additionally, you can adjust the layer height and explore other advanced configurations to modify as you see fit.
In this section, we modified a few things to troubleshoot some errors. These modifications were made through testing and observing the printing errors that occurred. The most notable issue was that the printer easily lost steps because the motors have limited power, which is expected. To address this, we added a set of restrictions to lift the hotend during specific movements where we observed step losses. We are sharing our configuration in the attached images.
There is no single way to approach this, and you can adjust the parameters as you prefer in your slicer software.
Once this is ready, load your model into the slicer and generate the G-code file. If there are no issues with slicing, it will generate the G-code file, and you’re all set.
With our file ready, we return to Pronterface, where there are a few steps to complete before starting the print. First, manually position the hotend at the home position, as we could not configure it properly without the LCD and endstops. Once this is done, click Load File and upload your model. After that, click Disconnect, then Connect again, and everything will be ready to start printing.
Conclusions and Tips
This project is very interesting, although it can be a bit frustrating at times.
As advice, especially for the final part, make sure to have the bed as leveled as possible because if the first layer adheres correctly, the rest will likely follow. If you occasionally add a layer of hairspray to the print surface, it will help the pieces stick more easily. The pieces this printer can print are very small, which increases the difficulty of getting a good result, but still, decent results can be achieved.
There will likely be some things we didn’t mention or difficulties you encounter that we didn’t face, and vice versa, but that’s part of these types of projects—learning from the challenges we meet along the way. We encourage you to give it a try because, even though the pieces may not have the best quality in the world, it’s very rewarding when successful prints start to appear. We hope this instructable is helpful, and if you have any questions, feel free to ask us!!
Results
Here we show you some results we achieved with our printer. First, some prints from our testing phase, and then a few once we managed to calibrate it and fix the errors. We hope you like them!