风筝
发表于: 2019-6-27 11:07:03 | 显示全部楼层

图形表示总是有助于可视化数据,通过查看它们变得非常容易找到趋势和模式。有许多软件可用于根据输入值绘制图形,但在嵌入式系统中,MATLAB是最流行的软件之一,它不仅可以以图形格式显示结果,而且可以轻松地与硬件和微控制器集成。


在本篇文章中,我们将学习如何使用MATLAB以图形格式记录和显示数据。在这里,我们使用Arduino和MATLAB记录DHT11的实时温度和湿度数据。


需要的组件

●    安装MATLAB的笔记本电脑

●    Arduino UNO开发板

●    DHT11温湿度传感器


电路原理图

Circuit-Diagram-for-Plotting-DHT11-Sensor-readings-on-MATLAB.png

Circuit-Hardware-for-Plotting-DHT11-Sensor-readings-on-MATLAB.jpg


用于DHT11的Arduino代码与MATLAB连接

将DHT11传感器与Arduino连接后,使用Arduino IDE将代码上传到Arduino。在文章的末尾处给出了完整的Arduino代码,用于将温度和湿度数据记录和可视化到MATLAB中。让我们了解代码是如何工作的。


首先包括用于DHT11传感器的库,即'DHT.h'。

  1. #include <DHT.h>   
复制代码

然后定义连接到Arduino的DHT11数据引脚。本例中,使用的是4号引脚。

  1. #define DHTPIN 4
复制代码

void setup()函数中初始化串口和DHT11传感器。

  1. void setup() {
  2.   Serial.begin(9600);
  3.   delay(2000);
  4.   dht.begin();   // initialise DHT11 sensor
  5. }
复制代码

void loop()函数中,将温度和湿度的值设置为浮点类型。使用命令float temp = dht.readTemperature()float humi = dht.readHumidity()从Arduino读取温度和湿度数据。然后在串行监视器上打印这些值,以便MATLAB能够连续读取值。

  1. void loop() {                                            
  2.   float temp = dht.readTemperature();   //read temperature data
  3. float humi = dht.readHumidity();   //read temperature data
  4. Serial.print(temp);
  5.   Serial.print(humi);
  6.   delay(2000);
  7. }
复制代码

用于记录和绘制数据的MATLAB代码

在系统中打开MATLAB,然后在编辑器窗口中开始编写代码。可以通过单击MATLAB中的“新脚本”打开编辑器窗口,如下图所示。

Creating-New-Editor-script-in-MATLAB.png

DHT11传感器数据记录的完整MATLAB代码在本文末尾给出。


首先定义一个从MATLAB到Arduino的串行通信变量。 COM18是Arduino连接的端口,您可以相应地进行更改。

  1. s = serial('COM18');
复制代码

在下面的代码中,fopen()用于Arduino和MATLAB之间的串行通信。然后我们将串行数据保存到名为'out'的变量中。 out变量是一个九位数的字符串,其中前四位数字存储温度数据,其余数字存储湿度数据。因此,通过使用Temp(i)=str2num(out(1:4))Humi(i)=str2num(out(5:9)),我们分别读取温度和湿度数据。

  1. fopen(s)
  2. out = fscanf(s)
  3. Temp(i)=str2num(out(1:4));
  4. Humi(i)=str2num(out(5:9));
复制代码

现在,将完整的代码粘贴到编辑器窗口中。单击“运行”按钮处理代码,如下图所示。

Run-MATLAB-GUI.png


等到MATLAB在屏幕左下角显示忙碌,如下图所示。这表明MATLAB正在处理代码。

Processing-MATLAB-GUI-Program.png

如果代码执行时没有任何错误,则实时图形窗口将出现在屏幕上,如下所示。这里,数据将每两秒更新一次,因为DHT11传感器将数据发送到串行端口需要两秒钟。

Plotting-DHT11-Sensor-readings-on-MATLAB.png

要检查温度和湿度的实时记录值,请双击工作区窗口中的相应变量,如下图所示。

Checking-DHT11-Logged-Data-on-Matlab.png

将出现一个对话框,其中包含特定变量中的所有已保存值。

Checking-DHT11-Logged-Humidity-Data-on-Matlab.png

Checking-DHT11-Logged-Temperature-Data-on-Matlab.png


以上就是您如何使用MATLAB基于任何数据记录、可视化和绘制图形。如果遇到任何问题,请在本帖下面进行回复。


代码

本文使用的完整代码如下(包含Arduino和Matlab代码): main.rar (608 Bytes, 下载次数: 133)

跳转到指定楼层
CHZ1838557391
发表于: 2020-5-2 15:40:54 | 显示全部楼层

您好,我用的是STM32开发板,开发板的程序是好的,就是在matlab上绘制图时出现
警告: 读取失败:  A timeout occurred before the Terminator was
reached.。

out =

     ''
索引超出矩阵维度。
的问题,怎么解决呢,跪求..。
回复

使用道具 举报

xiaofanqie
发表于: 2020-5-9 15:38:05 | 显示全部楼层

CHZ1838557391 发表于 2020-5-2 15:40
您好,我用的是STM32开发板,开发板的程序是好的,就是在matlab上绘制图时出现
警告: 读取失败:  A timeout ...

你弄这个弄好了吗,代码合适吗
回复

使用道具 举报

CHZ1838557391
发表于: 2020-5-19 17:14:17 | 显示全部楼层

用Arduino调出来了,STM32没弄出来
回复

使用道具 举报

掌控k
发表于: 2021-9-30 09:28:02 | 显示全部楼层

你好,我按照您的代码运行,运行不出来结果,请问有什么方式可以联系你吗
回复

使用道具 举报

掌控k
发表于: 2021-9-30 09:28:26 | 显示全部楼层

搞不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-8 02:39 , Processed in 0.052398 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表