[TUTORIAL] Antarmuka MATLAB-Arduino untuk Sensor Suhu dan Kelembaban Udara

Visualisasi data suhu dan kelembaban menjadi menarik untuk dibuat. Melalui visualisasi data, kita dapat melihat alur peribahan data secara lebih informatif. Simak ulasannya pada tutorial berikut ...


on Sab, 06/11/2016 - 07:56
22.143 View

Pendahuluan

Sebelumnya, kita telah membahas bagaimana menggunakan sensor DHT11 pada Arduino. Bagi yang belum membaca, silahkan lihatl detail tutorialnya disini. Dari tutorial ini, kita akan kembangkan lagi dengan menambahkan antarmukanya. Kita akan gunakan MATLAB untuk visualisasi data kita.

Data yang diambil dari Arduino adalah multiple data, yaitu data suhu dan kelembaban. Kita harus pisahkan data tersebut dan menampilkannya secara terpisah pada MATLAB.

Hardware

Rangkailah sensor dan Arduino seperti pada Gambar 1.

[[{"fid":"788","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"Humidity DHT11 Arduino","field_file_image_title_text[und][0][value]":"Humidity DHT11 Arduino"},"type":"media","link_text":null,"attributes":{"alt":"Humidity DHT11 Arduino","title":"Humidity DHT11 Arduino","height":"444","width":"431","class":"media-element file-default"}}]]

Gambar 1. Konfigurasi Sensor dan Arduino

Pemrograman Arduino

Kita akan melakukan pemrograman di dua sisi, yaitu pada sisi Arduino dan sisi MATLAB.

Ketiklah skrip program berikut pada IDE Arduino dan upload-lah ke Arduino. Penjelasan penting mengenai program telah disertakan di dalam skrip ini sebagai komentar. Jangan lupa untuk menginstal pustaka DHT11 sebelumnya. Bagi yang belum menginstal, silahkan untuh pustaka yang ikut disertakan pada tutorial ini. Pustaka juga dapat diinstal secara online. Tutorialnya dapat dibaca disini.

#include "DHT.h"

// pin digital yang digunakan
#define DHTPIN 2

// saat ini saya pakai sensor DHT11.
// uncomment sensor yang diinginkan

#define DHTTYPE DHT11   
//#define DHTTYPE DHT22   
//#define DHTTYPE DHT21 

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  // baca kelembaban
  float h = dht.readHumidity();
  // baca temperatur dalam celcius
  float t = dht.readTemperature(); 

  // berikut cara mengirimkan data lebih dari 1.
  // gunakan separator koma, akhiri dgn println
  Serial.print(h);  
  Serial.print(",");  
  Serial.print(t);
  Serial.print(",");
  Serial.println();

  // delay sesaat
  delay(1000);
}

Pemrograman MATLAB

Pada sisi MATLAB, ketiklah skrip berikut. Penjelasan program telah disertakan sebagai komentar. Pengambilan data dari Arduino ke MATLAB mirip dengan tutorial yang saya tulis sebelumnya, yaitu berikut. Penulis menggunakan COM9 untuk Arduino. Silahkan disesuaikan dengan port COM kita.

clear
clc
 
%Inisialisasi serial dan grafik
serialPort = 'COM9';                  % isi dgn COM yg sesuai
judulGrafik = 'Logger Data Serial';   % Judul grafik
xLabel1 = 'Waktu (detik)';            % x-axis label 1
yLabel1 = 'Kelembaban (%)';           % y-axis label 1
xLabel2 = 'Waktu (detik)';            % x-axis label 2
yLabel2 = 'Suhu (Celcius)';           % y-axis label 2
plotGrid = 'on';                      % aktifkan grid
min = [0,0];                          % minimum axis-y
max = [100,40];                       % 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(2,1,1); % subplot atas
sub(2) = subplot(2,1,2); % subplot tengah
 
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');         
 
title(sub(1),'Nilai Kelembaban','FontSize',15);
title(sub(2),'Nilai Suhu','FontSize',15);
 
xlabel(sub(1), xLabel1,'FontSize',10);
xlabel(sub(2), xLabel2,'FontSize',10);
 
ylabel(sub(1), yLabel1,'FontSize',10);
ylabel(sub(2), yLabel2,'FontSize',10);
 
axis(sub(1),[0 10 min(1) max(1)]);
axis(sub(2),[0 10 min(2) max(2)]);
 
grid(sub(1),plotGrid);  
grid(sub(2),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)));
 
%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
 
    %========= grafik 1 untuk kelembaban ==============
    %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 untuk suhu ==============
    %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
 
    %Beri waktu sesaat utk Update Plot
    pause(delay);        
 end  
end
 
% Tutup serial port dan delete variabel yg sudah terpakai
fclose(s);
clear;
disp('Logger berakhir...');


Hubungkan Arduino ke komputer. Tutup Serial Monitor jika masih terbuka. Kemudian, Run-lah program MATLAB tersebut, dan lihatlah contoh hasilnya seperti pada Gambar 2. Untuk menguji, kita dapat menghembuskan nafas ke sensor DHT11 untuk memberi kelembaban. Lihatlah responnya pada grafik kelembaban. Jika berubah, maka data telah diambil dengan tepat.

[[{"fid":"792","view_mode":"default","fields":{"format":"default","field_file_image_alt_text[und][0][value]":"Humidity DHT11 Arduino MATLAB","field_file_image_title_text[und][0][value]":"Humidity DHT11 Arduino MATLAB"},"type":"media","link_text":null,"attributes":{"alt":"Humidity DHT11 Arduino MATLAB","title":"Humidity DHT11 Arduino MATLAB","height":"505","width":"569","class":"media-element file-default"}}]]

Gambar 2. Grafik Suhu dan Kelembaban pada MATLAB

Demikian Tutorial kali ini. Semoga bermanfaat :)

Referensi

Kusuma, Wardana. [TUTORIAL] Antarmuka Sensor Suhu dan Kelembaban Udara Menggunakan Arduino. https://tutorkeren.com/artikel/tutorial-antarmuka-sensor-suhu-dan-kelembaban-udara-menggunakan-arduino.htm.
Kusuma, Wardana. Plot Nilai Sensor Accelerometer dari Arduino pada MATLAB. https://tutorkeren.com/artikel/plot-nilai-sensor-accelerometer-dari-arduino-pada-matlab.htm.

Profil Penulis

User Picture
  • Member Since 9 tahun 4 bulan ago
Kusuma Wardana

MATLAB, Mikrokontroler, FPGA, Elektronika, Kontrol/Kendali, Signal Processing

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...

Comments