DIY Filament Extruder

66,890

614

84

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

1 Person Made This Project!

Recommendations

  • Plastic Contest

    Plastic Contest
  • The 1000th Contest

    The 1000th Contest
  • Battery Powered Contest

    Battery Powered Contest

84 Discussions

0
Procot
Procot

4 years ago

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

0
almuhanad207
almuhanad207

Reply 3 months 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 4 years ago

you mean the page pdf or the arduino code?

0
SaberS7
SaberS7

Reply 2 years ago

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

Thanks alot

0
Procot
Procot

Reply 4 years ago

page pdf man :/
Thanks!

0
SamuelG16
SamuelG16

Reply 4 years ago

you need a prem-membership to do that.

0
Procot
Procot

Reply 4 years ago

:(

0
SamuelG16
SamuelG16

Reply 4 years ago

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

0
Procot
Procot

Reply 4 years ago

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

0
SaberS7
SaberS7

Reply 2 years ago

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

Thanks alot

0
HeidiE27
HeidiE27

Question 2 years ago

Hello, would you mind leaving the instructions?

0
almuhanad207
almuhanad207

Answer 3 months 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 3 months 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

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

0
SaberS7
SaberS7

Reply 2 years ago

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

Thanks alot

0
SaberS7
SaberS7

2 years ago

Amazing work and thanks alot

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

Thanks alot

0
filou63430
filou63430

2 years ago

hello or is connect resistance thank you in advance

0
ahooper
ahooper

3 years ago

I seem to be having an issue with the code, not exactly sure what it is but the temperature seems to be really unstable. I checked the thermistor etc and they are all good. Lower temperatures there seem to be no issues however 100 deg C + I get huge spikes in the temperature, where the sensor is reporting correctly but for instance if the analogread returns 1012 I can get a a temperature reported of 230 to 260 odd degrees.

In addition if I have run the temperature at 240 degrees I get spikes reporting of 300 degrees reported. then if i turn the temperature back down to say 40 degrees every 10 to 20 cycles the pin controlling the heater triggers resulting in the head not cooling back down.

Any ideas?

0
slenderguy79
slenderguy79

4 years ago

Another question is LCD wiring. According to a schematics, you use just 4 wires to connect LCD. I have JHD 162A 16x2 LCD and it usually requires much more wires to connect.