Teknik Elektro LinksBarrier-Gate & Turnstile Interface, Thermostat, Relay Driver, Microcontroler Board

Program Pengujian USB Relay Menggunakan Bahasa Python

USB Relay adalah modul driver relay dengan koneksi/interface port USB. Modul driver ini tidak menggunakan konverter USB-to-Serial. Jadi pemrograman yang digunakan adalah pemrograman interface USB. Modul USB Relay menggunakan library LibUSB. Library ini sudah tersedia secara default pada sistem operasi linux. Untuk sistem operasi Windows, diperlukan proses instalasi library LibUSB-Win32.

Salah satu contoh modul USB Relay adalah USB-4REL, yakni modul USB Relay yang memiliki 4 buah relay. Situs www.usbinov.com menyediakan beberapa tipe USB Relay antara lain: USB-1REL, USB-2REL, USB-4REL, USB-8REL dan USB-10REL.

Sesuai dengan judul di atas, tulisan ini membahas mengenai contoh program pengujian USB Relay lengkap dengan foto pengujian dan hasil pengujiannya. Pada pengujian ini, saya menggunakan modul USB-4REL dengan beban sebuah lampu pijar.

usb4rel_off

Tujuan dari pengujian ini adalah untuk mengetahui:

  1. bagaimana mengontrol USB-4REL dengan menggunakan bahasa pemrograman Python
  2. seberapa baik kinerja USB-4REL

Nah, langsung saja, berikut ini adalah listing program pengujian USB-4REL dalam bahasa Python.

#------------------------------------
# Name: usb4rel.py
# Purpose: TESTING PyUSB - USB-4REL
# Author: Chandra MDE
#------------------------------------

import usb.core
import time

def main():
 ec = 0 # error counter
 d = 0.05 # delay

usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel == None:
 print "USB-4REL tidak ditemukan!"
 exit
 else:
 ID = usb4rel.ctrl_transfer(0xc0, 0, 0, 0, 100, 1000)
 print ID.tostring() #tampilkan ID modul

for i in range(1,1000):
 print "Perulangan ke-", i,
 print " Error count: ", ec
#relay1
 try:
 usb4rel.ctrl_transfer(0xC0, 1, 1, 1, 100, 1000) #Relay-1 ON
 except:
 ec = ec + 1
 print "E: Relay1ON"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 1, 1, 100, 1000)

time.sleep(d) #tunda 1 detik

try:
 usb4rel.ctrl_transfer(0xC0, 1, 0, 1, 100, 1000) #OFF
 except:
 ec = ec + 1
 print "E: Relay1OFF"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 0, 1, 100, 1000)
 time.sleep(d) #tunda 1 detik
#relay2
 try:
 usb4rel.ctrl_transfer(0xC0, 1, 1, 2, 100, 1000) #Relay-2 ON
 except:
 ec = ec + 1
 print "E: Relay2ON"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 1, 2, 100, 1000)

time.sleep(d) #tunda 1 detik

try:
 usb4rel.ctrl_transfer(0xC0, 1, 0, 2, 100, 1000) #OFF
 except:
 ec = ec + 1
 print "E: Relay2OFF"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 0, 2, 100, 1000)
 time.sleep(d) #tunda 1 detik

#relay3
 try:
 usb4rel.ctrl_transfer(0xC0, 1, 1, 3, 100, 1000) #Relay-3 ON
 except:
 ec = ec + 1
 print "E: Relay3ON"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 1, 3, 100, 1000)

time.sleep(d) #tunda 1 detik

try:
 usb4rel.ctrl_transfer(0xC0, 1, 0, 3, 100, 1000) #OFF
 except:
 ec = ec + 1
 print "E: Relay3OFF"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 0, 3, 100, 1000)
 time.sleep(d) #tunda 1 detik

#relay4
 try:
 usb4rel.ctrl_transfer(0xC0, 1, 1, 4, 100, 1000) #Relay-4 ON
 except:
 ec = ec + 1
 print "E: Relay4ON"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 1, 4, 100, 1000)

time.sleep(d) #tunda 1 detik

try:
 usb4rel.ctrl_transfer(0xC0, 1, 0, 4, 100, 1000) #OFF
 except:
 ec = ec + 1
 print "E: Relay4OFF"
 for j in range(1,10):
 time.sleep(1)
 usb4rel = usb.core.find(idVendor=5824, idProduct=1500)
 if usb4rel != None:
 break
 usb4rel.ctrl_transfer(0xC0, 1, 0, 4, 100, 1000)
 time.sleep(d) #tunda 1 detik




if __name__ == '__main__':
 main()

 

Program di atas akan melakukan proses pengontrolan relay on/off dengan interval yang cepat, yakni 0.05 detik (d = 0.05). Proses pengontrolan relay on/off diulang sampai 1000 kali.

Setiap kali mengontrol relay, program menggunakan try…except untuk memastikan program dapat menangkap error ketika terjadi kegagalan pengontrolan sehingga bisa mengulangi proses pengontrolan.

Modul USB-4REL dilengkapi dengan fitur WATCHDOG. Fitur ini akan memastikan kontroler direset manakala terjadi kegagalan sistem (kondisi hang) akibat adanya noise dan spike ketika relay menggerakkan beban.

Jika proses pengontrolan relay on/off gagal, yang sangat boleh jadi akibat dari kegagalan sistem mikrokontroler, maka program akan melakukan perulangan sebanyak 10 kali sambil berusaha mengambil kembali (memperbaharui) handle komunikasi USB antara PC dengan USB-4REL. Proses pembaharuan handle ini diperlukan karena mikrokontroler secara otomatis mereset dirinya manakala terjadi kegagalan sistem karena adanya fitur WATCHDOG.

Dengan cara ini, maka hampir dapat dipastikan, perintah pengontrolan relay (on/off) akan berhasil.

usb4rel_on

 

Hasil Pengujian

Dari hasil eksekusi program, maka diperoleh hasil yang memuaskan seperti yang ditunjukkan oleh screenshot berikut ini.

usb4rpy1

usb4rpy2

usb4rpy3

Dari 1000 kali pengontrolan dengan beban lampu pijar dengan interval on-off relay 0.05 detik, tidak sekalipun terjadi kegagalan!

Dengan kinerja driver relay yang terbukti baik ditambah dengan adanya fitur WATCHDOG yang memastikan kontroler direset bila hang dan ditambah lagi dengan menerapkan try…except pada program, maka kehandalan sistem relay dapat semakian ditingkatkan.

 

USBINOV

Jika Anda membutuhkan driver relay USB (bukan USB-to-Serial), silakan langsung mengunjungi situs USBINOV di www.usbinov.com.

Selamat berkarya.

 

 

 

 

Add a Comment

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>