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