圖形表示形式總是有助于可視化數(shù)據(jù),并且通過查看趨勢(shì)和模式非常容易。有很多軟件可以根據(jù)輸入值繪制圖形,但是在嵌入式系統(tǒng)中,MATLAB是最受歡迎的軟件之一,它不僅可以以圖形形式顯示結(jié)果,而且可以輕松地與硬件和微控制器集成。
在本教程中,我們將學(xué)習(xí)如何使用MATLAB以圖形格式記錄和顯示數(shù)據(jù)。在這里,我們使用Arduino和MATLAB記錄DHT11的實(shí)時(shí)溫度和濕度數(shù)據(jù)。以前我們將LM35與MATLAB一起使用以繪制溫度曲線圖。
如果您是MATLAB的新手,可以查看一下以前的MATLAB教程以更好地了解它們:
MATLAB入門:快速介紹
將Arduino與MATLAB接口-使用MATLAB和Arduino閃爍LED
直流電動(dòng)機(jī)控制
MATLAB和Arduino之間的串行通信
使用MATLAB進(jìn)行圖像處理入門
您可以在此處參考所有MATLAB教程。
所需的組件
MATLAB安裝的筆記本電腦(R2016b或以上版本)
Arduino UNO
DHT11溫濕度傳感器
電路圖
DHT11與MATLAB接口的Arduino代碼
將DHT11傳感器與Arduino連接后,使用以下代碼將代碼上傳到Arduino Arduino IDE。最后給出了完整的Arduino代碼,用于將溫度和濕度數(shù)據(jù)記錄和可視化到MATLAB中。讓我們了解代碼的工作原理。
首先包含用于DHT11傳感器的庫“ DHT.h”。
#include
然后定義連接到Arduino的DHT11數(shù)據(jù)引腳。在我們的例子中,它是引腳號(hào)4。
#define DHTPIN 4
在“無效設(shè)置” 中,初始化串口和DHT11傳感器。
void setup() {
Serial.begin(9600);
delay(2000);
dht.begin(); // initialise DHT11 sensor
}
在‘void loop’函數(shù)中,將溫度和濕度的值設(shè)置為 float 類型。使用命令 float temp = dht.readTemperature()和 float humi = dht.readHumidity()從Arduino讀取溫度和濕度數(shù)據(jù)。然后在串行監(jiān)視器上打印這些值,以便MATLAB能夠串行讀取這些值。
void loop() {
float temp = dht.readTemperature(); //read temperature data
float humi = dht.readHumidity(); //read temperature data
Serial.print(temp);
Serial.print(humi);
delay(2000);
}
MATLAB記錄和繪圖代碼數(shù)據(jù)
在系統(tǒng)中打開MATLAB,然后在編輯器窗口中開始編碼。可以通過在MATLAB中單擊“ 新腳本” 來打開編輯器窗口,如下圖所示。
在項(xiàng)目結(jié)束時(shí)給出了用于DHT11傳感器數(shù)據(jù)記錄的完整的MATLAB代碼。
從定義用于串行通信的變量開始, MATLAB到Arduino。 COM18是連接我的Arduino的端口,您可以進(jìn)行相應(yīng)的更改。
s = serial(‘COM18’);
在下面的代碼中, fopen()用于Arduino和MATLAB之間的串行通信。然后,我們將串行數(shù)據(jù)保存到名為“ out ”的變量中。 out 變量是一個(gè)九位數(shù)字的字符串,其中前四位數(shù)字存儲(chǔ)溫度數(shù)據(jù),其余位數(shù)字存儲(chǔ)濕度數(shù)據(jù)。因此,通過使用 Temp(i)= str2num(out(1:4))和 Humi(i)= str2num(out(5:9))我們正在閱讀現(xiàn)在,將完整的代碼粘貼到編輯器窗口中之后。
fopen(s)
out = fscanf(s)
Temp(i)=str2num(out(1:4));
Humi(i)=str2num(out(5:9));
現(xiàn)在。單擊“運(yùn)行”按鈕以處理代碼,如下圖所示。
等到MATLAB在屏幕的左下角顯示忙,如下圖所示。這表明MATLAB正在處理代碼。
如果代碼執(zhí)行沒有任何錯(cuò)誤,則顯示實(shí)時(shí)圖形窗口將出現(xiàn)在屏幕上,如下所示。在這里,數(shù)據(jù)將每兩秒鐘更新一次,因?yàn)镈HT11傳感器將數(shù)據(jù)發(fā)送到串行端口需要兩秒鐘。
要檢查溫度和濕度的實(shí)時(shí)記錄值,請(qǐng)雙擊工作區(qū)窗口中的相應(yīng)變量,如下圖所示。
將出現(xiàn)對(duì)話框,其中包含所有保存到特定變量中的值。
因此,這是記錄,可視化和繪制圖形的方式圖形。
代碼
Arduino代碼
#include
#define DHTPIN 4 #define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
void setup(){
Serial.begin(9600);
delay(2000) );
dht.begin();//初始化DHT11傳感器
}
無效循環(huán)(){
float temp = dht.readTemperature();//讀取溫度數(shù)據(jù)
float humi = dht.readHumidity();//讀取溫度數(shù)據(jù)
Serial.print(temp);
Serial.print(humi);
delay(2000);
}
MATLAB代碼
s = serial(‘COM18’);
time = 100;
i = 1;
while(i
fopen(s)
fprintf(s,“您的串行數(shù)據(jù)在此處”)
out = fscanf(s)
Temp(i)= str2num(out( 1:4));
子圖(211);
圖(Temp,‘g’);
axis([0,time,20,50]);
title(‘Parameter: DHT11 Temperature’);
xlabel(‘---》 x * 0.02 sec中的時(shí)間’);
ylabel(‘---》 Temperature’);
網(wǎng)格
Humi (i)= str2num(out(5:9));
子圖(212);
圖(Humi,‘m’);
axis([0,time,25,100]);
title(‘Parameter:DHT11 Humidity’);
xlabel(‘---》 x * 0.02 sec中的時(shí)間’);
ylabel(‘---》濕度%’);
網(wǎng)格
fclose(s)
i = i + 1;
drawnow;
end
delete(s)
clear s
責(zé)任編輯:wv
-
matlab
+關(guān)注
關(guān)注
185文章
2979瀏覽量
230719
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論