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

示波器自動計量系統如何記錄數據?
EPS格式圖像的最佳使用場景
EPS文件格式如何轉換 EPS和SVG文件的區別
MATLAB(1)--MATLAB數值數據
如何使用MATLAB創建預測模型
THS8200全格式過采樣分量視頻/PC圖形DAC系統數據表

評論