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:
- Rangkaian di Proteus bisa terhubung Wi-Fi melalui Wokwi.
- Komponen Wokwi mendapat tambahan komponen Proteus yang luar biasa banyak.
- 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:
1. Buka project Wokwi ini: https://wokwi.com/projects/395730792335254529
Gambar 1.1 Rangkaian ESP32 dengan Slide Potentiometer, Pushbutton dan OLED I2C
Catatan: Berikut 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.
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:
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <PID_v2.h>
- bool go = false;
- int set0 = 0, setpoin = 0;
- double KP = 0.0, KI = 0.0, KD = 0.0;
- PID_v2 myPID(KP, KI, KD, PID::Direct);
- Adafruit_SSD1306 display(128, 64, &Wire, -1);
- unsigned long skr = 0;
- void setup() {
- Serial.begin(9600);
- if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
- Serial.println(F("SSD1306 allocation failed"));
- for (;;)
- ;
- }
- pinMode(2, INPUT_PULLUP);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- myPID.SetOutputLimits(-255, 255);
- myPID.SetSampleTime(10);
- delay(1000);
- }
- void loop() {
- set0 = map(analogRead(A6), 0, 1023, 0, 100);
- double sensor = analogRead(A0) / 10.23;
- KP = analogRead(A1) / 102.3;
- KI = analogRead(A2) / 102.3;
- KD = analogRead(A3) / 102.3;
- int mulai = !digitalRead(2);
- if (mulai) {
- setpoin = set0;
- myPID.SetTunings(KP, KI, KD);
- myPID.Start(sensor, 0, setpoin);
- }
- if (go) {
- myPID.SetTunings(KP, KI, KD);
- myPID.Start(sensor, 0, setpoin);
- go = false;
- }
- const double output = myPID.Run(sensor);
- analogWrite(10, abs(output));
- if (output > 0) {
- digitalWrite(8, LOW);
- digitalWrite(9, HIGH);
- }
- if (output < 0) {
- digitalWrite(9, LOW);
- digitalWrite(8, HIGH);
- }
- if (millis() - skr > 1000) {
- display.clearDisplay();
- display.setTextSize(2);
- display.setTextColor(SSD1306_WHITE);
- display.setCursor(0, 0);
- display.print(F("SP : "));
- display.println(setpoin);
- display.print(F("PV : "));
- display.println(sensor);
- display.setTextSize(1);
- display.print(F("OP : "));
- display.println(output);
- display.print(F("KP : "));
- display.println(KP);
- display.print(F("KI : "));
- display.println(KI);
- display.print(F("KD : "));
- display.println(KD);
- display.display();
- Serial.print(setpoin);
- Serial.print(',');
- Serial.print(sensor);
- Serial.print(',');
- Serial.println(output);
- skr = millis();
- }
- }
- void serialEvent() {
- while (Serial.available()) {
- int a = Serial.parseInt();
- if (Serial.read() == char(13)) {
- setpoin = a;
- go = true;
- }
- }
- }
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:
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
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:
1. Buka project Wokwi ini: https://wokwi.com/projects/395960968689293313
Gambar 2.2 Rangkaian ESP32 dengan Slide Potentiometer dan OLED I2C
Catatan: Berikut 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).
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.
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <PID_v2.h>
- bool go = false;
- int set0 = 0, setpoin = 0;
- double KP = 0.0, KI = 0.0, KD = 0.0;
- PID_v2 myPID(KP, KI, KD, PID::Direct);
- Adafruit_SSD1306 display(128, 64, &Wire, -1);
- unsigned long skr = 0;
- void setup() {
- Serial.begin(9600);
- if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
- Serial.println(F("SSD1306 allocation failed"));
- for (;;)
- ;
- }
- pinMode(2, INPUT_PULLUP);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- myPID.SetOutputLimits(-255, 255);
- myPID.SetSampleTime(10);
- delay(1000);
- }
- void loop() {
- set0 = map(analogRead(A6), 0, 1023, 0, 100);
- double sensor = analogRead(A0) / 10.23;
- KP = analogRead(A1) / 102.3;
- KI = analogRead(A2) / 102.3;
- KD = analogRead(A3) / 102.3;
- int mulai = !digitalRead(2);
- if (mulai) {
- setpoin = set0;
- myPID.SetTunings(KP, KI, KD);
- myPID.Start(sensor, 0, setpoin);
- }
- if (go) {
- myPID.SetTunings(KP, KI, KD);
- myPID.Start(sensor, 0, setpoin);
- go = false;
- }
- const double output = myPID.Run(sensor);
- analogWrite(10, abs(output));
- if (output > 0) {
- digitalWrite(8, LOW);
- digitalWrite(9, HIGH);
- }
- if (output < 0) {
- digitalWrite(9, LOW);
- digitalWrite(8, HIGH);
- }
- if (millis() - skr > 2000) {
- display.clearDisplay();
- display.setTextSize(2);
- display.setTextColor(SSD1306_WHITE);
- display.setCursor(0, 0);
- display.print(F("SP : "));
- display.println(setpoin);
- display.print(F("PV : "));
- display.println(sensor);
- display.setTextSize(1);
- display.print(F("OP : "));
- display.println(output);
- display.print(F("KP : "));
- display.println(KP);
- display.print(F("KI : "));
- display.println(KI);
- display.print(F("KD : "));
- display.println(KD);
- display.display();
- Serial.print(setpoin);
- Serial.print(',');
- Serial.print(int(sensor*100));
- Serial.print(',');
- Serial.println(int(output));
- skr = millis();
- }
- }
- void serialEvent() {
- while (Serial.available()) {
- int a = Serial.parseInt();
- if (Serial.read() == char(13)) {
- setpoin = a;
- go = true;
- }
- }
- }
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:
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.
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-axis, beri 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:
1. Buka project Wokwi ini: https://wokwi.com/projects/396273672313441281
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:
1. Buka project Wokwi ini: https://wokwi.com/projects/396398197662759937
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