Arduino控制板

2024-06-12

Arduino控制板(精选7篇)

Arduino控制板 篇1

摘要:Arduino是一个包含硬件和软件的开源电子开发平台, 是为非电子专业和业余爱好者而设计。一般通过Arduino IDE编写、编译和上传程序, 实现Arduino主板和周边设备的协同工作。Visual Basic作为一门语言和开发平台, 既适合初学者学习, 又能开发出实用强大的程序。利用Visual Basic程序与Arduino的交互, 可以开发出有趣的Visual Basic小程序, 让初学者做中学和学中乐。

关键词:Arduino开发平台,Visual Basic语言,MSComm控件

Arduino是一款便捷灵活、 方便上手的开源电子原型平台, 包含硬件 ( 各种型号的Arduino板) 和软件 (Arduin IDE) 。 Arduino硬件都非常便宜, 购买也非常方便, 适合低成本的学习。 Arduino通过各种各样的传感器来感知环境, 通过控制灯光、 马达和其他的装置来反馈、 影响环境。 在Ar duino IDE中, 通过Arduino语言编写程序, 并将编译后的二进制文件烧录进微控制器, 实现传感器和执行器的协同工作。 利用Visual Basic程序与Arduino的交互, 可以开发出有趣的小程序。 此时, Visual Basic程序扮演着执行器、 控制器等角色。

下面以游戏摇杆操控VB窗体中图像实现自由移动为例, 介绍如何实现VB和Arduino协同工作, 为开发VB和Arduin交互程序抛砖引玉。

1 连接游戏摇杆和Arduino板

图1 为游戏摇杆和Arduino板连接实物图, 各针脚对应连接如表1 所示。 摇杆由Arduino板的5V输出电压供电, 原始状态下S-X, S-Y读出电压约2.5V。 当沿板上X和Y箭头方向按下, 读出电压值随之增加, 最大到5V; 当沿X和Y箭头反方向按下, 读出电压值随之减少, 最小为0V。 Arduino板上的A0 和A1 为模拟量输入脚, 读取时0~5V电压值已被转换为数值0~1023。

2 安装Arduino驱动程序

将连接Arduino的USB口插入到计算机后, Windows会提示 “发现新硬件”。 Arduino板本身将作为计算机的一个串口设备, 由于计算机中没有相应的驱动程序, 会显示安装失败。进入Windows设备管理器, 在端口 (COM和LPT) 下找到带黄色感叹号的USB Device, 通过手动指定驱动程序文件夹位置来安装驱动程序 (具体参考网上教程) 。 对于Windows 7 以上操作系统可通过在线搜索安装驱动程序。 安装好驱动程序后, Arduino板在设备管理器中显示如图2 所示, 在笔者计算机中Arduino作为串口6 设备。

3 配置Arduino IDE

到https://www.arduino.cc/en/Main/Software下载最新的Ar duino开发环境IDE。 运行Arduino IDE: (1) 进入工具菜单选择开发板型号, 基础版选择 “Arduino/Genuino Uno”; (2) 选择Arduino所在的串行端口号 (参考设备管理器提示) , 这里选择 “COM6”, 如图3 所示。

4 编写Arduino程序

根据当前连接的感应器和执行器协同工作需要, 为Arduino编写相应的程序。 Arduino程序主要的功能: 设置连接外接设备针脚模式和参数, 读取外接设备数据, 控制外接设备等。Arduino编程语言是建立在C语言基础上的, 有C语言基础的能很快上手。 图4 是进入Arduino IDE后默认建立的程序框架。

Arduino语言以setup函数作程序开头, loop函数作程序框架主体。 setup函数用来初始化变量、 管脚模式, 调用库函数等, 只运行一次。 loop函数在setup函数运行后, 被周而复始地循环执行。 图5 是为摇杆编写的代码。

Serial.begin (9600) : 将串口通信速率设置为9600bps。 通信的两端要保持相同的传输速率。 Arduino将通过USB与计算机连接的接口定义为Serial对象。

Serial.flush () : 等待串口数据传输完成, 并将缓冲区清空。

analog Read函数的功能为读取指定模拟针脚的值, A0、A1 是模拟针脚0 和1 的别名。 模拟针脚上的电压值 (0~5V) 经模/数转换后变为一个整数值 (0~1023) 。 Serial.print函数的功能为将数据以字符串方式输出到串口。 Serial.println函数在输出时数据的同时在后面增加回车符 (ASCII 13) 和换行符 (ASCII 10) 。 delay函数为让程序等待多少毫秒, 然后往下执行。

由于loop函数是被循环执行的, 因此整个程序的功能为首先设置端口传输速率为9600 位/秒, 然后每隔0.1 秒读取模拟针脚0 和1 上的数值, 并将这二个数值用分号分隔, 再连接回车换行符, 最后输出到串口。 当然程序还可以更完善或更精炼。

单击工具栏上第一个按钮 (如图6 所示) 对程序进行验证 (编译) 。 在程序通过验证后, 单击工具栏上的第二个按钮 (如图7 所示) , 将程序重新编译并上传给Arduino板。 Arduin在有程序上传后, 首先进行初始化, 然后按上传程序指令重新开始工作。

为了验证程序是否有效, 单击工具菜单中 “串口监视器”, 打开监视窗口。 如图8 所示, 监视窗口中不断收到Ar duino发送过来的数据。 按动游戏摇杆, 数据会变化, 如图所示。

5 编写VB程序

运行VB6, 新建一个工程文件。 在工程中添加MSComm控件, 如图10 所示。 MSComm是一个串行通信控件, 它提供了一系列标准通信命令的接口, 允许建立串口连接。 MSComm采用事件驱动通信, 当有字符到达或发生了改变, On Comm事件就被触发。

在窗体中添加两个Command Button控件, 一个Image控件, 一个MSComm控件。 工程属性、 窗体属性和窗体内各控件属性设置如表2 所示, 窗体界面设计如图11 所示。

MSComm控件的Comm Port属性值要设置为6, 也就是Arduino板所在的串口号。 RThreshold的属性值设置为1, 也就每当接收到一个字符时就触发MSComm控件的On Comm事件。 因为Arduino的数据传输速率已设置为9600bps, 所以Settings属性值无需修改 (默认值为: 9600, n, 8, 1) 。

在窗体代码窗口输入以下代码:

运行工程, 单击窗体中“开始”按钮。VB6立即窗口显示如图12所示。

虽然设置RThreshold为1, 即每接收到一个字符时触发On Comm事件, 但读取时缓冲区内容可能已经有好几个字符了。因此, 需要根据回车换行符进行重组。窗体代码修改如下:

CStart_Click和CStop_Click过程代码保持不变。运行工程, 单击窗体上“开始”按钮。此时立即窗口显示如图13所示。

在MSCom_On Comm事件处理过程中, 每接收到一组正确的数据时, On Coming过程就被调用一次。然后将On Coming过程修改为如下:

运行工程, 单击窗体上“开始”按钮。上下、左右按下摇杆, 窗体中的小乌龟图片将上下、左右移动, 按力越大移动速度也越快。在摇杆初始状态下, 读出数据约为513~516, 而程序中411~611间的数据不作移动处理, 因此在摇杆初始状态下图片不会自己移动。Split函数按分隔符字符串 (参数二) 拆分输入字符串 (参数一) , 并以一个从零开始的一维数组形式返回所有子字符串。

6 结语

VB适合初学者学习, 利用VB + Arduino可以充分挖掘Arduino周边设备的功能, 编写出有趣的小程序, 并且在学习VB编程过程中学习工程学知识。 由于篇幅关系, 这里仅以一个小小的例子演示如何利用VB + Arduino编程实现协同工作。当然, 可以将MSCom控件和On Comm事件处理过程 (含数据整理代码) 封装为一个控件, 将来使用时只要在工程中添加这个控件, 设置基本属性即可。 在学习VB + Arduino编程过程中, 阅读和模仿Arduino程序也能为将来C语言打下良好的基础。

参考文献

[1]Bill Potter, 等.Visual Basic 4.0对象和类——从入门到精通[M].张均宝, 等, 译.北京:科学出版社, 1997.

Arduino控制板 篇2

●故障描述

学生在学习了《换挡风扇》一课后,做了一个用三个按钮控制的“换挡风扇”。如图1所示,学生将三个按钮模块分别接在Arduino的数字口2、3、4上,风扇接在数字口11上。接好硬件后,学生用米思齐(Mixly)软件编写了如图2所示的程序,编译并下载到Arduino中。学生按下按钮2,风扇开始慢速转动,再按下按钮3,风扇加速转动,按下按钮1后,风扇停止了转动。

一切都很顺利,于是笔者提议给这个作品增加遥控功能。学生们马上兴致勃勃地动手找到红外遥控模块,没几下就把硬件连接好了(在9号数字口上增加了红外接收模块),如图3所示。

使用遥控器上的“1”“2”“3”键分别控制风扇“停止转动”“慢速转动”“快速转动”,程序并不复杂,很快便写好了,如下页图4所示。

当学生按下遥控器上的“3”键时,风扇快速旋转起来。但当按下“2”键时,预期的慢速旋转并没有出现,风扇直接停止了转动。学生又按了几次“2”键,可是风扇仍然纹丝不动,再按“3”键,风扇也不动了。这时,学生赶紧检查刚才写的程序,再三检查后确定程序没有问题。那难道是硬件连接出问题了?仔细检查后也没有问题。一脸茫然的学生只好来求助笔者。于是,笔者查找遥控失效的原因。

首先,可以确定的是,风扇不能工作在慢速状态下的故障和加入了红外线遥控有关,因为本来是正常的。但它们之间会有什么关系呢?然后,笔者开始从它们的工作原理入手查找线索,考虑到遥控器遵循NEC协议,所以不论发送还是接收命令都需要产生38k Hz的脉冲,于是便很自然地想到,红外接收模块工作时会使用到Arduino板的定时器,同时风扇转速的改变也是靠Arduino板定时器产生的PWM输出实现的,那会不会是它们在使用定时器资源时产生了冲突呢?带着这一疑问,笔者开始求证自己的推测。

●技术分析

为了更好地理解求证过程,笔者先来解释一下Arduino UNO的主芯片(Atmage328P)中的定时器。所谓的定时器类似于生活中的闹钟,只要开启这个闹钟它就会根据设定的时间不断去提醒。提醒的方式有两种:一种是给CPU发送定时器中断,另一种是直接在管脚上输出脉冲电压(PWM)。只是在同一个时间内这个“小闹钟”只能设定一个定时时间,以一种方式工作,不能既当“闹钟”,又输出PWM。这种定时器在Atmage328P中共需要三个,分别是Timer0(0号定时器)、Timer1(1号定时器)和Timer2(2号定时器)。

为了确认红外遥控和风扇PWM输出在使用定时器资源上是否有冲突,首先,要确定风扇PWM输出所使用的是几号定时器。查看Arduino UNO的原理图,可以知道风扇所接的11口是从Arduino主芯片(Atmage328P)的17号管脚引出的(如上页图5),笔者顺藤摸瓜,查阅Atmage328P的数据手册,得知此管脚(OC2A)正是2号定时器在PWM模式下输出脉冲的管脚(如上页图6),也就是说要想风扇慢速转,必须让2号定时器工作在PWM模式下。接着,需要确认红外接收模块使用的是几号定时器。分析Mixly软件中的Arduino代码,可以看到程序加载了一个外部库“IRremote.h”,在“Mixly0.97arduino1.7.9hardwarearduinoavrlibrariesIRremote”文件夹中找到该库文件。打开该库文件,发现其又引用了一个用于设置中断的库文件“IRremote Int.h”,在这个文件的72行中发现了“#define IR_USE_TIMER2”这一句(如上页图7)。因此可知,针对Atmage328P芯片,红外遥控模块使用了2号定时器,至此可以确定问题的原因就是这两个功能同时使用了2号定时器。

●解决方案

问题的原因找到了,那怎么解决呢?笔者想到了两种方法:

第一种方法是修改红外遥控模块使用的定时器。将“IRremote Int.h”中的72行修改成“#define IR_USE_TIMER1”,强制红外遥控使用1号定时器。保存库文件后,笔者重新编译下载,试着按下了遥控器上的“2”键,风扇慢速地转了起来,成功了!

但是,这种方法对没有学习过类C语言的学生来说,有一定困难,而且改变了默认库中定时器的设置,可能会产生与其他模块的冲突,所以这种方式只适合于硬件连接无法改变的情况使用。有没有简单点的方法呢?

还有一种方法就是更换风扇连接的数字口。查看资料,笔者可以得知,Arduino UNO的各个具备PWM输出功能的数字口及其定时器的对应关系如上页表所示。笔者将风扇换到使用0号定时器的6号口上,修改程序中的端口,重新编译下载后,测试也一切正常。学生觉得这种处理定时冲突的方式更简单,只要记住6个可以输出PWM的数字口对应的定时器,换一下连接数字口就可以解决定时器资源冲突问题。

●结语

至此,故障得到了很好的解决。通过这个过程,笔者总结了在进行Arduino制作时需要注意的几点:

①用Arduino UNO实现一些简单的互动功能的确很方便,但作品的功能一旦复杂,就容易出现各种资源冲突的问题。所以,应用比较复杂的作品,最好选用硬件资源更加丰富的板子,如Arduino 2560、Arduino DUE等。

②如果作品中多处用到定时器,要合理分配定时器的使用。

③在使用数字口5、6的PWM功能时,尽量不要使用delay()延时函数,因为这个函数是使用定时器0来产生延时。

④像红外遥控模块这样需要用到定时器的模块,尽量不要接在具有PWM功能的数字口上,以免造成干扰。

⑤将PWM输出写在不同程序段,能减少互相干扰的概率。

此外,笔者深刻体会到,创客教师和学生还应该多了解一些单片机的原理、知识,才能“造”出更多有趣的作品,遇到问题也能得到有效解决。

Arduino控制板 篇3

1 Arduino简介

Arduino是源自意大利的一个教学用开源硬件项目,主要是为希望尝试创建交互式物理对象的实践者、喜欢创造发明的人及艺术家所构建的,它秉承开源硬件思想,程序开发接口免费下载,也可依需求自己修改。Arduino引脚如图1所示:

其硬件系统是高度模块化的,通过USB接口与计算机连接,包括14通道数字输入/输出,其中包括6通道PWM输出、6通道10位ADC模拟输入/输出通道,电源电压主要有5V和3.3V[1]。在核心控制板的外围,有开关量输入输出模块、各种模拟量传感器输入模块、总线类传感器的输入模块,还有网络通信模块,只要在核心控制板上增加网络控制模块,就可以容易地与互联网连接。Arduino还提供了自己的开发语言[2,3],支持Windows、Linux、Mac OS等主流的操作系统。Arduino系统是基于单片机开发的,并且大量应用通用和标准的电子元器件,包括硬件和软件在内的整个设计,代码均采用开源方式发布,因此采购的成本较低,在各种电子制作竞赛、电子艺术品创意设计等越来越多地使用Arduino作为开发平台。甚至可以接受Macromedia Flash软件制作的动画发送的信号,并由此来控制一些动作器件(如舵机等)。

2 舵机的工作原理

舵机是一种位置伺服的驱动器,具有闭环控制系统的机电结构,由小型直流电机、变速齿轮组、可调电位器、控制板等部件组成[4],如图2所示。由于可以方便地控制舵机旋转的角度(舵角,但是舵角一般不超过180°),因此,舵机在要求角度不断变化的控制系统中得到了广泛应用。

舵机在工作中,控制器发出脉冲宽度调制(PWM)信号给舵机,获得直流偏置电压。舵机内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出到电机驱动芯片,驱动芯片根据电压差的正负控制电机的正反转。舵机转动的角度是通过调节PWM信号的占空比来实现的,标准PWM信号的周期固定为20ms,理论上脉宽(脉冲的高电平部分)范围在1ms~2ms之间,但实际上脉宽可以在0.5ms~2.5ms之间,脉宽和舵机的转角0°~180°相对应。如以脉宽为0.5ms~2.5ms范围控制舵机的角度转动,转动范围为0°~180°,对应的控制关系如图3所示。

图3给出了转动角度为0°、90°和180°时对应的脉宽,当转动角度处于0°~180°之间的其它角度时,脉宽在0.5ms~2.5ms之间线性变化。

舵机收到控制信号后,首先判断转动方向,然后计算转动角度,接着驱动无核心马达开始转动,并通过减速齿轮将动力传输至摆臂,最后由位置检测器返回转动后的位置信号,以此判断舵机是否已经到达设定的位置。

小型舵机的工作电压一般为4.8V或6V,转速也不是很快,所以假如更改角度控制脉宽太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180°的话,其控制的角度精度是可以达到如果假定脉宽为0.5ms~2.5ms范围,则要求的脉宽控制精度为

3 Arduino控制舵机转角实验

舵机转动时电流较大,Arduino上的芯片可能会因为过流保护发热而损坏,因此不能采用Arduino板上的电源给舵机供电,需要采用外部电源。舵机有三根引线,棕色(或黑色)为地线,红色线为电源线(4.8-6V),黄色是数据线。选择Arduino的9号数字口作为舵机的脉冲控制信号输出接口。采用Arduino控制舵机角度转动的实验中,通过计算机的USB口输出电压为Arduino控制板供电,然后外接电源插到舵机的电源引脚,舵机的地线与Arduino控制板GND接口相连,信号口接数字9号口。连接原理图如图4所示。

具体的线路连接如图5所示。

连接好舵机和Arduino主控板之后,开始编写控制程序。首先,需要将Arduino的9号数字口定义为输出接口,代码如下:

pin Mode(9,OUTPUT)0.5m

前文所述,舵机分别用0.5ms~2.5ms之间的脉宽来对应0到180°左右的角度,且转动的角度与脉宽呈线性关系,按照图3的对应关系,则舵机每转动1°,对应的脉宽为该值除不尽,因此,用一个除不尽的脉冲宽度控制舵机转动,显然转动角度的精度很难控制,为此,实验中以接近2.5ms且能够整除180的值最为脉宽的变化范围,则取脉宽的范围为0.5ms~2.48ms,此时,舵机每转动1°,则脉宽变化因此,定义脉宽与转动角度之间的关系为:

其中,pulsewidth为输出脉冲的宽度,单位为μs,angle为控制舵机转动的角度。

用公式(1)把0°到180°的转角映射到500μs到2480μs的脉冲时间,控制舵机转动的函数如下所示:

将编写好的控制代码通过Arduino的IDE烧录到控制板之后,输入不同的角度值,便会看到舵机执行不同角度的转动信号了。

4 结束语

本文采用现今较为流行的Arduino控制板进行了舵机的角度控制,实验验证结果表明,Arduino控制板具有较高的控制精度,完全满足舵机角度的精度控制。当有多个舵机同时需要驱动时,Arduino控制板驱动也会达到很高的精度要求。

参考文献

[1]Jonathan Oxer,Hugh Blemings.Practical Arduino:Cool Projects for Open Source Hardware[M].New York:Springer-Verlag,2009:1-10.

[2]杨继志,杨宇环.基于Arduino的网络互动产品创新设计[J].机电产品开发与创新,2012,25(1):99-100.

[3]翁浩峰.利用Arduino和Flash开发DISLab[J].物理教师,2010,31(3):45-47.

Arduino控制板 篇4

1 自平衡挖坑车的总体设计

自平衡自动挖坑车采用arduino2560系列单片机作为控制核心。该自平衡自动挖坑车包括车体、挖坑设备。车体为该挖坑车提供动力, 牵引右边的挖坑设备移动。挖坑设备由以下三部分组成:升降台、挖坑机、机架。自平衡自动挖坑车在自平衡结构大胆做出了创新。图1所示即为自平衡挖坑车。

1.1 车体的设计

车体采用沙滩车的底盘, 不设座位, 如图1中1所示。将转弯结构改造成涡轮蜗杆结构, 由电机驱动实现转弯。采用36 V大功率直流电动机[3], 为挖坑车提供充足动力。利用电磁阀来控制刹车装置[4]。控制核心内置于车体内部, 并将无线接收器置于车壳外部, 以便接受远程控制信号。在车后邓君等:基于arduino控制自平衡挖坑车的研制轮的机架中牵引出一个接头, 以便和挖坑装置相连。可通过遥控器控制车体的运动。

1.2 挖坑设备的设计

挖坑设备作为挖坑车的工作部分, 是该产品的重点。挖坑设备由升降台、挖坑机、机架三部分组成。机架作为该部分的框架, 它通过下方的钢管和车体连接。底部安装有4个万向轮, 避免了悬挂式挖坑机在行动中的弊端。底部固定着导轨, 属于升降台的一部分。

挖坑机采用便携式, 以柴油和机油作为动力。将该挖坑机的手拉式启动方法改进为点火启动。该挖坑机可使用不同规格的钻头, 钻头的规格将决定着所挖坑的规格。挖坑机置于升降台上的平衡装置上。升降台升降的原理如下:底部电机通过机架上的变速箱 (用于输出大扭矩) 与丝杆滑块相连, 从而使得滑块推动剪刀结构在导轨上移动。如图1所示, 从而带动上方的平衡装置升降。平衡装置一端和轴承相连, 另一端和变速器 (用于降低转速) 相连。高精度倾轴传感器固定于平衡装置的右边, 可实时检测装置与水平方向的夹角, 并将所得数据反馈给控制系统, 控制系统控制平衡装置的电机来调整平衡装置, 直到保持水平为止。

在升降的最高、最低位置分别装有行程开关, 以防止撞击事故发生;平衡装置也有一个最大的平衡角度, 为15.8°。在平衡装置下方也装有行程开关。

2 自平衡挖坑车的试验与结果

试验一:在不平坦的山地上试验该挖坑车, 采用半径为10 cm、长度为80 cm的钻头为例。设定每隔50 cm挖一个坑40 cm深度的坑, 每行挖4个, 共挖4行。在设定好参数后, 系统自动载入并处理数据, 按下开始开关后自动开始作业。从开始到完成作业累计需要30 min, 在对所挖坑进行测量发现, 16个坑的平均直径为22.95 cm, 平均深度为38.68 cm。由于挖坑机在工作时转速较大, 振动比较厉害, 导致误差较大:直径误差为+17.45%;深度误差为:±3.3%。

试验二:在一块分别装有3.5°、5°、6.5°、8°、9.5°、11°、12.5°、14°、15.5°、17°的木板上, 让挖坑车从水平地板开上不同倾斜度的木板上, 刹车后自动进行自平衡调整。实验结果如表1。

由表1实验数据可得, 调整后平台与水平面夹角为0.8°, 最大可适应的坡度在15.5°~17°之间。经分析可得出误差的原因:传感器安装时并未保证平台处于完全水平状态;传感器所测数据具有0.5°的误差区间。

3 结论

自平衡挖坑车创新性地将自平衡结果和自动控制功能模块与传统的挖坑设备结合在一起, 还应用了无线控制技术, 使得人们不需一直追随挖坑车而可以用遥控器控制着挖坑车的工作[5]。真正解放了人的劳动力, 提高了工作效率, 降低了用工成本。从实验结果来看, 该挖坑车能够用于挖坑作业, 适用于大面积挖坑作业和危险地段的挖坑作业。具有广阔的产业化前景。

参考文献

[1]陈作模, 葛文杰.机械原理[M].北京:高等教育出版社, 2007.

[2]陆建, 穆泉.车载式植树挖坑机的研究设计[J].农业装备技术, 2011, 37 (4) :47-49.

[3]邓星钟.机电传动控制[M].武汉:华中科技大学出版社, 2008.

[4]哈尔滨工业大学理论力学教研室.理论力学[M].北京:高等教育出版社, 2008.

Arduino控制板 篇5

本设计将完成既可以用于教育行业作为典型的机器人教学教具,也可用于娱乐业作为展示用和表演用机器人,还能产生一定经济效益。该解魔方机器人运用颜色识别、步进电机精确控制等科学技术。对于解魔方机器人,控制系统就如同人的神经中枢,它起着承接算法与机械结构的作用。本文将从机械控制部分进行论述。

1 解魔方机器人控制系统研究现状

世界各国的很多公司及魔方爱好者已经设计出了解魔方机器人,目前还原魔方最快的机器人Cube Stormer 3由ARM的两位工程师完成,以惊人的3.253s还原了一个三阶魔方,打破了机器人还原魔方的世界纪录。它的机械控制采用的是4个LEGO的Mindstorms NXT蓝牙机器人配套的伺服电机作为机械臂动力,用NXT主控器直接驱动。这款伺服电机转速很快,定位精准,力矩也大,但是价格昂贵。

也有部分国内外的魔方爱好者设计了基于PC上位机的解魔方机器人,运用电脑作为上位机,摄像头作为颜色识别,用四个步进电机作为机械臂控制。此类解魔方机器人需用PC机进行还原计算,还原一个三阶魔方需要1分钟以上。对于机械控制部分,一共采用8个步进电机进行控制。每一只机械臂由1个电机控制机械臂前进与后退,另一个控制机械臂转动。

随着以上这些及魔方机器人的出现,各界人士研究解魔方机器人的也越来越多。由于它具有趣味性和可观赏性,出于对解魔方机器人工作原理的好奇,综合应用所学知识自己制作解魔方机器人。

2 前期设计分析

从各类解魔方机器人来看,大部分的解魔方机器人都需要较高的成本费用,或过于笨重,制作困难等。本设计是一款小型、简单、成本低的解魔方机器人。以Android作为主控平台,颜色传感器作为颜色识别装置,用一只机械臂和一个可旋转的底座实现魔方的翻转与旋转各面或整体旋转(图1)。控制部分用两个电机分别控制底座和机械臂,Arduino通过控制电机驱动间接控制电机,实现算法动作与机械动作的结合。

对于解魔方机器人而言,控制是一个很重要的部分,如果机械控制不精确,那么算法再优秀也无法实现,所以精确控制机械结构精准定位是实现魔方还原的关键。而控制的速度则是还原效率的一个重要的考察点。

3 Arduino单片机

Arduino是一个基于开放原始码的软硬件平台,具有使用类似Java、C语言的Processing/Wiring开发环境。并且Arduino自带很多库函数,程序编写简单方便。

3.1 Arduino UNO

Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板[3]。UNO具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。

3.2 Arduino Mega2560

Arduino Mega2560也是采用USB接口的核心电路板,它最大的特点就是具有多达54路数字输入输出,特别适合需要大量IO接口的设计。Arduino Mega2560也能兼容为Arduino UNO设计的扩展板。

根据Arduino UNO和Arduino Mega2560特点,由于Arduino UNO数字接口较少,最终选用Arduino Mega2560作为主控板。

3.3 Arduino IDE

Arduino IDE是Arduino的开放源代码的集成开发环境,语法简单以及能方便地下载程序,使得Arduino的程序开发变得非常便捷[4]。

Arduino编程由setup和loop两个函数组成,setup在程序流程中只会执行一次,用于定义所需要设定、初始化的参数和函数或是引脚功能指定等。Loop是主程序的执行内容。

4 电机选型

电机是解魔方机器人最主要的驱动设备,是否合理地选择电机将严重影响本设计项目的效果。本设计电机应结合转速,扭矩,精确度等参数进行选择。

4.1 直流电机

直流电机(direct current machine)能将直流电能转换成机械能[5]。直流电机的转动直接驱动于电流的输入,一般使用在持续运转的情况下,只依靠PWM信号来改变转速的快慢。不适合应用在比较精密的角度转动。

4.2 步进电机

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件[6]。步进电机具有较好的起停和反转响应,不会积累误差,以实现转动位置的精准。但难以运转到较高的转速,难以获得较大的转矩[7]。

4.3 舵机

舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统[8]。通过发送信号,指定输出轴旋转角度。普通直流电机无法反馈转动的角度信息,而舵机可以。但舵机的旋转角度只在一定角度之间。

结合项目特点要求电机可以精确控制魔方旋转90度、18度,由于直流电机控制精确度不高,而舵机只可在一定角度内旋转,故本设计驱动电机选择步进电机。

步进电机有步距角(涉及相数)、静转矩、及电流等要素,本设计主要考虑,转速、转矩、精确度及市场销售四个要素,最终选用的步进电机为“宝鸡航天华科出品的42步进电机带伺服反馈”,步进电机规格:42*42*37.8MM、步进角:1.8度、引线:两项四线、驱动电压12V、驱动电流0.8A、扭矩2.5Kg/cm左右,价格:12.8元/个。

5 电机驱动设计

5.1 L298N

L298N是ST公司生产的一种高电压、大电流电机驱动芯片[9]。它具有耐压值高,工作电流大的特点,最大可承受46V的电压;电流最大可达3A,持续工作电流可达2A,可以用来驱动两台直流电机或一台步进电动机;L298N有两个使能端,采用标准逻辑电平信号控制,可以采用这两个使能端对直流电机进行PWM控制。

5.2 ULN2003

ULN2003由七个硅NPN复合晶体管组成,耐高压、大电流;最大电流可达50V,最大电流可达500m A。

结合两个电机驱动参数及所选步进电机参数决定选用L298N作为本设计步进电机驱动,驱动模块设计与制作原理图,采用eagle软件进行PCB设计,经过裁板、热转印、腐蚀、打孔、元器件焊接等步骤制作出实物(如图2)。

6 电机驱动程序设计

6.1 步进电机工作原理

步进电机是通过时序来控制的,当按照一定顺序给步进电机线圈通电时,步进电机就可按照时序转动。以两相步进电机为例。

按照一定的顺序,依次给每一相进行供电,可实现步进电机的转动。两相步进电机的工作方式有单四拍,双四拍、八拍三种工作方式。其中以单双八拍方式控制精度最高,是单四拍和双四拍的一倍[10]。

6.2 电机程序设计

经过测试电机采用简单的双四拍工作方式已有足够的力矩驱动机械臂和底座,故采用双四拍工作方式进行程序编写本次选用的步进电机旋转一周需要200步,控制底座电机运行50步为顺时针旋转90度,机械臂电机初始位置为机械臂固定魔方位置,顺时针旋转80步后恢复可拉动魔方翻转,逆时针旋转36步可移开机械臂。

6.3 算法动作到机械动作的转换

算法计算完魔方的还原动作为固定魔方的中心块位置,每一面顺时针旋转90度,逆时针旋转90度或旋转180度,转换为机械步骤时可将要旋转的面先通过机械臂拉动翻转到底面,再进行旋转,完成后再讲魔方还原原来状态。各个面转换流程如图3。

7 总结

本文阐述述了解魔方机器人的控制部分,从Arduino单片机选型,电机型号选择,电机驱动设计,算法到机械控制的转换方面进行了分析设计和总结,希望可以为广大智能机器人设计爱好者提供研究支持和参考。

摘要:解魔方机器人课题为了适应对机器人智能化的要求,选择竞技类机器人作为研究对象,研究设计了解三阶魔方机器人,能够为提高竞技类机器人的智能化水平做出贡献。本设计基于Android平台,颜色传感器作为颜色识别系统,机械手臂作为操纵设备,完成对任意魔方状态的初始还原。机械控制作为解魔方机器人的神经中枢,是机械结构执行算法的纽带。

关键词:Arduino单片机,电机驱动,电机控制,步进电机

参考文献

[1]蔡睿妍.Arduino的原理及应用[C].北京:科学出版社,2012:23-27.

[2]郑振杰,江衍煊,游德智.单片机结合ULN2003驱动步进电机[J].电机技术,2010,2(6):18-19.

[3]安静宇,王党树,郑琪.研究和探讨数控直流电源[J].硅谷,2008,32(3):65-67.

[4]郑振杰,江衍煊,游德智.单片机结合ULN2003驱动步进电机的应用[J].电机技术,2010,54(9):77-78.

[5]赖若麒,刘竹林.基于步进电机的位置随动系统的设计[J].信息技术,2012,34(2):78-80.

[6]惠特.Arduino技术内幕(2013年版)[M].北京:人民邮电出版社,2013:10-16.

[7]孙骏荣,吴明展.Arduino一试就上手[M].2版.北京:科学出版社,2012:56-58.

[8]赵津,朱三超.基于Arduino单片机的智能避障小车设计[C].北京:科学出版社,2013:65-69.

[9]郭力峰,揭宗昌,蔡泽辉.基于XC886单片机的魔方机器人设计[J].电脑知识与技术,2011,24(8):25-28.

Arduino控制板 篇6

1 Visual Basic串口通讯简介

利用VB实现串口通信的方法有2 种, 一种是利用其自身集成的MSComm通讯控件实现与外接设备的通信, 另一种是利用通信API函数实现串口通信。

MSComm通讯控件通过串行端口传输和接收数据, 并为应用程序提供串行通信功能。PC机通过此控件利用串行口与其他设备连接, 从而实现两设备的数据通信。

MSComm通讯控件的主要属性和方法:

Setting:设置并返回通讯参数。

Port Open:通过设置其值打开或关闭串口。

Input:返回并删除接收缓冲区的数据流。

Output:向传输缓冲区写数据流。

根据程序的功能及其用途, 在使用过程中, 用On Comm事件和Comm Event属性监视并检测通信事件和错误值。

Com Ev Send:发送缓冲区的字符数比Sthreshold。

Com Event Rx Parity:其值为1 009, 奇偶位校验。

Com Ev EOF:其值为7, 接收文件中出现的结束符。

2 系统设计

2.1 上位机

该系统使用的上位机采用Visual Basic编程 (图形化编程) , 易于理解。上位机主要用于设置该控制系统开关的初始状态, 同时, 给出Arduino主控单元的控制信号。在控制小车的行进过程中, 小车上集成的传感器将信号传送给上位机, 上位机实时监控小车的运行速度、方向。

2.2 Arduino模块

在该设计中, 将Arduino Uno作为车载核心控制单元。Arduino作为一款便捷、灵活、方便开发的开源平台, 通过外接各种传感器感知环境, 通过电机、灯光和其他装置作出反馈。Arduino Uno主要包括1 个9 V DC输入、1 个USB接口、14个数字IO口、6 个模拟IO口、1 个5 V DV输出和1 个3.3 V DC输出。其核心是1 片ATmega328 芯片。

2.3 电机模块

小车采用双直流电机驱动模式, 2 台电机分别安装在小车后侧, 前轮采用导向轮导向。2 台直流电机利用直流电机驱动芯片LN298 驱动。因为LN298 无法控制电机转速, 所以, 可以通过调节驱动电机的PWM信号脉宽改变电机输出功率, 从而控制电机转速。

2.4 超声波测距模块

该超声波测距模块的有效距离为2~30 cm, 工作电压为3.3~5 V, 是由发射电路和接收电路组成的。在探测距离时, 当经由发射电路发射管发出的管线遇到障碍物时, 反射回来的光线会经过电路处理后输出1 个数字信号给主控单元。此外, 此模块还具有易于调节和控制、使用方便的特性。

3 算法分析

3.1 系统流程分析

在智能小车行进的过程中, 它四周安装的4 个传感器可实时检测小车周围是否有障碍物。当信号经过电路处理后, 通过Arduino控制单元转换, 不断地将数据传送给电脑终端, 在上位机上显示与障碍物的距离, 并利用上位机发送控制信号, 从而实现对小车行进的控制。系统流程如图1 所示。

3.2 避障代码

根据避障原理编写程序, 实现小车的避障功能。该程序主要分为电机、超声波测距2 部分。电机部分由analog Write () 、digital Write () 分别控制车速和小车行进的方向;超声波测距部分由Trig-Pin控制超声波输出, 控制模块通过处理接收到的脉冲时间, 将其转化为距离参数, 从而求得小车与障碍物的实际距离。

4 试验测试

智能小车制作完成后, 要测试小车的避障功能。试验时, 选用一块有多种障碍的平板, 让智能小车在行进过程中判断周围是否有障碍物, 然后将其与障碍物的距离实时传送到上位机, 通过上位机发出的动作指令控制小车的运行方向。

5 结论

基于Visual Basic的串口通讯和Arduino的智能小车控制系统采用上位机与控制单元联合控制的方式, 控制过程体现了交互式设计的优势, 能有效提高智能小车的使用率。

参考文献

[1]李江全.Visual Baisc串口通信及测控应用实例讲解[M].北京:电子工业出版社, 2013.

[2]戴圣伟, 陈白帆, 范绍成.无线遥控智能车的控制研究[J].计算机测量与控制, 2011 (09) .

Arduino控制板 篇7

关键词:Arduino,智能遥控,避障,循迹

0 引言

Arduino作为一款全球知名的开源硬件,全球有数以万计的开发者使用Arduino开发项目和电子产品[1]。利用Arduino开发的遥控智能小车具有体积小、成本低、可在多种设备上远程控制等特点。其在饲料生产企业的袋包码垛仓储、化肥厂颗粒粉体袋包码垛,印刷制品运输以及物流企业中的货物的搬运分拣中被广泛使用。本文以Arduino UNO开发板作为控制单元,手机端传递控制指令给蓝牙穿透模块,通过超声波模块,红外线循迹模块采集的信息配合控制程序实现一种具有无线遥控、避障、自动循迹等多功能智能小车。

1 设计思路和方案

1.1 系统组成

智能遥控小车控制系统硬件由Arduino UNO开发板、HC05蓝牙穿透模块,超声波传感器、红外循迹传感器和直流电机及驱动电路组成[2]。

1.2 智能小车设计方案

基于Arduino的智能小车通过无线串口实现对小车的无线遥控,通过相应的传感器和控制程序能够实现以下功能:

(1)利用蓝牙使小车可以远程控制小车运行方向和速度。(2)利用超声波传感器探测前方的障碍物,从而实现自动避障的功能。(3)利用红外循迹传感器探测下方的轨迹线,从而实现自动循迹的功能。(4)安装蜂鸣器和三色LED灯,实现报警和功能指示的作用。

2 智能遥控小车控制程序设计

智能遥控小车程序编写采用了模块化的结构设计方法。小车Arduino程序的基本结构由setup()、loop()、LEDBlin()、bizhang()和Line()五个函数构成。Arduino通电后Setup()函数中的程序只执行一次,用于Arduino的初始化设置,如I/O口的初始化操作和速度状态的定义。Loop()函数完成程序的主要功能和子程序的调用,如小车的蓝牙遥控、自动避障和循迹等函数的调用。LEDBlin()函数用来定义WS2812B RGB三色LED闪烁和蜂鸣器发声,bizhang()函数实现小车的自动避障功能,Line()函数实现小车的循迹功能,而yaokong()函数实现小车的手动遥控功能,通过手机客户端的SPP蓝牙串口软件,在名称文本框内输入要传送的字符,如字符A、B、C用来设置小车运动的工作模式(手动遥控、自动避障、循迹运行)。字符R1、R2、R3用来设置小车的移动速度,、、、分别用来控制小车的前进、后退、左转、和右转。

2.1 手动遥控

避障程序主要由主函数Loop()和电机L298N驱动函数来实现。首先在函数Loop()中通过函数BT_COM()读取蓝牙串口的数据[3],通过switch()多选择分支函数比对接收字符对应的电机驱动函数,如符号“↑”则调用Forward()函数小车前进,符号“↓”调用Backup()函数小车后退,“→”调用Turnright()函数小车右转,“←”调用Turnleft()函数小车左转,实现小车通过无线蓝牙的遥控控制。

2.2 避障代码

避障程序主要由超声波测距函数Distance(),电机L298N驱动函数和避障模式函数Bi Zhang()等构成[4]。首先在主程序中选择自动避障模式B,则调用测距模块函数Distance()通过Triq引脚输送一个大于10us的高电平,然后检测Echo引脚反馈回来的高电平持续时间,通过公式:距离=344m/s*高电/2将时间转换成距离。然后再调用Bi Zhang()函数来判断检测的距离:如果在20mm<us<40mm范围内小车左转,us>40mm小车直行,us<20mm小车后退。

2.3 循迹代码

循迹程序主要由循迹函数Line()和电机L298N驱动函数等构成。首先在主程序中选择自动避障模式C,当Line()函数返回值为0时表示小车没有在轨迹上,小车调用电机控制函数Forward()控制电机继续前进,当Line()函数返回值为1时表示小车在轨迹的右侧,小车调用电机控制函数Turnright()函数控制电机右转,同理当Line()函数返回值为2时,小车调用电机控制函数Turnleft()函数控制电机左转,当Line()函数返回值为3时表示小车在轨迹中间,小车调用电机控制函数Forward()控制电机继续前进。

2.4 实验研究

经实验测试小车成功地实现了无线蓝牙遥控功能,能够实现三种控制模式的切换。在前方遇到障碍物时能够自动的避障,轻松的避开障碍物,达到了预定的目标,效果如图1所示。

3 小结

借助Arduino资源丰富的开源硬件平台和高效率的Arduino类库函数实现了对智能遥控小车控制系统的设计。实验结果表明小车能够很好地实现自动的避障和循迹的功能,通过HC-05蓝牙模块还可以方便地实现无线遥控和控制模式的切换。基于Arduino智能小车的控制系统的研究将有助于把Arduino引入到智能产品的设计当中去,具有一定的实用价值,为后续开发工业智能货物运输机器人进行了一次有效的尝试。

参考文献

[1]陈吕洲.Arduino程序设计基础[M].北京:北京航空航天大学出版社,2015.

[2]宋楠,韩广义.Arduino开发从零开始学:学电子的都玩这个[M].北京:清华大学出版社,2009.

[3]聂茹.基于蓝牙遥控的多功能智能小车设计[J].自动化与仪器仪表,2016(04).

上一篇:资金支付管控下一篇:掺混合材料