Teknik Elektro LinksThermostat, Panel Bel, Board Mikro, Driver Relay.

Mengontrol Relay Dan Membaca Input Digital Via Port USB Menggunakan Python

Mengontrol peralatan listrik di luar komputer seperti lampu, fan, bel dan motor bisa dilakukan dengan menggunakan piranti antarmuka yang bertugas menjembatani antara komputer dengan peralatan listrik. Ada beberapa antarmuka yang bisa digunakan yakni antarmuka paralel (LPT), antarmuka serial (RS232) dan antarmuka USB. Dengan menggunakan piranti antarmuka, kita bisa mengontrol peralatan listrik dari komputer menggunakan program.

Piranti antarmuka terdiri dari bagian interface, yakni bagian (kontroler) yang berfungsi sebagai slave yang bisa diberi perintah oleh program komputer melalui perantaraan port (paralel, serial atau USB) dan bagian driver yang berfungsi untuk menggerakan power-driver. Power-driver bisa berupa relay, kontakor atau solid-state relay. Power driver inilah yang nantinya akan berhubungan secara langsung dengan rangkaian beban.

Selain mengontrol peralatan di luar komputer, terkadang sistem juga perlu membaca atau memonitor kondisi dari satu atau beberapa masukan (sensor). Tipe masukan ada dua, yakni digital dan analog. Contoh masukan yang digital adalah limit-switch, proximity-switch, push-button, sensor gerak dan lain sebagainya. Sedangkan contoh masukan analog adalah sensor suhu, kelembaban, intensitas cahaya dan lain-lain.

Sistem Informasi Parkir Dengan Palang Pintu (portal)

Salah satu sistem informasi yang membutuhkan pengontrolan relay dan pembacaan sensor adalah sistem informasi parkir dengan palang pintu parkir (portal). Pada sistem ini, program komputer harus memonitor sensor kedatangan mobil (yang berhenti di depan pintu masuk portal) dan/atau memonitor tombol tiket parkir (push-button). Jika sensor mobil aktif dan tombol tiket ditekan, maka program komputer akan mencatat waktu kedatangan, meng-update jumlah mobil yang masuk parkiran dan mencetak tiket parkir. Setelah itu, program komputer akan mengirimkan perintah untuk membuka portal dan menutup kembali portal setelah mobil melewati portal.

USB-2R3IO

USB-2R3IO adalah piranti antarmuka USB yang memiliki keluaran berupa 2 buah relay dan memiliki 3 buah GPIO. Ketiga GPIO bisa difungsikan sebagai masukan atau sebagai keluaran. Secara default, GPIO berfungsi sebagai masukan. USB-2R3IO cocok digunakan sebagai piranti antarmuka pada sistem informasi parkir dengan palang pintu parkir (portal).

USB-2R3IO

Pada tulisan ini akan saya berikan contoh program untuk mengontrol relay dan membaca masukan menggunakan piranti antarmuka USB-2R3IO. Contoh program yang saya berikan di sini adalah contoh program bahasa Python.

PyUSB

Untuk mengakses piranti USB, kita gunakan modul python siap-pakai yakni PyUSB. Modul ini belum disertakan pada instalasi Python, oleh karenanya kita harus melakukan instalasi sendiri secara manual. Caranya adalah sebagai berikut.

Langkah-langkah Instalasi PyUSB

  1. Pastikan PC atau Laptop Anda terhubung ke internet.
  2. Buka terminal.
  3. Download paket pyusb-1.0.0b2.tar.gz (versi terakhir) dengan perintah:
    $wget http://downloads.sourceforge.net/project/pyusb/PyUSB%201.0/1.0.0-beta-2/pyusb-1.0.0b2.tar.gz
  4. Ekstraksi file paket dengan perintah:
    $tar xvzf pyusb-1.0.0b2.tar.gz
  5. Masuk ke direktori pyusb-1.0.0b2 dengan perintah:
    $cd pyusb-1.0.0b2
  6. Lakukan instalasi dengan perintah:
    $sudo ./setup.py install
  7. Selesai.

Contoh program penggunaan PyUSB untuk mengakses piranti USB-2R3IO bisa dibaca pada listing program berikut ini.

#---------------------------------------------------
# Name:     usb2r3io.py
# Purpose:  TESTING PyUSB - USB2R3IO
# Author:   Chandra MDE
#
# Linux Forte - linux4teknikelektro
# http://linux.teknikelektrolinks.com
#---------------------------------------------------

import usb.core
import time, sys

def main():
    devs = usb.core.find(True, idVendor=0x16c0, idProduct=0x05dc)
    if devs == None:
        print "Piranti USB tidak ditemukan."
        sys.exit(1)
    else:
	for dev in devs:
	    if (dev.product=="TELINKS-USB2R3IO"):
	      usb2r3io = dev
	      break
	    else:
	      usb2r3io = None

	if (usb2r3io==None):
	    print "Modul TELINKS-USB2R3IO tidak ditemukan!"
	    sys.exit(1)

	#aktifkan relay-1 selama 1 detik
	print "Aktifkan Relay-1"
        usb2r3io.ctrl_transfer(0xc0, 1, 1, 1, None)	#on
	time.sleep(1)					#delay
	print "Matikan Relay-1"			
	usb2r3io.ctrl_transfer(0xc0, 1, 0, 1, None)	#off
	time.sleep(1)					#delay

	#aktifkan relay-2 selama 1 detik
	print "Aktifkan Relay-2"
        usb2r3io.ctrl_transfer(0xc0, 1, 1, 2, None)	#on
	time.sleep(1)					#delay
	print "Matikan Relay-2"
	usb2r3io.ctrl_transfer(0xc0, 1, 0, 2, None)	#off
	time.sleep(1)					#delay

	#baca input
	print "Baca input..."
        inputs = usb2r3io.ctrl_transfer(0xc0, 2, 0, 0, 100, 1000)
	string_inputs = inputs.tostring()
	print "Input   = ", string_inputs
	print "Input-1 = ", string_inputs[0]
	print "Input-2 = ", string_inputs[1]
	print "Input-3 = ", string_inputs[2]

	#baca ID modul
	print "Baca ID..."
	ID = usb2r3io.ctrl_transfer(0xc0, 0, 0, 0, 100, 1000)
	print ID.tostring()


if __name__ == '__main__':
    main()

Hasil eksekusi program di atas adalah sebagai berikut:

usb2r3io.py

Penjelasan Program

Modul PyUSB perlu diimport terlebih dahulu sebelum digunakan (import usb.core). Dengan menggunakan modul ini, kita bisa mendeteksi keberadaan piranti USB (dalam hal ini USB-2R3IO) dengan menggunakan ID dari piranti USB tersebut. USB-2R3IO memiliki IDVendor=16C0 dan IDProduct=05DC. Untuk mencari dan mendapatkan handle dari piranti USB digunakan perintah usb.core.find.

devs = usb.core.find(True, idVendor=0x16c0, idProduct=0x05dc)
    if devs == None:
        print "Piranti USB tidak ditemukan."
        sys.exit(1)
    else:
	for dev in devs:
	    if (dev.product=="TELINKS-USB2R3IO"):
	        usb2r3io = dev
	        break
	    else:
	        usb2r3io = None

	if (usb2r3io==None):
	    print "Modul TELINKS-USB2R3IO tidak ditemukan!"
	    sys.exit(1)

Jika piranti USB berhasil ditemukan maka selanjutnya program dapat memberi perintah kepada piranti USB tersebut menggunakan handle yang sudah didapatkan dari fungsi usb.core.find.yakni variabel usb2r3io.

Pada contoh program di atas diberikan contoh untuk mengaktifkan dan mematikan RELAY dengan perintah:

usb2r3io.ctrl_transfer(0xc0, 1, 1, 1, None) #RLY1 on
usb2r3io.ctrl_transfer(0xc0, 1, 0, 1, None) #RLY1 off
usb2r3io.ctrl_transfer(0xc0, 1, 1, 2, None) #RLY2 on
usb2r3io.ctrl_transfer(0xc0, 1, 0, 2, None) #RLY2 off

Relay pada USB-2R3IO bisa digunakan untuk memberi sinyal BUKA dan TUTUP ke panel palang pintu parkir. Jika panel palang pintu menggunakan sistem 2 tombol (tombol buka dan tombol tutup), maka kita bisa langsung menghubungkan kontak relay USB-2R3IO ke terminal tombol buka dan tutup (masing-masing secara paralel).

Untuk membaca kondisi masukan dari 3 GPIO USB-2R3IO digunakan perintah:

inputs = usb2r3io.ctrl_transfer(0xc0, 2, 0, 0, 100, 1000)

Setelah baris perintah tersebut dieksekusi, variabel inputs akan berisi data “HHH”, “HHL”, “HLH”, “LHH” dan seterusnya sampai “LLL” tergantung dari kondisi pin masukan I1, I2 dan I3. Dan untuk mengambil data kondisi masing-masing pin digunakan perintah:

string_inputs = inputs.tostring()
print "Input   = ", string_inputs
print "Input-1 = ", string_inputs[0]
print "Input-2 = ", string_inputs[1]
print "Input-3 = ", string_inputs[2]

Cukup mudah, bukan?

Kesimpulan

  1. PyUSB adalah modul python yang bisa digunakan untuk mengakses piranti USB menggunakan library LIBUSB.
  2. USB-2R3IO cocok digunakan untuk piranti antarmuka sistem informasi parkir dengan palang pintu parkir (portal).

Terima kasih sudah membaca dan  semoga bermanfaat.

Piranti USB-2R3IO bisa dipesan melalui situsnya di: WWW.USBINOV.COM

USB-2R3IO

2 Comments

Add a Comment

Your email address will not be published. Required fields are marked *