3. Koneksi dengan Proteus

Saya mendapat pertanyaan dari rekan di grup Facebook, bagaimana kalau mau menambah sensor di Wokwi? Sebenarnya saya tidak tahu caranya 😞. ... Namun kebetulan sekali, pagi itu saya sempat  berselancar ria di internet, dan tidak menduga, saya menemukan jawabannya dari "orang-orang baik di internet", yang men-share-kan bagaimana agar Wokwi bisa terhubung dengan port serial di komputer kita. Saya sangat tertarik, karena Proteus juga bisa terhubung dengan dunia luar melalui COMPIM. Jadi solusi yang bisa ditawarkan untuk menambah sensor di Wokwi adalah dengan menghubungkan Wokwi dengan Proteus melalui komunikasi serial. Banyak keuntungan yang bisa diperoleh dengan penggabungan kedua software tersebut, beberapa di antaranya:
  1. Rangkaian di Proteus bisa terhubung Wi-Fi melalui Wokwi.
  2. Komponen Wokwi mendapat tambahan komponen Proteus yang luar biasa banyak.
  3. Memunculkan banyak ide pengembangan.
Agar rekan-rekan bisa lebih jelas dengan ketiga keuntungan di atas, berikut ini beberapa contoh pengembangan yang bisa dibuat:


Berikut ini uraiannya masing-masing:



===========================================================================================

1. Kontrol PID Suhu dengan Wokwi & Proteus 

Berikut ini langkah-langkahnya:

Gambar 1.1 Rangkaian ESP32 dengan Slide Potentiometer, Pushbutton dan OLED I2C 

CatatanBerikut ini fungsi masing-masing komponen: 
1. Slide Potentiometer digunakan untuk mengatur Setpoint (SP).
2. Pushbutton digunakan untuk mengirim data Setpoin ke Arduino Uno di Proteus. 
3. OLED I2C digunakan untuk menampilkan data Setpoint (SP), data Sensor Suhu (PV), dan data  Output Kontrol PID (OP).
4. ESP32 digunakan untuk membaca nilai Slide Potentiometer, dan mengirimkan data Setpoin ke Arduino Uno di Proteus ketika Pushbutton ditekan, dan menampilkan data SP, PV dan OP di OLED.

2. Buat rangkaian Proteus yang terdiri dari COMPIM, ATmega328, 4 buah Potensio (Pot-HG). sebuah Button, L298, Oven dan OLED I2C seperti gambar berikut ini:

Gambar 1.2 Rangkaian Arduino Uno (ATmega328), dengan COMPIM, 4 Potensio (Pot-HG). Button, L298, Oven dan OLED I2C.

Catatan: Berikut ini fungsi masing-masing komponen:
1. COMPIM digunakan untuk komunikasi Proteus dengan Wokwi. 
2. Empat Potensio (pot-HG) digunakan untuk mengatur Setpoin, KP, KI dan KD.
3. Arduino Uno (ATmega328) digunakan untuk menghasilkan kontrol PID.
4. L298 untuk penguat sinyal output Arduino.
5. Oven digunakan untuk mengubah output tegangan (OP1 & OP2) ke dalam suhu, yang kemudian nilai suhunya diubah kembali menjadi output tegangan (PV). 
6. OLED I2C digunakan untuk menampilkan data SP, PV, OP, KP, KI dan KD.

3. Buat program Arduino untuk kontrol PID Suhu seperti berikut ini:
  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, setpoin = 0;
  7. double KP = 0.0, KI = 0.0, KD = 0.0;
  8. PID_v2 myPID(KP, KI, KD, PID::Direct);
  9. Adafruit_SSD1306 display(128, 64, &Wire, -1);
  10. unsigned long skr = 0;
  11. void setup() {
  12.   Serial.begin(9600);
  13.   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
  14.     Serial.println(F("SSD1306 allocation failed"));
  15.     for (;;)
  16.       ;
  17.   }
  18.   pinMode(2, INPUT_PULLUP);
  19.   pinMode(8, OUTPUT);
  20.   pinMode(9, OUTPUT);
  21.   myPID.SetOutputLimits(-255, 255);
  22.   myPID.SetSampleTime(10);
  23.   delay(1000);
  24. }
  25. void loop() {
  26.   set0 = map(analogRead(A6), 0, 1023, 0, 100);
  27.   double sensor = analogRead(A0) / 10.23;
  28.   KP = analogRead(A1) / 102.3;
  29.   KI = analogRead(A2) / 102.3;
  30.   KD = analogRead(A3) / 102.3;
  31.   int mulai = !digitalRead(2);
  32.   if (mulai) {
  33.     setpoin = set0;
  34.     myPID.SetTunings(KP, KI, KD);
  35.     myPID.Start(sensor, 0, setpoin);
  36.   }
  37.   if (go) {
  38.     myPID.SetTunings(KP, KI, KD);
  39.     myPID.Start(sensor, 0, setpoin);
  40.     go = false;
  41.   }
  42.   const double output = myPID.Run(sensor);
  43.   analogWrite(10, abs(output));
  44.   if (output > 0) {
  45.     digitalWrite(8, LOW);
  46.     digitalWrite(9, HIGH);
  47.   }
  48.   if (output < 0) {
  49.     digitalWrite(9, LOW);
  50.     digitalWrite(8, HIGH);
  51.   }
  52.   if (millis() - skr > 1000) {
  53.     display.clearDisplay();
  54.     display.setTextSize(2);
  55.     display.setTextColor(SSD1306_WHITE);
  56.     display.setCursor(0, 0);
  57.     display.print(F("SP : "));
  58.     display.println(setpoin);
  59.     display.print(F("PV : "));
  60.     display.println(sensor);
  61.     display.setTextSize(1);
  62.     display.print(F("OP : "));
  63.     display.println(output);
  64.     display.print(F("KP : "));
  65.     display.println(KP);
  66.     display.print(F("KI : "));
  67.     display.println(KI);
  68.     display.print(F("KD : "));
  69.     display.println(KD);
  70.     display.display();
  71.     Serial.print(setpoin);
  72.     Serial.print(',');
  73.     Serial.print(sensor);
  74.     Serial.print(',');
  75.     Serial.println(output);
  76.     skr = millis();
  77.   }
  78. }
  79. void serialEvent() {
  80.   while (Serial.available()) {
  81.     int a = Serial.parseInt();
  82.     if (Serial.read() == char(13)) {
  83.       setpoin = a;
  84.       go = true;
  85.     }
  86.   }
  87. }

3. Kompilasi program di atas, isikan lokasi file Hex di kolom Program File di komponen ATmega328, dan juga atur parameter yang lain, seperti CLKDIV8: Unprogrammed, CKSEL Fuses: Ext. Clock, Clock Frequency: 16MHz, seperti gambar berikut ini:

Gambar 1.3 Klik 2 kali komponen ATmega328, isi kolom Program File dengan lokasi File Hex hasil kompilasi program Arduino di atas, atur juga CLKDIV8: Unprogrammed, CKSEL Fuses: Ext. Clock, Clock Frequency: 16MHz

3. Rekan-rekan dapat mengunduh file program Arduino dan juga file Proteusnya di link ini: proteus_1. Silahkan diunduh, dan dijalankan. Jalankan juga simulasi Wokwi. Saat menjalankan Wokwi, akan muncul pertanyaan, COM yang akan dignnakan. Gunakan pasangan COM. Dalam contoh di sini, digunakan COM5 dan COM6, COM5 untuk COMPIM di Proteus, dan COM6 untuk Wokwi. Pastikan juga Baudrate di COMPIM diatur ke 9600.

Gambar 1.4 Atur COMPIM: pilih COM yang berpasangan, dalam contoh di sini: COM5 untuk COMPIM, dan COM6 untuk Wokwi, atur juga Baudrate, baik Physical maupun Virtual ke 9600

4. Atur Setpoint dengan menggeser Potensio (Pot-HG) di Proteus, dan kemudian menekan tombol di samping Potensio untuk menjalankan kontrol PID.

Gambar 1.4 Jalankan simulasi Proteus dan Wokwi, atur Setpoint dengan menggeser Potensio SP di Proteus, dan tekan tombol di sampingnya untuk menjalankan kontrol PID

5. Pengaturan Setpoint bisa juga dilakukan di Wokwi. Geser Slide Potentiometer di Wokwi, dan kemudian tekan tombol untuk mengirim data Setpoint tersebut ke Arduino di Proteus sekaligus menjalankan kontrol PID.

Gambar 1.5 Di samping pengaturan di Proteus, Setpoint juga dapat diatur di Wokwi, geser Slide Potentiometer, dan tekan tombol di sampingnya untuk mengirim data Setpoint ke Arduino di Proteus sekaligus menjalankan kontrol PID

Agar lebih jelas, berikut ini video kontrol PID Suhu di Wokwi, dengan bantuan Proteus, yang terhubung melalui komunikasi serial dengan Wokwi.

Video kontrol PID Suhu di Wokwi, dengan bantuan Proteus, yang terhubung melalui komunikasi serial dengan Wokwi




===========================================================================================

2. Kontrol PID Suhu dengan Wokwi, Proteus & EBPro 

Apabila di Sub-Topik 1 di atas hanya menggunakan Wokwi dan Proteus, maka di Sub-Topik 2 ini, ditambahkan EasyBuilder Pro, untuk menampilkan grafik kontrol PID yang lebih jelas, dan juga pengaturan Setpoint. Secara garis besar, gambar berikut ini menunjukkan diagram hubungan antara Proteus, Wokwi, dan EBPro.
Gambar 2.1 Diagram hubungan antara Proteus, Wokwi dan EasyBuilder Pro

Catatan: Untuk Topik MQTT pada contoh di sini, baik Topik Publisher maupun Subscriber, silahkan untuk diganti sesuai keperluan. Hal yang penting diingat, bahwa ketika mem-publish data ke sebuah Topik tertentu, dengan broker yang tertentu, maka apabila ada perangkat yang men-subscribe Topik tersebut di broker yang sama, data yang di-publish tersebut akan diterima oleh perangkat tersebut. Jadi pastikan untuk bisa membuat Topik yang unik, yang memungkinkan hanya perangkat tertentu saja yang menerima.

Untuk membuatnya, ikuti langkah-langkah berikut ini:

Gambar 2.2 Rangkaian ESP32 dengan Slide Potentiometer dan OLED I2C 

CatatanBerikut ini fungsi masing-masing komponen: 
1. Slide Potentiometer digunakan untuk mengatur Setpoint (SP).
2. OLED I2C digunakan untuk menampilkan data Setpoint (SP), data Sensor Suhu (PV), dan data  Output Kontrol PID (OP).
4. ESP32 digunakan untuk mengirimkan nilai Setpoint (melalui komunikasi serial) ke Arduino di Proteus, yang nilai Setpoint tersebut bisa diperoleh dari nilai Slider EBPro (yang dikirimkan melalui MQTT) atau dari pembacaan Slide Potentiometer yang terhubung ke ESP32 - yang hanya mengirim apabila ada perubahan nilai. Di samping mengirimkan data, ESP32 juga menerima data yang dikirimkan oleh Arduino di Proteus melalui komunikasi serial, yaitu data SP, PV dan OP, hasil dari kontrol PID. Ketiga data tersebut kemudian diteruskan ke EBPro oleh ESP32 melalui MQTT.

 2. Gunakan rangkaian Proteus berikut ini (rangkaian ini sama dengan rangkaian di Gambar 1.2).

Gambar 2.3 Rangkaian di Proteus yang sama seperti Gambar 1.2

Catatan: Berikut ini fungsi masing-masing komponen:
1. COMPIM digunakan untuk komunikasi Proteus dengan Wokwi. 
2. Empat Potensio (pot-HG) digunakan untuk mengatur Setpoin, KP, KI dan KD.
3. Arduino Uno (ATmega328) digunakan untuk menghasilkan kontrol PID.
4. L298 untuk penguat sinyal output Arduino.
5. Oven digunakan untuk mengubah output tegangan (OP1 & OP2) ke dalam suhu, yang kemudian nilai suhunya diubah kembali menjadi output tegangan (PV). 
6. OLED I2C digunakan untuk menampilkan data SP, PV, OP, KP, KI dan KD.

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

4. Kompilasi program di atas, isikan lokasi file Hex di kolom Program File di komponen ATmega328, dan juga atur parameter yang lain, seperti CLKDIV8: Unprogrammed, CKSEL Fuses: Ext. Clock, Clock Frequency: 16MHz, seperti gambar berikut ini:

Gambar 2.4 Klik 2 kali komponen ATmega328, isi kolom Program File dengan lokasi File Hex hasil kompilasi program Arduino di atas, atur juga CLKDIV8: Unprogrammed, CKSEL Fuses: Ext. Clock, Clock Frequency: 16MHz

5. Rekan-rekan dapat mengunduh file program Arduino dan file Proteus di atas, di link ini: proteus2.
6. Berikutnya, buka EasyBuilder Pro, pilih salah satu model HMI selain IP Series.

Gambar 2.5 Pilih salah satu model HMI, semua model di atas bisa digunakan untuk MQTT, kecuali modul IP Series. Dalam contoh di sini menggunakan model MT8070iE/MT8100iE (800x400)  

7. Muncul jendela System Parameter Settings, klik OK.

Gambar 2.6 Muncul jendela System Parameter Settings, klik OK

8. Berikutnya, buka menu Object, pilih Numeric, hilangkan centang pada Allow input, atur Address: LW-0, kemudian tempatkan objek Numeric di layar HMI.

Gambar 2.7 Tempatkan sebuah objek Numeric, atur Address: LW-0.

9. Tambahkan 3 buah objek Numeric lagi. Atur Address ketiganya secara berturut-turut LW-1, LW-2 dan LW-4, dengan tipe data secara berturut-turut 16-bit Unsigned, 32-bit Float dan 16-bit Signed, juga atur Format dan jangkauan nilai, seperti terlihat pada Tabel di bawah Gambar 2.8 berikut ini.

Catatan: Address setelah LW-2, untuk kasus di sini, bukan LW-3 tetapi LW-4, karena data di LW-2 berukuran 32 bit, yang membutuhkan 2 buah lokasi memori, yaitu LW-2 dan LW-3. Membutuhkan ukuran 32 bit karena data yang ditampung adalah nilai pecahan (nilai pembacaan sensor suhu).

Gambar 2.8 Tambahkan 3 buah objek Numeric lagi, atur Address, Tipe Data, Format tampilan angka, seperti Tabel 1 berikut 

Tabel 1. Pengaturan untuk keempat objek Numeric

No.

Address

Allow Input

Data Format

Left of d

Right of d

Device Low

Device High

1

LW-0

X

16-bit Unsigned

3

0

0

100

2

LW-1

X

16-bit Unsigned

3

0

0

100

3

LW-2

X

32-bit Float

3

2

0

100

4

LW-4

X

16-bit Signed

4

0

-255

255

10.  Berikutnya, tambahkan objek Slider. Di tab General, atur Direction: Up, atur Address: LW-0, klik OK, dan tempatkan objek Slider di samping keempat kotak Numeric.

Gambar 2.9 Tempatkan objek Slider, atur Direction: Up dan Address: LW-0

11.  Untuk menampilkan grafik, gunakan Trend Display, yang datanya diperoleh dari Data Sampling. Untuk itu, buka menu Data/History, pilih Data Sampling. Di jendela Data Sampling, klik tombol New.

Gambar 2.10 Buka menu Data/History, pilih Data Sampling, klik New

12. Muncul jendela Data Sampling, pilih Time-based 1 second, isi Address: LW-1, kemudian klik Data Format. Di jendela Data Format, klik tombol New. Muncul jendela Channel Data Format, pilih Data Type: 16-bit Unsigned. Klik tombol OK. Berikutnya klik lagi tombol New untuk membuat Channel kedua, pilih Data Type: 32-bit Float, kemudian klik OK. Channel pertama akan digunakan untuk menampilkan data Setpoint (SP) di LW-1, sedangkan Channel kedua akan digunakan untuk menampilkan data Sensor (PV) di LW-2.

Catatan: Data Sampling ini secara otomatis akan mengambil lokasi memori secara berurutan, yang dimulai dari alamat yang diisikan di kolom Address. Dalam contoh di sini, ada 2 channel yang akan ditampilkan pada grafik, di mana tipe data channel pertama: 16-bit Unsigned, sedangkan tipe data channel kedua: 32-bit Float. Kedua channel ini secara otomatis mengambil lokasi LW-1 dan LW-2.

Gambar 2.11 Buat Data Sampling untuk SP (LW-1) dan PV (LW-2) dengan tipe data berturut-turut 16-bit Unsigned dan 32-bit Float

13. Klik OK, klik Exit, klik OK lagi untuk menutup jendela Data Sampling. Terlihat pada daftar muncul alokasi data sampling dengan alamat mulai dari LW-1 dengan ukuran data 3 Word, klik Exit.

Gambar 2.12 Terlihat Data Sampling dengan ukuran 3 Word muncul di daftar, klik Exit

14. Berikutnya, pilih Trend Display, di tab General, pilih Time, isi Distance: 120 seconds.

Gambar 2.13 Pilih Trend Display, di tab General, pilih Time, isi Distance: 120 seconds

15. Berikutnya buka tab Trend, beri centang pada opsi Enable Grid, ubah Color, atur Division pada Grid, isi dengan angka 10, baik untuk X-axis maupun Y-axisberi centang pada opsi Time.

Gambar 2.14 Di tab Trend, Enable Grid, buat Division untuk sumbu X dan sumbu Y sebesar 10, atur juga Color (warna Grid)

16. Berikutnya buka tab Channel, klik pada Channel 1, atur Color ke warna merah, dan isi Width: 2 untuk garis tebal, atau 1 untuk garis tipis, dan atur Max: 100. Kemudian klik pada Channel 2, atur Color ke warna biru, atur juga tebal garis serta atur nilai Max: 100.

Gambar 2.15(a) Di tab Channel, atur warna garis di Channel pertama (warna merah), atur juga ketebalan garisnya dan isi nilai Max: 100

Gambar 2.15(b) Di tab Channel, atur warna garis di Channel kedua (warna biru), atur juga ketebalan garisnya dan isi nilai Max: 100

17. Berikutnya klik OK, maka muncul kotak grafik. Tempatkan di layar HMI, perbesar ukurannya seperti gambar berikut.

Gambar 2.16 Tempatkan kotak grafik di samping Slider, perbesar ukurannya sehingga setinggi Slider

18. Berikutnya, tambahkan objek Dynamic Scale agar koordinat grafik menjadi lebih jelas, Untuk itu, buka menu Object, pilih Chart, pilih Dynamic Scale.

Gambar 2.17 Buka menu Object, pilih Chart, klik pada Dynamic Scale

19. Di jendela Dynamic Scale, pilih Style: Horizontal, kemudian di tab Tick Mark, isi Ticks Main scale = 11 dan isi Ticks Sub scale = 0.

Gambar 2.18 Pilih Style: Horizontal, di tab Tick Mark, isi Ticks Main scale = 11 dan Sub scale = 0.

20. Buka tab Scale Label, beri centang Use scale label, isi Position: Left, isi Top: 100 dan Bottom: 0.

Gambar 2.19 Di tab Scale Label, centang Use scale label, isi Position: Left, isi Top: 100 dan Bottom: 0

21. Klik OK, maka muncul Label koordinat sumbu Y, tempatkan di antara Slider dan kotak grafik.

Gambar 2.20 Muncul label koordinat sumbu Y, tempatkan di antara Slider dan kotak grafik.

22. Berikutnya menambahkan label koordinat sumbu X, untuk itu klik pada Dynamic Scale di Chart.

Gambar 2.21 Klik Dynamic Scale lagi untuk membuat label koordinat sumbu X

23. Di jendela Dynamic Scale, pilih Style: Vertical, isi Ticks Main scale: 11 dan Sub scale: 0.

Gambar 2.22 Pilih Style: Vertical, isi Ticks Main scale: 11 dan Sub scale: 0

24. Di tab Scale Label, centang Use scale label, isi Position: Bottom, isi Left: 0 dan Right: 120.

Gambar 2.23 Beri centang Use scale label, isi Position: Bottom, isi Left: 0 dan Right: 120

25. Klik OK, maka muncul Label koordinat sumbu X, tempatkan di bawah kotak grafik, perlebar ukurannya sehingga sesuai dengan lebar kotak grafik.

Gambar 2.24 Klik OK, maka muncul Label koordinat sumbu X, tempatkan di bawah kotak grafik, perlebar ukurannya sehingga sesuai dengan lebar kotak grafik.

26. Setelah semua objek selesai ditempatkan di layar HMI, langkah berikutnya adalah menghubungkan objek tersebut dengan Wokwi melalui koneksi MQTT. Untuk itu, buka menu IIoT/Energy, klik MQTT, klik Enable. Beri centang pada Use domain name, isi Domain name: mqtt-dashboard.com, klik OK.

Gambar 2.25 Buka menu IIoT/Energy, klik Enable MQTT, centang Use domain name, isi Domain name: mqtt-dashboard.com, klik OK

27. Di jendela MQTT, klik tab Topic Publisher, klik New, isi Topic: kontrol/pid_suhu, hilangkan centang pada kedua opsi Content format.

Gambar 2.26 Di jendela MQTT, klik tab Topic Publisher, klik New, isi Topic: kontrol/pid_suhu, hilangkan centang pada kedua opsi Content format

28. Buka tab Address, klik tombol New, isi Name: sp, pilih Type: Word, isi Address: LW-0, beri centang pada Remove JSON array bracket, klik OK.

Gambar 2.27 Di tab Address, klik tombol New, isi Name: sp, pilih Type: Word, isi Address: LW-0, beri centang pada Remove JSON array bracket, klik OK

29. Muncul pada daftar MQTT Topic Publisher, nama dan alamat memori yang terhubung dengan Topic Publisher kontrol/pid_suhu. Klik OK.

Gambar 2.28 Terlihat di daftar MQTT Topic Publisher, alamat memori yang terhubung dengan Topic Publisher kontrol/pid_suhu. Klik OK

30. Berikutnya, klik pada tab Topic Subscriber, klik New, isi Topic: monitor/pid_suhu, hilangkan centang pada kedua opsi di Content format.

Gambar 2.29 Klik tab Topic Subscriber, klik New, isi Topic: monitor/pid_suhu, hilangkan centang pada kedua opsi di Content format

31. Buka tab Address, klik New, isi Name: sp, Type: Word, Address: LW-1, centang Remove JSON array bracket, klik OK.

Gambar 2.30 Klik tab Address, klik New, isi Name: sp, Type: Word, Address: LW-1, centang Remove JSON array bracket, klik OK

32. Masih di tab Address, klik New, isi Name: pv, Address: LW-2, ubah 16-bit Unsigned menjadi 32-bit Float, centang Remove JSON array bracket, klik OK.

Gambar 2.31 Masih di tab Address, klik New, isi Name: pv, Address: LW-2, ubah 16-bit Unsigned menjadi 32-bit Float, centang Remove JSON array bracket, klik OK

33. Masih di tab Address, klik New, isi Name: op, Address: LW-4, ubah 16-bit Unsigned menjadi 16-bit Signed, centang Remove JSON array bracket, klik OK.

Gambar 2.32 Masih di tab Address, klik New, isi Name: op, Address: LW-4, ubah 16-bit Unsigned menjadi 16-bit Signed, centang Remove JSON array bracket, klik OK

34. Terlihat 3 nama dan alamatnya pada daftar Topic Subscriber: monitor/pid_suhu.

Gambar 2.33 Muncul 3 nama dan alamatnya pada daftar Topic Subscriber: monitor/pid_suhu

35. Klik OK, kemudian klik Exit pada jendela MQTT.

Gambar 2.34 Klik OK, kemudian klik Exit pada jendela MQTT

36. Langkah terakhir, jalankan simulasi dengan membuka menu Project, klik Offline Simulation.

Gambar 2.35 Buka menu Project, pilih Offline Simulation

37. Jalankan juga Proteus dan Wokwi. Pastikan COM pada COMPIM di Proteus dengan COM yang dipilih di Wokwi adalah pasangan COM. Lihat di Device Manager untuk melihat pasangan COM. Apabila rekan-rekan tidak memiliki pasangan COM, rekan-rekan dapat menggunakan software HHD virtual serial port, silahkan didowload dan diinstal, jalankan software tersebut, kemudian Create Local Bridges (COM1-COM2). COM1 bisa diisikan di COMPIM, dan Wokwi bisa menggunakan COM2. Dalam contoh di sini, COM yang berpasangan adalah COM5 dan COM6.

Gambar 2.36 Buka Device Manager, perhatikan pasangan COM yang tersedia, dalam contoh di sini digunakan COM5 dan COM6, COM5 diisikan di COMPIM, dan COM6 digunakan di Wokwi

38. Lakukan pengubahan Setpoint, baik dari Proteus, maupun dari Wokwi, dan juga bisa dari EasyBuildr Pro. Gambar berikut menunjukkan hasil simulasi ketiganya.

Gambar 2.37(a) Pengubahan Setpoint dari Potensio di Proteus, terlihat tampilan grafik di EasyBuilder Pro dan OLED di Proteus dan Wokwi menghasikan nilai yang sama

Gambar 2.37(b) Pengubahan Setpoint dari Slider di Easy Builder Pro, terlihat tampilan grafik di EasyBuilder Pro dan OLED di Proteus dan Wokwi menghasikan nilai yang sama

Gambar 2.37(c) Pengubahan Setpoint dari Slider di Wokwi, terlihat tampilan grafik di EasyBuilder Pro dan OLED di Proteus dan Wokwi menghasikan nilai yang sama

Catatan: Data kedua yang ditampilkan di Serial Monitor sengaja dikalikan 100, yang seharusnya 48.19 dibuat menjadi 4819, dengan tujuan untuk menghindari kesalahan yang bisa muncul saat pengambilan dan pemisahan angka pecahan (float), sehingga dikali 100 agar bisa menjadi bilangan bulat (integer).

Rekan-rekan dapat mengunduh file EasyBuilder Pro yang dibuat di Sub Topik 2 ini, di link ini: EBPro_Wokwi_Proteus_PIDSuhu

Agar lebih jelas, berikut ini video kontrol PID Suhu yang melibatkan Proteus, Wokwi dan EasyBuilder Pro:

Catatan: Pengubahan Setpoint di EasyBuilder Pro akan diteruskan ke Proteus apabila halaman web simulasi Wokwi dibuka. Apabila simulasi Wokwi tidak ditampilkan, pengubahan data Setpoint tidak akan diteruskan ke Proteus.

Video kontrol PID Suhu yang melibatkan Proteus, Wokwi dan EasyBuilder Pro

 


===========================================================================================

3. Kontrol PID Suhu dengan Wokwi, Proteus,  EBPro & IoT MQTT Panel

Apabila di Sub-Topik 2 di atas hanya menggunakan Wokwi, Proteus dan EasyBuilder Pro, maka di Sub-Topik 3 ini, ditambahkan IoT MQTT Panel di HP Android, untuk memberikan variasi perangkat yang dapat menampilkan grafik kontrol PID, dan juga pengaturan Setpoint-nya. Secara garis besar, gambar berikut ini menunjukkan diagram hubungan antara Proteus, Wokwi, EBPro dan IoT MQTT Panel.
Gambar 3.1 Diagram hubungan antara Proteus, Wokwi, EasyBuilder Pro dan IoT MQTT Panel

Catatan: Untuk Topik MQTT pada contoh di sini, baik Topik Publisher maupun Subscriber, silahkan untuk diganti sesuai keperluan. Hal yang penting diingat, bahwa ketika mem-publish data ke sebuah Topik tertentu, dengan broker yang tertentu, maka apabila ada perangkat yang men-subscribe Topik tersebut di broker yang sama, data yang di-publish tersebut akan diterima oleh perangkat tersebut. Jadi pastikan untuk bisa membuat Topik yang unik, yang memungkinkan hanya perangkat tertentu saja yang menerima.

Untuk membuatnya, ikuti langkah-langkah berikut ini:
1. Buka project Wokwi ini (project Wokwi ini sama seperti yang digunakan di Sub-Topik2 di atas): 
2. Download file rangkaian Proteus dan program Arduino di link ini (file ini sama seperti yang dibuat di Sub-Topik2 di atas): proteus2
3. Download file projek EasyBuilder Pro di link ini (file ini sama seperti yang dibuat di Sub-Topik2 di atas): EBPro_Wokwi_Proteus_PIDSuhu
4. Instal aplikasi IoT MQTT Panel di HP Android, dan kemudian ikuti langkah-langkah pengaturan sesuai gambar berikut ini:

Keterangan Gambar:
  • Gambar 3.2(a) Buka aplikasi IoT MQTT Panel, klik tombol Setup a Connection.
  • Gambar 3.2 (b) Isi Connection Name, isi broker: mqtt-dashboard.com, klik tombol + untuk menambah Dashboard, beri nama Dashboard, klik Save.
  • Gambar 3.2(c) Muncul Connection, indikator awan dengan tanda centang menunjukkan koneksi berhasil, klik tombol + di bawah untuk menambah Panel.

Keterangan Gambar:
  • Gambar 3.3(a) Ketika tombol + (Add a panel) di-klik, muncul daftar Panel, pilih Panel Slider.
  • Gambar 3.3(b) Terbuka Panel Slider, isi Panel Name: Setpoint, isi Topic dan Subscribe Topic: kontrol/pid_suhu, isi Payload max: 100.
  • Gambar 3.3(c) Masih di jendela Panel Slider, beri centang pada Payload is JSON data, isi JsonPath for subscribe: @.sp, isi JSON pattern for publish: {"sp":<payload>}, klik Save.

Keterangan Gambar:
  • Gambar 3.4(a) Klik tombol + Add a panel, di daftar Panel, pilih Text Log, isi Panel Name: Setpoint (SP), isi Topic: monitor/pid_suhu, beri centang pada Show last message only, beri centang pada Payload is JSON Data, isi JsonPath for subscribe: @.sp, klik Save.
  • Gambar 3.4 (b) Klik tombol + Add a panel, di daftar Panel, pilih Text Log, isi Panel Name: Sensor (PV), isi Topic: monitor/pid_suhu, beri centang pada Show last message only, beri centang pada Payload is JSON Data, isi JsonPath for subscribe: @.pv, klik Save.
  • Gambar 3.4(c) Klik tombol + Add a panel, di daftar Panel, pilih Text Log, isi Panel Name: Output (OP), isi Topic: monitor/pid_suhu, beri centang pada Show last message only, beri centang pada Payload is JSON Data, isi JsonPath for subscribe: @.op, klik Save.

Keterangan Gambar:
  • Gambar 3.5(a) Klik tombol + Add a panel, di daftar Panel, pilih Line Graph, isi Panel Name: Grafik PID Suhu, isi Topic for graph1: monitor/pid_suhu, isi Label for graph1: SP, beri centang pada Payload is JSON Data, isi JsonPath for subscribe: @.sp, 
  • Gambar 3.5(b) Masih di jendela Panel Line Graph, isi Topic for graph2: monitor/pid_suhu, isi Label for graph2: PV, beri centang pada Payload is JSON Data, isi JsonPath for subscribe: @.pv.
  • Gambar 3.5(c) Masih di jendela Panel Line Graph, beri centang pada Smooth curve, isi Max duration: 2 Minute, klik Save.
Keterangan Gambar:
  • Gambar 3.6(a) Tampilan Dashboard PID_Suhu dengan 5 buah Panel, yang terdiri dari sebuah Panel Slider, 3 buah Panel Text Log dan sebuah Panel Line Graph. 
  • Gambar 3.6(b) dan (c) Tampilan Dashboard PID_Suhu IoT MQTT Panel ketika dijalankan, dan simulasi Proteus, Wokwi dan Easy Builder Pro juga dijalankan.

5. Berikut ini tampilan simulasi Proteus, Wokwi, Easy Builder Pro dan IoT MQTT Panel, yang menunjukkan koneksi pada keempat perangkat lunak tersebut untuk kontrol dan monitor PID Suhu, terlihat juga grafik hasil kontrol yang ditampilkan EasyBuilder Pro sama dengan grafik Line Graph di IoT MQTT Panel, hanya di IoT MQTT Panel diperhalus.

Gambar 3.7(a) Setpoint dapat diatur dari Potensio di Proteus, Slide Potentiometer di Wokwi, Slider di EasyBuilder Pro atau Panel Slider di IoT MQTT Panel, terlihat pada gambar di atas, Setpoint diatur ke nilai 33

Gambar 3.7(b) Data hasil kontrol berupa nilai Sensor (PV) dibandingkan dengan nilai Setpoint (SP) dan ditampilkan dalam bentuk grafik di EasyBuilder Pro dan di IoT MQTT Panel

Agar lebih jelas, berikut ini video kontrol PID Suhu di Proteus, yang dihubungkan ke EasyBuilder Pro dan IoT MQTT Panel melalui Wokwi:

Catatan: Pengubahan Setpoint di EasyBuilder Pro dan di IoT MQTT Panel hanya akan diteruskan ke Proteus apabila halaman web simulasi Wokwi dibuka. Apabila simulasi Wokwi tidak ditampilkan, pengubahan data Setpoint melalui MQTT tidak akan diteruskan ke Proteus.

Video kontrol PID Suhu di Proteus, Wokwi, EasyBuilder Pro dan IoT MQTT Panel





===========================================================================================


4. Kontrol PID Kecepatan dengan Wokwi, Proteus,  EBPro & IoT MQTT Panel

Apabila di Sub-Topik 1 - 3 di atas, Kontrol PID diterapkan untuk pengaturan Suhu Oven, maka di Sub-Topik 4 ini, Kontrol PID diterapkan untuk pengaturan Kecepatan Motor DC dengan Enkoder. Jadi sebenarnya hampir semua langkah pembuatan pada Sub-Topik 4 ini sama seperti Sub-Topik 3, hanya berbeda pada rangkaian di Proteus dan program Arduinonya saja.

Catatan: Untuk Topik MQTT pada contoh di sini, baik Topik Publisher maupun Subscriber, silahkan untuk diganti sesuai keperluan. Hal yang penting diingat, bahwa ketika mem-publish data ke sebuah Topik tertentu, dengan broker yang tertentu, maka apabila ada perangkat yang men-subscribe Topik tersebut di broker yang sama, data yang di-publish tersebut akan diterima oleh perangkat tersebut. Jadi pastikan untuk bisa membuat Topik yang unik, yang memungkinkan hanya perangkat tertentu saja yang menerima.

Untuk membuatnya, ikuti langkah-langkah berikut ini:
2. Download file rangkaian Proteus dan program Arduino di link ini: proteus3
3. Download file projek EasyBuilder Pro di link ini: ebpro_pid_kec
4. Instal aplikasi IoT MQTT Panel di HP Android, dan kemudian ikuti langkah-langkah pengaturan sesuai gambar berikut ini. Langkah-langkah pengaturan di sini sama seperti langkah pengaturan di Sub Topik3 di atas, hanya ada perubahan pada nama Topik dan nilai min dan max data. Agar lebih jelas, tulisan yang diubah, diberi warna merah.

Gambar 4.1(a) Buka aplikasi IoT MQTT Panel, klik tombol Setup a Connection, (b) Isi Connection Name, isi broker: mqtt-dashboard.com, klik tombol + untuk menambah Dashboard, beri nama Dashboard, klik Save, (c) Muncul Connection, indikator awan dengan tanda centang menunjukkan koneksi berhasil, klik tombol + di bawah untuk menambah Panel.

Gambar 4.2 (a) Ketika tombol + (Add a panel) di-klik, muncul daftar Panel, pilih Panel Slider, (b) Terbuka Panel Slider, isi Panel Name: Setpoint, isi Topic dan Subscribe Topic: kontrol/pid_kec, isi Payload min: -1000, max: 1000, (c) Masih di jendela Panel Slider, beri centang pada Payload is JSON data, isi JsonPath for subscribe: @.sp, isi JSON pattern for publish: {"sp":<payload>}, klik Save.

Gambar 4.3 (a) Klik tombol +, di daftar Panel, pilih Text Log, isi Panel Name: Setpoint (SP), isi Topic: monitor/pid_kec, centang Show last message only, centang Payload is JSON Data, isi JsonPath for subscribe: @.sp, klik Save, (b) Klik tombol +, di daftar Panel, pilih Text Log, isi Panel Name: Sensor (PV), isi Topic: monitor/pid_kec, centang Show last message only, centang Payload is JSON Data, isi JsonPath for subscribe: @.pv, klik Save, (c) Klik tombol +, di daftar Panel, pilih Text Log, isi Panel Name: Output (OP), isi Topic: monitor/pid_kec, centang Show last message only, centang Payload is JSON Data, isi JsonPath for subscribe: @.op, klik Save.

Gambar 4.4(a) Klik tombol +, di daftar Panel, pilih Line Graph, isi Panel Name: Grafik PID Kec, isi Topic for graph1: monitor/pid_kec, isi Label for graph1: SP, centang Payload is JSON Data, isi JsonPath for subscribe: @.sp, (b) isi Topic for graph2: monitor/pid_kec, isi Label for graph2: PV, centang Payload is JSON Data, isi JsonPath for subscribe: @.pv, (c) Masih di jendela Panel Line Graph, centang Smooth curve, isi Max duration: 2 Minute, klik Save.

Gambar 4.5(a) Tampilan Dashboard PID_Kec dengan 5 buah Panel, yang terdiri dari Panel Slider, 3 Panel Text Log dan Panel Line Graph, (b) dan (c) Tampilan Dashboard PID_Kec IoT MQTT Panel ketika dijalankan

5. Berikut ini tampilan simulasi Proteus, Wokwi, Easy Builder Pro dan IoT MQTT Panel, yang menunjukkan koneksi pada keempat perangkat lunak tersebut untuk kontrol dan monitor PID Kecepatan, terlihat juga grafik hasil kontrol yang ditampilkan EasyBuilder Pro sama dengan grafik Line Graph di IoT MQTT Panel.

Gambar 4.6(a) Setpoint kecepatan diatur ke 660, terlihat hasil kontrol PID mendekati Setpoint

Gambar 4.6(b) Setpoint kecepatan diatur ke -490, terlihat hasil kontrol PID mendekati Setpoint

Gambar 4.6(c) Setpoint kecepatan diatur ke 960, terlihat hasil kontrol PID mendekati Setpoint

Agar lebih jelas, berikut ini video kontrol PID Kecepatan di Proteus, yang dihubungkan ke EasyBuilder Pro dan IoT MQTT Panel melalui Wokwi:

Catatan: Pengubahan Setpoint di EasyBuilder Pro dan di IoT MQTT Panel hanya akan diteruskan ke Proteus apabila halaman web simulasi Wokwi dibuka. Apabila simulasi Wokwi tidak ditampilkan, pengubahan data Setpoint melalui MQTT tidak akan diteruskan ke Proteus.

Video kontrol PID Kecepatan di Proteus, Wokwi, EasyBuilder Pro dan IoT MQTT Panel




===========================================================================================


5. Kontrol PID Posisi dengan Wokwi, Proteus,  EBPro & IoT MQTT Panel

Apabila di Sub-Topik 4 di atas, Kontrol PID diterapkan untuk pengaturan Kecepatan Motor DC, maka di Sub-Topik 5 ini, Kontrol PID diterapkan untuk pengaturan Posisi Poros Motor DC dengan Enkoder. Jadi sebenarnya hampir semua langkah pembuatan pada Sub-Topik 5 ini sama seperti Sub-Topik 4, hanya berbeda pada program Arduino-nya saja.

Catatan: Untuk Topik MQTT pada contoh di sini, baik Topik Publisher maupun Subscriber, silahkan untuk diganti sesuai keperluan. Hal yang penting diingat, bahwa ketika mem-publish data ke sebuah Topik tertentu, dengan broker yang tertentu, maka apabila ada perangkat yang men-subscribe Topik tersebut di broker yang sama, data yang di-publish tersebut akan diterima oleh perangkat tersebut. Jadi pastikan untuk bisa membuat Topik yang unik, yang memungkinkan hanya perangkat tertentu saja yang menerima.

Untuk membuatnya, ikuti langkah-langkah berikut ini:
2. Download file rangkaian Proteus dan program Arduino di link ini: proteus4
3. Download file projek EasyBuilder Pro di link ini: pid_pos
4. Instal aplikasi IoT MQTT Panel di HP Android, dan kemudian ikuti langkah-langkah pengaturan sesuai gambar berikut ini. Langkah-langkah pengaturan di sini sama seperti langkah pengaturan di Sub Topik3 di atas, hanya ada perubahan pada nama Topik dan nilai min dan max data. Agar lebih jelas, tulisan yang diubah, diberi warna merah.

Gambar 5.1(a) Buka aplikasi IoT MQTT Panel, klik tombol Setup a Connection, (b) Isi Connection Name, isi broker: mqtt-dashboard.com, klik tombol + untuk menambah Dashboard, beri nama Dashboard, klik Save, (c) Muncul Connection, indikator awan dengan tanda centang menunjukkan koneksi berhasil, klik tombol + di bawah untuk menambah Panel.

Gambar 5.2 (a) Ketika tombol + (Add a panel) di-klik, muncul daftar Panel, pilih Panel Slider, (b) Terbuka Panel Slider, isi Panel Name: Setpoint, isi Topic dan Subscribe Topic: kontrol/pid_pos, isi Payload min: -1000, max: 1000, (c) Masih di jendela Panel Slider, beri centang pada Payload is JSON data, isi JsonPath for subscribe: @.sp, isi JSON pattern for publish: {"sp":<payload>}, klik Save.

Gambar 5.3 (a) Klik tombol +, di daftar Panel, pilih Text Log, isi Panel Name: Setpoint (SP), isi Topic: monitor/pid_pos, centang Show last message only, centang Payload is JSON Data, isi JsonPath for subscribe: @.sp, klik Save, (b) Klik tombol +, di daftar Panel, pilih Text Log, isi Panel Name: Sensor (PV), isi Topic: monitor/pid_pos, centang Show last message only, centang Payload is JSON Data, isi JsonPath for subscribe: @.pv, klik Save, (c) Klik tombol +, di daftar Panel, pilih Text Log, isi Panel Name: Output (OP), isi Topic: monitor/pid_pos, centang Show last message only, centang Payload is JSON Data, isi JsonPath for subscribe: @.op, klik Save.

Gambar 5.4(a) Klik tombol +, di daftar Panel, pilih Line Graph, isi Panel Name: Grafik PID Posisi, isi Topic for graph1: monitor/pid_pos, isi Label for graph1: SP, centang Payload is JSON Data, isi JsonPath for subscribe: @.sp, (b) isi Topic for graph2: monitor/pid_pos, isi Label for graph2: PV, centang Payload is JSON Data, isi JsonPath for subscribe: @.pv, (c) Masih di jendela Panel Line Graph, centang Smooth curve, isi Max duration: 2 Minute, klik Save.

Gambar 5.5(a) Tampilan Dashboard PID_Posisi dengan 5 buah Panel, yang terdiri dari Panel Slider, 3 Panel Text Log dan Panel Line Graph, (b) dan (c) Tampilan Dashboard PID_Posisi IoT MQTT Panel ketika dijalankan

5. Berikut ini tampilan simulasi Proteus, Wokwi, Easy Builder Pro dan IoT MQTT Panel, yang menunjukkan koneksi pada keempat perangkat lunak tersebut untuk kontrol dan monitor PID Posisi, terlihat juga grafik hasil kontrol yang ditampilkan EasyBuilder Pro sama dengan grafik Line Graph di IoT MQTT Panel.

Gambar 5.6(a) Setpoint posisi poros diatur ke -420, terlihat hasil kontrol PID mendekati Setpoint

Gambar 5.6(b) Setpoint posisi poros diatur ke 600, terlihat hasil kontrol PID mendekati Setpoint

Gambar 5.6(c) Setpoint posisi diatur ke -530, terlihat hasil kontrol PID mendekati Setpoint

Agar lebih jelas, berikut ini video kontrol PID Posisi di Proteus, yang dihubungkan ke EasyBuilder Pro dan IoT MQTT Panel melalui Wokwi:

Catatan: Pengubahan Setpoint di EasyBuilder Pro dan di IoT MQTT Panel hanya akan diteruskan ke Proteus apabila halaman web simulasi Wokwi dibuka. Apabila simulasi Wokwi tidak ditampilkan, pengubahan data Setpoint melalui MQTT tidak akan diteruskan ke Proteus.

Video kontrol PID Posisi di Proteus, Wokwi, EasyBuilder Pro dan IoT MQTT Panel




===========================================================================================

No comments:

Post a Comment