0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用MATLAB GUI从基于Arduino的IR转速表读取RPM

454398 来源:网络整理 作者:网络整理 2019-11-21 16:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:在MATLAB

打开您的MATLAB,然后键入命令:“ guide”

如果一切正常,将打开一个窗口供您设计布局。如果无法获取该窗口,请检查您的MATLAB安装中是否包含该模块。我的MATLAB版本是R2012b,安装了默认设置和软件包。

让我们假设您在输入“指南”后会感觉很好。放置窗口组件如下:

-1切换按钮

-2静态文本

按图片所示排列布局(实际上,布局要只要您易于使用和阅读,就可以通过修改属性检查器中的“字符串”值来更改每个对象中的文本(任何您想要的内容)(选择对象-右键单击-属性检查器,或双击)

然后,保存该GUI图形文件。

步骤2:编写代码

ARDUINO代码

arduino的代码与您在此处可以找到的代码基本相同:https://www.instructables.com/id/Infrared-Tachomete 。..但因为这里我仅想要显示rpm值(而不是rps值以及所有的“ rps”和“ rpm”文本),所以我编辑了一些行(那些具有Serial.print()的行,因为以前该程序旨在显示读数在记事本式串行监视器上,但现在我们只需要rpm值即可输入到静态文本字符串中)。好的,为了方便快捷,我将代码复制到此处,您可以自行检查以与之前的代码进行比较。请记住,arduino代码的主要目的只是将值传递给串行comm,因此该程序仅作为示例,如果您有自己的程序将任何读取到的传感器的值打印到串行,然后忽略此操作即可。

int sensorvalue;

int state1 = HIGH;

int state2;

float rps;

float rpm;

long prevMillis = 0;

long interval = 100;

long currentTime;

long prevTime = 1;

long diffTime;

int sensorthreshold = 30; // this value indicates the limit reading between dark and light,

// it has to be tested as it may change acording on the

// distance the leds are placed.

// to see what number is good, check the sensorvalue variable value

// as printed out in the serial monitor

void setup()

{

Serial.begin(9600);

pinMode(13,OUTPUT); // assign pin 13 led as indicator because we cannot se the IR light

}

void loop()

{

sensorvalue = analogRead(0); // read from pin 0

if(sensorvalue 《 sensorthreshold)

state1 = HIGH;

else

state1 = LOW;

digitalWrite(13,state1); // as iR light is invisible for us, the led on pin 13

// indicate the state of the circuit.

if(state2!=state1){ //counts when the state change, thats from (dark to light) or

//from (light to dark), remember that IR light is invisible for us.

if (state2》state1){

currentTime = micros(); // Get the arduino time in microseconds

diffTime = currentTime - prevTime; // calculate the time difference from the last sensors meet-up

rps = 1000000/diffTime; // calculate how many rev per second - good to know

rpm = 60000000/diffTime; // calculate how many rev per minute

unsigned long currentMillis = millis();

// print to serial at every interval - defined at the variables declaration

if(currentMillis - prevMillis 》 interval){ // see if now already an interval long

prevMillis = currentMillis;

Serial.println(rpm); // this line is edited from the code in the prev instructable

}

prevTime = currentTime;

}

state2 = state1;

}

/* only for testing to determine the sensorthreshold value

delay(500);

Serial.println(sensorvalue);

*/

}

MATLAB代码

在MATLAB GUI布局设计窗口中,单击“查看-编辑器”(或在工具栏中找到没有手的纸和铅笔的图片)。将打开一个编辑器窗口,其中已经编写了一些代码,MATLAB为您编写了它们,没问题。只为切换按钮编写回调函数,其余代码可以保留不变。就我而言,我将切换按钮命名为OnOffToggle,因此编写代码的函数是函数OnOffToggle_Callback(hObject,eventdata,handles)。 rpmdata,所以我们只想将rpm数据打印到屏幕上即可。还有一件事,请确保在编写代码时将arduino连接到正确的COM端口。在这段代码中,我写了COM3,因为我将arduino连接到了COM3。

然后保存您的m文件。

下面是完整代码(仅编辑OnOffToggle_Callback函数):

function varargout = gui(varargin)

% GUI MATLAB code for gui.fig

% GUI, by itself, creates a new GUI or raises the existing

% singleton*.

%

% H = GUI returns the handle to a new GUI or the handle to

% the existing singleton*.

%

% GUI(‘CALLBACK’,hObject,eventData,handles,。..) calls the local

% function named CALLBACK in GUI.M with the given input arguments.

%

% GUI(‘Property’,‘Value’,。..) creates a new GUI or raises the

% existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before gui_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property application

% stop. All inputs are passed to gui_OpeningFcn via varargin.

%

% *See GUI Options on GUIDE‘s Tools menu. Choose “GUI allows only one

% instance to run (singleton)”。

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help gui

% Last Modified by GUIDE v2.5 14-Mar-2015 01:06:09

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct(’gui_Name‘, mfilename, 。..

’gui_Singleton‘, gui_Singleton, 。..

’gui_OpeningFcn‘, @gui_OpeningFcn, 。..

’gui_OutputFcn‘, @gui_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

% End initialization code - DO NOT EDIT

% --- Executes just before gui is made visible.

function gui_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to gui (see VARARGIN)

% Choose default command line output for gui

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes gui wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = gui_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

function currentEdit_Callback(hObject, eventdata, handles)

function currentEdit_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER.

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

set(hObject,’BackgroundColor‘,’white‘);

end

function OnOffToggle_Callback(hObject, eventdata, handles)

button_state = get(hObject,’Value‘);

if button_state == get(hObject,’Max‘)

set(handles.OnOffToggle,’String‘,’Stop‘);

drawnow;

i=2;

while i 》 1

rpmdata = serial(’COM3‘,’BaudRate‘,9600); % this Baud rate should be the same as that in Arduino code

fclose(instrfindall);

fopen(rpmdata);

b = fscanf(rpmdata);

set(handles.textCurrent,’String‘,b);

drawnow;

delete(rpmdata)

if get(hObject,’Value‘) == get(hObject,’Min‘)

break

end

end

set(handles.OnOffToggle,’String‘,’Start‘);

drawnow;

rpmdata = serial(’COM3‘,’BaudRate‘,9600);

fclose(rpmdata);

end

步骤3:运行Rpm Reader

完成代码后,连接arduino,然后转动旋转并运行程序(编辑器或布局编辑器窗口上的绿色三角形类似游戏的按钮)。程序的一个窗口将会出现(我的如图所示),单击切换按钮,您将在那里看到车轮的当前转速。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    189

    文章

    3018

    浏览量

    237598
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195964
  • RPM
    RPM
    +关注

    关注

    0

    文章

    45

    浏览量

    18099
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    计数器计时器频率转速表

    测量仪仪器仪表
    西安同步电子科技有限公司
    发布于 :2025年10月13日 19:32:57

    材料到系统:湖南泰德航空解析航空级高速电机全链条创新

    高速电机作为现代工业皇冠上的明珠,其技术难度远超常规电机。湖南泰德航空经过十余年潜心研发,成功攻克了10,000RPM到百万RPM级高速电机的关键技术难题。这类电机在实际应用中面临的核心挑战主要
    的头像 发表于 09-25 11:24 409次阅读
    <b class='flag-5'>从</b>材料到系统:湖南泰德航空解析航空级高速电机全链条创新

    使用恩智浦FRDM-MCXN947开发板GUI控制电机

    终于来到了最后一个任务,设计一个基于LVGL的GUI应用,可以在UI上拖动滑动条控制电机转速,点击按键切换点击旋转方向。
    的头像 发表于 09-19 15:11 1827次阅读
    使用恩智浦FRDM-MCXN947开发板<b class='flag-5'>GUI</b>控制电机

    不是8万也不是13万,高速风筒为什么偏偏是11万转速呢?--【其利天下】

    在追求高效便捷的现代生活中,高速风筒已成为众多消费者吹干头发、打造精致造型的得力助手。那么技术角度看,为什么市面上大多数高速风筒驱动方案的转速集中在110000rpm这一数值,而不是
    的头像 发表于 06-26 16:00 2043次阅读
    不是8万也不是13万,高速风筒为什么偏偏是11万<b class='flag-5'>转速</b>呢?--【其利天下】

    MC SDK 5.4.8生成的程序 ,带载工作时转速到1200左右骤停,为什么?

    问题如题,电机参数:内阻0.02欧,电感0.04mH,电压:14S(54V),额定电流:100A,最高转速:2500rpm。 查了一些资料,有可能是电流环带宽不够,不知道如何增加电流环带宽。 各位大神帮忙分析一下,是哪里的问题。
    发表于 06-19 07:55

    无刷暴力风扇方案,转速与静音的完美平衡

    转速、强风力和低噪音,使暴力风扇迅速成为市场上的热门产品。今天来跟大家分享其利天下技术的130000rpm无刷暴力风扇驱动方案。一、方案设计亮点:高性能与便携性的完美结合主控芯片:采用高性能32位
    的头像 发表于 04-22 18:07 1518次阅读
    无刷暴力风扇方案,<b class='flag-5'>转速</b>与静音的完美平衡

    匀胶机转速对微流控芯片精度的影响

    ,离心力越大,光刻胶被推向衬底边缘的力就越大,涂层就越薄。光刻胶厚度与转速的公式为 h=k/N2,其中 h是光刻胶的厚度, N是旋涂速度(rpm/每分钟), k是光刻胶与设备的特性等所决定的。 对芯片精度的影响 尺寸精度:微流控芯
    的头像 发表于 03-24 14:57 686次阅读

    STM32G431用MCSDK5.4.8进行PMSM永磁同步电机FOC控制,转速上升到3500rpm无法继续上升怎么解决?

    使用MCSDK 5.4.8 生成工程,在上位机软件中启动电机,设置目标转速达到3500rpm后,再设置更大就无法继续升高了,转速达不到3500rpm以上,而且还会缓慢减速,请问这是什么
    发表于 03-10 08:04

    请问ST无刷电机控制器-最高控制可调节转速是多少?

    需求:我使用 13英寸(13*6.5)的螺旋桨,要实现我的电机转速控制调节,在 4000~6500RPM 进行控制和调节,请问你们的电机、电调板产品可以实现控制吗,你们产品会有相关攻略限制吗,例如功率和电流限制,最大控制转速可以
    发表于 03-10 06:19

    驱动电机核心零部件的发展趋势和技术挑战

    通过电机高转速实现极致车速是总成的一个重要发展趋势;BYD 于 2024 年 批产应用最高工作转速超过 23000rpm,小米目标在 2025 年推出超过 27000rpm 的电机,按
    的头像 发表于 03-01 14:27 1230次阅读
    驱动电机核心零部件的发展趋势和技术挑战

    用于课题的无线转速霍尔传感器,新人应该哪里开始学习

    完全没电路的基础,但是课题上导师要求设计一款无线的霍尔转速传感器,电池供电然后通过无线技术去读取传感器上的转速。想请教下各位大佬应该哪里开始学习比较好,或者是有现成的产品可以去模仿学
    发表于 01-08 10:36

    想用MATLAB实时读取采集到的数字信号,怎么操作?

    有人用过PCM1865EVM吗??我现在想用MATLAB实时读取采集到的数字信号,不知道怎么弄,有谁接触过吗?谢谢各位了!
    发表于 01-08 07:01

    添加一个制作rpm包直接升级的参考方式

    查看当前版本 # ssh -VOpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 升级需要以下几个服务器,没有就安装一下 # rpm -qa|grep
    的头像 发表于 12-31 10:52 692次阅读

    入门设计读取数据开始

    说明文档,它是每个器件的灵魂所在,提供了关于该器件的所有关键信息。通过仔细阅读数据,工程师可以了解到器件的工作原理、性能参数、电气特性、机械尺寸以及应用示例等重要内容。这些信息将帮助我们更好地理解器件的特性和功能,
    的头像 发表于 12-23 10:40 850次阅读
    入门设计<b class='flag-5'>从</b><b class='flag-5'>读取</b>数据<b class='flag-5'>表</b>开始

    霍尔开关AH402F在转速表中的应用,替换HAL1881和SS460

    霍尔开关AH402F在转速表中的应用,替换HAL1881和SS460
    的头像 发表于 12-09 10:02 1131次阅读
    霍尔开关AH402F在<b class='flag-5'>转速表</b>中的应用,替换HAL1881和SS460