Paso 17: Control de temperatura de extrusor y código
Para obtener una corriente útil de plástico derretido de la extrusora, el tempurature tiene que ser lo suficientemente caliente como para derretir el plástico, pero no tan caliente lo empieza a fumar y quemar. También desea conducir el material común mientras que la temperatura está dentro de esta gama.
Código de Arduino (esto es más que una versión modificada de algun codigo de RepRap). Esto le permite definir un rango de temperatura y luego sólo funciona el motor de la extrusora cuando el calentador dentro de gama.
Como se muestra a continuación, se utiliza la lectura tempurate cruda. También puede utilizar real temp.
Código de Arduino / / /
Este ejemplo mantiene la temperatura por encima del punto de fusión de polietileno de alta densidad - pero no demasiado caliente
paso a paso se apaga si la temperatura es demasiado baja [Nota: uso de EasyDriver, tire activar pin alto para apagar
apaga el fuego si es demasiado caliente
Ponga calor arriba si demasiado frío
Gire el calor al medio si
Página Web http://dev.www.reprap.org/bin/view/Main/Temperature_Sensor_1_1
Tabla de búsqueda de termistor para las placas de Sensor de temperatura de RepRap (http://make.rrrf.org/ts)
Hecho con 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 nivel
#define EstepPin 5 pasos de estirador de //set al pin12
#define EdirPin 6 //set paso hacia pin11 paso a paso
#define EenablePin 12 / /
byte lowTemp = 245; >>> Si a continuación lowTemp luego extrusora está deshabilitado - degF
minTemp bytes = 245; >>>> SET MIN TEMP aquí >>>>>>-degF
maxTemp bytes = 250; >>>> SET MAX TEMP aquí >>>>>>-degF
byte maxRaw = 125;
byte minRaw = 130;
fresco de byte = 0; calentador apagado
caliente de byte = 255; fuego medio
hot byte = 255; calentar bastante alto >> max sería 255, pero no quiero quemar el calentador
R0: 100000
T0: 25
R1: 0
R2: 4700
beta: 4066
máximo adc: 1023
#define NUMTEMPS 20
corta temptable [NUMTEMPS] [2] = {}
841 {1},
255 {54},
209 {107},
184 {160},
{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 ("salida temperatura exercizer.");
pinMode (heatPin, salida);
pinMode (EstepPin, salida);
pinMode (EdirPin, salida);
pinMode (EenablePin, salida);
}
void loop()
{
int rawvalue = analogRead(THERMISTOR_PIN);
int grados celsius = read_temp();
int fahrenheit = (((celsius * 9) / 5) + 32);
Serial.Print ("temperatura actual:");
Serial.Print(Celsius);
Serial.Print ("C /");
Serial.Print(Fahrenheit);
Serial.println("F");
Serial.Print ("valor bruto:");
Serial.println(RawValue);
Serial.println("");
//
control de la calefacción del estirador y motor paso a paso en función de la temperatura
//
Si (rawvalue > = minRaw) {//if temp demasiado baja - desactivar paso a paso
analogWrite (heatPin, caliente); Si temp demasiado baja-a su vez calor al máximo
digitalWrite(EenablePin,HIGH); Si temp demasiado baja - apague el paso a paso
//??? Dejar todo si temp demasiado baja???
}
Si ((f > = lowTemp) & & (fahrenheit < = minTemp)) {/ / si la temperatura por debajo de la gama LED parpadea lentamente
analogWrite (heatPin, caliente); Si la temperatura por debajo del rango - gire a la extrusora hasta máximo
digitalWrite(EenablePin,LOW); Si caliente suficiente girar en paso a paso
// }
Si ((f > = minTemp) & & (fahrenheit < = maxTemp)) {//if temp en gama - LED encendido
analogWrite (heatPin, caliente); Si la temperatura está en gama - calentarse la extrusora
digitalWrite(EenablePin,LOW); Si caliente suficiente girar en paso a paso
// }
Si ((rawvalue < = minRaw)) {//if temp en gama - LED encendido
analogWrite (heatPin, caliente); Si la temperatura está en gama - calentarse la extrusora
digitalWrite(EenablePin,LOW); Si caliente suficiente girar en paso a paso
}
Si (rawvalue < = maxRaw) {temp //if encima de parpadeo rápido de gama -LED
analogWrite (heatPin, frío); Si temp demasiado alta - apague la calefacción
digitalWrite(EenablePin,LOW); Si caliente suficiente girar en paso a paso
}
ejecutar extrusora motor paso a paso
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 me;
para (i = 1; i si (temptable [i] [0] > rawtemp)
{
realtemp int = temptable [i-1] [1] + (rawtemp - temptable[i-1][0]) * (temptable [i] [1] - temptable[i-1][1]) / (temptable [i] [0] - temptable[i-1][0]);
Si (realtemp > 255)
realtemp = 255;
current_celsius = realtemp;
rotura;
}
}
Desbordamiento: Nos sólo fije a 0 grados celsius
Si (i == NUMTEMPS)
current_celsius = 0;
volver current_celsius;
}