APP下载

Arduino UNO控制多个LED实现多种特效

2020-06-24李娜孟东晓

现代信息科技 2020年22期
关键词:模块化

李娜 孟东晓

摘  要:Arduino UNO控制多个LED实验在硬件连接不变的情况下,通过改变程序实现多种特效,展现不同的效果。将各项功能封装成不同的模块,初始化模块和其他功能模块组合可实现不同的功能特效。通过项目实例化教学手段举一反三引导学生深入思考,加深理解,让学生敢于灵活使用和改变程序,使学习过程更加生动。通过对功能模块设计和分析,Arduino UNO控制多个LED特效模块,达到操作使用简单明了,特效清晰直观的效果。

关键词:Arduino UNO;LED;项目实例化;模块化

中图分类号:TP211;TN873      文献标识码:A 文章编号:2096-4706(2020)22-0045-03

Arduino UNO Controls Multiple LEDs to Achieve Multiple Special Effects

LI Na1,MENG Dongxiao2

(1.Department of Mechanical and Electrical Engineering,Tianjin Hedong District Staff and Workers University,Tianjin  300162,China;2.Coficab(Tianjin)Co.,Ltd.,Tianjin  301726,China)

Abstract:Arduino UNO controls multiple LED experiments,under the condition that the hardware connection remains unchanged,various special effects are realized by changing the program to show different effects. The various functions are packaged into different modules,and the initialization module and other function modules are combined to achieve different function special effects. Through the teaching method of project instantiation,we can draw inferences from one instance,guide students to think deeply,deepen their understanding,let students dare to use and change the program flexibly,and make the learning process more vivid. Through the design and analysis of functional modules,Arduino UNO controls multiple LED special effect modules to achieve the effect of simple operation and clear and intuitive special effects.

Keywords:Arduino UNO;LED;project instantiation;modularization

0  引  言

2020年我校創建“人工智能+传感器”实训课程体系,引入Arduino UNO套件,深入研究开发相关课程内容,为创建适应我校发展的人工智能实训室奠定基础。作者在开发课程体系中研究发现Arduino UNO控制多个LED项目有待深入拓展和挖掘,以此激发学生思考,学习融会贯通,敢于创造创新。

Arduino是2005年诞生于意大利的一种可编程单片机电路板,到现在已经有15年的历史。Arduino是一个开源平台、采用知识共享协议,其硬件原理图和PCB图、软件源码及其他资源都可以免费获得、使用、修改和再发布。随着时间的推移,Arduino开发板的型号也在不断丰富,从Arduino UNO、Arduino Mega2560、Arduino Pro Mini已经进化出多种不同的型号,但是Arduino UNO开发板是最常见也是使用最多的一种型号。项目的研究就是建立在Arduino UNO Rev3(下文简称Arduino UNO)开发板的基础之上。Arduino UNO控制多个LED是在控制单个LED基础上进行延伸和拓展,具有硬件连接简单,实验特效多变,直观明了的特点。

1  总体结构设计

“人工智能+传感器”实训课程体系以Arduino UNO为平台,围绕“传感器”元器件创建一系列实训课程,其中控制多个LED项目是其中的基础入门课程。

1.1  结构设计

Arduino UNO控制多个LED包括硬件设计和软件设计两部分内容,硬件设计需要根据实验接线图完成接线。软件设计是项目设计的主要板块,根据目标分析,将程序分为初始化模块和循环体模块,初始化模块和不同循环体模块组合实现不同的特效。

1.2  硬件设计

Arduino UNO控制多个LED设计实验接线实物图如图1所示,接线原理图如图2所示,均采用Fritzing电子设计软件制。使用Arduino UNO一块,LED 6个,电阻(220 Ω)6个,面包板一块,杜邦线若干。图中所有LED正极通过电阻分别与Arduino UNO引脚2~7连接,LED负极通过面包板与Arduino UNO的GND引脚连接。

1.3  软件设计

根据硬件系统控制要求,采用与Arduino UNO对应的Arduino IDE编程软件进行编程,程序主要分为初始化模块和循环体模块两大类,各循环体模块可与初始化模块独立组合,呈现不同的功能效果。

(1)初始化模块。初始化模块主要用于定义时间间隔和设置引脚为输出模式,程序中“//”后面表示注释内容,下文为初始化模块程序设计:

int timer =100;                           //定义时间间隔为100ms,可以根据需要设置时间间隔。

void setup(){                           //初始化

for (int thisPin=2; thisPin<8; thisPin++)       //for语句,定义引脚范围2~7

{

pinMode(thisPin,OUTPUT);               //定义引脚为输出模式

}

}

(2)循环体模块一:LED从右到左闪烁。通过for语句实现对引脚2~7逐个访问,每次访问时对引脚先输出高电平保持100 ms后输出低电平,实现该引脚对应的LED闪烁效果。把程序放在void loop循环体内实现对引脚的无限次循环访问。实现该功能的代码程序为:

void loop()                            //自带循环功能

{

for (int thisPin=2; thisPin<8; thisPin++){   //for语句,指明引脚范围2~7

digitalWrite(thisPin,HIGH);            //定义引脚为高电平,LED亮

delay(timer);                      //延迟100ms,否则看不出闪烁的效果

digitalWrite(thisPin,LOW);          //定义引脚为低电平,LED灭

}

}

(3)循环体模块二:LED从右到左闪烁,再从左到右闪烁,不断循环。在模块一的基础上再加入反向的闪烁动作即可实现该功能,所以程序的编写需要再加入一个反向的循环体。引脚设置从高到底,其他内容不变。需要增加的代码程序为:

for (thisPin=7; thisPin>1; thisPin--)     //for语句,指明引脚范围为7~2

{

digitalWrite(thisPin,HIGH);            //定义引脚为高电平,LED亮

delay(timer);                      //延迟100ms

digitalWrite(thisPin,LOW);          //定义引脚为低电平,LED灭

}

(4)循环体模块三:LED从右到左亮,再从右到左灭。模块三和模块二的主要为模块三的第一次循环只有亮的过程,第二次循环才是灭的过程。根据要求,模块中应包括两个for循环,第一个for循环引脚设置从2~7,逐个设置引脚为高电平,LED从右到左亮,保持常亮;第二个for循环,引脚设置从2~7,逐个设置引脚为低电平,LED从右到左熄灭。

(5)循环体模块四:LED1、3、5先亮,2、4、6再亮;LED1、3、5先灭,2、4、6再灭。根据模块功能要求,可以知道需要四个循环体来实现相关功能,循环体1实现LED1、3、5先亮,循环体2实现LED2、4、6后亮,循環体3实现LED1、3、5先灭,循环体4实现LED2、4、6后灭。分析LED1、3、5对应的引脚为7、5、3,故初始化引脚设定为7,减量应为2。所以第一个和第三个for循环应变更为for (intthisPin=7; thisPin>2; thisPin= thisPin-2)。LED2、4、6对应

的引脚为6、4、2,所以第二个和第四个for循环应变更为for ( thisPin=6; thisPin>1; thisPin= thisPin-2)。

(6)循环体模块五:LED从两边向中间亮,从两边向中间灭。模块五要求引脚7和2对应的LED先亮,引脚6和3对应的LED再亮,引脚5和4对应的LED最后亮,熄灭过程也是如此。程序编写可以对引脚逐个控制,先对引脚7和2输出高电平,延迟一定时间,再对引脚6和3输出高电平,延迟一定时间,最后对引脚5和4输出高电平。由于引脚7和2输出高电平的程序,顺序执行,间隔很短,眼睛看到的效果是引脚7和引脚2对应的LED同时变亮。对引脚设置低电平即可实现两边向中间熄灭。设定引脚7和2为高电平的过程可以参考以下程序,其他引脚设置程序相同:

int thisPin=7;

digitalWrite(thisPin,HIGH);

thisPin=2;

digitalWrite(thisPin,HIGH);

delay(timer);

(7)循环体模块六:随机一个LED闪烁,并在串口監视器上显示出引脚。根据题目要求,选择使用random随机函数。random语法格式random(Max)或random(Min,Max),由于引脚端口限制为2~7,所以此处选择random(Min,Max),返回值为Min和Max之间的随机数。随机数包含Min不包含Max,所以确定Min=2,Max=8,定义返回值引脚为高电平,此时LED亮,若为低电平,LED熄灭。在初始化中需要使用Serial类库函数begin()建立与串口监视器通信,在循环体中使用Serial类库函数println()向串口监视器输出需要显示的引脚。该模块程序编写参考以下内容:

int thisPin=random(2,8);

digitalWrite(thisPin,HIGH);

Serial.println(thisPin);       //初始化中需要加入程序“Serial.begin (9600);”设置通信波特率

delay(timer);                 //必须有一定的延迟时间

digitalWrite(thisPin,LOW);

delay(timer);

2  结  论

Arduino UNO控制多个LED在教学设计中采用项目实例化教学方法,教学过程中进行功能模块化设计辅助教学,利用教学反思手段拓展教学内容,培养学生创新创造能力,具体操作要求和注意事项如下所示:

(1)项目实例化教学即把教学内容形象化和实体化。学习各种编程语言都是建立在各种命令和函数基础之上,Arduino UNO也不例外。熟练掌握Arduino UNO的命令和函数是学好Arduino UNO的基础。在学习过程中,学会将命令和函数应用在实例中,通过验证实例深刻理解命令和函数,并观察其所实现的效果,有助于将抽象的命令和函数形象化、实体化。

(2)功能模块化设计,逻辑清晰,功能直观。初始化模块和不同循环体模块组合将实现不同的功能特效,模块化处理方法有助于加强对Arduino UNO控制多个LED整体认识和理解。

(3)举一反三,在源程序基础上进行引申和创新。Arduino UNO控制多个LED实现的特效绝不仅仅是文中提到的这些效果,采用不同的函数组合会实现多种不同的效果。学生在学习中善于将题目进行进一步的开发和探索,并观察实验效果,有助于加深对程序的理解,提升创新和创造能力。

Arduino UNO是一款能实时展现编程效果,将软硬件结合得非常好的实用工具。Arduino UNO开发板和套件组合能实现各种各样的实验,要注重在实验中检验学习理论,思考学习内容,总结学习方法,提升操作技能。

参考文献:

[1] 黄焕林,丁昊.从零开始学Arduino电子设计 [M].北京:机械工业出版社,2018.

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

[3] 谭浩强.C程序设计:第3版 [M].北京:清华大学出版社,2005.

[4] 彭秋洁,刘凯磊,康绍鹏,等.基于Arduino的多功能自动跟随行李箱设计 [J].物联网技术,2020,10(8):63-65+70.

作者简介:李娜(1984—),女,汉族,山东泰安人,教师,讲师,硕士研究生,研究方向:电气自动化;孟东晓(1980—),男,汉族,山东聊城人,维修经理,工程师,学士学位,研究方向:电气自动化。

猜你喜欢

模块化
用模块化思维打造组织
JGJ/T 435—2018施工现场模块化设施技术标准
大众MEB电动车模块化平台
模块化微流控系统与应用