GUI LabVIEW

1. Membuat tampilan di LabVIEW untuk memasukkan nilai dari pengguna (setpoin, kp, ki dan kd).

Berikut ini langkah-langkahnya:

1. Gunakan rangkaian berikut ini:

Gambar 1. Rangkaian untuk simulasi kontrol PID suhu di Proteus

2. Gunakan program Arduino berikut: 

  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SSD1306.h>
  4. #include <PID_v2.h>
  5. bool go = false;
  6. int set0 = 0, set1 = 0, setpoin = 0;
  7. double KP = 0.0, KI = 0.0, KD = 0.0;
  8. int kp0 = 0, ki0 = 0, kd0 = 0;
  9. int kp1 = 0, ki1 = 0, kd1 = 0;
  10. PID_v2 myPID(KP, KI, KD, PID::Direct);
  11. Adafruit_SSD1306 display(128, 64, &Wire, -1);
  12. unsigned long skr = 0;
  13. void setup() {
  14.   Serial.begin(9600);
  15.   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
  16.     Serial.println(F("SSD1306 allocation failed"));
  17.     for (;;)
  18.       ;
  19.   }
  20.   pinMode(2, INPUT_PULLUP);
  21.   pinMode(8, OUTPUT);
  22.   pinMode(9, OUTPUT);
  23.   myPID.SetOutputLimits(-255, 255);
  24.   myPID.SetSampleTime(10);
  25.   delay(1000);
  26. }
  27. void loop() {
  28.   set0 = map(analogRead(A6), 0, 1023, 0, 100);
  29.   if (set0 != set1) {
  30.     setpoin = set0;
  31.     set1 = set0;
  32.   }
  33.   double sensor = analogRead(A0) / 10.23;
  34.   kp0 = analogRead(A1);
  35.   if (kp0 != kp1) {
  36.     KP = kp0 / 102.3;
  37.     kp1 = kp0;
  38.   }
  39.   ki0 = analogRead(A2);
  40.   if (ki0 != ki1) {
  41.     KI = ki0 / 102.3;
  42.     ki1 = ki0;
  43.   }
  44.   kd0 = analogRead(A3);
  45.   if (kd0 != kd1) {
  46.     KD = kd0 / 102.3;
  47.     kd1 = kd0;
  48.   }
  49.   int mulai = !digitalRead(2);
  50.   if (mulai || go) {
  51.     myPID.SetTunings(KP, KI, KD);
  52.     myPID.Start(sensor, 0, setpoin);
  53.     go = false;
  54.   }
  55.   const double output = myPID.Run(sensor);
  56.   analogWrite(10, abs(output));
  57.   if (output > 0) {
  58.     digitalWrite(8, LOW);
  59.     digitalWrite(9, HIGH);
  60.   }
  61.   if (output < 0) {
  62.     digitalWrite(9, LOW);
  63.     digitalWrite(8, HIGH);
  64.   }
  65.   if (millis() - skr > 100) {
  66.     display.clearDisplay();
  67.     display.setTextSize(2);
  68.     display.setTextColor(SSD1306_WHITE);
  69.     display.setCursor(0, 0);
  70.     display.print(F("SP : "));
  71.     display.println(setpoin);
  72.     display.print(F("PV : "));
  73.     display.println(sensor);
  74.     display.setTextSize(1);
  75.     display.print(F("OP : "));
  76.     display.println(output);
  77.     display.print(F("KP : "));
  78.     display.println(KP);
  79.     display.print(F("KI : "));
  80.     display.println(KI);
  81.     display.print(F("KD : "));
  82.     display.println(KD);
  83.     display.display();
  84.     Serial.print(setpoin);
  85.     Serial.print(',');
  86.     Serial.println(sensor);
  87.     skr = millis();
  88.   }
  89. }
  90. void serialEvent() {
  91.   while (Serial.available()) {
  92.     int a = Serial.parseInt();
  93.     float b = Serial.parseFloat();
  94.     float c = Serial.parseFloat();
  95.     float d = Serial.parseFloat();
  96.     if (Serial.read() == char(13)) {
  97.       setpoin = a;
  98.       KP = b;
  99.       KI = c;
  100.       KD = d;
  101.       go = true;
  102.     }
  103.   }
  104. }

3. Kompilasi program di atas, isikan lokasi file hex hasil kompilasi di kolom Program File komponen ATmega328 rangkaian Proteus. Kemudian jalankan Proteus dan juga program LabVIEW, seperti gambar berikut:

Gambar 2. Hasil simulasi rangkaian kontrol PID Suhu di Proteus dan tampilan grafiknya di LabVIEW, serta penambahan objek untuk pengguna emmasukkan seting kontrol PID (Setpoin, Kp, Ki dan Kd)


File Proteus, program Arduino, dan program LabVIEW dapat diunduh di sini: https://drive.google.com/file/d/1bXDZCx_r9r43yp4KaUChGKOT-PU4BsU5/view?usp=sharing





 

2. Membuat tampilan di LabVIEW untuk indikator kondisi


 sensor dan aktuator.

3. Membuat tampilan grafik sensor dan aktuator di LabVIEW.

No comments:

Post a Comment