Matlab和Arduino

2013-12-0313.8万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用Matlab Arduino Support package实现Matlab与Arduino之间的串口通信。支持的控制板包括UNO、Mega 2560和Duemilanove。通过简单的配置,可以在Matlab中实现对Arduino板的操作,如简易USB示波器和GUI控制LED。适用于STEM教育场景。
如果大家附件下不了,请到百度网盘去下,每一楼的附件都能在下面这个链接里找到http://pan.baidu.com/s/1lDq5k
Matlab是运用极广的数学软件。Arduino又是现在很火的开源硬件平台。两者连起来玩也是很爽的。
特别是现在Matlab出了Arduino支援套件以后,玩起来比以往的串口通信简单多了。

第一部分 Matlab Arduino Support package
第二部分 Simulink Arduino Support package
第三部分 Matlab的串口通信
第三部分 Simulink的串口通信

坚持持续更新与编辑。

Part 1 Matlab Arduino Support package
这个支持包是为了实现Matlab与Arduino之间的串口通信。基于在Arduino板上提前烧写的服务器程序(Server program),监听串口的命令,需要的话可以返回结果。也就是说,Arduino板只需要提前烧写一个程序,之后便可通过Matlab命令对其直接操作。

该支援包支持学生版的Matlab。支持的控制板有UNO,Mega 2560,Duemilanove。
可以在Matlab官网下载,地址http://www.mathworks.de/hardware-support/arduino-matlab.html
点击下方的Requirement框里的“MATLAB Support Package for Arduino”,在新打开的网页中在右边点击Download Submission即可
也可以在本贴的附件直接下载ArduinoIO压缩包

下载后解压。把解压文件里的pde/adiosrv/adiosrv.pde文件用Arduino IDE烧写到Arduino控制板上。
把matlab的工作路径修改到ArduinoIO文件夹。这样配置就算完成了。

现在来实验一下。用matlab完成一个简易的usb示波器
首先建立arduino和matlab的连接,代码如下
a = arduino('COM3');
matlab会用几秒钟的时间来建立连接

用一个1k欧的可调电阻串联一个1k欧的电阻。如下图连接,楼主用的是AnalogRead pin 5
Matlab和Arduino图1

将下面的代码直接复制到Matlab命令框,即可运行。
interval = 10000;
passo = 1;
t = 1;
x = 0;
while(t<interval)
    b = a.analogRead(5)*10; % 把读到的值放大10倍
    x = [x,b];
    plot(x);
    grid
    t = t+passo;
    drawnow;
end

从a5所读的值会实时的画在图上,效果如下图。可以自己手动调整可调电阻阻值,即可在plot窗口观察阻值变化。
Matlab和Arduino图2

下面来试一下把支援套件用到GUI点亮或熄灭ledMatlab和Arduino图4
这里为了使用digitalWrite(pin)设置了两个pushbutton。标签(tag)分别是led1和led2
在函数 _OpeningFcn 里设置全局变量,以及初始化。
global a;
global led1_state;
global led2_state;
a = arduino('COM3');
a.pinMode(3,'output');
a.pinMode(4,'output');
a.pinMode(5,'input'); % 5读取3的状态
a.pinMode(6,'input'); % 6读取4的状态
led1_state = 0;
led2_state = 0;


在函数 led1_Callback中添加如下代码
global a;
global led1_state;
if led1_state == 0
    a.digitalWrite(3,1);
    led1_state = a.digitalRead(5);
    set(hObject, 'BackgroundColor',[0 0 1]);
else
    a.digitalWrite(3,0);
    led1_state = a.digitalRead(5);
    set(hObject, 'BackgroundColor',[1 1 0]);
end

根据变量led1_state设置led1的状态。读取led1状态,更新变量led1_state。更改按钮颜色
如果使用togglebutton,可以省略全局变量led1_state,可直接使用a.digitalWrite(3,(get(hObject,'Value')))进行状态切换。
注意:如果第二次执行的时候没有把语句 a = arduino('COM3')删除,或者没有清除变量a。都会出现错误
在函数led2_Callback中类似。完整代码在附件

Matlab Support Packag for Arduino(Matlab支援套件):
下载附件ArduinoIO.zip

Matlab GUI LED:
下载附件led.zip





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(35)
JOVI
JOVI
学习学习
小灵通
小灵通
你好,我在arduino中写好了代码可以通过IDE里的串口绘制图形,我想利用MATLAB来保存这些数据并绘制实时图,要怎么操作呢?我的ADXL345传感器,IIC协议。
汤半泛
汤半泛
隔岸观火上浇油
fya
fya
请问一下这是什么情况呢?
再粗点再大点
再粗点再大点
学习了
lkl0305
lkl0305
问下问什么我的一直提示:

Arduino IDE at folder 'arduino-1.8.1' is corrupt. Open Add‑On Explorer to reinstall MATLAB Support Package for Arduino Hardware.
但我的这个支持包装上了呀?

lkl0305
lkl0305
正在学习,踏着前辈的足迹:lol
Chenlei
Chenlei
楼主大神,没有Matlab账号怎么装simulink的arduino模块
zjy
zjy
“下载后解压。把解压文件里的pde/adiosrv/adiosrv.pde文件用Arduino IDE烧写到Arduino控制板上。把matlab的工作路径修改到ArduinoIO文件夹。这样配置就算完成了。

请问我怎么没找到 adiosrv 这个文件夹,只有 adio adioe adioes 这三个文件夹?
Scuderia
Scuderia
lz你好,下载的arduino io pde文件夹里只有adio adioe adioes文件夹,没有aiosrv文件夹呀,请问是将adio烤到板子里吗?支持nano板吗?
Climbing
Climbing
@Fantc, hello,我在通过 supportpackageInstaller 下载 support package for ardunino 时总是显示错误,是不是我的Matlab是盗版的原因呀
Chenlei
Chenlei回复908495557
我也是拖进去安装,但是一直下载什么玩意都不动了,你学会了么
908495557
908495557回复Climbing
我直接拖到命令窗口安装。然后会显示安装失败。time out什么的。。你知道怎么解决吗
marcusme
marcusme
真酷,还从来没有试过arduino和matlab结合使用呢。
suoma
suoma
谢谢分享学习一下
scofision
scofision
我用的是MATLAB2014b,但是它说需要账号,我注册了,等人的时候不能错误,还是不能安装支持包,是不是盗版的问题
zuyang
zuyang
卧槽这个真的碉堡了啊
Matlab和Arduino这两个东西都很强大啊
hnyzcj
hnyzcj
顶,技术贴
qq815076543322
qq815076543322
看过你几个贴,每个都很详细 真的是用心在分享:P
lprincek
lprincek
楼主你好,我在用simulink往arduino板子中烧制程序时候老是提示错误,说缺少SPI.cpp,而这个文件存在呀,请指教一下
Fresochoi
Fresochoi
求教一下 我用matlab读取arduino串口数据 传感器的采样速率是1000hz 但是matlab读的速率为啥才200左右啊
jack_zhou
jack_zhou回复Fresochoi
楼主找你到解决这速率慢结局方案了吗?我看matlab官网说1k最多,有没有解决方案呀。
楼主用没用过TI C2000,这个ADC在simulink上面能多少呀
高山无言
高山无言
顶啊,楼主,你这帖子上的内容我能学习不?
jack_zhou
jack_zhou回复Fantc
楼主大哥,Arduino用在matlab simulink的ADC速率能超过1KHz吗?我实验下好慢呀,官网上面的意思是最多到1KHz吗?
楼主大哥用过TI C2000吗?这个ADC用在matlab simulink能多快呀:'(
Fantc
Fantc
作者
回复高山无言
哥们 你也太尊重知识产权了 这都是开源的资料
共4条回复,已加载2条,点击查看更多共4条回复,已加载全部