|
图形总是有助于可视化数据,通过查看它们变得非常容易找到趋势和模式。有许多软件可用于根据输入值绘制图形,今天我们将使用MATLAB根据LM35传感器的温度数据绘制图形。本篇文章将介绍有关如何使用MATLAB绘制实时图形的基本思路。同时本文还使用Arduino Uno开发板从LM35温度传感器获取温度数据。
为绘图创建MATLAB图形用户界面 首先,我们必须使用温度数据构建用于绘制图形的GUI(图形用户界面)。要启动GUI,请在命令窗口中键入以下命令 然后弹出一个窗口,在窗口中选择新的空白GUI,如下图所示,
现在我们必须为MATLAB图形界面选择一个按钮、两个轴和一个文本框。按钮将用于启动感应温度,两个轴用于绘制图形,文本框用于显示温度的当前值。
要调整大小或更改按钮、轴或编辑文本按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击其中任何一个,您将能够更改该特定按钮的颜色、字符串和标记。定制后,如下所示
您可以根据自己的选择自定义按钮。现在当你保存它时,在MATLAB的Editor窗口中生成一个代码。要使Arduino执行与项目相关的任何特定任务,您始终必须编辑此生成的代码。所以下面我们编辑了MATLAB代码。您可以在MATLAB入门教程中了解有关命令窗口、编辑器窗口等的更多信息。
用于绘制图形的MATLAB代码 在本篇文章的末尾处给出了使用LM35和Arduino开发板制作温度计的完整MATLAB代码。此外,我们还包括GUI文件(.fig)和代码文件(.m)供下载,您可以根据需要自定义按钮或轴大小。我们编辑了生成的代码,如下所述。
复制并粘贴以下代码到第74行,确保每次运行m文件时Arduino正在与MATLAB通讯。 - clear all;
- global a;
- a = arduino();
复制代码
向下滚动时,您将看到在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
复制代码
现在,让我们看看代码是如何工作的。在下面的三行代码中,我们将'x'的初始值设置为零,将'go'定义为true以启动while循环,并声明'global a'用于调用函数中的Arduino。 - x = 0;
- go = true;
- global a;
复制代码
下面的代码行用于检测Arduino的模拟引脚A1的电压值,该引脚连接到LM35温度传感器的“OUT”引脚。输出将是电压值而不是模拟值。 - value = readVoltage(a,'A1');
复制代码在这里,我们可以将电压值直接转换为温度值(摄氏度),乘以10
现在,要绘制图形,我们使用'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'用于实时更新图形表示。 要使用编辑文本框中每秒低于命令显示温度值, - set(handles.edit1,'String',num2str(temp));
复制代码
所需的材料 ● 安装MATLAB的笔记本电脑(首选:R2016a或以上版本) ● Arduino UNO开发板 ● LM35 - 温度传感器 ● 连接线 ● 面包板
电路原理图
用MATLAB绘制图形 根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码
MATLAB可能需要几秒钟的时间来响应,不要点击任何GUI按钮,直到MATLAB在左下角显示忙消息,如下所示,
一切准备就绪后,单击开始按钮,您将开始在图形区域和编辑文本框中获取温度数据。该值将每秒自动更新。您可以在MATLAB代码中相应地更改一秒的间隔。 输出将如下图所示,
这就是如何使用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
复制代码 |