Anda di halaman 1dari 11

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

Rev-REAL TIME SOFT-OSCILOSCOPE THROUGH ANALOG INPUT OF COMPUTER (MATLAB)

SOFT-OSCILOSCOPE THROUGH ANALOG INPUT OF COMPUTER (MATLAB) Anda lihat gambar di atas? Gambar tersebut merupakan

Anda lihat gambar di atas?

Gambar tersebut merupakan osiloskop sederhana yang akan kita kembangkan dengan menerima input atau masukan dari analog input atau lebih sering disebut sebagai audio card. Kita memilih saluran ini karena sangat sederhana yakni memiliki 1 buah variabel untuk diukur. Variabel tersebut adalah tegangan. Pada umumnya tegangan yang dapat ditangani oleh audio card adalah ± 10 .

Pada dasarnya tidak ada teknik khusus yang diperlukan dalam mengembangkan program ini. Namun yang perlu anda catat adalah saya tidak menggunakan GUIDE dalam membuat GUI nya, sepenuhnya saya mengetik sendiri code untuk GUI tersebut. Untuk itu saya akan menjelaskan setiap langkah yang dikembangkan untuk membuat program tersebut.

- Program untuk membuat GUI

Buatlah sebuah file yang dapat anda beri nama apapun. Dalam hal ini saya memberi nama m file menjadi “realtimeosciloscope.m”. Isi dari program ini adalah

delete(daqfind);

clear all;

close all;

clc;

warning off;

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

%% membuat figure GUI

% meletakkan posisi GUI

screenUnits=get(0,'Units');

set(0,'Units','pixels');

screenSize=get(0,'ScreenSize');

set(0,'Units',screenUnits);

figWidth=951.0;

figHeight=500.0;

figPos=[(screenSize(3)-figWidth)/2 (screenSize(4)-figHeight)/2

figWidth

% Create the figure window.

figHeight];

hFig=figure( 'Color'

,'white'

,

'IntegerHandle'

,'off'

,

'DoubleBuffer'

,'on'

,

'MenuBar'

,'none'

,

'HandleVisibility' ,'on' 'Name'

, ,'REAL TIME OSCILOSCOPE FOR LOW

VOLTAGE MEASUREMENT - Jans Hendry, Ph.D.' ,

'Tag'

,'Analog Input FFT demo'

,

'NumberTitle'

,'off'

,

'Units'

,'pixels'

,

'Position'

,figPos

,

'UserData'

,[]

,

'Colormap'

,[]

,

'Pointer'

,'arrow'

,

'Visible'

,'off'

);

% Create a start/stop pushbutton.

htoggle = uicontrol( 'Parent' 'Style'

'Units'

'Position'

'Value'

'String'

'Backgroundcolor'

, hFig, , 'togglebutton', , 'normalized', , [0.7700 0.0960 0.1062 0.1020], , 0, , 'Start', , 'white'

, , 'normalized' , , [0.7700 0.0960 0.1062 0.1020], , 0, , 'Start' , , 'white'
, , 'normalized' , , [0.7700 0.0960 0.1062 0.1020], , 0, , 'Start' , , 'white'
, , 'normalized' , , [0.7700 0.0960 0.1062 0.1020], , 0, , 'Start' , , 'white'
, , 'normalized' , , [0.7700 0.0960 0.1062 0.1020], , 0, , 'Start' , , 'white'
, , 'normalized' , , [0.7700 0.0960 0.1062 0.1020], , 0, , 'Start' , , 'white'

);

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

% Create Data subplot.

hAxes = axes( 'Position' 'Parent' 'XLim' 'YLim' 'Box' 'Xcolor' 'Ycolor' );

, [0.0715 0.096 0.6845 0.8019], , hFig, , [0 10], , [-1 1], , 'On', ,'blue', , 'blue'

% creating cetak data button

hcetak = uicontrol( 'Parent' 'Style' 'Units' 'Position' 'String' 'Backgroundcolor'

, hFig, , 'pushbutton', , 'normalized', , [0.8848 0.0960 0.1062 0.1020], , 'Simpan Data', , 'white'

);

%

creating teks frequency sampling

twakt = uicontrol( 'Parent' 'Style' 'Units' 'Position' 'String' 'FontWeight' 'Backgroundcolor'

, hFig, , 'edit', , 'normalized', , [0.8401 0.6600 0.1062 0.1020], , '0.1', ,'bold', , 'white'

);

%

creating teks frequency sampling

tfrek = uicontrol( 'Parent' 'Style' 'Units' 'Position' 'String' 'FontWeight' 'Backgroundcolor'

);

, hFig, , 'edit', , 'normalized', , [0.8401 0.796 0.1062 0.1020], , '44100', ,'bold', , 'white'

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

% creating static text1 htext1 = uicontrol( 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor'

, hFig, , 'text', , 'Sampling Frequency', , 'normalized', , [0.7584,0.8120,0.0704,0.07], , 'white'

);

%

creating static text2

htext2 = uicontrol( 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor'

);

%

creating static text3

htext3 = uicontrol( 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor'

);

%

creating static text4

htext4 = uicontrol(

, hFig, , 'text', , 'Duration', , 'normalized', , [0.7584,0.6900,0.0741,0.0360], , 'white'

, hFig, , 'text', , 'Hz', , 'normalized', , [0.9505,0.8360,0.02628,0.032], , 'white'

'Parent'

, hFig,

'Style'

, 'text',

'String'

, 'Sec',

'Units'

, 'normalized',

'Position'

, [0.9505,0.6980,0.0262,0.032],

'Backgroundcolor'

, 'white'

);

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

% creating static text5 htext5 = uicontrol( 'Parent' 'Style' 'String' MEASUREMENT', 'Units' 'Position' 'Backgroundcolor' 'FontWeight' 'FontName' 'FontSize'

);

, hFig, , 'text', , 'REAL TIME OSCILOSCOPE FOR LOW VOLTAGE

, 'normalized', , [0.2092,0.93,0.5793,0.0440], , 'white', ,'bold', , 'MS Sans Serif', , 12

chk1 = uicontrol( 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor' 'Value' 'Callback' );

,hFig, , 'checkbox', , 'Grid OFF', , 'normalized', , [0.0715 0.01 0.0788 0.046], , 'white',

,0,

,'cekchk'

set(hFig,’visible’,’on’);

set(htoggle,’callback’,’localInitAI’);

set(hcetak,’callback’,’cetak’);

Bagian teratas dari program di atas berfungsi untuk menghentikan semua aktifitas objek apabila ada. Lalu membersihkan semua variabel dalam workspace dan mematikan semua fungsi warning. Lalu semua code yang ada setelahnya merupakan program untuk membentuk GUI. Jika dijalankan akan menghasilkan:

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]
27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ] Lalu jangan lupa untuk memasukkan beberapa

Lalu jangan lupa untuk memasukkan beberapa baris code berikut ini pada program di atas (letakkan di bagian bawah) sebagai inisialisasi awal untuk menampilkan grafik pada axes.

%% Menetapkan nilai fs dan tp

fs=str2double(get(tfrek,'string'));

tp=str2double(get(twakt,'String'));

%% menampilkan grafik awal frame=fs*tp;

t=0:frame-1;

plot(t/fs,zeros(1,frame),'r-');

xlabel('Time (sec)'); ylabel('Amplitude'); freeze=false;

Perlu anda ketahui bahwa ada dua jenis tombol yang kita gunakan, yakni toggle button dan normal button.

- Toggle button digunakan untuk start dan stop objek dalam mengambil dan menampilkan data.

- Normal button digunakan untuk menyimpan data ke dalam file (microsoft excel).

Ada 3 buah m file tambahan yang menjadi fungsi untuk dipanggil oleh program utama di atas. Perhatikan alir dari program di atas:

Ketika menekan tombol ‘Start’ maka code berikut ini:

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

set(htoggle,’callback’,’localInitAI’);

akan memanggil m.file lain yang bernama “localInitAI.m”. Program nya adalah:

%% uji tombol tugel apakah ON atau OFF status=get(htoggle,'Value'); if status==get(htoggle,'Max') set(htoggle,'String','Stop'); freeze=~freeze;

%% mengambil data penting dari GUI

fs=str2double(get(tfrek,'string'));

tp=str2double(get(twakt,'String'));

%%

%% Inisialisasi adaptor ai = analoginput('winsound', 0); chan=addchannel(ai, 1); set(ai,'TriggerChannel',chan) set(ai,'SampleRate',fs); set(ai,'SamplesPerTrigger',Inf); set(ai,'TriggerType','Software') set(ai,'TriggerCondition','Rising')

set(ai,'TriggerConditionValue',0)

frame=fs*tp;

set(ai,'SamplesAcquiredFcn','ambil_ulang_data'); set(ai,'SamplesAcquiredFcnCount',frame);

t=0:frame-1;

hline=plot(t/fs,zeros(1,frame),'r-');

xlabel('Time (sec)'); ylabel('Amplitude'); start(ai);

else

 

set(htoggle,'String','Start');

freeze=~freeze;

end

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

Program di atas akan mengaktifkan analog input sebagai objek untuk mengambil data dari perangkat luar.

Ketika program di atas dipanggil, maka dia akan memanggil m file lainnya yang bernama “ambil_ulang_data”. Bagian program yang memanggil adalah

set(ai,'SamplesAcquiredFcn','ambil_ulang_data');

program yang dipanggil tersebut memiliki code sebagai berikut:

[data,time] = getdata(ai,fs*tp); if freeze set(hline,'YData',data/max(abs(data))); drawnow;

else

stop(ai);

end

cekchk;

Program di atas terlebih dahulu melakukan cek terhadap status “start” atau “stop” yang dihasilkan ketika anda menekan tombol toggle button. Apabila dalam kondisi start, maka program akan terus mengambil data sebaliknya program akan berhenti dan menampilkan data terakhir.

Ketika program di atas dijalankan, dia akan memanggil fungsi lain untuk menguji apakah grid on atau off. Fungsi tersebut adalah “cekchk”. Berikut ini code nya

chk=get(chk1,'Value');

if chk==get(chk1,'Max'); set(hAxes,'XGrid','On'); set(hAxes,'YGrid','On'); set(chk1,'String','Grid ON');

else

set(hAxes,'XGrid','Off'); set(hAxes,'YGrid','Off'); set(chk1,'String','Grid OFF');

end

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

untuk tahap ini, program telah memanggil semua fungsi. Sekarang saatnya untuk membahas tentang aksi yang akan terjadi ketika anda menekan tombol “simpan data”. Ketika tombol tersebut ditekan, akan dipanggil fungsi berikut:

% bagian program untuk menyimpan data ke dalam

% file microsoft excel

data1=datax;

time1=timex;

[row,col]=find(data1>=0);

data1=data1(1,col);

time1=time1(1,col);

data1=reshape(data1,length(data1),1);

time1=reshape(time1,length(data1),1);

[filename, pathname, filterindex] = uiputfile( { '*.xlsx', '2007 Excel Fomat (*.xlsx)'; '*.xls','Below 2007 Excel Fomat (*.xls)';

'*.*',

'All Files (*.*)'},

'Save as'); if ~isequal(filename,0) || ~isequal(pathname,0) fName=strcat(pathname,'\',filename);

dtta = [time1(1:end,:),data1(1:end,:)]; xlswrite(fName,dtta);

end

figure, plot(time1,data1); xlabel('Time (sec)'); ylabel('Amplitude'); title('Chosen data for amplitude >=0');

Perlu anda ketahui bahwa ketika ingin menyimpan data yang diinginkan, jangan lupa untuk menekan tombol PAUSE. Agar data yang disimpan nanti merupakan data yang benar-benar anda inginkan. Ada beberapa hal yang perlu anda ketahui ketika menekan tombol “Simpan data”.

- File akan disimpan dalam format excel 2007 atau ke bawah. Sebaiknya simpanlah pada format 2007 karena kompatibilitas uji coba menghasilkan file yang bagus.

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]
27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ] Gambar di atas merupakan menu yang

Gambar di atas merupakan menu yang akan muncul ketika anda menekan tombol “Simpan data”. Lalu anda menuliskan nama file seperti halnya anda menyimpan file-file yang biasa anda lakukan.

- Anda bisa menuliskan ekstensi file atau membiarakan tanpa ada ekstensi. Program akan menyimpan sesuai dengan pilihan pada “Save as type” yang telah anda pilih.

Ada beberapa hal yang perlu anda perhatikan juga terkait dengan program ini. Perhatikan gambar berikut:

juga terkait dengan program ini. Perhatikan gambar berikut: - Sampling frequency berarti seberapa cepatkah anda

- Sampling frequency berarti seberapa cepatkah anda menginginkan program ini untuk mengambil data dari perangkat luar.

- Duration berarti dalam rentang berapa lamakah program akan mengambil dan menampilkan data. Semakin besar anda memberikan nilai pada bagian ini, maka semakin lama waktu yang dibutuhkan oleh program untuk menampilkan data serta jumlah data yang akan ditampilkan akan semakin banyak. Jadi jika anda menuliskan nilai yang besar dan tampaknya tidak menampilkan data apa-apa, jangan takut karena program memang membutuhkan waktu sebesar yang anda tulis untuk ditampilkan.

Perhatikan untuk KASUS CHARGING dan DISCHARGING CAPACITOR berikut ini. Kasus ini diperuntukkan untuk melihat karakter dari sebuah kapasitor dan mengukur waktu charging dan discharging dari sebuah kapasitor. Dalam hal ini, saya telah melakukan set untuk beberapa input terutama pada durasinya. Perlu anda ketahui juga dalam program ini saya men-set bahwa data yang akan disimpan hanya data yang nilainya lebih atau sama dengan nol (data 0). Sehingga bisa saja data yang disimpan akan mengalami reduksi data. Untuk melakukan perubahan tersebut, anda bisa melakukannya langsung pada program yang bernama “Simpan data”. Dalam hal ini saya memang

September 27, 2011

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

[JANS HENDRY / EE&IT UGM, INDONESIA]

September 27, 2011 [ JANS HENDRY / EE&IT UGM, INDONESIA ]

tidak menambahkan input text karena tidak begitu penting. Anda bisa menambahkan sendiri jika menurut anda itu penting.

Hasil dari eksekusi adalah

jika menurut anda itu penting. Hasil dari eksekusi adalah Semoga program ini berguna bagi anda sebagai

Semoga program ini berguna bagi anda sebagai alternatif kreatif ketika anda tidak memiliki osiloskop. Perlu diingat juga, sejauh yang saya ketahui bahwa audio card memiliki kapasitor couple yang akan melewatkan frekuensi tinggi dan menapis frekuensi rendah. Dengan demikian hanya isyarat yang memiliki fluktuasi yang akan dibaca dan ditampilkan. Sementra isyarat DC murni tidak akan terbaca karena telah diblok oleh kapasitor tersebut.

~~~ TERIMA KASIH ~~~

Originale: Jans Hendry EE&IT of UGM, Indonesia Email: jans.hendry@gmail.com