Buenas a todos, estoy intentando construirme un secador de filamento. Para hacere pruebas con el PID tengo preparado este código:
//Control temperatura con PID
#include <PID_v1.h>
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
#define PIN_OUT 5 //pin de salida pwm
//Hardware connections for Arduino Uno:
//VDD to 3.3V DC
//SCL to A5
//SDA to A4
//GND to common ground
// Instancia a la clase
ClosedCube_HDC1080 hdc1080;
double Setpoint, Input, Output;
//Iniciar parametros
double Kp=7.0, Ki=0.1, Kd=0.00;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
unsigned long previousMillis = 0;
const long interval = 2000; //Gr?fica cada 2 sergundos"
void setup(){
Serial.begin(9600);
hdc1080.begin(0x40);
// Por defecto la precisión es de 14-bit para temperatura y humedad
// Cambiar resolución
hdc1080.setResolution(HDC1080_RESOLUTION_8BIT, HDC1080_RESOLUTION_11BIT);
Setpoint = 35;//La temperatura que queremos mantener
myPID.SetMode(AUTOMATIC);
}
void loop(){
unsigned long currentMillis = millis();
delay(2000);
// La lectura de la temperatura o la humedad tarda unos 250 milisegundos
// Leer temperatura y humedad del sensor
double Input = hdc1080.readTemperature();
double humedad = hdc1080.readHumidity();
if (isnan(humedad) || isnan(Input)) {
Serial.println("Fallo al leer hdc1080 sensor!");
return;
}
myPID.Compute();
//Se hace el calculo por el PID
analogWrite(PIN_OUT, Output);
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
Serial.print(Input);// Línea temperatura
Serial.print(",");
Serial.print(36); //linea referencia +1 grado
Serial.print(",");
Serial.print(35); //linea SetPoint
Serial.print(",");
Serial.print(34); //linea referencia -1 grado
Serial.print(",");
Serial.println(Output/5); //PWM/10 para mejor gráfica
Serial.print(",");
}
}
Mis conocimientos de electrónica son muy básicos. El esquema esta basado en cosas que he ido viendo en internet.En una primerar versión no puse el 6N136, pero me llegaba la señal invertida y cuando quería que calentara, enfriaba y viceversa. por eso pense en poner el optoacoplador.
Seguro que esta todo muy mal pero hoy por hoy el principal problema es que el mosfet conduce ( le da corriente al calentador) aunque el arduino este desconectado. A ver si me podeís ayudar con todo un poco. Ah¡ el calentador consume 6A.
Hola,
¿El GND de la fuente de 12V está conectado al mismo "Bus" del GND del U1?
Para ayudar a "depurar" su circuito,
Con Arduino desconectado, indícanos los voltajes en los siguientes puntos:
Hay muchas formas de hacer que eso funcione sin usar el transitor 2n2222.
La mas simple es que en lugar que invierta el optoacoplador pues puedes conectarlo asi.
El pin 6 o colector del 6n136 a 5V.
El pin 5 o Emisor a la R de 2k2 y el otro extremo a GND.
Evista el transitor Q1 y conecta directamente R3 al pin 5.
Ahora veo que tienes un divisor con R3 de 1k y R2 de 100k. Yo quitaría ambos o al menos quitaría R3 de 1K, pero al hacerlo nos queda R2 en paralelo con 2k2 lo que esta de mas de nuevo asi que retiralo.
Entonces el circuito se simplifica asi
No puse el esquema para que cambies de Optoacoplador. Da lo mismo uno u otro siempre que trabajen adecuadamente.
El esquema te lo mostré para que veas como se logra que en el caso de ese esquema si tu pones un 0 el led del PC817 conduce y el fototransitor satura, entonces tienes tensión Vgs para que el IRL540 conduzca.
En el caso anterior el arduino envia un HIGH pero lo hace en el ánodo y el cátodo esta a GND.
Asi que es lo mismo.
Perdonad la tardanza y gracias por vuestros consejos.
Bueno, creo que ya lo tengo, al menos el simulador de proteus no me da errores.
Ha caido un opto y algún mosfet por el camino. No conocia el simulador de proteus¡¡
Os pongo el esquema a ver si veís algo raro.
Tambien he cambiado el código...
Seguro que me dejo alguna cosilla pero en un recipiente de 7,5 litros y con un elemento calefactor de 100W me tarda aproximadamente 1 hora en estabilizar la temperatura a 65ºC. Ya he probado con una bobina de filamento PETG húmeda de hace un año y el resultado ha sido satisfactorio.
Espero mejores tiempos cambiando el elemento calefactor por uno de más potencia además de implementar el código para un encoder y un lcd.
Yo creo que la resistencia serie de 1K al Gate del MOSFET es demasiada alta. Pero dejala si ha funcionado.
En todo caso no tiene mucho sentido el divisor 1k y 10k en el Gate.
La R de 1K o mejor dicho la R serie se pone para evitar situaciones en las que el MOSFET se dañe y no circuile por Gate mas corriente del microcontrolador que la necesaria. Dudo que pase aquí. Suele ocurrir en conmutaciones de circuitos con inductores (bobinas).
Esa es mi única observación.
Los IRL se usan para alimentaciones de micros con 3.3 o 5V. Cuando tienes fuente de 12V un IRF520 funciona igual y es o debiera ser mas barato.
Son comentarios sutiles, no afectan al funcionamiento.