Asumsi saat ini kita memiliki TIGA buah data yang akan kita kirim dari Arduino. Anggaplah ini adalah nilai dari tegangan analog pada sebuah accelerometer. Nah, asumsi saat ini kita tidak memakai accelerometer secara langsung, melainkan menggantinya dengan sebuah bilangan acak (random). Untuk membedakan ketiga nilai ini, nilai-x akan memiliki rentang antara 0 - 10, nilai-y memiliki rentang antara 50-60, dan nilai-z memiliki rentang antara 90-100.
Bukalah IDE Arduino, dan ketik serta upload skrip berikut:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(random(0,10));
Serial.print(",");
Serial.print(random(50,60));
Serial.print(",");
Serial.print(random(90,100));
Serial.print(",");
Serial.println();
delay(1000);
}Amatilah bahwa setiap nilai x,y, dan z akan kita pisahkan dengan separator koma (,) dan terakhir kita akhiri dengan new line (println).
Pada MATLAB, ketiklah sintaks berikut. Ingat, sesuaikanlah dengan nomer port COM pada komputer kita.
clear
clc
%Inisialisasi serial dan grafik
serialPort = 'COM33'; % isi dgn COM yg sesuai
judulGrafik = 'Logger Data Serial'; % Judul grafik
xLabel = 'Waktu (detik)'; % x-axis label
yLabel = 'Data'; % y-axis label
plotGrid = 'on'; % aktifkan grid
min = [0,50,90]; % minimum axis-y
max = [10,60,100]; % maksimum axis-y
lebarScroll = 20; % display data pada grafik
delay = .05; % waktu cuplik
%Inisialisasi variabel
waktu = 0;
data = 0;
cacah = 0;
%Persiapkan grafik
sub(1) = subplot(3,1,1); % subplot atas
sub(2) = subplot(3,1,2); % subplot tengah
sub(3) = subplot(3,1,3); % subplot bawah
plotGraph(1) = plot(sub(1),waktu,data,'-o',...
'LineWidth',2,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','r');
plotGraph(2) = plot(sub(2),waktu,data,'-o',...
'LineWidth',2,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','b');
plotGraph(3) = plot(sub(3),waktu,data,'-o',...
'LineWidth',2,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g');
title(sub(1),'Nilai-x','FontSize',15);
title(sub(2),'Nilai-y','FontSize',15);
title(sub(3),'Nilai-z','FontSize',15);
xlabel(sub(1), xLabel,'FontSize',10);
xlabel(sub(2), xLabel,'FontSize',10);
xlabel(sub(3), xLabel,'FontSize',10);
ylabel(sub(1), yLabel,'FontSize',10);
ylabel(sub(2), yLabel,'FontSize',10);
ylabel(sub(3), yLabel,'FontSize',10);
axis(sub(1),[0 10 min(1) max(1)]);
axis(sub(2),[0 10 min(2) max(2)]);
axis(sub(3),[0 10 min(3) max(3)]);
grid(sub(1),plotGrid);
grid(sub(2),plotGrid);
grid(sub(3),plotGrid);
%Buka komunikasi melalui port COM
s = serial(serialPort);
disp('Tutup jendela grafik untuk mengakhiri logger');
fopen(s);
tic %aktifkan deteksi waktu
while ishandle(plotGraph) %Terus looping semasih plot aktif
nilaiInput = fscanf(s);
nilaiInput = strsplit(nilaiInput,',');
dataSensor(1) = str2double(cell2mat(nilaiInput(1)));
dataSensor(2) = str2double(cell2mat(nilaiInput(2)));
dataSensor(3) = str2double(cell2mat(nilaiInput(3)));
%Pastikan data yg diterima benar
if(~isempty(dataSensor(1)) && isfloat(dataSensor(1)))
cacah = cacah + 1;
waktu(cacah) = toc; %ambil waktu saat ini
data1(cacah) = dataSensor(1); %ambil data saat ini utk x
data2(cacah) = dataSensor(2); %ambil data saat ini utk y
data3(cacah) = dataSensor(3); %ambil data saat ini utk z
%========= grafik 1 ==============
%Set Axis sesuai dengan nilai lebarScroll
if(lebarScroll > 0)
set(plotGraph(1),'XData',waktu(waktu > waktu(cacah)-lebarScroll),...
'YData',data1(waktu > waktu(cacah)-lebarScroll));
axis(sub(1),[waktu(cacah)-lebarScroll waktu(cacah) min(1) max(1)]);
else
set(plotGraph(1),'XData',waktu,'YData',data1);
axis(sub(1),[0 waktu(cacah) min(1) max(1)]);
end
%========= grafik 2 ==============
%Set Axis sesuai dengan nilai lebarScroll
if(lebarScroll > 0)
set(plotGraph(2),'XData',waktu(waktu > waktu(cacah)-lebarScroll),...
'YData',data2(waktu > waktu(cacah)-lebarScroll));
axis(sub(2),[waktu(cacah)-lebarScroll waktu(cacah) min(2) max(2)]);
else
set(plotGraph(2),'XData',waktu,'YData',data1);
axis(sub(2),[0 waktu(cacah) min(2) max(2)]);
end
%========= grafik 3 ==============
%Set Axis sesuai dengan nilai lebarScroll
if(lebarScroll > 0)
set(plotGraph(3),'XData',waktu(waktu > waktu(cacah)-lebarScroll),...
'YData',data3(waktu > waktu(cacah)-lebarScroll));
axis(sub(3),[waktu(cacah)-lebarScroll waktu(cacah) min(3) max(3)]);
else
set(plotGraph(3),'XData',waktu,'YData',data3);
axis(sub(3),[0 waktu(cacah) min(3) max(3)]);
end
%Beri waktu sesaat utk Update Plot
pause(delay);
end
end
% Tutup serial port dan delete variabel yg sudah terpakai
fclose(s);
clear all;
disp('Logger berakhir...');Pada skrip MATLAB tersebut, amatilah beberapa sintaks penting berikut ini:
nilaiInput = fscanf(s); nilaiInput = strsplit(nilaiInput,','); dataSensor(1) = str2double(cell2mat(nilaiInput(1))); dataSensor(2) = str2double(cell2mat(nilaiInput(2))); dataSensor(3) = str2double(cell2mat(nilaiInput(3)));
Data dari Arduino akan dibaca secara serial menggunakan fungsi fscanf. Hasilnya adalah data yang terdiri dari nilai x,y,z, separator dan new line. Oleh karena itu, kita akan memisahkan tiap data dengan menggunakan fungsi strplit. Selanjutnya, hasilnya adalah berupa data MATLAB dalam bentuk string yang masih terbungkus dalam sebuah cell. Oleh karena itu, pertama kita ubah menjadi data matriks dengan sintaks cell2mat, dan selanjutnya dijadikan tipe data doublemenggunakan str2double agar nilai ini dapat diplot pada grafik.
Sintaks yang lainnya dalam skrip MATLAB tersebut Penulis rasa sudah cukup familiar. Jika dijalankan, maka diperoleh hasil seperti berikut ini:
[[{"fid":"241","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"grafik accelerometer matlab multi sensor","field_file_image_title_text[und][0][value]":"grafik accelerometer matlab multi sensor"},"type":"media","link_text":null,"attributes":{"alt":"grafik accelerometer matlab multi sensor","title":"grafik accelerometer matlab multi sensor","height":"358","width":"400","class":"media-element file-default"}}]]
Selamat mencoba, Semoga bermanfaat :)

![[ULASAN - LENGKAP] Ploting Real Time Data dari Arduino Menggunakan MATLAB](/sites/default/files/styles/d06_standard/public/2022-10/tree-736885.jpg?h=ba3a7c34&itok=7QUi_kiC)
Komentar Terbaru