1

Hello Hello I am making a controller of a small cooler (dry ice) PID but Im not sure if I am using the indicated mosfet Im trying with a NPN 222a and my second option is IRFZ44 Which would be the best option? enter image description here

#include <DallasTemperature.h>
#include <OneWire.h>

#define PWM 13   //-------------Aquí definimos las constantes que se van a utilizar en el programa
const int analogin_potA = A0;

//Definiciones componentes 
#define heater1 5   //TIP34c
#define sensor1 A2  //TMP36

// Variables globales
byte man_byte=0;
float Kc=1; //---- Constante proporcional del PID
float Taui=100000; //----- Constante integral del PID
float Taud=0; //----- Constante derivativa del PID
float T=0.5;  //------ Periodo de muestreo de la variable de proceso   // Ts
float Mk=0; //----Manipulación del PID actual
float Mk1=0; //----- Manipulación del PID del tiempo de muestreo anterior 

float E=0; //----- Error actual 
float E1=0;  //----- Error anterior 
float E2=0; //------- Eerror 2 veces atrás del tiempo de muestreo actual
float Ref_Temp=5; //-------- Referencia de la temperatura (°C)
float Temp=0; //----- Variable de proceso (temperatura) 
//---------------- Constantes del PID digital ---------------
float BC1=0;
float BC2=0;
float BC3=0;
//----------------

void setup()   {   
%Serial.begin(9600);  
%Serial.write(Temp);
pinMode(analogin_potA, INPUT);
BC1=Kc*(1+(T/Taui)+(Taud/T));
BC2=Kc*(-1-(2*Taud/T));
BC3=Kc*Taud/T;
}


void loop() {   // Este es la función que se ejecuta cíclicamente dentro del Arduino
Temp = analogRead(analogin_potA);
// Aquí va la calibración del sensor para convertir los volts leidos en °C

//
E = Ref_Temp - Temp;

Mk=Mk1+BC1*E+BC2*E1+BC3*E2; // Esta es la ecuación del PID que calcula la manipulación actual (Mk)

// Aquí estamos limitando el valor máximo y mínimo de la manipulación a 0-255
if (Mk > 255){
Mk=255;}
if (Mk < 0){
Mk=0;}
man_byte=Mk;


analogWrite(PWM, man_byte); //Aquí mandamos la manipulación actual al pin generador de PWM (pin 5 del arduino)

//Aquí recorremos la manipulación actual a la manipulación anterior, el error actual al error anterior y el error 2 veces anterior al error anterior.
Mk1=Mk;
E2=E1;
E1=E;

//Aquí iría la comunicaci+on serial con la computadora para desplegar el valor de la temperatura y leer el valor de la referencia.
Serial.println("Temperatura_1");
    Serial.print(Temp);
    delay(1000);
//

}
2
  • which ever one that works without overheating ... you did not say what best option actually means and your post is not about arduino
    – jsotola
    Nov 26, 2021 at 23:46
  • Is "NPN 222A supposed to be a 2N2222A NPN transistor? If so, the IRFZ44's 60A limit can handle much higher current than the 2N2222's 600mA capability. How much current do you want to drive through your Peltier?
    – Dave X
    Nov 29, 2021 at 14:55

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.