Translate

ARDUINO PID CONTROL SUHU SENSOR DS18B20 DAN PELTIER

ARDUINO PID CONTROL SUHU SENSOR DS18B20 DAN PELTIER


               Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan prinsip PID untuk stabilsasi suhu pada heater. Alat ini menggunakan sensor suhu ds18b20 dan pemanas menggunakan peltier. driver yang digunakan untuk peltier adalah transistor TIP3055, jika ingin menggunakan pemanas sumber AC maka bisa diganti dengan TRIAC atau sejenisnya. untuk lebih jelasnya berikut adalah program dan daftar komponennya.



a. Arduino Nano




b. Heater Peltier




c. LCD 16x2 dan I2C






d. Sensor Ds18b20






e. Program Arduino IDE

#include "Wire.h"
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

OneWire  ds(12);  // on pin 10 (a 4.7K resistor is necessary)

float kp = 1.08;
float ki = 1.17;
float kd = 1.15;

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

float sp;   
float spx = 50;  //set point
int pinpwm = 11;

 byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;


void setup() {

  pinMode(pinpwm,OUTPUT);
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  
}

void loop() {

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }

  for( i = 0; i < 8; i++) {

  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      return;
  }

  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
    default:
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end

  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr);  
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms

  }
  
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  suhu = celsius;
  
  
  analogWrite(pinpwm,pid);
  
  sp = spx + 30;  //atur range overlap kalibrasi
  
  error = sp - suhu;
  p = error * kp;
  sumerr = error + errorx; 
  ix = ki * sumerr; 
  d = kd * (error - errorx);
  pid = p + ix + d;
//pid = 255.0 - pid; 

//  if(pid < 1){
//  pid = 0;
//  }
    
 lcd.setCursor(0,0);
 lcd.print("Suhu=");
 lcd.print(suhu);
 lcd.print("/");
 lcd.print(spx);
 lcd.print("   ");

 lcd.setCursor(0,1);
 lcd.print("PID=");
 lcd.print(pid);
 lcd.print("     ");

Serial.println("suhu= ");     
Serial.println(suhu);
Serial.println("pid= ");     
Serial.println(pid);

delay(1000);

errorx = error;

}





f. VIDEO HASILNYA










No comments:

Post a Comment