网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月28日漏签0天
arduino吧 关注:75,385贴子:230,315
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 3 4 5 6 7 下一页 尾页
  • 178回复贴,共7页
  • ,跳到 页  
<<返回arduino吧
>0< 加载中...

【经验分享】Matlab和Arduino

  • 只看楼主
  • 收藏

  • 回复
  • Fantc_Lei
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
完整的跟大家分享下Matlab和Arduino一起玩的一些资料。我在dfrobot的论坛也有发同样帖子,论坛里发帖编辑相对方便一点。可搭电梯:
http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=948&page=1&extra=#pid3206
相关的资料,代码,程序我都会放在我的云盘里,电梯:
http://pan.baidu.com/s/1lDq5k
下面开始上正文


  • Fantc_Lei
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一个是什么都能算的数学软件。一个是很火的开源硬件平台。两者连起来玩也是很爽的。
特别是现在Matlab出了Arduino支援套件以后,玩起来比以往的串口通信简单多了。
Matlab和Arduino的“联姻”方式总共有下面四种。
第一种 Matlab Arduino Support package(Arduino作为执行机)
第二种 Simulink Arduino Support package(用simulink对Arduino进行类似于图形化编程,然后直接由simulink烧写到Arduino)
第三种 Matlab的串口通信(通用)
第三种 Simulink的串口通信(通用)


2025-08-28 22:09:06
广告
不感兴趣
开通SVIP免广告
  • Fantc_Lei
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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即可
也可以在1楼给的网盘地址里直接下载ArduinoIO压缩包
下载后解压。把解压文件里的pde/adiosrv/adiosrv.pde文件用Arduino IDE烧写到Arduino控制板上。
把matlab的工作路径修改到ArduinoIO文件夹。这样配置就算完成了。
现在来实验一下。用matlab完成一个简易的usb示波器
首先建立arduino和matlab的连接,代码如下
a = arduino('COM3');
matlab会用几秒钟的时间来建立连接
用一个1k欧的可调电阻串联一个1k欧的电阻。如下图连接,楼主用的是AnalogRead pin 5

将下面的代码直接复制到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窗口观察阻值变化。

下面来试一下把支援套件用到GUI点亮或熄灭led

这里为了使用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中类似。完整代码在1楼给的网盘地址里
从上面的实例看出,a是一个arduino类。通过调用arduino类的函数对控制板进行操作。这时候的Arduino控制板看上去更像是执行机。
其实Matlab Support Package for Arduino的绝大部分操作函数都和Arduino IDE的编程很像。上手会很快,这部分就不做过多的实例了。
更多该支持包的操作函数可以参见文件夹ArduinoIO下面的arduino.m文件
楼主以后会整理下发到网盘里,更新的时候通知小伙伴们


  • Fantc_Lei
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Part2 Simulink Arduino Support package
这个套件其实就更好玩了。不用再费心费力的写代码。而是直接用simulink搭建好流程,运算关系,就可以直接烧写到控制板上了,这就变成了模块化编程。可惜的是该套件只支持UNO和Mega 2560。
安装套件的过程稍微麻烦一点
打开下面的地址,点击最下面的”Get Support Package Now“ 就会直接下载了。也可以到我的网盘去下载。
http://www.mathworks.de/hardware-support/arduino-simulink.html
安装方法:
解压,点击下图中的Get Hardware Support Packages。然后选择刚才解压的文件夹,下一步

也可以直接把压缩包中的arduino.mlpkginstall直接拖到matla命令框中。
然后按提示开始安装。
注意:安装需要一个matlab账号,建议大家提前注册好,学生身份账号就可以用了。
打开simulink library可以在左边看到Simulink Support Package for Arduino Hardware

点击就可以看到大家熟悉的函数的模块了

现在放一个小实例。新建一个simulink项目,
选一个Digital Output和一个Pulse Generator(在simulink/sources里面)
如下图连接好。

设置下Pulse Geneartor。更改自己需要的频率,占空比等。
双击Digital Output修改相应的pin number
设置完以后可以开始烧写了。按下图打开配置窗口

选择对应的控制板型号

然后设置端口(可以选自动,或手动)设置波特率(相当于IDE编程时setup()函数里的Serial.begin())

设置完成点击保存。
回到simulink编辑窗口,按下图点击"Run"开始烧写

如果配置的arduino型号或端口不正确,烧写会出现错误,点击"Run"下面的options重新配置。
这部分也不做过多的介绍了,应该都是Arduino玩家熟悉的东西。


  • Fantc_Lei
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Part 3 Matlab 串口通信
有的时候我们自己给Arduino编好了程序,又希望在Matlab中调用串口,读取数据。此时 Matlab Support Package for Arduino显然不合适了。这里我们要用到Matlab里的串口对象serial。比如当我们需要利用Matlab处理摄像头画面,结合摄像头标定、摄像头识别、3D扫描后建模等等。
还是以part1里面的简易示波器为例。
Arduino代码如下:
int analogPin = 5;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin);
Serial.println(val);
}
这里还是要实现Matlab的即时读取和画图。Matlab代码如下:
s = serial('COM3'); %定义串口对象
set(s,'BaudRate',9600); %设置波特率s
fopen(s); %打开串口对象s
interval = 10000; %这里开始的代码很Part1里的代码类似
passo = 1;
t = 1;
x = 0;
while(t<interval)
b = str2num(fgetl(s)); %用函数fget(s)从缓冲区读取串口数据,当出现终止符(换行符)停止。
x = [x,b]; %所以在Arduino程序里要使用Serial.println()
plot(x);
grid
t = t+passo;
drawnow;
end
fclose(s); %关闭串口对象s
规矩跟之前一样,有关serial类的操作,楼主整理好放到网盘然后通知各位。


  • Fantc_Lei
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
周末更新simulink里面serial send和to instrument的操作。
应该会再放一个直流电机恒速控制的实例,以不同的方法来实现。欢迎大家来黑
顺便预告两件事。
一,离开楼主两年的UNO终于要再次回到楼主身边了。
二,以后会分享下Arduino跟Microsof C++通信经验。因为处理图像,比如照片、视频并不是matlab的强项,速度较慢。开源的OpenCV是个不错的选择,网上资料也很全。


  • 春泥蛋炒饭
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
沙发,好贴果断加精!


  • 飘雪才子
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主很效率么 哈哈 我刚说就发出来了 真是太给面子了 我对图像处理也非常感兴趣啊 看来楼主跟我很是投缘啊 顺便求matlab2013的破解下载 求给力啊 正版买不起


2025-08-28 22:03:06
广告
不感兴趣
开通SVIP免广告
  • 都山樵客
  • 远近闻名
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶楼主,我参加过数学建模,对matlab很是感兴趣。看您这帖子,我就心动了


  • 小猪会轮滑
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好帖!实例加代码,楼主辛苦了,支持更新。


  • _燃烧流年
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
赞一个先!!


  • 九天云中龙
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感谢楼主,望能多多指导。


  • tc_exe
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
mark


  • 代码
  • 颇具名气
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
留名


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 4 5 6 下一页 尾页
  • 178回复贴,共7页
  • ,跳到 页  
<<返回arduino吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示