Temperature PID controller – Arduino

PID control

So now we know how to read the original temperature, let us control the heating element with this next planned mounted mountfat. I again mounted a routine circuit and uploaded the next code. This second code already has the PID algorithm created. We read the temperature, count the error, add the pid values, and create a PWM signal in the digital pin D3 that will be applied to MOSFET. I set the desired temperature at 100 degrees and use the LCD to print the set quality and real temperature.

Code for specific PID control
Ok so the code below is a little bigger. But do not worry. It’s very easy. We set a variable set point at 100 degrees for this example. Then we read the actual temperature values ​​of the temperatures as past examples. Then we use 3 constant and calculate PID sum. Depending on the quality, we make a PWM signal at pin D3 and apply it to a MOSFET gate using a BJT driver.

ARDUINO CODE

/* Max6675 Module ==> Arduino * CS ==> D10 * SO ==> D12 * SCK ==> D13 * Vcc ==> Vcc (5v) * Gnd ==> Gnd */ //LCD config (i2c LCD screen, you need to install the LiquidCrystal_I2C if you don’t have it )#include #include LiquidCrystal_I2C lcd(0x3f,20,4); //sometimes the adress is not 0x3f. Change to 0x27 if it dosn’t work. /* i2c LCD Module ==> Arduino * SCL ==> A5 * SDA ==> A4 * Vcc ==> Vcc (5v) * Gnd ==> Gnd */ #include //We define the SPI pìns#define MAX6675_CS 10#define MAX6675_SO 12#define MAX6675_SCK 13 //Pinsint PWM_pin = 3; //Variablesfloat temperature_read = 0.0; float set_temperature = 100; float PID_error = 0; float previous_error = 0; float elapsedTime, Time, timePrev; int PID_value = 0; //PID constantsint kp = 9.1; int ki = 0.3; int kd = 1.8; int PID_p = 0; int PID_i = 0; int PID_d = 0; void setup() { pinMode(PWM_pin,OUTPUT); TCCR2B = TCCR2B & B11111000 | 0x03; // pin 3 and 11 PWM frequency of 980.39 Hz Time = millis(); lcd.init(); lcd.backlight(); } void loop() { // First we read the real value of temperature temperature_read = readThermocouple(); //Next we calculate the error between the setpoint and the real value PID_error = set_temperature – temperature_read; //Calculate the P value PID_p = kp * PID_error; //Calculate the I value in a range on +-3 if(-3 < PID_error <3) { PID_i = PID_i + (ki * PID_error); } //For derivative we need real time to calculate speed change rate timePrev = Time; // the previous time is stored before the actual time read Time = millis(); // actual time read elapsedTime = (Time – timePrev) / 1000; //Now we can calculate the D calue PID_d = kd*((PID_error – previous_error)/elapsedTime); //Final total PID value is the sum of P + I + D PID_value = PID_p + PID_i + PID_d; //We define PWM range between 0 and 255 if(PID_value < 0) { PID_value = 0; } if(PID_value > 255) { PID_value = 255; } //Now we can write the PWM signal to the mosfet on digital pin D3 analogWrite(PWM_pin,255-PID_value); previous_error = PID_error; //Remember to store the previous error for next loop. delay(300); //lcd.clear(); lcd.setCursor(0,0); lcd.print(“PID TEMP control”); lcd.setCursor(0,1); lcd.print(“S:”); lcd.setCursor(2,1); lcd.print(set_temperature,1); lcd.setCursor(9,1); lcd.print(“R:”); lcd.setCursor(11,1); lcd.print(temperature_read,1); } double readThermocouple() { uint16_t v; pinMode(MAX6675_CS, OUTPUT); pinMode(MAX6675_SO, INPUT); pinMode(MAX6675_SCK, OUTPUT); digitalWrite(MAX6675_CS, LOW); delay(1); // Read in 16 bits, // 15 = 0 always // 14..2 = 0.25 degree counts MSB First // 2 = 1 if thermocouple is open circuit // 1..0 = uninteresting status v = shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST); v <<= 8; v |= shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST); digitalWrite(MAX6675_CS, HIGH); if (v & 0x4) { // Bit 2 indicates if the thermocouple is disconnected return NAN; } // The lower three bits (0,1,2) are discarded status bits v >>= 3; // The remaining bits are the number of 0.25 degree (C) counts return v*0.25; }

You can see that the quality of the temperature is as having. But after many constant efforts of PID it and the tricky part of this project. So, try your own values ​​to do what you need to do until you get the right. I suggest you start with 0 and equal to 0, and then gradually increase those values ​​until you get good results.

Here I have the PWM signal of the MOSFET connected to my aceoloscope.


Initially, the system does not reach the desired value, because the pulse has a small width due to using the BJT to activate the N channel gate, so the mosque is activated with a lower quality in this field. Once it reaches the set quality it is used to maintain temperature and almost wambble begins. As you can see, if I try to cool the heating element by air in this air with the tube, the PWM signal width is low in keeping the same value. So, the control works.The default value is now 0 degrees. Press the Rotary Encoder Set button to enter or leave it to the left to decrease the temperature value. Again press the Set button and now you can set P constant for PID control. Press again and I select the value. Finally, press the button again and select D value. Now press the button and exit the menu and save the new settings. I put it at 100 degrees.

How To Make 4 Transistor Amplifier Using 35 0 35 Voltage Transformer

TTA5200 Amplifier Circuit Diagram

Today we can learn to build a single amplifier using transistors TTC5200. Usually we use TTC5200 and TTA1943. But in this circuit diagram, we can only see the TTA5200. We will need the center tap voltage. Center Tap Transformer for Transistor Amplifier. Conversion is an electrical power from one circuit other than a direct electrical connection. We have to use the transformer everywhere. But nowadays we can use the SMPS Circuit. Positive, Negative, and Ground Voltage We need this transformer to make amplifier. There is usually a transformer primary and second cable. For initial use we use AC 110v / 220 voltage. And we can get the output from seconds to what we need. Here are the secondary 2 wire outputs. But there is 3 cables for a center tube transmitter output voltage. For this circuit, we need to use a center tube transistor. Share this post if you like.
#2sa5200 Amplifier Circuit PCD Layout