3. Arduino, Proteus & Node-RED

Di bagian ini, kita akan menghubungkan Node-RED dengan Arduino, yang disimulasikan dengan Proteus. Saya sangat menyukai Proteus, karena bisa menghasilkan simulasi yang sangat baik sekali, bahkan bisa mensimulasikan rangkaian dengan banyak mikrokontroler, termasuk Arduino. Dengan Proteus, skema rangkaian juga menjadi lebih jelas, mudah dipahami, serta Proteus dilengkapi dengan banyak sekali komponen, termasuk Arduino, LCD, Motor DC, 7-segmen, dan masih banyak lagi, serta dilengkapi alat ukur seperti layaknya laboratorium. Salah satu komponen di Proteus yang sangat menarik menurut saya adalah COMPIM, yang bisa menghubungkan software Proteus dengan "dunia luar" melalui port serial.

Di bagian ini, kita akan membuat Arduino yang disimulasikan dengan Proteus, dihubungkan dengan Node-RED melalui COMPIM. Untuk bisa terhubung secara serial, Node-RED memerlukan tambahan node serial. Untuk mendapatkan node serial ini, buka Menu Node-RED, pilih Manage palette, pilih Tab Install, ketik di kolom pencarian: "serial", kemudian pilih node-red-node-serialport, klik install.

Gambar 1. Tambahkan node serialport dengan menginstalnya melalui Manage palette 

Setelah node serialport terinstal, maka berikut ini langkah-langkah untuk menghubungkan Node-RED dengan Arduino yang disimulasikan dengan Proteus:

1. Ambil node serial in dan node serial out dari kotak palet, dan tempatkan di halaman program. Hubungkan node serial in dengan node debug, dan node inject dengan node serial out.

Gambar 2. Hubungkan node serial in dengan node debug, dan node inject dengan node serial out

2. Karena menggunakan 2 software yang harus dihubungkan dengan komunikasi serial, maka di sini memerlukan pasangan COM, untuk mensimulasikan sambungan komunikasi tersebut. Pasangan port COM yang pertama ditempatkan di software pertama, dan pasangan port COM yang kedua ditempatkan di software kedua. Untuk membuat pasangan COM ini, rekan-rekan bisa menggunakan software com0com (link: https://sourceforge.net/projects/com0com/), atau VSPD (link: https://www.virtual-serial-port.org/vspd-post-download.html). 

3. Setelah pasangan COM berhasil terinstal, maka di Device Manager, akan muncul pasangan port COM di bawah kategori Ports (COM & LPT) seperti ditunjukkan pada gambar berikut ini:

Gambar 3. Di Device Manager, di kategori Ports (COM & LPT) terlihat pasangan port COM

4. Berikutnya klik 2 kali pada node serial in. Di jendela Edit node serial in, klik tombol pensil untuk membuat seting komunikasi serial yang baru. Dalam contoh di sini digunakan pasangan port COM5 dan COM6. Port COM5 dipasang di node serialport Node-RED, sedangkan port COM6 dipasang di COMPIM Proteus. Jangan lupa untuk menyamakan Baud Rate antara node serialport dengan COMPIM. Dalam contoh di sini  Baud Rate diatur ke 9600. Hal penting berikutnya adalah, tambahkan karakter pada Output dengan karakter Enter, yang terdiri dari Carriage Return dan New Line, yang dituliskan dengan kode "\r\n", seperti terlihat pada gambar berikut ini. 

Gambar 4. Serial Port = COM5, Baud Rate = 9600, Output = \r\n

Catatan: Jika Output tidak diberi tambahan karakter Enter, maka setiap kali data dikirimkan ke COMPIM Proteus, maka data akan ditempatkan di samping kanan data sebelumnya, tidak ditempatkan di bawah data sebelumnya, sehingga akan terus memanjang ke kanan setiap kali data yang baru diterima.

5. Tekan tombol Add atau Update, maka seting yang baru dengan nama COM5:9600-8N1 muncul di kolom Serial Port. Klik Done. Buat node serial out juga menggunakan seting COM5:9600-8N1.

Gambar 5. Node serial in dan serial out menggunakan seting COM5:9600-8N1

6. Berikutnya di Proteus, ambil Virtual Terminal, dari Tool Instruments, di Toolbar, tempatkan di halaman gambar. Kemudian ambil komponen COMPIM. Hubungkan kaki RXD Virtual Terminal dengan RXD COMPIM, dan kaki TXD Virtual Terminal dengan TXD COMPIM.

Gambar 6. Ambil Virtual Terminal dan COMPIM, dan hubungkan RXD dan TXD keduanya

7. Berikutnya atur COMPIM. Klik 2 kali COMPIM. Di jendela Edit Component, isi Physical Port = COM6 (pasangan COM), Physical Baud Rate = 9600, dan Virtual Baud Rate = 9600. Klik OK.

Gambar 7. Atur COMPIM Physical Port = pasangan COM, Physical dan Virtual Baud Rate = 9600

8. Berikutnya atur Virtual Terminal. Klik 2 kali Virtual Terminal. Di jendela Edit Component, pastikan Baud Rate = 9600.

Gambar 8. Pastikan Baud Rate Virtual Terminal = 9600 

9. Buat tampilan Node-RED bersisian dengan tampilan Proteus. Jangan lupa untuk menekan tombol Deploy di Node-RED agar programnya bisa dijalankan. Tekan tombol Play atau Run di Proteus. Maka akan muncul jendela Virtual Terminal di Proteus. Agar karakter yang diketikkan di Virtual Terminal dapat terlihat, klik kanan jendela Virtual Terminal, pilih atau beri centang Echo Typed Characters.

Gambar 9. Deploy Node-RED, dan jalankan Proteus. Pada jendela Virtual Terminal, klik kanan, centang pada Echo Typed Characters

10. Mula-mula, kita akan mengirimkan data timestamp node inject Node-RED ke Proteus. Agar data timestamp juga muncul di kotak output debug, hubungkan output node inject ke node debug. Kemudian tekan tombol di node inject. Maka seharusnya kotak output debug menampilkan data timestamp, begitu juga di Virtual Terminal di Proteus, juga akan menampilkan data timestamp yang sama. 

Gambar 10. Setiap kali node inject ditekan, Virtual Terminal di Proteus menampilkan data timestamp yang sama seperti data di kotak output debug di Node-RED

11. Berikutnya, kita akan mengirimkan data dari Virtual Terminal Proteus ke node debug Node-RED. Hal yang penting diketahui di sini, Node-RED membutuhkan akhiran data Enter agar data dapat diterima dan ditampilkan. Karakter Enter tidak dapat dihasilkan dengan menekan Enter di Virtual Terminal. Untuk itu perlu bantuan Notepad. Ketik data yang akan dikirimkan ke Node-RED di Notepad, kemudian akhiri dengan Enter. Setelah itu Select All tulisan di Notepad tersebut, dengan menekan tombol Control + A, kemudian copy dengan menekan tombol Control + C, kemudian tempel di Virtual Terminal Proteus dengan cara meng-klik kanan Virtual Terminal, kemudian pilih Paste. Dalam contoh di sini, data yang dikirimkan adalah test kirim1. Setelah diketikkan di Notepad, dan diberi Enter, kemudian di-copy semuanya, dan ditempel di Virtual Terminal, maka terlihat kotak output debug di Node-RED menampilkan tulisan "test kirim1", yang diikuti dengan simbol Enter (⏎).

Gambar 11. Kotak output debug menampilkan data yang dikrimkan dari Virtual Terminal Proteus. Hal yang perlu diperhatikan di sini, dibutuhkan akhiran Enter agar data bisa ditampilkan di Node-RED

12. Setelah komunikasi serial kirim dan terima bisa diperlihatkan antara node serialport di Node-RED dengan Virtual Terminal di Proteus, maka berikutnya, kita tambahkan Arduino, yang disimulasikan dengan komponen ATmega328P (Catatan: ATmega328P ini adalah mikrokontroler yang digunakan di Arduino Uno dan Arduino Nano). Buat rangkaian seperti gambar berikut ini:

Gambar 12. Rangkaian untuk komunikasi serial Arduino dengan Node-RED di Proteus

Catatan: Di Proteus, buat rangkaian 8 buah alat input digital dengan tombol, dan 8 buah alat output digital dengan LED. Untuk memudahkan, maka penempatan komponennya diurutkan mulai dari D2 hingga D13, dilanjutkan dengan A0 sampai A3. Kaki A0 sampai A3, bisa juga dipanggil dengan nama D14, D15, D16 dan D17 secara berturut-turut. Terlihat juga 2 buah Virtual Terminal digunakan pada rangkaian di atas. Virtual Terminal yang di kiri digunakan untuk menampilkan data yang dikirimkan dari Node-RED ke Arduino. Sedangkan Virtual Terminal yang di kanan digunakan untuk menampilkan data yang dikirimkan dari Arduino ke Node-RED. Rekan-rekan dapat mengunduh rangkaian Proteus Gambar 12 di atas di link ini: 

13. Berikut ini program Arduino untuk rangkaian di atas:
  1. int a0 = 0;
  2. int b0 = 0;
  3. int c0 = 0;
  4. int d0 = 0;
  5. int e0 = 0;
  6. int f0 = 0;
  7. int g0 = 0;
  8. int h0 = 0;
  9. void setup() {
  10.   Serial.begin(9600);
  11.   pinMode(2, INPUT_PULLUP);
  12.   pinMode(3, INPUT_PULLUP);
  13.   pinMode(4, INPUT_PULLUP);
  14.   pinMode(5, INPUT_PULLUP);
  15.   pinMode(6, INPUT_PULLUP);
  16.   pinMode(7, INPUT_PULLUP);
  17.   pinMode(8, INPUT_PULLUP);
  18.   pinMode(9, INPUT_PULLUP);
  19.   pinMode(10, OUTPUT);
  20.   pinMode(11, OUTPUT);
  21.   pinMode(12, OUTPUT);
  22.   pinMode(13, OUTPUT);
  23.   pinMode(14, OUTPUT);  //=A0
  24.   pinMode(15, OUTPUT);  //=A1
  25.   pinMode(16, OUTPUT);  //=A2
  26.   pinMode(17, OUTPUT);  //=A3
  27. }
  28. void loop() {
  29.   int a = digitalRead(2);
  30.   if (a != a0 && a == 0) Serial.println("1");
  31.   a0 = a;
  32.   int b = digitalRead(3);
  33.   if (b != b0 && b == 0) Serial.println("2");
  34.   b0 = b;
  35.   int c = digitalRead(4);
  36.   if (c != c0 && c == 0) Serial.println("3");
  37.   c0 = c;
  38.   int d = digitalRead(5);
  39.   if (d != d0 && d == 0) Serial.println("4");
  40.   d0 = d;
  41.   int e = digitalRead(6);
  42.   if (e != e0 && e == 0) Serial.println("5");
  43.   e0 = e;
  44.   int f = digitalRead(7);
  45.   if (f != f0 && f == 0) Serial.println("6");
  46.   f0 = f;
  47.   int g = digitalRead(8);
  48.   if (g != g0 && g == 0) Serial.println("7");
  49.   g0 = g;
  50.   int h = digitalRead(9);
  51.   if (h != h0 && h == 0) Serial.println("8");
  52.   h0 = h;
  53. }
  54. void serialEvent() {
  55.   while (Serial.available()) {
  56.     int data = Serial.parseInt();
  57.     if (Serial.read() == char(13)) {
  58.       switch (data) {
  59.         case 1:
  60.           mati();
  61.           digitalWrite(10, HIGH);
  62.           break;
  63.         case 2:
  64.           mati();
  65.           digitalWrite(11, HIGH);
  66.           break;
  67.         case 3:
  68.           mati();
  69.           digitalWrite(12, HIGH);
  70.           break;
  71.         case 4:
  72.           mati();
  73.           digitalWrite(13, HIGH);
  74.           break;
  75.         case 5:
  76.           mati();
  77.           digitalWrite(14, HIGH);
  78.           break;
  79.         case 6:
  80.           mati();
  81.           digitalWrite(15, HIGH);
  82.           break;
  83.         case 7:
  84.           mati();
  85.           digitalWrite(16, HIGH);
  86.           break;
  87.         case 8:
  88.           mati();
  89.           digitalWrite(17, HIGH);
  90.           break;
  91.         default:
  92.           mati();
  93.           break;
  94.       }
  95.     }
  96.   }
  97. }
  98. void mati() {
  99.   digitalWrite(10, LOW);
  100.   digitalWrite(11, LOW);
  101.   digitalWrite(12, LOW);
  102.   digitalWrite(13, LOW);
  103.   digitalWrite(14, LOW);
  104.   digitalWrite(15, LOW);
  105.   digitalWrite(16, LOW);
  106.   digitalWrite(17, LOW);
  107. }
Program Arduino di atas dapat diunduh di link ini: 
Keterangan program:
  • Instruksi void setup di baris 9 - 27 digunakan untuk mengatur seting baud rate komunikasi serial, menugaskan kaki input dan kaki output Arduino.
  • Instruksi void loop di baris 28 - 53 digunakan untuk membuat data pembacaan tombol hanya dikirimkan ke komunikasi serial, apabila 2 hal berikut ini dipenuhi: yaitu hanya apabila datanya berubah (syarat pertama)  dan hanya apabila tombol tersebut ditekan (syarat kedua).
  • Instruksi void serialEvent di baris 54 - 97 digunakan untuk menerima data dari Node-RED, dan menyalakan LED sesuai dengan data yang diterima, yang diurutkan mulai dari LED pertama untuk data "1" hingga LED kedelapan untuk data "8".
 
14. Salin program di atas, dan tempelkan di halaman editor program software Arduino IDE. Tekan tombol Verify (bergambar centang) untuk meng-kompilasi program tersebut. Jangan lupa untuk memilih Board Arduino Nano atau Arduino Uno. Setelah pesan "Done Compiling" muncul, cari lokasi file ".hex" hasil kompilasi di kotak output bagian bawah. 

Catatan: Apabila di kotak output tidak muncul tulisan sama sekali, buka Preferences di menu File, kemudian beri centang pada pilihan compile di baris "Show verbose output during:". Setelah mengaktifkan pilihan verbose output tersebut, ulangi kembali menekan tombol verify, dan setelah selesai kompilasi, seharusnya akan muncul lokasi file ".hex" di kotak output, seperti gambar berikut.

Gambar 13. Ketika kompilasi selesai, seharusnya muncul lokasi file ".hex" di kotak output. 

15. Pilih lokasi file ".hex" tersebut, tekan tombol Control+C untuk meng-copy. Kemudian buka Proteus. Klik 2 kali pada komponen ATmega328P,  hingga muncul jendela Edit Component. Tempelkan lokasi file ".hex" yang telah di-copy di kolom Program File (kotak warna biru). Berikutnya atur CLKDIV8: Unprogrammed (kotak warna oranye). Atur CKSEL Fuses: Ext. Clock (kotak warna hijau). Atur Clock Frequency: 16MHz (kotak warna merah). Klik OK.

Gambar 14. Di Edit Component ATmega328P, isi Program File dengan lokasi file ".hex", atur CLKDIV8: Unprogrammed, CKSEL Fuses: Ext. Clock dan Clock Frequency: 16MHz.

16. Di Node-RED, ubah data node inject dari timestamp menjadi number dengan angka 0. Kemudian perbanyak node inject tersebut, dan buat angkanya dari 1 s/d 8. Hubungkan output kesembilan node inject tersebut ke node debug dan ke node serial out seperti gambar berikut.

Gambar 15. Di Node-RED, tambahkan 8 buah node inject, kemudian buat kesembilan data node inject tersebut menjadi number, dengan nilai 0 s/d 8, kemudian hubungkan outputnya ke node debug dan node serial out

Program Node-RED di atas dapat diunduh di link ini: 

17. Tampilkan Node-RED berdampingan dengan Proteus. Tekan tombol Deploy Node-RED, dan tekan tombol Run untuk menjalankan Proteus. Kemudian tekan tombol di rangkaian Proteus dari tombol pertama hingga kedelapan, dan perhatikan data di kotak output debug Node-RED, seharusnya menampilkan angka yang sama seperti urutan tombol yang ditekan, yang juga ditampilkan di jendela Virtual Terminal.

Gambar 16. Kotak output debug menampilkan angka 1 s/d 6, sama dengan tampilan data di Virtual Terminal, yang mengikuti urutan tombol yang telah ditekan 

18. Berikutnya tekan tombol node inject di Node-RED secara berurutan, dimulai dari node inject 0 hingga node inject 8. Perhatikan nyala LED di rangkaian Proteus, dan juga tampilan di jendela Virtual Terminal, serta di kotak debug output Node-RED, seharusnya tampilan ketiganya mengikuti tombol apa yang ditekan di Node-RED.

Gambar 17. Tombol di node inject di Node-RED ditekan mulai dari 0 hingga 4 secara berurutan, tampak kotak output debug dan Virtual Terminal di Proteus menampilkan angka 0 hingga 4, dan juga LED keempat di Proteus sedang menyala.

19. Sampai di sini telah ditunjukkan bagaimana menghubungkan Arduino dengan Node-RED melalui komunikasi serial. Agar bisa membuat komunikasi serial di Node-RED, node serialport perlu diinstal. Kemudian karena Arduino disimulasikan dengan software Proteus, maka diperlukan COMPIM, yang mensimulasikan hardware port serial, dan pasangan port COM sebagai emulator port serial untuk software Proteus dan Node-RED. 

No comments:

Post a Comment