Arduino非常方便的与一个USB设备通信,例如USB键盘,鼠标,U盘,相机等。
LCD Keypad Shield
使用2行16个字符液晶,具有对比度调节,使用1个模拟口模拟5个按键输入,1个复位按键,未使用的I/O口都扩展出来备用,充分利用I/O口。
Color LCD Shield
使用诺基亚6100彩色LCD作为显示的彩色LCD扩展板,可实现128*128像素的彩色图像显示。
Ethernet Shield
以W5100为核心的网络扩展模块,可以使Arduino成为简单的Web服务器或者通过网络控制读写Arduino的数字和模拟接口等网络应用。可以直接使用IDE中的Ethernet库文件实现一个简单的Web服务器。
XBee传感器扩展板
XBee扩展板主要是侧重于一些传感器,无线通信模块的接口扩展,使这些模块能够方便的和Arduino进行连接。
WIFI Shield
基于WIFI210的WIFI无线模块提供TTL电平串口到IEEE802.11b/g/n无线通信的桥接。任何具有TTL串口的设备都可以很容易的建立起无线网络,实现远程管理和控制。内部集成多种通信协议及其加密算法。只需要简单的设置即可实现多种场合的应用。
此外还有很多扩展板分别用于连接各种传感器和扩展模块。 3.3 智能小车驱动系统介绍 3.3.1 驱动系统模块的运作方式
在这里我使用两个电机然后加上变速齿轮以带动小车前进,其次后面还会有一个万向轮来进行转向。我分别控制两个电机,当其中一个电机转动,另一个电机停止的时候就会进行转向,当两个电机同时以相同的速度转动是那么就会前进或是后退,为了控制电机的速度,我在这里使用了PWM技术,也就是脉冲宽度编码调制,这个我会在后面详细进行说明,所以我们就可以通过这些硬件来实现小车的前进后退以及转弯。
20
在这里我写了一个电机驱动的程序用于方便的来控制电机,其次为了能够更好的驱动两个电机我还使用了一个298电机驱动模块来增加驱动能力。 3.3.2 PWM的介绍
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
而在Arduino的UNO开发板上正好有6组PWM输出,所以我们可以非常方便的进行使用。
而在Arduino中使用PWM的话是用的analogWrite(pin,value)这个函数,pin是指的引脚,必须在支持PWM的引脚上使用这个函数,value则是控制电压,即控制电机转速,调节范围是0-255,其次还有一个函数digitalWrite(pin,state)pin一样是指引脚,state则是指的电机状态是正传还是反转,当state是1时正转,是0时则反转。 3.4 PID技术介绍
PID技术是我们传感器技术的一个基础,当今的自动控制技术都是基于反馈的概念。反馈理论的要素包括三个部分:测量、比较和执行。测量关心的变量,与期望值相比较,用这个误差纠正调节控制系统的响应。
21
这个理论和应用自动控制的关键是,做出正确的测量和比较后,如何才能更好地纠正系统。
PID(比例-积分-微分)控制器作为最早实用化的控制器已有70多年历史,现在仍然是应用最广泛的工业控制器。PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因而成为应用最为广泛的控制器。
PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入e (t)与输出u (t)的关系为
u(t)=kp[e(t)+1/TI∫e(t)dt+TD*de(t)/dt] 式中积分的上下限分别是0和t
因此它的传递函数为:G(s)=U(s)/E(s)=kp[1+1/(TI*s)+TD*s] 其中kp为比例系数; TI为积分时间常数; TD为微分时间常数。 它由于用途广泛、使用灵活,已有系列化产品,使用中只需设定三个参数(Kp, Ti和Td)即可。在很多情况下,并不一定需要全部三个单元,可以取其中的一到两个单元,但比例控制单元是必不可少的。
首先,PID应用范围广。虽然很多工业过程是非线性或时变的,但通过对其简化可以变成基本线性和动态特性不随时间变化的系统,这样PID就可控制了。
其次,PID参数较易整定。也就是,PID参数Kp,Ti和Td可以根据过程的动态特性及时整定。如果过程的动态特性变化,例如可能由负载的变化引起系统动态特性变化,PID参数就可以重新整定。
第三,PID控制器在实践中也不断的得到改进。
我在这里特地引入了PID技术是因为如果想要小车运行的更好更稳定或是有更高的要求时,就能够使用PID技术来进行改进和完善。 3.5 总结
在这一章里主要是进行了主控制器的硬件设计并介绍,在这里比较详细的介绍了Arduino平台的微处理器的各种特性,以及开发板的整体性能,还有各种便于开发的扩展板,还简单提到了小车的驱动系统,最后介绍了一下PWM技术以及PID技术,这都是传感以及控制中所需要用到的技术。
22
4. 主控制器软件的设计
4.1 Arduino编程简介
Arduino是一个面向上层的平台,在前面我已经介绍了Arduino的一些硬件资源,所以在这里我们要使用这个平台其实就是控制他的这些硬件资源。
我使用的是UNO开发板,他的各个资源如下: 数字引脚:0-13 模拟引脚:A0-A5
串行通信:0-1(0是RX,接收数据,1是TX,发送数据) 外部中断:2, 3
PWM输出:3, 5, 6, 9, 10, 11
SPI通信:10(SS),11(MOSI),12(MISO),13(SCK) TWI通信:A4(SDA),A5(SCL)
在这里我所需要实现的一些功能就需要控制上面的一些引脚,让其输入或输出信号。
其中数字引脚和模拟引脚是非常重要的,数字引脚用于输入和输出数字信号,模拟引脚则用于输入和输出模拟信号,模拟引脚中其实就是比数字引脚多了一个数模转换器,其实模拟引脚也是可以当作数字引脚使用的。
先来看看数字引脚的控制,有函数pinMode(pin,mode),这个函数用于配置引脚为输入和输出模式,mode参数就表示模式,分别为INPUT和OUTPUT。函数digitalWrite(pin,value)用于设置引脚的输出电压是高电平还是低电平,HIGH是高电平,LOW则是低电平,value就是设置电压的参数。函数digitalRead(pin)则表示读取引脚的电压为高电平还是低电平,当然先要在引脚配置中配置为输入模式,我们一般是用这个函数来读取外界传感器的高低电平的。
模拟引脚的控制其实也很简单,analogReference(type),这个函数是用来配置模拟引脚的参考电压的,因为我们读取模拟引脚的值的方式一般是先获取到模拟值,然后我们再把模拟值进行转换,type有一下三种类型:
DEFAULT:默认值,参考电压,参考电压为5V。 INTERNAL:低电压模式,使用片内基准电源。
23
EXTERNAL:扩展模式,通过AREF引脚获取参考电压。 函数analogRead(pin),这个函数用于读取引脚的模拟量电压值,每读取一次需要花100us的时间,函数返回类型是int型,范围是0-1023。analogWrite(pin,value)这个函数是通过PWM方式输出一个模拟量,一般是用来控制舵机或是亮度或是电机转速的,我在这里就是用的这个函数来控制电机转速的。 4.2各种模块设计 4.2.1 寻线和红外避障传感器程序设计 在这里为了方便,我把寻线功能和避障功能做到了一起并用了一个简单的函数让两个功能可以互相切换,我把数字引脚中的8脚做成了一个转换开关,当8脚为高电平时则是寻线状态,当8脚是低电平是则是避障状态。那么以下便是程序的一个简单的流程图: 开始 各种参数初始化 子函数的构造 判断第8引脚状态 digitalRead(8)==1 有黑线吗? 被挡住了吗 左边有 中间有 右边有 左边被挡 中间被挡 back 右边被挡 左转 直走 右转 turnRR turnRR turnLL 图9程序设计的流程图
24