Styra en RepStrap bearbetning (17 / 25 steg)
Steg 17: Extruder temp kontroll och kod
För att få en användbar ström av smält plast ur extruder, måste tempurature vara tillräckligt varm för att smälta plast, men inte så varmt att det börjar att röka och bränna. Du vill också endast köra lager material och temp ligger inom detta intervall.
Arduino kod (detta är bara en modifed version av några RepRap kod). Detta kan du ställa in ett temperaturområde och sedan körs endast extruder motorn när värmaren inom spänna.
Som visas nedan, används den rå tempurate behandlingen. Faktiska temp kan också användas.
Arduino kod / / /
Detta exempel håller temp ovanför smältningen pekar av HDPE- men inte för varmt
inaktiverar stepper om temp är för lågt [OBS: använder EasyDriver styrelse, pull aktiverar pin HIGH att stänga av
stänga av värmen om för varmt
vända värmen vägen upp om för kallt
slå värmen till medium om
Webbsida http://dev.www.reprap.org/bin/view/Main/Temperature_Sensor_1_1
Termistor uppslagstabell för RepRap temperatur Sensor brädor (http://make.rrrf.org/ts)
Med createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
./createTemperatureLookup.py--r0 = 100000--t0 = 25--r1 = 0--r2 = 4700--beta = 4066--max-adc = 1023
#define THERMISTOR_PIN 0
#define heatPin 11 //heat nivå
#define EstepPin 5 //set extruder stepper till pin12
#define EdirPin 6 //set steg riktningen till stepper pin11
#define EenablePin 12 / /
byte lowTemp = 245; >>> om under lowTemp sedan inaktiveras extruder - degF
byte minTemp = 245; >>>> Ställa in MIN TEMP här >>>>>>-degF
byte maxTemp = 250; >>>> Ange MAX TEMP här >>>>>>-degF
byte maxRaw = 125;
byte minRaw = 130;
byte cool = 0; värmare off
byte varm = 255; medelhög värme
byte heta = 255; värma upp ganska högt >> max skulle vara 255, men jag vill inte bränna ut värmaren
R0: 100000
t0: 25
R1: 0
R2: 4700
Beta: 4066
Max adc: 1023
#define NUMTEMPS 20
korta temptable [NUMTEMPS] [2] = {
{1, 841},
{54, 255},
{107, 209},
{160, 184},
{213, 166},
{266, 153},
{319, 142},
{372, 132},
{425, 124},
{478, 116},
{531, 108},
{584, 101},
{637, 93},
{690, 86},
{743, 78},
{796, 70},
{849, 61},
{902, 50},
{955, 34},
{1008, 3}
};
void setup()
{
Serial.BEGIN(9600);
Serial.println ("Start temperatur exerciser.");
pinMode (heatPin, produktionen);
pinMode (EstepPin, OUTPUT);
pinMode (EdirPin, OUTPUT);
pinMode (EenablePin, OUTPUT);
}
void loop()
{
int rawvalue = analogRead(THERMISTOR_PIN);
int celsius = read_temp();
int fahrenheit = (((celsius * 9) / 5) + 32);
Serial.Print ("aktuell temp:");
Serial.Print(Celsius);
Serial.Print ("C /");
Serial.Print(Fahrenheit);
Serial.println("F");
Serial.Print ("Raw värde:");
Serial.println(RawValue);
Serial.println("");
//
kontroll extruder värmaren och stepper motor baserat på temperaturen
//
om (rawvalue > = minRaw) {//if temp för låg - inaktivera stepper
analogWrite (heatPin, heta); om temp alltför låg-turn värmen till max
digitalWrite(EenablePin,HIGH); om temp alltför låg - Stäng av genom
//??? Stoppa allt om temp för låg???
}
om ((fahrenheit > = lowTemp) & & (fahrenheit < = minTemp)) {/ / om temp under sortiment-LED långsam blink
analogWrite (heatPin, heta); om temp under intervall - vända extruder upp till max
digitalWrite(EenablePin,LOW); om varma aktivera nog sedan stepper
// }
om ((fahrenheit > = minTemp) & & (fahrenheit < = maxTemp)) {//if temp i intervallet - LED på
analogWrite (heatPin, varma); om temp i intervallet - värma extrudern
digitalWrite(EenablePin,LOW); om varma aktivera nog sedan stepper
// }
om ((rawvalue < = minRaw)) {//if temp i intervallet - LED på
analogWrite (heatPin, varma); om temp i intervallet - värma extrudern
digitalWrite(EenablePin,LOW); om varma aktivera nog sedan stepper
}
om (rawvalue < = maxRaw) {//if temp ovanför rad -LED snabb blinkning
analogWrite (heatPin, cool); om temp för hög - inaktivera värmare
digitalWrite(EenablePin,LOW); om varma aktivera nog sedan stepper
}
köra extruder stegmotor
digitalWrite(EdirPin,LOW);
digitalWrite(EstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(EstepPin,LOW);
Delay(15);
Delay(1000);
}
int read_temp()
{
int rawtemp = analogRead(THERMISTOR_PIN);
int current_celsius = 0;
byte i.
för (jag = 1; jag om (temptable [i] [0] > rawtemp)
{
int realtemp = temptable [i-1] [1] + (rawtemp - temptable[i-1][0]) * (temptable [i] [1] - temptable[i-1][1]) / (temptable [i] [0] - temptable[i-1][0]);
om (realtemp > 255)
Realtemp = 255;
current_celsius = realtemp;
bryta;
}
}
Overflow: Vi bara klämma till 0 grader celsius
om (jag == NUMTEMPS)
current_celsius = 0;
återvända current_celsius;
}