Membuat Human Machine Interface sederhana dengan menggunakan TFT LCD dan Arduino Uno

Membuat Human Machine Interface sederhana dengan menggunakan TFT LCD dan Arduino Uno

Apa itu Human Machine Interface?

Human Machine Interface atau biasa disingkat HMI adalah merupakan layar atau dashboard yang merupakan penghubung antara manusia dan mesin. Melalui layar tersebut manusia sebagai operator dapat melihat kondisi yang terjadi pada mesin dan juga sekaligus mengirimkan perintah-perintah untuk mengoperasikan mesin.

human machine interface

Bagaimana membuat HMI dengan Arduino Uno?

Prinsip kerja HMI sebetulnya adalah mengirimkan perintah operator ke mesin dan membuat operator melihat feedback yang dikirim oleh mesin. Untuk melakukan ini dapat digunakan sebuah TFT LCD Touchscreen LCD di mana LCD ini bukan hanya menampilkan gambar namun juga dapat menerima respon dari operator berupa sentuhan pada layarnya. Dengan menggunakan LCD ini maka kita tinggal membuat sebuah program pada Arduino Uno yang akan menampilkan gambar pada layar LCD berdasarkan perintah yang dikirim lewat serial port dan sebaliknya akan mengirimkan data ke serial port berdasarkan penekanan layar touchscreen oleh operator.

Di sini Arduino Uno berfungsi sebagai bagian dari HMI, yaitu membaca perintah-perintah yang dikirim oleh touchscreen LCD dan menampilkan perintah-perintah dari serial port ke layar LCD. Serial port dari Arduino Uno ini nantinya akan dihubungkan ke bagian main controller berupa mikrokontroler / arduino lain ataupun PLC yang berfungsi sebagai mesin yang akan dihubungkan dengan operator.

3.5 inch TFT Touchscreen LCD

Dengan keterbatasan memori yang dimiliki Arduino Uno maka kali ini saya hanya membuat sebuah HMI sederhana saja yang hanya menampilkan layar keypad 4×3 dan menampilkan pesan yang diterima oleh serial port ke layar LCD dalam bentuk teks. Namun dengan menggunakan aplikasi pada artikel ini anda dapat memiliki sebuah keypad touchscreen yang selain dapat mengirimkan output ke mikrokontroler utama juga dapat sekaligus sebagai penampil pesan di layarnya.

flowchart hmi arduino

Gambar di atas ini adalah merupakan garis besar flowchart dari HMI yang kita buat. Di sini terlihat ada 2 proses utama yaitu proses dari operator ke mesin yang dilakukan dengan mendeteksi penekanan touchscreen dan mengirimkan ke port serial dan proses kedua adalah dari mesin ke operator yaitu dengan menterjemahkan perintah mesin yang dikirim lewat serial port dan ditampilkan di layar LCD.

Flowchart dibawah ini akan menjelaskan alur program pada bagian perintah dari master dan respon pada layar LCD atau bagian yang menampilkan respon mesin ke operator lewat layar LCD.

flowchart perintah ke mesin

&RESTART ini akan menampilkan pesan RESTART di LCD saat data “&RESTART” dikirim melalui serial port dan &READY akan menampilkan pesan READY di LCD saat data “&READY” dikirim.

&DISPLAYON, saat data “&DISPLAYON” diterima di serial port maka tampilan LCD untuk semua tombol-tombol ditampilkan di layar.

&DISPLAYOFF, saat data “&DISPLAYOFF” diterima di serial port maka tampilan LCD akan hitam.

&TEXT, bagian ini berfungsi untuk hanya menampilkan pesan yang diterima di port serial saja dan menghapus semua tampilan yang lain dari layar LCD. Oleh karena itu sebelum pesan ditampilkan terlebih dahulu layar dihapus. Kemudian posisi koordinat pesan (sumbu x dan y), ukuran font, warna tulisan dan warna background diset terlebih dahulu baru kemudian pesan ditampilkan

&SUBMENU, hampir sama dengan &TEXT hanya saja pada bagian ini tidak dilakukan penghapusan layar, jadi tampilan yang sebelumnya sudah ada di layar LCD tidak akan dihapus.

hmi arduino picture4

&DISP, bagian ini berfungsi untuk menampilkan tombol-tombol yang ditentukan. Format datanya adalah sebagai berikut, &DISP[numeric0/spasi][numeric1/spasi][numeric2/spasi][numeric3/spasi][numeric4/spasi][numeric5/spasi][numeric6/spasi][numeric7/spasi][numeric8/spasi][numeric9/spasi][numeric*/spasi][numeric#/spasi][ENTER]. Di sini setiap tombol menempati satu lokasi dalam substring, tombol 0 di substring 4, tombol 1 di substring 5 dst sehingga untuk merespon data tersebut dapat digunakan code berikut

hmi-arduino-code

Apabila tombol tidak diinginkan tampil maka dapat dituliskan string spasi dan apabila tombol ingin ditampilkan maka dituliskan nilai numeric dari tombol. Contoh apabila kita ingin menampilkan hanya tombol 1,4 dan * maka perintah yang dikirim adalah &DISP 1  4     *[ENTER]

perintah-hmi-arduino

 

hmi arduino picture

Fungsi ini digunakan apabila kita ingin memandu operator bahwa hanya tombol-tombol yang tampil ini saja yang harus ditekan sebagai pilihan menu.

&LOCK berfungsi untuk mengunci tombol sehingga tidak ada data yang dikirim ke serial port saat layar disentuh. Hal ini biasanya kita gunakan untuk memastikan operator tidak dapat menekan tombol apapun saat mesin sedang sibuk dan tidak dapat diinterupsi.

&UNLOCK berfungsi untuk membuka penguncian tombol sehingga operator dapat kembali bebas melakukan penekanan tombol.

&WAKEUP berfungsi untuk mengubah nilai status wake up menjadi true yang artinya LCD baru saja di “wake up” kan dengan penekanan tombol touchscreen di mana sebelumnya tombol dalam keadaan OFF. Pada kondisi ini, maka tidak diperkenankan ada data serial yang terkirim karena penekanan tombol hanya berfungsi untuk menampilkan lagi layar yang sebelumnya OFF

&SLEEP berfungsi sebaliknya yaitu mengubah status wake up menjadi false yang artinya nanti pada setiap penekanan tombol, data serial akan dikirimkan karena asumsi bahwa LCD sudah wake up sejak awal dan semua penekanan di layar tujuannya hanyalah mengirimkan data tombol ke serial port.

&MENU berfungsi untuk menampilkan maksimal 10 baris pesan (bisa kurang dari itu) sekaligus di lokasi yang diawali dari koordinat x,y dan akan bertambah 50 pixel setiap baris pada sumbu y nya. Contoh &MENU(50,0,3,65535,0,1. DELTA,2. ELECTRONIC,3. DESIGN,4. SERVICE,5. RUKO,6. KLAMPIS,7. SQUARE,8. SURABAYA,9. 60117,10. INDONESIA )[ENTER]

hmi-arduino-picture

maka yang tampil pada layar LCD adalah sebagai berikut

 

Menu HMI Arduino

Format data adalah &MENU([x],[y],[font size],[color],[background color],[text1],[text2],…..,[text10])[ENTER]. Kita juga bisa hanya menampilkan 2 baris saja contohnya text1 dan text2 dan membiarkan baris2 berikutnya kosong.

Flowchart berikutnya ini adalah alur pada bagian respon saat penekanan tombol pada touchscreen yaitu alur di mana operator memberikan perintah ke mesin.

flowchart hmi arduino

Pada saat terjadi penekanan tombol terlebih dahulu diperiksa apakah status lock nya true. Status lock ini merupakan indikasi bahwa tombol terkunci atau tidak. Terkunci bila kondisinya true sehingga semua penekanan tombol tidak akan direspon. Pada kondisi ini alur program akan skip semua proses dan return. Kemudian selanjutnya dilakukan pemeriksaan akan status button, kondisi false bila tombol sebelumnya tidak aktif sehingga program akan menampilkan semua tombol di mana di sini akan terlihat semua tombol muncul saat layar disentuh. Status wake up = true yang merupakan indikasi bahwa saat ini sedang proses wake up layar LCD dari blank menjadi tampilan numeric keypad. Kemudian juga status button diset true yaitu di mana semua tombol aktif.

Namun apabila sebelumnya tombol sudah dalam keadaan aktif maka ini merupakan indikasi bahwa bukan proses wake up (dari layar off menjadi numeric) yang sedang berjalan melainkan penekanan tombol biasa di mana program harus segera mengirimkan data numeric ke serial port yang selanjutnya akan diterima oleh mesin yang terhubung ke serial port tersebut.

Penjelasan Sketch / Source Code

sketch hmi arduino

Program diawali dengan menentukan library-library yang digunakan, kemudian nilai minimum dan maksimum penekanan tombol lalu dilanjutkan dengan deklarasi variabel-variabel yang akan digunakan. Karena di sini kita akan menggunakan 12 tombol dengan susunan 4 baris 3 kolom maka selanjutnya didefinisikan dahulu ke 12 tombol tersebut

sketch hmi arduino

Lalu di bagian setup diawali dengan inisialisasi LCD, orientasi dan tombol-tombol. Untuk variabel statusbutton diset false yang artinya tidak ada tombol yang ditampilkan dan status lock juga false yang artinya tombol-tombol tidak dikunci alias dapat merespon bila disentuh.

hmi-arduino-inisial-button

Pada bagian inisial button ini kita dapat mengatur 12 tombol keypad berupa posisi koordinat tombol, lebar dan tinggi tombol, warna border, background dan foreground, teks yang tertulis di tombol dan juga ukuran font.

hmi-arduino-sketch

Kemudian selanjutnya pada saat ada kondisi di mana tombol 1 ditekan  dan kondisi status lock tidak dalam keadaan terkunci yang artinya tombol tidak terkunci, maka warna tombol akan diubah menjadi warna hitam yang merupakan indikasi bahwa tombol tertekan. Fungsi mengirimkan data tombol ke port serial segera dipanggil. Namun fungsi ini belum langsung mengirimkan data ke port serial, melainkan ada variabel-variabel status yang harus dicek terlebih dahulu.

hmi arduino sketch

Pada bagian di atas ini tampak sebelum mengirimkan data tombol ke port serial terlebih dahulu dicek apakah status wakeup false atau true. Status wakeup true apabila sebelumnya display off dan terjadi penekanan tombol sehingga display tombol hanya dinyalakan saja tanpa mengirimkan data apapun ke serial. Namun bila status wakeup false yang artinya kondisi sudah wake up dimana display tombol-tombol sudah nyala maka tidak perlu lagi mengirimkan data tombol ke port serial.

sketch5-hmi-arduino

Untuk mengetahui status wake up true atau false dilakukan oleh fungsi cekdisplaybutton() yang dipanggil terlebih dahulu sebelumnya. Di sini akan dicek apakah status tombol false atau true. Apabila status tombol false yang artinya belum ditampilkan maka akan dipanggil fungsi untuk menampilkan tombol-tombol di layar dan status wake up maupun status button di set true lalu return ke fungsi pemanggil.

Namun apabila status tombol true, yang artinya tombol sudah tampil maka tidak perlu lagi memanggil fungsi penampil tombol dan status wake up diset false karena dianggap proses wake up sudah selesai.

sketch6-hmi-arduino

Pada saat tombol diangkat dan kondisi tombol tidak terkunci maka akan dipanggil fungsi menampilkan warna putih lagi pada tombol untuk menghilangkan warna hitam yang merupakan ekspresi tombol tertekan.

sketch7-hmi-arduino

Bagian di atas ini berfungsi untuk menampilkan pesan RESTART dan READY saat perintah &RESTART dan &READY dikirimkan. Pesan RESTART dengan background layar biru, di koordinat 40,200 dengan ukuran font 6, warna tulisan putih dan background tulisan hitam akan tampil saat &RESTART diterima dan selanjutnya menunggu adanya &READY diterima. Fungsi ini bisa digunakan apabila mikrokontroler utama sedang Restart dan tidak ingin diganggu dengan perintah-perintah dari HMI dulu sampai mikrokontroler utama mengirimkan &READY dan tulisan READY akan ditampilkan selama satu detik kemudian dilanjutkan dengan layar berubah menjadi gelap.

sketch8-hmi-arduino

Bagian ini digunakan untuk menampilkan dan mematikan tombol-tombol saja dengan mengirimkan perintah &DISPLAYON dan &DISPLAYOFF

sketch9-hmi-arduino

Pada bagian ini berfungsi untuk menerima perintah &TEXT, perintah ini akan diikuti ([sumbuX],[sumbuY],[fontSize],[textcolor],[background text color],[isi pesan]) dan tampilan sebelumnya akan dihapus sehingga hanya text ini saja yang tampil.

sketch10-hmi-arduino

Untuk perintah SUBMENU sama dengan perintah TEXT, hanya saja di sini tampilan yang sebelumnya tidak dihapus sehingga tidak ada perintah tft.fillScreen(color). Ini digunakan untuk menampilkan tulisan-tulisan tambahan tanpa menghapus tulisan yang sebelumnya di layar.

sketch11-hmi-arduino

Pada bagian perintah MENU sama dengan perintah TEXT di mana koordinat X, Y, ukuran font, warna tulisan dan warna background tulisan diatur terlebih dahulu melalui port serial kemudian langsung dilanjutkan dengan 10 baris pesan yang dipisahkan dengan tanda ‘,’. Namun ini tidak harus 10 pesan, bisa kurang dari itu dan nantinya hanya baris yang dikirim tersebut yang akan tampil secara berurutan. Contohnya apabila hanya ada pesan di baris 1,2 dan 3 maka hanya baris tersebut yang ditampilkan sedangkan 4 sampai 10 tidak. Setiap baris akan ditampilkan dalam sumbu y+50 untuk baris 2, y+100 untuk baris 3 dan sterusnya hingga y+450.

sketch12-hmi-arduino

Untuk perintah DISP telah dijelaskan di bagian atas sebelumnya, berfungsi untuk hanya menampilkan tombol-tombol tertentu saja. Contohnya apabila tombol 0 diterima pada karakter ke 4 maka tombol 0 akan ditampilkan dan status button di set true.

sketch13-hmi-arduino

Source code lengkap dapat didownload di link berikut

Anda juga dapat memperoleh produk ini yang telah terisi source code di link berikut

hmi-arduino-board

 


DELTA ELECTRONIC

Paulus Andi Nalwan, ST

 

Translate »