DIY Filament Extruder

76,571

634

89

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! :)

3D Printing Contest

Participated in the
3D Printing Contest

2 People Made This Project!

Recommendations

  • Game Design: Student Design Challenge

    Game Design: Student Design Challenge
  • Big and Small Contest

    Big and Small Contest
  • For the Home Contest

    For the Home Contest

89 Comments

0
silasclough
silasclough

1 year ago

Hi! Where would I find the pellets for such a venture?

0
dhepguler
dhepguler

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

0
silasclough
silasclough

Reply 4 months ago

How do you shred the plastic?

0
silasclough
silasclough

Reply 1 year ago

Do you recommend any specific websites for the pellets? I couldn't find any myself.

0
msandrolini
msandrolini

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

0
Procot
Procot

6 years ago

I cant download the instructions, someone has it please?? :c
Thanks a lot

0
almuhanad207
almuhanad207

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);
}

0
SamuelG16
SamuelG16

Reply 6 years ago

you mean the page pdf or the arduino code?

0
SaberS7
SaberS7

Reply 4 years ago

Am asking about the completed arduino code ,please !!!

Thanks alot

0
Procot
Procot

Reply 6 years ago

page pdf man :/
Thanks!

0
SamuelG16
SamuelG16

Reply 6 years ago

you need a prem-membership to do that.

0
Procot
Procot

Reply 6 years ago

:(

0
SamuelG16
SamuelG16

Reply 6 years ago

all that you realy need is the scematic and cide here.

0
Procot
Procot

Reply 6 years ago

sorry man, i did not undestand you.
Thanks for your messages!

0
SaberS7
SaberS7

Reply 4 years ago

Am asking about the completed arduino code ,please !!!

Thanks alot

0
HeidiE27
HeidiE27

Question 4 years ago

Hello, would you mind leaving the instructions?

0
almuhanad207
almuhanad207

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);
}

0
kartikaaputrii16
kartikaaputrii16

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

0
ZilongW
ZilongW

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 :)

360截图20160511174125062.jpg
0
dhepguler
dhepguler

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