Anda di sini

Pemrograman

[TUTORIAL] Ploting Data Real-Time dari Sensor Ultrasonik Menggunakan MATLAB

Kusuma Wardana - 22 November 2015 11:30:38 0

Sensor ultrasonik adalah salah satu sensor yang paling populer digunakan untuk mengukur jarak atau mendeteksi suatu halangan yang berada di depan sensor. Sensor jenis ini ini menjadi salah satu sensor yang paling banyak digunakan pada event-event perlombaan, seperti Kontes Robot Pemadam Api (KRPAI) yang diselenggarakan setiap tahunnya oleh Direktorat Pendidikan Tinggi (Dikti).

Pada Tulisan kali ini, kita akan membuat suatu antarmuka untuk mendeteksi jarak yang dihasilkan oleh sensor ultrasonik menggunakan MATLAB, dan hasilnya akan ditampilkan berupa grafik batang (bar chart).

Prinsip Kerja Sensor Ultrasonik

Sensor ultrasonik akan mengirimkan sinyal suara berfrekuensi tinggi berbentuk pulsa dengan interval tertentu. sinyal ini akan merambat di udara dengan kecepatan suara. Jika sinyal menabrak suatu objek atau halangan, maka sinyal ini akan terpantulkan balik ke sensor. Jarak akan dihitung berdasarkan waktu yang diperlukan untuk mengirim dan menerima sinyal ke sensor. Amatilah Gambar 1.

Gambar 1. Prinsip Kerja Sensor Ultrasonik

Seperti yang telah kita ketahui bersama bahwa kecepatan dihitung berdasarkan jarak yang ditempuh sesuatu dalam satu satuan waktu. Berdasarkan prinsip ini, rumus dasar untuk menghitung jarak antara sensor dan benda/penghalang adalah dengan menggunakan rumus sederhana berikut:

Dengan s adalah jarak antara sensor dan penghalang, V adalah kecepatan suara, dan t adalah waktu antara sinyal dikirim dan diterima. Rumus tersebut memiliki faktor pembagi 2, sebab waktu yang terdeteksi adalah waktu saat sinyal dikirim dan diterima. Waktu ini adalah dua kali waktu untuk mencapai sensor dan penghalang, sehingga jarak yang terdeteksi dengan waktu ini adalah dua kali jarak sensor dan penghalang. Dengan demikian, kita harus menambahkan faktor pembagi dua.

Jarak dihitung berdasarkan waktu tempuh, BUKAN berdasarkan intesitas yang diterima. Sudah tentu, intensitas yang sinyal pantul akan berkurang jika dibandingkan dengan sinyal awal.

Kecepatan suara di udara mencapai 331.45 m/s pada temperatur 0 derajat Celcius. Kecepatan suara pada temperatur yang berbeda dapat dihitung dengan rumus berikut:

Hal ini dikarenakan kecepatan suara akan meningkat 0.607 m/s setiap kenaikan 1 derajat Celcius.

Skema Rangkaian

Aturlah sensor sesuai dengan Tabel berikut:

Nama Konektor SensorNomer Pin pada Arduino
Vcc5V
GndGND
Echo5
Trig6

Gambar 2. Skematik Rangkaian

Saat ini kita akan menggunakan sensor ultrasonik HC-SR04. Bukalah IDE Arduino, dan ketikkan program berikut:

const int trigPin = 6;
const int echoPin = 5;
int matlabData;
long durasi, cm;
  
void setup() {
  // inisialisasi komunikasi serial
  Serial.begin(9600);
}
  
void loop()
{
    if (Serial.available() > 0) {
    // baca data jika ada request
    matlabData = Serial.read();
   // jika request benar, kirim ke MATLAB
    if (matlabData ==1) 
    {
      cm = cariJarak();      
      Serial.println(cm);     
    }
  } 
}
  
//===================== Fungsi =============================
long mikrodetikKeCentimeter(long mikrodetik)
{
 
  // Kecepatan suara sebesar 340 m/s atau 29 mikro detik tiap centimeter
  // Jangan lupa membagi dua untuk mendapatkan jarak yang benar
  // (Ingat, ini adalah waktu sinyal bolak-balik)
  return mikrodetik / 29 / 2;
}
 
long cariJarak()
{
 
  // Sensor ditriger dengan memberikan pulsa HIGH selama 10 us
  // Selanjutnya beri sinyal LOW untuk mendapatkan sinyal yg tepat
  pinMode(trigPin, OUTPUT);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  //Baca sinyal HIGH yang ditangkap sensor
  pinMode(echoPin, INPUT);
  durasi = pulseIn(echoPin, HIGH);
  
  // Ubah dari waktu ke jarak 
  cm = mikrodetikKeCentimeter(durasi);
  return cm;
}

Pemrograman MATLAB

Untuk MATLAB, ketiklah sintaks berikut. Jangan lupa mengatur COM sesuai dengan nomer yang terdeteksi pada komputer kita:

clear all;
clc
 
%Inisialisasi serial dan grafik 
serialPort = 'COM33';                       % isi dgn COM yg sesuai
judulGrafik = 'Logger Data Sensor Jarak';   % Judul grafik
xLabel = 'Waktu (detik)';                   % x-axis label
yLabel = 'Jarak (cm)';                           % y-axis label
barGrid = 'on';                             % aktifkan grid
min = 0;                                    % minimum axis-y
max = 40;                                   % maksimum axis-y
lebarScroll = 10;                           % display data pada grafik
delay = 1;                                  % waktu cuplik
 
%Inisialisasi variabel
waktu = 0;
data = 0;
cacah = 0;
 
%Persiapkan grafik
barGraph = bar(waktu,data,'g',...
    'LineWidth',2,...
    'EdgeColor','r');
title(judulGrafik,'FontSize',15);
xlabel(xLabel,'FontSize',12);
ylabel(yLabel,'FontSize',12);
axis([0 10 min max]);
grid(barGrid);                         %aktifkan grid
s = serial(serialPort);                %Buka komunikasi melalui port COM
set(s,'Timeout',1);                    % set timeout utk komunikasi
disp('Tutup jendela grafik untuk mengakhiri logger');
fopen(s);
fprintf(s,'%s',char(1));               %kirim 1 untuk mengirim Request 
tic                                    %aktifkan deteksi waktu
while ishandle(barGraph)               %Terus looping semasih plot aktif
    nilaiInput = fscanf(s,'%f');       %Baca data serial dalam format float
    disp('Data Diterima!')
    %Pastikan data yg diterima benar
    if(~isempty(nilaiInput) && isfloat(nilaiInput))          
        cacah = cacah + 1;    
        waktu(cacah) = toc;             %ambil waktu saat ini       
        data(cacah) = nilaiInput(1);    %ambil data saat ini         
         
        %Set Axis sesuai dengan nilai lebarScroll
        if(lebarScroll > 0)
        set(barGraph,'XData',waktu(waktu > waktu(cacah)-lebarScroll), ...
            'YData',data(waktu > waktu(cacah)-lebarScroll));
        axis([waktu(cacah)-lebarScroll waktu(cacah) min max]);
        else
        set(barGraph,'XData',waktu,'YData',data);
        axis([0 waktu(cacah) min max]);
        end
         
        %Beri waktu sesaat utk Update Plot
        pause(delay);
    end
    fprintf(s,'%s',char(1));              %kirim '1' untuk mengirim Request
    disp('Request Dikirim...')    
end
 
% Tutup serial port dan delete variabel yg sudah terpakai
fclose(s);
clear all; 
disp('Logger berakhir...');

Amatilah Gambar 3. Gambar tersebut menampilkan contoh hasil yang didapat. Semoga tutorial ini bermanfaat Smile

Gambar 3. Hasil Antarmuka Logger Sensor Ultrasonik

Referensi Web:

  1. Anonim (2015) Ultrasonic principle - where high performance sounds good
  2. http://www.microsonic.de/en/Interesting-facts.htm Diakses 17 Juni 2015
  3. Anonim (2015) Measurement Principle / Effective Use of Ultrasonic Sensor
  4. http://www.sensorcentral.com/photoelectric/ultrasonic01.php Diakses 17 Juni 2015
  5. Anonim (2015) HC-SR04 User Guie
  6. http://www.mpja.com/download/hc-sr04_ultrasonic_module_user_guidejohn.pdf Diakses 17 Juni 2015

5.184
Image

Kusuma Wardana

I Nyoman Kusuma Wardana, yang akrab dipanggil Kusuma, lahir dan besar di Bali. Ia tinggal di Desa Wisata Ubud, dan lebih banyak melaksanakan aktivitasnya di Denpasar. Profesinya adalah sebagai staf pengajar di Jurusan Teknik Elektro, Politeknik Negeri Bali. Saat ini Ia menjadi salah satu penulis di tutorkeren.com.

Artikel Menarik Lainnya
Mari Gabung

Halo Emo 51 , Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.