图形表示形式总是有助于可视化数据,并且通过查看趋势和模式非常容易。有很多软件可以根据输入值绘制图形,但是在嵌入式系统中,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
+关注
关注
185文章
2977浏览量
230569
发布评论请先 登录
相关推荐
评论