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