Introduction: DIY Filament Extruder
We all know that filament is the most important part of 3d printing... And we also know that these are neither cheap nor easily accessible... So I decided to make my own homemade filament extruder. After some research on internet, I decided to use this simple design which is the core of many commercial filastruders. I prepared a simple CAD model for you to conceptualize the design easily. All these parts are easily found at every DIYer's parts bin. Only serious design I made is the steel barrel body which is made by one of my friends who has a lathe. As can be understood, plastic pellets (or small cut plastic) is loaded from the upper cone and the screw carries them to the front where they are being melt and forced out of a brass nozzle (a natural gas or propane nozzle mainly) to form a filament. According to my calculations system can be driven with a powerful dc gearmotor or a big stepper like the one in the pic (nema23). Even a household drill can drive the system for few hrs... I designed the system to make 1.75mm filament (which is accordance with myRepRap 3D printer) and found nozzles that can do the job. the radius of output filament can be monitored by a sensor for accuracy but I do not think I will need that as long as the shaft is driven at constant speed... As for the heating control, I decided to use the same ceramic 12v heaters and 100k thermistors used in reprap printer extruders (actually there will be more than one on the front end around nozzle). There are simpler and cheaper solutions for heat control, such as constant temp PTC thermostats but as the name implies these are made to keep the heating at a predefined constant temp. Actually I want to make tests for different types of plastics ( including waste plastics such as PE bottles) that is why I decided to have Arduino controlled heater&thermistor combination under PID control because various plastics will need different melting temps...
Parts needed.
- Metal body in which the screw mechanism will work..
- 12mm diameter wood screw...
- 2x cartridge heaters...
- 100K thermistor...
- Gearmotor (I am using scrap hand drill but windshield motor will do better)...
- Arduino of any kind...
- IRLZ44 Mosfet (any powerful logic mosfet will do the job)
- 10K pot...
- 16x2 LCD (optional to monitor heating values)
- some construction skills and some coding...
Don't forget to rate!
I entered this post into the 3D Printer contest, so if you think its awesome, or it helps you , vote for it! :)
Attachments

Participated in the
3D Printing Contest
2 People Made This Project!
- farandesing made it!
- saminazeri made it!
89 Comments
1 year ago
Hi! Where would I find the pellets for such a venture?
Reply 1 year ago
Hi,
Plastic pellets are sold commercially... you can order online too... For small batches I prefer to prepare my own pellets by shredding scrap plastic...
Reply 4 months ago
How do you shred the plastic?
Reply 1 year ago
Do you recommend any specific websites for the pellets? I couldn't find any myself.
1 year ago
Hi, great job! But I wanted to ask, how do you set the temperature? Is it always fixed on a certain value or can it be increased and decreased? I hope someone can answer me! A thousand thanks
6 years ago
I cant download the instructions, someone has it please?? :c
Thanks a lot
Reply 2 years ago
#include <PID_v1.h>
#include <math.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address for a 16x2 line display
#define ThermistorPin 0 //Analog Pin thermistor connected
#define ThresholdPin 1 //Analog pin temp pot connected
#define HeaterPin 9 //digital PWM pin heater connected
double SetPoint, ActualTemp, Output;
//Specify the links and initial tuning parameters
PID myPID(&ActualTemp, &Output, &SetPoint,2,5,1, DIRECT);
//the time we give the sensor to calibrate (10-30 secs according to the datasheet)
int calibrationTime = 10;
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15; // Convert Kelvin to Celcius
//Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
return Temp;
}
void setup() {
pinMode(ThresholdPin, INPUT);
pinMode(HeaterPin, OUTPUT);
Serial.begin(57600);
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear();
//give the sensor some time to calibrate
Serial.print("calibrating sensor ");
lcd.setCursor(0,0);
lcd.print("calibrating....");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);
ActualTemp = double(Thermister(analogRead(ThermistorPin)));
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("THRESHOLD TEMP ");
lcd.setCursor(3,1);
lcd.print(SetPoint);
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
void loop() {
SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);
ActualTemp = double(Thermister(analogRead(ThermistorPin)));
myPID.Compute();
analogWrite(HeaterPin,Output);
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(11,1);
lcd.print(ActualTemp);
lcd.setCursor(3,1);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print(SetPoint);
Serial.print(SetPoint); Serial.print(" ");
Serial.println(ActualTemp); // display
delay(100);
}
Reply 6 years ago
you mean the page pdf or the arduino code?
Reply 4 years ago
Am asking about the completed arduino code ,please !!!
Thanks alot
Reply 6 years ago
page pdf man :/
Thanks!
Reply 6 years ago
you need a prem-membership to do that.
Reply 6 years ago
:(
Reply 6 years ago
all that you realy need is the scematic and cide here.
Reply 6 years ago
sorry man, i did not undestand you.
Thanks for your messages!
Reply 4 years ago
Am asking about the completed arduino code ,please !!!
Thanks alot
Question 4 years ago
Hello, would you mind leaving the instructions?
Answer 2 years ago
#include <PID_v1.h>
#include <math.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address for a 16x2 line display
#define ThermistorPin 0 //Analog Pin thermistor connected
#define ThresholdPin 1 //Analog pin temp pot connected
#define HeaterPin 9 //digital PWM pin heater connected
double SetPoint, ActualTemp, Output;
//Specify the links and initial tuning parameters
PID myPID(&ActualTemp, &Output, &SetPoint,2,5,1, DIRECT);
//the time we give the sensor to calibrate (10-30 secs according to the datasheet)
int calibrationTime = 10;
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15; // Convert Kelvin to Celcius
//Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
return Temp;
}
void setup() {
pinMode(ThresholdPin, INPUT);
pinMode(HeaterPin, OUTPUT);
Serial.begin(57600);
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear();
//give the sensor some time to calibrate
Serial.print("calibrating sensor ");
lcd.setCursor(0,0);
lcd.print("calibrating....");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);
ActualTemp = double(Thermister(analogRead(ThermistorPin)));
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("THRESHOLD TEMP ");
lcd.setCursor(3,1);
lcd.print(SetPoint);
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
void loop() {
SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);
ActualTemp = double(Thermister(analogRead(ThermistorPin)));
myPID.Compute();
analogWrite(HeaterPin,Output);
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(11,1);
lcd.print(ActualTemp);
lcd.setCursor(3,1);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print(SetPoint);
Serial.print(SetPoint); Serial.print(" ");
Serial.println(ActualTemp); // display
delay(100);
}
Question 2 years ago
Hello sir
Now I am trying to make this project, but I have an obstacle. That when the project is running, I get a fairly long temperature movement. Where when the heat reaches 100 degrees C in almost an hour. So that it makes the plastic chunks become imperfect liquid and hamper motor movement. What should I do to overcome this? I hope you see this problem, and are willing to help. thank you
6 years ago
hi,Can you share these"#include <PID_v1.h> #include <math.h>"library files?I can't find it on the Internet.thanks :)
Reply 6 years ago
Hi, math.h is a standard c library... I am sure your Arduino IDE has it...PID library I used is available on Arduino site .. how couldn't you find it?...
link: http://playground.arduino.cc/Code/PIDLibrary