MATLAB是用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。而Arduino开发板是一种越来越受到欢迎的开源硬件。
一个是什么都能算的软件,一个是最火爆的开源硬件,两者结合能碰撞出什么样的火花呢?笔者以Matlab软件研究如何控制Arduino,将从Matlab制作Arduino的GUI界面和simulink应用出发,探索如何使用Matlab连接和控制Arduino。
Matlab与Arduino联合应用——GUI界面
首先介绍如何安装配置一个基于Matlab的GUI界面,能够实现对Arduino IO口的操作。
下图所示为matlab中Arduino相关程序的下载界面
下载后为压缩文件,解压缩为Arduino IO的文件夹,打开Matlab(笔者为2012版本),将当前工作目录至于Arduino IO文件夹下。
打开Matlab的GUIDE
安装下面方法,拖放两个按钮,按钮的显示文字可以通过双击后,在属性页下的“string”一栏下面修改,我们用两只按钮分别控制直流电机的转动
至此,我们已经完成必要的程序的烧写和界面的初步编写,下面将继续介绍如何添加按钮的响应函数,实现上位机的控制功能。
我们利用Matlab已经初步设计了一个GUI界面,下面将添加必要的响应函数,演示时间的控制功能。
下图展示如何从GUIDE进入按钮的编辑界面,在这里我们将添加对Arduino相应的IO口或者串口的操作。
下面是基本的操作函数实例汇总
a = arduino('COM9')
设置引脚为输入或者输出
a.pinMode(4,'input');
a.pinMode(13,'output');
读写引脚的状态
a.digitalRead(4)
a.digitalWrite(13,0)
模拟量输入或者输出操作
a.analogRead(5)
a.analogWrite(9, 155)
串口操作
a.serial % get serial port
a.flush; % flushes PC's input buffer
a.roundTrip(42) % sends 42 to the arduino and back
本例中若使用按钮“Right-Motor”点击实现IO口8置为高电平,驱动直流电机全速转动,则添加
global a;
a=arduino('COM7');
a.pinMode(8,'output');
在按钮“Right-Motor”的响应函数中添加代码段
global a;
a.digitalWrite(8,(get(hObject,'Value')))
Arduino端准备
想要arduino端的控制,还需要向Arduino中烧写已经下载的pde文件,其位置位于加压缩后的Arduino IO文件夹下的pde文件中。通过usb线缆将Arduino uno与电脑连接,点击GUI中添加的按钮,即可实现远端控制功能。
我们介绍了,在Matlab中建立一个Arduino GUI的过程。下面将继续介绍如何在Arduino端进行软件准备。
软件调试可以在Arduino连接至电脑端就可以进行。
下面将作者自己在其中遇到或者大家可能会遇到的问题一一总结如下:
(1)已经编写完成的Matlab程序已经绑定了通信口COM8,执行Matlab程序出现如下提示
Error using arduino (line 83)
Could not open port: COM8
Error in Arduinomatlab>Arduinomatlab_OpeningFcn (line 60)
a=arduino('COM8');
首先保证你的开发板已经连接至PC机,而且通过设备管理器查看端口是否与程序中设置的相同。
(2)在保证上述已经完成的情况下,依然提示出错
Error using arduino (line 54)
Port COM8 already used by MATLAB
这很可能是你中间断开了Arduino的连线或者重新编译了程序,你需要在Matlab中执行
delete(instrfind({'Port'},{'COM8'}))
然后重新连接即可。
(3)Arduino连接至PC端,但是不能烧写上期Blogger中的pde文件,这时候要排除IDE编译环境中可能存在的问题
1 下载最新的IDE环境(http://arduino.cc/en/Main/Software#toc2)
2 安装手动方式更新驱动
3 注意更改软件中TOOLs下面的“Board”和“serial port”选项,按照自己所使用Arduino进行修改。
下面将介绍如何配置硬件外围电路,来为实验做最后准备。
为Arduino UNO开发板连接外围电路,包括直流电机、led灯等外围器件。
使用到的元器件
下图是Arduino与直流电机的接口电路。
我们再分析各部分功能
1 开关
2 直流电机
3 二极管
4 MOSFE管
5 电机驱动电源(9V)
由于Arduino的最大驱动电流是40mA,远远小于电机驱动所需的电流。这里我们使用一个MOSFET(当然可以使用三极管代替),来使Arduion的小电流来控制电机的通断
而电机属于电感性负载,在启停阶段可能会由于电感存在产生一个很大反向电压,可能会损害我们的MOSFET,这里使用一个二极管来使电流沿着一个方向流动,从而保证电机对其余电路的影响。
9V电源为电机转动供电,当我们直接将其连接至直流电机两侧时,会发现电机将会全速转动。
在实验中,我们手上只有一个直流电机,所以另外一只的控制我们使用led灯来模拟,注意要接上一只220欧的电阻进行限流。
在完成基本的软件和硬件的准备工作后,我们现在进入最终的测试阶段。
操作顺序:
1 将Arduino通过usb 线缆连接至PC
2 打开Matab,将当前文件夹设为我们从matlab官网下载的并解压缩的Arduino IO
3 双击打开Arduinomatlab.fig,弹出控制界面
4 点击按钮观察电机的转动,如果在Matlab提示出错信息,请尝试下面解决方法
5 执行“clear”清除变量;执行“ delete(instrfind({'Port'},{'COM8'}))”,并重新拔掉再插上线缆以创建新的通信连接,重复操作步骤1。