Translate

PID Control Kendali Servo Sensor Suhu Thermocouple Max6675 Arduno

PID Control Kendali Servo Sensor Suhu Thermocouple Max6675 Arduno


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan PID control sebagai metode kendalinya. alat ini menggunakan servo sebagai kendali pemanasnya sehngga servo akan merespon tiap kali panas terdeteksi. alat ini menggunakan sensor thermocouple dan modul max6675. untuk lebih jelasnya berikut adalah program dan daftar komponennya.



a. Arduino Uno




b. Motor Servo




c. LCD + I2C




d. Sensor suhu Thermocouple + max6675

 




e. Program arduino IDE 

#include <max6675.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>

int thermoDO = 4; //bisa juga S0
int thermoCS = 5;
int thermoCLK = 6; //bisa juga SCK

int btok = 8;
int btup = 10;
int btdown = 11;
int btset = 12;

int btokx;
int btupx;
int btdownx;
int btsetx;

float kp = 2.08;
float ki = 1.67;
float kd = 2.15;

float p,i,d,suhu,pid;
float error,errorx,sumerr;

int sp;
Servo myservo;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

LiquidCrystal_I2C lcd(0x27,16,2);

// make a cute degree symbol
uint8_t degree[8]  = {140,146,146,140,128,128,128,128};

void setup() {

  Serial.begin(9600);
  lcd.clear();
  lcd.begin();
  lcd.createChar(0, degree);

  pinMode(btok,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(btset,INPUT_PULLUP);
  
  myservo.attach(9);
  
  delay(500);
}

void loop() {
  
  myservo.write(pid);

  error = sp - suhu;
  p = error * kp;
  sumerr = error + errorx;
  i = ki * sumerr;
  d = error - errorx;
  pid = p + i + d;
 
  if(pid < 0){
  pid = 0;
  }

  if(pid > 200){
  pid = 200;
  }       

lcd.setCursor(0, 1);
lcd.print("P=");
lcd.print(pid);
lcd.print(" SP=");
lcd.print(sp);
lcd.print("   ");

 suhu = thermocouple.readCelsius();

lcd.setCursor(0, 0);
lcd.print("SUHU = "); 
lcd.print(suhu);
 
#if ARDUINO >= 100
  lcd.write((byte)0);
#else
  lcd.print(0, BYTE);
#endif
  lcd.print("C ");
  delay(1000);

btsetx = digitalRead(btset);

if(btsetx == 0){
lcd.clear();
delay(200);
setting();
}

errorx = error;
 
}

void setting(){
lcd.setCursor(0, 0);
lcd.print("SP= ");
lcd.print(sp);
lcd.print("   ");

btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
  delay(200);
  sp++;
}

if(btdownx == 0){
  delay(200);
  sp--;
}

if(btokx == 0){
  lcd.clear();
  return;
}

if(sp < 0){
  sp = 0;
}
  
setting();  
}




f. VIDEO HASILNYA







No comments:

Post a Comment