JustBASIC – Mengontrol Starduino/Arduino + Modul Empat Relay DRV04


jb_starduino_drv04

Gambar di samping adalah screenshot dari program aplikasi pengontrolan empat buah relay melalui komputer dengan perantaraan port serial. Program saya buat menggunakan interpreter gratisan yang senantiasa mempesona saya yakni JustBASIC.

Bagi Anda yang belum mengenal JustBASIC, Anda bisa membaca sekelumit mengenai JustBASIC pada tulisan saya sebelumnya yakni:

JustBASIC – Program Kontrol LED Pin13 Pada Starduino atau Arduino

JustBASIC – Mengontrol Starduino/Arduino + Modul Dua Relay DRV02

Program aplikasi ini akan mengirimkan sebuah string perintah kepada mikrokontroler (STARDUINO) sesuai dengan tombol dan status tombol yang ditekan. Jika tombol berwarna hitam ditekan, maka program akan mengirimkan string perintah untuk mengaktifkan relay yang bersangkutan. Dan jika tombol berwarna merah ditekan, maka program akan mengirimkan string perintah untuk mematikan relay yang bersangkutan.

Tombol berwarna merah menandakan bahwa status relay yang bersangkutan adalah ON dan tombol berwarna hitam menandakan bahwa status relay adalah OFF.

Berikut adalah tabel string perintah yang dikenali oleh STARDUINO:

No String Perintah Fungsi
1 $R11 Mengaktifkan Relay-1
2 $R10 Mematikan Relay-1
3 $R21 Mengaktifkan Relay-2
4 $R20 Mematikan Relay-2
5 $R31 Mengaktifkan Relay-3
6 $R30 Mematikan Relay-3
7 $R41 Mengaktifkan Relay-4
8 $R40 Mematikan Relay-4

Adapun program selengkapnya adalah sebagai berikut:

‘– PC-Starduino+DRV04 – Kontrol 4 Buah Relay (DRV04)
‘– Chandra MDE – http://teknikelektrolinks.com
‘– 19/06/2013

    nomainwin

    RON  = 1
    ROFF = 2

    WindowWidth = 240
    WindowHeight = 280

    UpperLeftX = int((DisplayWidth- WindowWidth)/2)
    UpperLeftY = int((DisplayHeight- WindowHeight)/2)

    dim portlist$(99)
    for i=1 to 99
        portlist$(i) = "COM"+str$(i)
    next

    portserial$ = portlist$(1)

    dim RelayFlag(4)
    RelayFlag(1) = ROFF
    RelayFlag(2) = ROFF
    RelayFlag(3) = ROFF
    RelayFlag(4) = ROFF

    dim RelayCommand$(4, 2)
    RelayCommand$(1, RON)  = "$R11"
    RelayCommand$(1, ROFF) = "$R10"
    RelayCommand$(2, RON)  = "$R21"
    RelayCommand$(2, ROFF) = "$R20"
    RelayCommand$(3, RON)  = "$R31"
    RelayCommand$(3, ROFF) = "$R30"
    RelayCommand$(4, RON)  = "$R41"
    RelayCommand$(4, ROFF) = "$R40"

    Relay = 0

    loadbmp "BMP_RelayOn", "bmp\redbttn.bmp"
    loadbmp "BMP_RelayOff", "bmp\blckbttn.bmp"

    dim BMPRelay$(2)
    BMPRelay$(RON)  = "BMP_RelayOn"
    BMPRelay$(ROFF) = "BMP_RelayOff"

    ‘– Rancangan Form/Dialog Aplikasi
    groupbox    #dlg.group1, "Port Serial:", 20, 15, 190, 58
    statictext    #dlg.label1, "Nomor Port:", 35, 40, 85, 20
    combobox   #dlg.cbPortSerial, portlist$(), [cbPortSerialChanged], 120, 36, 70, 25

    groupbox     #dlg.group2, "Kontrol:", 20, 85, 190, 95
    statictext     #dlg.txtRelay1, "R1      R2      R3      R4", 45, 110, 150, 15
    bmpbutton   #dlg.BtnRelay1, "bmp\blckbttn.bmp", [BtnRelay1Click], UL, 39, 130
    bmpbutton   #dlg.BtnRelay2, "bmp\blckbttn.bmp", [BtnRelay2Click], UL, 81, 130
    bmpbutton   #dlg.BtnRelay3, "bmp\blckbttn.bmp", [BtnRelay3Click], UL, 122, 130
    bmpbutton   #dlg.BtnRelay4, "bmp\blckbttn.bmp", [BtnRelay4Click], UL, 164, 130

    statictext  #dlg.about1, "By Chandra MDE", 20, 190, 200, 20
    statictext  #dlg.about2, "Created using JustBASIC 1.01", 20, 206, 220, 20
    statictext  #dlg.about3, "http://teknikelektrolinks.com", 20, 223, 200, 20

    open "STARDUINO+DRV04" for dialog_nf as #dlg
    print #dlg, "font Tahoma 9 bold"
    print #dlg.cbPortSerial, "selectindex 1"

    #dlg "trapclose [Quit]"

[mainLoop]
    wait

[BtnRelay1Click]
    Relay = 1
    Gosub [ProsesRelay]
    wait

[BtnRelay2Click]
    Relay = 2
    Gosub [ProsesRelay]
    wait

[BtnRelay3Click]
    Relay = 3
    Gosub [ProsesRelay]
    wait

[BtnRelay4Click]
    Relay = 4
    Gosub [ProsesRelay]
    wait

[cbPortSerialChanged]
    #dlg.cbPortSerial "selection? portserial$"
    wait

[PortSerialError]
    oncomerror
    notice "Error at opening port "; portserial$
    wait

[Quit]
    close #dlg
    end

[ProsesRelay]
    oncomerror [PortSerialError]
    Com = 16384
    open portserial$ + ":9600,n,8,1,ds0,cs0,rs" for random as #CommHandle
    if RelayFlag(Relay)=ROFF then
        RelayFlag(Relay)=RON
    else
        RelayFlag(Relay)=ROFF
    end if
    print #CommHandle, "" + RelayCommand$(Relay, RelayFlag(Relay))
    select case Relay
        case 1
            print #dlg.BtnRelay1, "bitmap "; BMPRelay$(RelayFlag(Relay))
        case 2
            print #dlg.BtnRelay2, "bitmap "; BMPRelay$(RelayFlag(Relay))
        case 3
            print #dlg.BtnRelay3, "bitmap "; BMPRelay$(RelayFlag(Relay))
        case 4
            print #dlg.BtnRelay4, "bitmap "; BMPRelay$(RelayFlag(Relay))
    end select
    close #CommHandle
    return

Sangat mudah, bukan? Itulah JustBASIC, sangat mudah dan tidak bertele-tele!πŸ˜€

Pada awal program kita siapkan variabel-variabel dan juga data-data yang nantinya akan dipakai dalam program. Langkah selanjutnya adalah merancang form aplikasi. Perancangan form aplikasi ini bisa dilakukan secara manual, yakni menggunakan teknik ketik program, running, lihat hasilnya, dan lakukan penyesuaian. Atau bisa juga dilakukan dengan menggunakan FreeForm-J GUI Editor yang tersedia dalam menu Run pada software JustBASIC.

Karena komponennya (widget) tidak banyak, maka saya tidak menggunakan GUI Editor tapi langsung menciptakan komponen-komponen menggunakan baris-baris perintah program dan melakukan running untuk mengetahui hasilnya, dan kemudian melakukan penyesuaian ukuran dan lokasi sampai saya dapatkan hasil yang saya inginkan.

Setelah rancangan form aplikasi selesai, kita tinggal menambahkan rutin-rutin event-handler untuk masing-masing komponen yang kita rancang. Pada program di atas, komponen-komponen yang perlu kita handle event-nya adalah komponen button R1-R4 dan combobox Nomor Port.

Jika tombol R1-R4 ditekan, maka program akan menjalankan rutin ProsesRelay. Rutin ini akan mengirimkan string perintah sesuai dengan nomor relay dan status relay. String perintah disimpan dalam variabel array RelayCommand$(), nomor relay disimpan pada variabel Relay, dan status relay disimpan dalam variabel array RelayFlag().

Jika user memilih/mengganti nomor port pada combobox, maka program akan meng-update variabel PortSerial$. Program akan menampilkan pesan kesalahan jika gagal membuka port serial yang dipilih.

Berikut adalah foto Starduino dan modul DRV04 yang saya gunakan dalam eksperimen ini.

jb_starduino_drv04

Dan berikut ini adalah listing program sketch Arduino-nya:

//JustBASIC — Starduino+DRV04
//Chandra MDE – http://teknikelektrolinks.com
//20/06/2013

long X = 10000;
boolean n = false;

void setup()
{
  pinMode(8, OUTPUT);  //pin-8 sebagai OUTPUT
  pinMode(9, OUTPUT);  //pin-9 sebagai OUTPUT
  pinMode(10, OUTPUT);  //pin-10 sebagai OUTPUT
  pinMode(11, OUTPUT);  //pin-11 sebagai OUTPUT
  pinMode(13, OUTPUT);  //pin-13 sebagai OUTPUT
  Serial.begin(9600);  //komunikasi serial 9600 baud
}
void loop()
{
  X–;
  if (X==0)
  {
    if (n==false)
      digitalWrite(13, HIGH); //LED ON
    else
      digitalWrite(13, LOW); //LED OFF
    X = 10000;
    n = !n;
  }
  if (Serial.available())
  {
    char ch = Serial.read();
    if (ch==’$’)
    {
      while (!Serial.available());
      ch = Serial.read();
      if (ch==’R’)
      {
        while (!Serial.available());
        ch = Serial.read();
        if (ch==’1′)
        {
          while (!Serial.available());
          ch = Serial.read();
          if (ch==’1′)
            digitalWrite(8, HIGH); //RELAY-1 ON
          else if (ch==’0′)
            digitalWrite(8, LOW);  //RELAY-1 OFF
        }
        else if (ch==’2′)
        {
          while (!Serial.available());
          ch = Serial.read();
          if (ch==’1′)
            digitalWrite(9, HIGH); //RELAY-2 ON
          else if (ch==’0′)
            digitalWrite(9, LOW); //RELAY-2 OFF
        }
        else if (ch==’3′)
        {
          while (!Serial.available());
          ch = Serial.read();
          if (ch==’1′)
            digitalWrite(10, HIGH); //RELAY-3 ON
          else if (ch==’0′)
            digitalWrite(10, LOW); //RELAY-3 OFF
        }
        else if (ch==’4′)
        {
          while (!Serial.available());
          ch = Serial.read();
          if (ch==’1′)
            digitalWrite(11, HIGH); //RELAY-4 ON
          else if (ch==’0′)
            digitalWrite(11, LOW); //RELAY-4 OFF
        }
      }
    }
  }

Nah, semoga tulisan singkat dan terkesan tergesa-gesa dalam penulisannya ini dapat memberikan manfaat bagi kita semua.πŸ˜€

Selamat belajar dan selamat berkarya!

πŸ™‚

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s