已知温度数据用matlab绘制曲线图,如何使用MATLAB绘制实时温度图

图形总是有助于可视化数据,通过查看它们变得非常容易找到趋势和模式。有许多软件可用于根据输入值绘制图形,今天我们将使用MATLAB根据LM35传感器的温度数据绘制图形。本篇文章将介绍有关如何使用MATLAB绘制实时图形的基本思路。同时本文还使用Arduino Uno开发板从LM35温度传感器获取温度数据。

52f10ccd9bac9d7299beb58f93885e4d.gif

How-to-Plot-Graph-using-MATLAB_0.jpg (117.48 KB, 下载次数: 140)

2018-11-27 20:00 上传

为绘图创建MATLAB图形用户界面

首先,我们必须使用温度数据构建用于绘制图形的GUI(图形用户界面)。要启动GUI,请在命令窗口中键入以下命令

guide复制代码

然后弹出一个窗口,在窗口中选择新的空白GUI,如下图所示,

52f10ccd9bac9d7299beb58f93885e4d.gif

Creating-GUI-in-MATLAB.png (20.25 KB, 下载次数: 136)

2018-11-27 20:00 上传

现在我们必须为MATLAB图形界面选择一个按钮、两个轴和一个文本框。按钮将用于启动感应温度,两个轴用于绘制图形,文本框用于显示温度的当前值。

52f10ccd9bac9d7299beb58f93885e4d.gif

Designing-GUI-for-Plot-Graph-using-MATLAB.png (23.27 KB, 下载次数: 147)

2018-11-27 20:00 上传

要调整大小或更改按钮、轴或编辑文本按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击其中任何一个,您将能够更改该特定按钮的颜色、字符串和标记。定制后,如下所示

52f10ccd9bac9d7299beb58f93885e4d.gif

Editing-GUI-for-Plot-Graph-using-MATLAB.png (32.08 KB, 下载次数: 133)

2018-11-27 20:00 上传

52f10ccd9bac9d7299beb58f93885e4d.gif

GUI-for-Plot-Graph-using-MATLAB.png (7.92 KB, 下载次数: 134)

2018-11-27 20:00 上传

您可以根据自己的选择自定义按钮。现在当你保存它时,在MATLAB的Editor窗口中生成一个代码。要使Arduino执行与项目相关的任何特定任务,您始终必须编辑此生成的代码。所以下面我们编辑了MATLAB代码。您可以在MATLAB入门教程中了解有关命令窗口、编辑器窗口等的更多信息。

用于绘制图形的MATLAB代码

在本篇文章的末尾处给出了使用LM35和Arduino开发板制作温度计的完整MATLAB代码。此外,我们还包括GUI文件(.fig)和代码文件(.m)供下载,您可以根据需要自定义按钮或轴大小。我们编辑了生成的代码,如下所述。

复制并粘贴以下代码到第74行,确保每次运行m文件时Arduino正在与MATLAB通讯。

clear all;

global a;

a = arduino();复制代码

52f10ccd9bac9d7299beb58f93885e4d.gif

IInitializing-Arduino-in-MATLAB.png (3.74 KB, 下载次数: 133)

2018-11-27 20:00 上传

向下滚动时,您将看到在GUI中为按钮和编辑文本创建了两个函数,不会为Axes创建任何函数。现在根据您要执行的任务在按钮(开始按钮)功能中编写代码。

在“开始”按钮的函数中,在函数的末尾处复制并粘贴以下代码以启动温度感测。对于温度的连续感测、显示和图形绘制,我们使用while循环。我们在每次迭代后提供1秒的暂停,因此温度值将每秒更新一次。

x = 0;

go = true;

global a;

while go

value = readVoltage(a,'A1');

temp = (value*100);

disp(temp);

x = [x temp];

plot(handles.axes1,x);

grid on;

xlabel('Time(seconds)')

ylabel('Temperature(°C)');

title('Real-Time Temperature Graph');

drawnow

set(handles.edit1,'String',num2str(temp));

pause(1);

end复制代码

52f10ccd9bac9d7299beb58f93885e4d.gif

Code-for-Plot-Graph-using-MATLAB.png (14.89 KB, 下载次数: 131)

2018-11-27 20:00 上传

现在,让我们看看代码是如何工作的。在下面的三行代码中,我们将'x'的初始值设置为零,将'go'定义为true以启动while循环,并声明'global a'用于调用函数中的Arduino。

x = 0;

go = true;

global a;复制代码

下面的代码行用于检测Arduino的模拟引脚A1的电压值,该引脚连接到LM35温度传感器的“OUT”引脚。输出将是电压值而不是模拟值。

value = readVoltage(a,'A1');复制代码

在这里,我们可以将电压值直接转换为温度值(摄氏度),乘以10

temp = (value*100);复制代码

现在,要绘制图形,我们使用'plot(handles.axes1,x)'函数,其中axes1是Graph区域的引用或名称。因此,如果您要绘制多个图形,那么您只需要更改轴的名称,就像绘制另一个图形一样,您可以编写绘图(handles.axes2,x)'

'Grid on'用于图的网格视图,'xlabel','ylabel'和'title'用于命名x轴、y轴和标题。

plot(handles.axes1,x);

grid on;

xlabel('Time(seconds)')

ylabel('Temperature(°C)');

title('Real-Time Temperature Graph');复制代码

'Drawnow'用于实时更新图形表示。

drawnow复制代码

要使用编辑文本框中每秒低于命令显示温度值,

set(handles.edit1,'String',num2str(temp));复制代码

所需的材料

●    安装MATLAB的笔记本电脑(首选:R2016a或以上版本)

●    Arduino UNO开发板

●    LM35 - 温度传感器

●    连接线

●    面包板

电路原理图

52f10ccd9bac9d7299beb58f93885e4d.gif

Circuit-Diagram-for-Plot-Graph-using-MATLAB.png (60.01 KB, 下载次数: 136)

2018-11-27 20:00 上传

用MATLAB绘制图形

根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码

52f10ccd9bac9d7299beb58f93885e4d.gif

Run-MATLAB-GUI.png (15.71 KB, 下载次数: 133)

2018-11-27 20:00 上传

MATLAB可能需要几秒钟的时间来响应,不要点击任何GUI按钮,直到MATLAB在左下角显示忙消息,如下所示,

52f10ccd9bac9d7299beb58f93885e4d.gif

Processing-MATLAB-GUI-Program.png (1.3 KB, 下载次数: 139)

2018-11-27 20:00 上传

一切准备就绪后,单击开始按钮,您将开始在图形区域和编辑文本框中获取温度数据。该值将每秒自动更新。您可以在MATLAB代码中相应地更改一秒的间隔。

输出将如下图所示,

52f10ccd9bac9d7299beb58f93885e4d.gif

Circuit-Hardware-for-Plot-Graph-using-MATLAB.jpg (71.38 KB, 下载次数: 141)

2018-11-27 20:00 上传

这就是如何使用MATLAB绘制Arduino中任何传入值的图形。

代码

以下是本篇文章使用的MATLAB代码

MATLAB Code:

function varargout = Temperature(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name',       mfilename, ...

'gui_Singleton',  gui_Singleton, ...

'gui_OpeningFcn', @Temperature_OpeningFcn, ...

'gui_OutputFcn',  @Temperature_OutputFcn, ...

'gui_LayoutFcn',  [] , ...

'gui_Callback',   []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

function Temperature_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

function varargout = Temperature_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

clear all;

global a;

a = arduino;

function start_Callback(hObject, eventdata, handles)

x = 0;

go = true;

global a;

while go

value = readVoltage(a,'A1');

temp = (value*100);

disp(temp);

x = [x temp];

plot(handles.axes1,x);

grid on;

xlabel('Time(seconds)')

ylabel('Temperature(°C)');

title('Real-Time Temperature Graph');

drawnow

set(handles.edit1,'String',num2str(temp));

pause(1);

end

function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end复制代码

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值