You are on page 1of 11

September 27, 2011

[JANS HENDRY / EE&IT UGM, INDONESIA]

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

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;

Page | 1

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. hFig=figure(... 'Color' 'IntegerHandle' 'DoubleBuffer' 'MenuBar' 'HandleVisibility' 'Name' 'Tag' 'NumberTitle' 'Units' 'Position' 'UserData' 'Colormap' 'Pointer' 'Visible' ); % 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' ... ,'off' ,'pixels' ,figPos ,[] ,[] ,'arrow' ,'off' ,... ... ,'on' ,... ,... ,... ,... ,... ,... ,... ,'off' ,'on' ,'none' ,... ,'REAL TIME OSCILOSCOPE FOR LOW ,'Analog Input FFT demo' ,'white' ,... ,... ,... ,... figHeight]; ...

VOLTAGE MEASUREMENT - Jans Hendry, Ph.D.'

Page | 2

September 27, 2011

[JANS HENDRY / EE&IT UGM, INDONESIA]

% Create Data subplot. hAxes = axes(... 'Position' 'Parent' 'XLim' 'YLim' 'Box' 'Xcolor' 'Ycolor' ); % creating cetak data button hcetak = uicontrol(... 'Parent' 'Style' 'Units' 'Position' 'String' 'Backgroundcolor' ); % creating teks frequency sampling twakt = uicontrol(... 'Parent' 'Style' 'Units' 'Position' 'String' 'FontWeight' 'Backgroundcolor' ); % 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' ... , hFig,... , 'edit',... , 'normalized',... , [0.8401 0.6600 0.1062 0.1020],... , '0.1',... ,'bold', ... , 'white' ... , hFig,... , 'pushbutton',... , 'normalized',... , [0.8848 0.0960 0.1062 0.1020],... , 'Simpan Data',... , 'white' ... , [0.0715 0.096 0.6845 0.8019],... , hFig, ... , [0 10],... , [-1 1],... , 'On',... ,'blue', ... , 'blue' ...

Page | 3

September 27, 2011

[JANS HENDRY / EE&IT UGM, INDONESIA]

% creating static text1 htext1 = uicontrol(... 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor' ); % 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(... 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor' ); , hFig, ... , 'text', ... , 'Sec',... , 'normalized',... , [0.9505,0.6980,0.0262,0.032], ... , 'white' ... , hFig, ... , 'text', ... , 'Hz',... , 'normalized',... , [0.9505,0.8360,0.02628,0.032], ... , 'white' ... , hFig, ... , 'text', ... , 'Duration',... , 'normalized',... , [0.7584,0.6900,0.0741,0.0360], ... , 'white' ... , hFig, ... , 'text', ... , 'Sampling Frequency',... , 'normalized',... , [0.7584,0.8120,0.0704,0.07], ... , 'white' ...

Page | 4

September 27, 2011

[JANS HENDRY / EE&IT UGM, INDONESIA]

% creating static text5 htext5 = uicontrol(... 'Parent' 'Style' 'String' MEASUREMENT',... 'Units' 'Position' 'Backgroundcolor' 'FontWeight' 'FontName' 'FontSize' ); chk1 = uicontrol(... 'Parent' 'Style' 'String' 'Units' 'Position' 'Backgroundcolor' 'Value' 'Callback' ); set(hFig,visible,on); set(htoggle,callback,localInitAI); set(hcetak,callback,cetak); ,hFig, ... , 'checkbox', ... , 'Grid OFF', ... , 'normalized', ... , [0.0715 0.01 0.0788 0.046], ... , 'white',... ,0, ... ,'cekchk' ... , 'normalized',... , [0.2092,0.93,0.5793,0.0440], ... , 'white', ... ,'bold', ... , 'MS Sans Serif', ... , 12.... , hFig, ... , 'text', ... , 'REAL TIME OSCILOSCOPE FOR LOW VOLTAGE

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:

Page | 5

September 27, 2011

[JANS HENDRY / EE&IT UGM, INDONESIA]

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:

Page | 6

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

Page | 7

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

Page | 8

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.

Page | 9

September 27, 2011

[JANS HENDRY / EE&IT UGM, INDONESIA]

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:

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

Page | 10

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

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

Page | 11

You might also like