WWW.USBINOV.COMPiranti USB untuk PC, Laptop dan Raspberry Pi.

Contoh Program Menampilkan Grafik Suhu Menggunakan Raspberry Pi (Desktop)

Suhu merupakan salah satu besaran fisika yang paling banyak diukur, dipantau dan dikontrol dalam proses produksi di industri. Tak salah jika kontroler suhu merupakan salah satu produk otomasi terlaris selain timer dan counter.

Pada catatan eksperimen kali ini saya akan memberikan contoh program untuk mengukur suhu dan menampilkan grafik perubahan suhu menggunakan program desktop pada Raspberry Pi. Raspberry Pi yang saya gunakan adalah Raspberry Pi B+ 512MB dengan sistem operasi Raspbian. Untuk modul sensor suhu, saya menggunakan modul USB-TC101. Modul ini tidak hanya memiliki sensor suhu tapi juga memiliki keluaran berupa TRIAC untuk  mengontrol pemanas dan BUZZER. Tapi pada eksperimen ini saya hanya akan memanfaatkan sensor suhunya saja. Jadi program hanya akan membaca data suhu dan menampilkannya pada layar desktop dalam bentuk grafik perubahan suhu.

Pemrograman Grafik

Untuk eksperimen ini, saya menggunakan bahasa pemrograman Yabasic (Yet Another BASIC), yakni varian bahasa BASIC yang tersedia untuk versi Windows dan Linux. Untuk dapat menggunakan program Yabasic di Raspberry Pi, maka perlu dilakukan kompilasi ulang dari sourcecode. Tentang bagaimana cara instalasi program Yabasic dan contoh program menggambar grafik dapat Anda baca pada catatan eksperimen berikut ini:

Yabasic Raspberry Pi

Membaca Modul Sensor Suhu USB-TC101

USB-TC101 memiliki program Command-Line Interface yang tersedia juga untuk versi Raspberry Pi. Berikut adalah tampilan cara penggunaan program usbtc101c.

pi@raspberrypi ~/yabasic $ ./usbtc101c
USBTC101C - Command-Line Interface untuk Modul USB-TC101
Penggunaan: usbtc101c <id> <cmd1, cmd2, ..>
  <id> = ID Modul USB-TC101, contoh: USBTC101-003 atau USBTC101-004
Parameter cmd1, cmd2, dst dapat diisi dengan nilai-nilai sebagai berikut:
  - ID         : untuk membaca ID dari modul USB
  - OUTPUT     : set OUTPUT (TRIAC) ON
  - output     : set OUTPUT (TRIAC) OFF
  - ALARM      : set ALARM ON
  - alarm      : set ALARM OFF
  - SUHU       : baca nilai SUHU TERUKUR

Contoh:
- $ usbtc101c USBTC101-003 SUHU          (baca suhu modul USBTC101-003)
- $ usbtc101c USBTC101-004 SUHU OUTPUT   (baca suhu, TRIAC ON)
- $ usbtc101c USBTC101-004 SUHU output   (baca suhu, TRIAC OFF)
- $ usbtc101c USBTC101-101 ID ALARM       (baca ID, ALARM ON)
- $ usbtc101c USBTC101-086 SUHU alarm    (baca suhu, ALARM OFF

Diprogram oleh Chandra MDE
USBinov - Low-Speed USB Control and Sensing
Website: www.usbinov.com

Untuk membaca suhu dari modul USB-TC101 dengan ID=USBTC101-001, perintahnya adalah:

$ sudo ./usbtc101 USBTC101-001 SUHU

Hasilnya adalah berupa teks (string) sebagai berikut:

SUHU = 37.4

Nah, sekarang kita masuk ke bagian pemrograman Yabasic untuk membaca data suhu dari modul USB-TC101 dan menampilkannya dalam bentuk grafik perubahan suhu. Berikut adalah listing programnya.

Listing Program TC101.BAS

REM USB-TC101 Temperature Controller User Interface
REM yabasic-2.768
REM Chandra MDE - Teknik Elektro Links
REM http://raspi.teknikelektrolinks.com

'global variables
PV = 0.0
SV = 37.5
HYS = 0.5
ALV = 40.0
PV$ = "0.0"
SV$ = "37.5"
HYS$ = "0.5"
ALV$ = "40.0"

sub title(x, y, t$)
	color 100,100,100
	text x+1, y+1, t$, "12x24", "cc"
	color 255,255,0
	text x, y, t$, "12x24", "cc"
end sub

sub status(x, y, t$)
	color 66,66,231 
	text x, y+7, t$, "A14", "lc"
end sub

sub plabel(x, y, s$, r,g,b)
	color 0,0,0
	fill box x, y, x+7*len(s$), y+15
	color r,g,b
	text x, y, s$, "A14", "lt"
end sub

sub button(x, y, w, h, t$)
	color 30,30,30
	fill box x,y,x+w,y+h
	color 200,200,200
	box x,y,x+w,y+h
	box x+1,y+1,x+w-1,y+h-1
	color 0,0,0
	text x+w/2+1, y+h/2+1, t$, "7x14bold", "cc"
	color 255,255,255
	text x+w/2, y+h/2, t$, "7x14bold", "cc"
end sub 

sub datetime$()
	local st$, sd$
	dim a$(6)
	st$ = left$(time$,2) + ":" + mid$(time$,4,2) + ":" + mid$(time$,7,2)
	a = split(date$, a$(), "-")
	sd$ = a$(5)+","+a$(3)+"/"+a$(2)+"/"+a$(4)
	return (sd$ + " " + st$)
end sub

sub init_graphic(x, y, title$)
	open window x, y, "A14"
	clear window
	clear screen
	
	minx = 3: miny = 3: maxx = x-3: maxy = y-3: midx = x / 2: midy = y / 2
	color 0,0,0
	fill box 0,0,x-1,y-1
	color 200,200,200 
	box minx-1, miny-1, maxx+1, maxy+1
	line minx, miny+40, maxx, miny+40
	line minx, maxy-30, maxx, maxy-30
	title(midx, miny+20, title$)
	plabel(13, maxy-21, "CONTROLLER=STOP, OUTPUT=OFF, ALARM=OFF",66,66,231)
	plabel(13, 60, "TEMPERATURE CHANGES", 66,66,231)
	plabel(445, 60, "SETUP", 66,66,231)
	color 200,200,200
	box 13,80,435,maxy-42	
	box 445,80,maxx-10,243
	plabel(455,90,"Setting Value:",255,0,0)
	color 128,128,128
	box 455,108,maxx-20,132
	plabel(455,140,"Hysteresis:",255,0,0)
	color 128,128,128
	box 455,158,maxx-20,182
	plabel(455,190,"Alarm Value:",255,0,0)
	color 128,128,128
	box 455,208,maxx-20,232
	plabel(445,255,"PROCESS VALUE (PV):", 66,66,231)
	color 200,200,200
	box 445,275,587,315
	button(445,maxy-72,142,30,"E X I T")
end sub

sub printPV()
	suhu$ = system$("sudo ./usbtc101c USBTC101-011 SUHU")
	PV$ = mid$(suhu$, 8, 4)
	PV = val(PV$)
	color 0,0,0
	fill box 460,285,580,285+26
	color 255,255,0
	text 517, 285, PV$ + " \xb0"+"C", "12x24", "ct"
end sub

sub printSV()
	SV$ = str$(SV, "%1.1f")
	color 0,0,0
	fill box 465,110,520,125
	color 255,255,0
	text 465, 120, SV$+" \xb0"+"C", "7x14bold", "lc"
end sub

sub printHYS()
	HYS$ = str$(HYS, "%1.1f")
	color 0,0,0
	fill box 465,160,520,175
	color 255,255,0
	text 465, 170, HYS$+" \xb0"+"C", "7x14bold", "lc"
end sub

sub printALV()
	ALV$ = str$(ALV, "%1.1f")
	color 0,0,0
	fill box 465,210,520,225
	color 255,255,0
	text 465, 220, ALV$+" \xb0"+"C", "7x14bold", "lc"
end sub

sub init_chart()
	color 12,12,12
	fill box 14,81,434,354
	color 255,255,255
	line 40,100,40,330
	line 40,330,420,330
	line 40,100,43,103
	line 40,100,37,103
	line 417,327,420,330
	line 417,333,420,330

	n=10
	for i=310 to 110 step -20
		color 80,80,80
		line 38,i,40,i
		for x=40 to 400 step 2
			dot x, i
		next x
		color 255,255,0
		text 36, i, str$(n), "6x10", "rc"
		n = n + 10
	next i

	n=20
	for i=60 to 400 step 20
		color 80,80,80
		line i,330,i,332
		for y=330 to 110 step -2
			dot i, y
		next y
		color 255,255,0
		if (mod(n/10, 4)<>0) then text i,335,str$(n),"6x10","ct" fi
		n = n + 20
	next i

	ox = 41: oy = 329: sx = 1: sy = 2: mx = 360: my = 110 
end sub


REM PROGRAM STARTS HERE
init_graphic(600,400,"USB-TC101 Temperature Controller Panel")
init_chart()

new curve
keluar = 0: t = 0
repeat
	plabel(430, maxy-21, datetime$(), 66,66,231)
	
	printPV()
	printSV()
	printHYS()
	printALV()

	color 255,50,50
	tx = ox + t*sx
	ty = oy - PV*sy
	line to tx, ty
	
	i$=inkey$(1)
	if (i$="x" or i$="X") then keluar=1 fi
	t = t + 1
until (keluar=1)
close window
end

Programnya cukup panjang. Maklum Yabasic hanyalah interpreter tanpa library bawaan untuk fungsi spesifik. Jadi semuanya harus dibuat sendiri rutin-rutinnya.

Untuk menjalankan program TC101.BAS, caranya adalah sebagai berikut:

$ yabasic tc101.bas

Bagaimana tampilan program TC101.BAS ketika dijalankan? Screenshot-nya dapat Anda lihat pada gambar berikut ini.

USB-TC101 RASPI YABASIC

Penjelasan Singkat Program TC101.BAS

Pertama-tama program melakukan inisialisasi grafik berukuran 600×400 pixel dengan titel “USB-TC101 Temperature Controller Panel”. Program ini sesungguhnya memang tidak hanya menampilkan grafik suhu saja tetapi juga melakukan pengontrolan suhu. Akan tetapi pada catatan ini saya hanya menyuguhkan fungsi tampilan saja. Inisialisasi grafik ini akan menghasilkan tampilan window dengan berbagai tulisan untuk label parameter Settinga Value, Hysteresis, Alarm Value dan Process Value dan juga area grafik suhu.

Selanjutnya program menginisialisasi grafik suhu dengan menggambar area grafik dan mengeset parameter-parameter penggambaran grafik seperti koordinat origin, penskalaan sumbu x dan penskalaan sumbu y.

REM PROGRAM STARTS HERE
init_graphic(600,400,"USB-TC101 Temperature Controller Panel")
init_chart()

Selanjutnya program akan masuk pada perulangan utama yang mana program akan secara kontinyu membaca data dan menampilkan nilainya pada label Process Value dan menggambar grafiknya (plotting). Selain itu, program juga menampilkan tanggal dan jam sistem.

new curve
keluar = 0: t = 0
repeat
	plabel(430, maxy-21, datetime$(), 66,66,231)
	
	printPV()
	printSV()
	printHYS()
	printALV()

	color 255,50,50
	tx = ox + t*sx
	ty = oy - PV*sy
	line to tx, ty
	
	i$=inkey$(1)
	if (i$="x" or i$="X") then keluar=1 fi
	t = t + 1
until (keluar=1)
close window
end

Program ini tidak menggunakan delay pada setiap perulangannya karena proses pembacaan suhu dengan memanggil program usbtc101c sudah cukup untuk dijadikan delay. Akan tetapi jika diinginkan pembacaan data suhu adalah 5 detik sekali misalnya, maka perlu ditambahkan delay yang sesuai.

Untuk keluar dari program ini, kita bisa menekan tombol ‘X’ (Exit).

Nah, sekian dulu catatan eksperimen tentang bagaimana menampilkan grafik perubahan suhu menggunakan program Yabasic. Jika Anda berminat dengan program ini, silakan langsung menghubungi saya melalui SMS ke 083835900110.

Terima kasih sudah membaca, semoga bermanfaat dan selamat berkarya.

 

 

4 Comments

Add a Comment

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