图形总是有助于可视化数据,通过查看它们变得非常容易找到趋势和模式。有许多软件可用于根据输入值绘制图形,今天我们将使用MATLAB根据LM35传感器的温度数据绘制图形。本篇文章将介绍有关如何使用MATLAB绘制实时图形的基本思路。同时本文还使用Arduino Uno开发板从LM35温度传感器获取温度数据。
How-to-Plot-Graph-using-MATLAB_0.jpg (117.48 KB, 下载次数: 140)
2018-11-27 20:00 上传
为绘图创建MATLAB图形用户界面
首先,我们必须使用温度数据构建用于绘制图形的GUI(图形用户界面)。要启动GUI,请在命令窗口中键入以下命令
guide复制代码
然后弹出一个窗口,在窗口中选择新的空白GUI,如下图所示,
Creating-GUI-in-MATLAB.png (20.25 KB, 下载次数: 136)
2018-11-27 20:00 上传
现在我们必须为MATLAB图形界面选择一个按钮、两个轴和一个文本框。按钮将用于启动感应温度,两个轴用于绘制图形,文本框用于显示温度的当前值。
Designing-GUI-for-Plot-Graph-using-MATLAB.png (23.27 KB, 下载次数: 147)
2018-11-27 20:00 上传
要调整大小或更改按钮、轴或编辑文本按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击其中任何一个,您将能够更改该特定按钮的颜色、字符串和标记。定制后,如下所示
Editing-GUI-for-Plot-Graph-using-MATLAB.png (32.08 KB, 下载次数: 133)
2018-11-27 20:00 上传
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();复制代码
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复制代码
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 - 温度传感器
● 连接线
● 面包板
电路原理图
Circuit-Diagram-for-Plot-Graph-using-MATLAB.png (60.01 KB, 下载次数: 136)
2018-11-27 20:00 上传
用MATLAB绘制图形
根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码
Run-MATLAB-GUI.png (15.71 KB, 下载次数: 133)
2018-11-27 20:00 上传
MATLAB可能需要几秒钟的时间来响应,不要点击任何GUI按钮,直到MATLAB在左下角显示忙消息,如下所示,
Processing-MATLAB-GUI-Program.png (1.3 KB, 下载次数: 139)
2018-11-27 20:00 上传
一切准备就绪后,单击开始按钮,您将开始在图形区域和编辑文本框中获取温度数据。该值将每秒自动更新。您可以在MATLAB代码中相应地更改一秒的间隔。
输出将如下图所示,
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复制代码