国外课栈 - 国外电子信息技术视频教程、电子书和博文栈

如何使用MATLAB绘制实时温度图表

 二维码 58
发表时间:2018-12-27 16:30



图形总是有助于可视化数据,通过查看它们变得非常容易找到趋势和模式。有许多软件可用于根据输入值绘制图形,今天我们将使用 MATLAB根据LM35传感器的温度数据绘制图形。本教程将为您提供有关的基本概念 如何使用MATLAB绘制实时图形。此处使用Arduino Uno从LM35温度传感器获取温度数据。


在继续之前,如果您是MATLAB的新手,可以查看我们之前的MATLAB教程以获得更好的理解:

MATLAB入门:快速入门将

Arduino与MATLAB连接 -闪烁LED

在MATLAB和Arduino之间串行通信

使用MATLAB和ArduinoDC电机控制

步进器使用MATLAB和Arduino进行电机控制


创建用于绘制图形的MATLAB图形用户界面

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



guide



弹出窗口将打开, 然后选择新的空白 gui, 如下图所示,,

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

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

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

用于绘制图形的 matlab 代码

在本项目的最后给出了使用 lm35 和 arduino 设计温度计的完整 matlab 代码。此外, 我们在这里还包括 gui 文件 (.fig) 和代码文件 (.m) 供下载, 使用它您可以根据您的要求自定义按钮或轴大小。我们已经编辑了生成的代码, 如下所述。


clear all;
global a;
a = arduino();



复制并粘贴以下代码在第74行, 以确保每次运行 m 文件时 arduino 都在与 matlab 对话。

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


在 "开始" 按钮的功能中, 复制并粘贴下面的代码, 就在函数结束之前开始温度检测。对于温度的连续检测、显示和图形绘制, 我们使用的是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');
drawnowset(handles.edit1,'String',num2str(temp));
pause(1);
end


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



x = 0;
go = true;
global a;


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



value = readVoltage(a,'A1');



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



temp = (value*100);



现在, 使用图形 "plot(handles.axes1,x)" 函数来绘制图形, 其中轴1是图形区域的引用或名称。因此, 如果您正在绘制多个图形, 则只需更改轴的名称, 例如, 如果绘制另一个图形, 您可以 plot(handles.axes2,x) "


"网格上" 用于在图形的 "网格" 视图上, "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   - 温度传感器

连接线

面包板

电路原理图

使用MATLAB绘制图形

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

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

当一切就绪时, 单击 "开始" 按钮, 您将开始获取 "图形区域" 和 "编辑文本" 框中的温度数据。该值将在每一秒钟自动更新。此时间间隔为一秒, 您可以在 matlab 代码中进行相应的更改。

输出将如下图所示,

这就是如何使用 matlab 绘制 arduino 中任何输入值的图形。


完整代码:


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






文章分类: Arduino
分享到:
会员登录
登录
我的资料
留言
回到顶部