1、第4章 Arduino简单实验 目录4.1 LED4.1 LED灯实验灯实验4.2 4.2 开关按键实验开关按键实验4.3 4.3 电机控制实验电机控制实验4.4 LCD4.4 LCD显示实验显示实验4.5 4.5 设计游戏设计游戏Jumping PongJumping Pong4.1 Arduino开发环境 4.1.1 材料清单4.1.2 调试代码图4-1为实验的原理图图4-1原理图4.1.2 调试代码 按照右图连接好电路后,就可以开始编写程序了。程序需要让LED小灯闪烁,实现点亮1秒熄灭1秒。这个程序很简单,与Arduino自带的例程里的Blink相似,只是将13数字接口换做10数字接口。
2、图4-2实物图4.1.3 调试代码编好后,单机下载到Arduino,Arduino的编程界面就会出现下列代码。void setup()pinMode(10,OUTPUT);void loop()digitalWrite(10,!(HIGH);delay(1000);digital Write(10,!(LOW);delay(1000);紧接着就可以看到接到I/O口10脚上的高亮LED灯模块在闪烁了,小灯闪烁实验就完成了。注意:Arduino开发软件的选择工具栏板卡的选项是Uno,通信端口要选择初次安装出现的串口,两项缺一不可,否则不能下载程序。图4-3 Arduino的编程界面4.1.4 拓展
3、训练流水灯,用八个LED,呈现多种流水效果。图4-4 实物图4.2 4.2 开关按键实验开关按键实验4.2.1 4.2.1 材料清单材料清单4.2.2 实验原理图4-5 按键开关4.2.3 4.2.3 硬件调试硬件调试图4-6 连接图按照单键控制LED连接原理图连接好电路。按键开关的一端连接5V,另一端接模拟输入的0号端口;LED阳极串联220限流电阻后连接数字13号端口,阴极连接到地。连接图如图4-6所示。4.2.4 程序设计2.程序源码pinMode(LED,OUTPUT);/设置数字I/0引脚为输出模式void loop()int i;while(1)i=analogRead(A0);/
4、读取模拟0口电压值 if(i1000)/如果电压值大于1000(即4.88V)digitalWrite(LED,HIGH);/设置第13引脚为高电平,点亮LED灯else digitalWrite(LED,LOW);/设置第13引脚为低电平,熄灭LED灯 3.调试及实验现象图4-8单键控制LED实物连接图4.2.5拓展训练完成上述实验后,会发现一个问题,要想LED一直亮着就必须一直按着按键不放,很显然这是一个不切实际的做法,所以现在要实现的功能就是当按下按键并放开后,LED仍然会一直亮着。要想达到这个目的,在不修改硬件连接的情况下,只需要对程序进行适当的修改即可(定义了state变量用来保存按
5、键按下的状态)。下面为修改后的参考程序源代码:#define LED 13#define sw 7int val=0;int old_val=0;int state=0;/定义状态位void setup()pinMode(LED,OUTPUT);pinMode(sw,INPUT);void loop()val=digitalRead(sw);if(val=HIGH)&(old_val=LOW)state=1-state;/状态位取反 delay(10);old_val=val;if(state=1)digitalWrite(LED,HIGH);else digitalWrite(LED,LOW
6、);将上述代码下载到开发板上后,可以发现,当按下按键并松开后,LED灯不会熄灭,而是一直亮着。该功能的实现主要归功于上述参考程序中定义的state变量保存了按键按下的状态。4.34.3电机控制实验电机控制实验4.3.1 材料清单4.3.2 实验原理随着数字化技术的发展,数字控制技术得到了广泛而深入的应用。步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件,具有快速启动和停止的特点。因为步进电动机的控制系统结构简单,价格低廉,性能上满足工业控制的基本要求,所以广泛地应用于手工业自动控制,数控机床,组合机床,机器人,计算机外围设备,照相机,投影仪,数码摄像机,大型望远镜,卫星天线定位系
7、统,医疗器件以及各种可控机械工具等。直流电机广泛应用于计算机外围设备(如磁盘,软盘和光盘存储器),家电产品,医疗器械和电动车上,无刷直流电机的转子普遍使用永磁材料组成的磁钢,在航空,航天,汽车,精密电子等行业 被广泛应用。在电工设备中的应用,除了直流电磁铁(直流继电器,直流接触器等)外,最重要的就是在直流旋转电机中的应用。在发电场里,同步发电机的励磁机,蓄电池的充电机等,都是直流发电机;锅炉给粉机的原动机-是直流电动机。此外,在许多工业应用场合,列如大型轧钢设备,大型精密机床,矿井卷扬机,市内电车,电缆设备等严格要求线速度一致的地方,通常都采用直流电动机作为原动机来拖动工作机械。直流发电机通常
8、作为直流电源,向负载输出电能;直流电动机则作为原动机带动各种生产机械工作,向负载输出机械能。在控制系统中,直流电机还有其他的用途,例如测速电机,伺服电机等,它们都是利用电和磁的相互作用来实现向机械能的转换。步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机就转过一个步距角。由于这一线性关系的存在,加上步进电机具有只有周期性的误差而无累计误差等特点,所以步进电机在速度,位置控制等领域应用广泛,使用步进电机后使很多原本复杂的控制变得非常简单。一般采用软件延时的方法来对步
9、进电机的运行速度,步数及方向进行控制。根据计算机所发出脉冲的频率和数量所需的时间来设计一个字程序,该子程序包含一定的指令,设计者通常要对这些指令的执行时间进行严密的计算或者精确的测试,以便确定延长时时间是否符合要求,每当子程序结束后,可以执行下面的操作。采用软件延时方式时,cpu一般被占用,cpu利用率低,这些许多场合是非常不利的。因此需要重新设计步进电机的控制程序,采用pcl-812PG数据采集卡,利用812PG卡中自带的可编程计数/定时器8254及其他逻辑电路器件,设计一种步进电机控制方式,仅需要几条简单的指令就可以产生具有一定频率和数目的脉冲信号。可编程的硬件定时器直接对系统时脉冲或某一
10、固定频率的时钟脉冲进行计数,计数值则由编程决定。当计数到预定的脉冲数时,给出定时时间到的信号,得到所需的延时时间或定时间隔,由于计数的初始值由编程决定,因此在不改动硬件的情况下,只通过程序的变化即可满足不同的定时和计数要求,使用很方便。4.3.3 4.3.3 硬件调试硬件调试4.3.4 4.3.4 程序设计程序设计1.步进电机实验软件流程自增自减运算符是一类特殊的运算符,其中,自增运算符(+)和自减运算符(-)对 变量的操作结果是增加1和减少 1。图4-10步进电机试验软件流程图2.步进电机实验程序#include/这里设置步进电机旋转一圈是多少步#define STEPS 100/设置步进电
11、机的步数和引脚Stepper stepper(STEPS,8,9,10,11);/定义变量用来存储历史读数int previous=0;void setup()/设置电机每分钟的转速为90步 stepper.setSpeed(90);void loop()int val=analogRead(0);/移动步数为当前读数减去历史读数 stepper.step(val-previous);/保存历史读数 previous=val;4.3.5 4.3.5 拓展训练拓展训练 1.直流电机的工作原理直流电机是指能将直流电能转换成机械能的机械设备,因其良好的调速性能而在电力拖动中得到广泛应用。直流电动机按
12、励磁方式分为永磁,它励和自励三类,其中自励又分为并励,串励和复励3种。本文不对直流电机原理进行深入研究,只是大概介绍一下。其实在本实验主要是关注直流电机是有刷电机还是无刷电机,因为有刷电机干扰很大,会对Arduino以及其他外围芯片造成干扰,甚至会导致芯片复位,所以只从有刷和无刷这两类大致进行介绍。(1)有刷直流电动机。有刷电动机的2个刷(铜刷或者钢刷)是通过绝缘座固定在电动机后盖上,直接将电源的正负极引入到转子的换相器上,而换相器连通了转子的线圈,3个线圈极性不断地交替交换与外壳上固定的2块磁铁形成作用力而转动起来。由于换相器与转子固定在一起,而刷与外壳(定子)固定在一起,电动机转动时刷与换
13、相器不断地发生摩擦产生大量的阻力与热量。所以,有刷电机效率较低。但是,它具有制造简单,成本低廉的优点。(2)无刷直流电动机 无刷直流电动机是将普通直流电动机的定子与转子进行了互换。其转子为永久磁铁,产生气隙磁通;定子为电枢,由多相绕组组成。在结构上,它与永磁同步电动机类似。无刷直流电动机定子的结构与普通的同步电动机或感应电动机相同,在铁芯中嵌入多相绕组(三相,四相,五相不等),绕组可接成星行或三角形,并分别与逆变器的各种率管相连,以便进行合理换相。转子多采用钐钴或钕铁硼等高娇顽力,高剩磁密度的稀土料,由磁极中磁性材料所放位置的不同,可以分为表面式磁极,嵌入式磁极和环形磁极。由于电动机本机为永磁
14、电机,所以习惯上把无刷直流电动机也叫做永磁无刷电动机。2.驱动芯片 驱动步进电机用的是ULN2003。由于只用了4个引脚,ULN2013还有3个空闲的驱动引脚。另外,为了使电路简单,就直接用ULN2003剩余的一个引脚来驱动了。因此,也只能驱动电机朝一个方向转动。3.驱动电路由于使用的是直流电机,干扰较大,驱动电路就要多作一些消除干扰的设计,常见的有在电机两端串联手感,加电容等方法。这里只加了续流二极管和电容,如图4-11所示,其中Arduino的12脚接ULN2003的第7脚。图4-11 电路图4.4 LCD4.4 LCD显示实验显示实验4.4.1 4.4.1 材料清单材料清单4.4.2 4
15、.4.2 实验原理实验原理液晶显示器简称LED(liquid crystal display),其结构是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到每个像素带点偏振光出射的目的。现在LED已经替代CRT成为主流,价格已经下降了很多,其普及速度相当快。1602液晶也叫1602字符型液晶,是指显示的内容为16*2(即可以显示两行),每行16个字符的液晶模块(显示字符和数字),是一种专门来显示字母,数字,符号等的点阵型液晶模块。它由若干个5*7或者5*11等点阵字符位组成,每个点阵
16、字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到字符间距和行间距的作用。因此。1502型液晶不能很好地显示图形(用自定义CGRAM,显示效果也不好),但非常适合便携式及低功耗测试设备。市面上的字符型液晶大多数是基于HD44780液晶芯片的,控制原理完全相同,因此基于HD44780所编写的控制程序可以很方便地应用于市面上大部分的字符型液晶。本实验是驱动1602液晶显示文字。4.4.3 4.4.3 硬件调试硬件调试4.4.4 4.4.4 程序设计程序设计4.5 JUMPING PONG4.5 JUMPING PONG4.5.1 功能构思Jumping pong.主要功能包
17、括以下几个方面的内容:(1)8乘8点阵的应用 (6)光敏电阻实现光控开关。(2)红外遥控的接收与发射。(7)模块连接。(3)语音模块的使用。(4)1602LCD显示屏显示分数。(5)游戏摇杆模块实现球拍移动。4.5.2 4.5.2 设计原理设计原理1.设计思路将游戏代码封装在一个函数game中,改变gane中控制球速的代码将游戏分为不同等级和单双人模式,在游戏开始前,先判断周围环境的光照强度,当光强大于一定值时再继续执行紧接着的功能。之后,判断是否接到红外信号,当接收到特定值得信号时,调用game函数,游戏开始。每当球碰到一次拍子,分数就自动加1,实现计分功能。当一方未接到球时,游戏结束,显示
18、分数及下一步功能选择。如此反复,在游戏进行中,不断刷新光敏电阻的值,判断是否符合光强条件,以保证游戏功能正常运行。2.各模块电路连接 所需材料:Arduino主板和扩展板(各1个),88点阵(1个),MAX7219驱动芯片(1个),面包板(2块),LCD显示屏(1个),语音模块(1个),导线若干,游戏摇杆模块(2个),小喇叭(1个),红外线遥控和光敏电阻(各1个)。电路连接分为88点阵部分,红外线遥控都分,光敏电阻部分,1602LCD显示屏部分及总体电路,分别如图4-14、4-15、4-16、4-17所示。图4-14 8*8点阵连接Arduino UNO图4-15 红外遥控部分图4-16光敏电
19、阻部分图4-17 LCD显示屏部分4.64.6打地鼠游戏机打地鼠游戏机设计一个打地鼠游戏机,该设计中4个LED灯,对应4个按键,每秒生成一个14的随机数,对应点亮相应的LED灯,在下次随机数生成之前判断相应的按键是否按机数频率变为0.8s一次,完成10次操作后频率变为0.4s一次,以此类推,0.2s的情况下完成10次操作游戏结束。蜂鸣器鸣叫5声,频率5Hz。在游戏过程中,错误3次也游戏结束,蜂鸣器鸣叫3声,频率5Hz。4.6.1 4.6.1 功能构思功能构思4.6.24.6.2设计原理设计原理利用Arduino主板及其相应的一系列配件实现具有“打地鼠”功能的一个简易游戏机。打地鼠游戏的本质,即人要根据不同的信号提示做出不同的行为。利用不同的光信号的视觉刺激,即人眼在看见不同的灯发光时按下相应的按键。电路连接如图4-18所示。图4-18 电路连接图