Sistem Kontrol PID dengan Arduino

Halo teman-teman! Pada postingan kali ini, kita akan membahas cara membuat sistem kontrol PID (Proportional-Integral-Derivative) menggunakan Arduino. Kontrol PID adalah salah satu jenis kontrol yang sering digunakan dalam berbagai aplikasi industri untuk mengontrol variabel seperti suhu, kecepatan, tekanan, dan lainnya.

Alat dan Bahan yang Dibutuhkan:

  1. Arduino Uno
  2. Motor DC dengan enkoder atau sensor posisi
  3. Driver motor (misalnya L298N)
  4. Potensiometer (sebagai input setpoint)
  5. Breadboard dan kabel jumper
  6. Power supply atau kabel USB untuk Arduino

Langkah-langkah:

  1. Pemasangan Komponen:

    • Hubungkan motor DC ke driver motor:
      • OUT1 dan OUT2 ke motor DC
      • IN1 dan IN2 ke pin 2 dan 3 Arduino
      • VCC dan GND ke 12V dan GND (untuk power motor)
    • Hubungkan potensiometer ke Arduino:
      • Pin tengah potensiometer ke A0 Arduino
      • Dua pin lainnya ke 5V dan GND
    • Hubungkan enkoder motor atau sensor posisi ke Arduino:
      • Sesuaikan dengan jenis sensor yang digunakan
  2. Pengkodean:

    • Unduh dan instal library PID dari Arduino Library Manager.
    • Berikut adalah kode untuk proyek ini:
#include <PID_v1.h>

// Definisikan pin
const int potPin = A0;
const int motorPin1 = 2;
const int motorPin2 = 3;
const int encoderPinA = 4;
const int encoderPinB = 5;

// Variabel untuk enkoder
volatile long encoderValue = 0;
long lastEncoderValue = 0;

// Variabel PID
double setpoint, input, output;
double Kp = 2.0, Ki = 5.0, Kd = 1.0;
PID myPID(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);

// Fungsi untuk enkoder
void updateEncoder() {
  int MSB = digitalRead(encoderPinA);
  int LSB = digitalRead(encoderPinB);
  int encoded = (MSB << 1) | LSB;
  int sum = (lastEncoded << 2) | encoded;
  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue++;
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue--;
  lastEncoded = encoded;
}

void setup() {
  // Setup pin motor
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);

  // Setup pin enkoder
  pinMode(encoderPinA, INPUT);
  pinMode(encoderPinB, INPUT);
  attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
  attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoder, CHANGE);

  // Inisialisasi PID
  setpoint = 0;
  myPID.SetMode(AUTOMATIC);
}

void loop() {
  // Baca input dari potensiometer
  setpoint = analogRead(potPin) * (100.0 / 1023.0);

  // Baca nilai encoder
  input = encoderValue;

  // Update PID
  myPID.Compute();

  // Kontrol motor berdasarkan output PID
  if (output > 0) {
    analogWrite(motorPin1, output);
    analogWrite(motorPin2, 0);
  } else {
    analogWrite(motorPin1, 0);
    analogWrite(motorPin2, -output);
  }

  // Debugging (opsional)
  Serial.print("Setpoint: ");
  Serial.print(setpoint);
  Serial.print(" Input: ");
  Serial.print(input);
  Serial.print(" Output: ");
  Serial.println(output);

  delay(100);
}

Penjelasan Kode:

  • Kami menggunakan library PID_v1 untuk mengimplementasikan algoritma PID pada Arduino.
  • Pin-pot dan enkoder motor diinisialisasi di setup().
  • Nilai setpoint dibaca dari potensiometer, dan nilai input diambil dari sensor enkoder.
  • Algoritma PID menghitung output berdasarkan setpoint dan input.
  • Motor dikendalikan sesuai dengan output PID untuk mencapai nilai setpoint.

Kesimpulan: Dengan mengikuti langkah-langkah di atas, Anda bisa membuat sistem kontrol PID sederhana menggunakan Arduino. Sistem ini dapat digunakan untuk mengendalikan berbagai perangkat, seperti motor DC, untuk mencapai performa yang diinginkan.

Penutup: Jika Anda memiliki pertanyaan atau butuh bantuan lebih lanjut, jangan ragu untuk meninggalkan komentar di bawah. Jangan lupa untuk mengikuti blog ini untuk proyek-proyek menarik lainnya! Terima kasih telah berkunjung dan sampai jumpa di postingan berikutnya!

Komentar