基于Arduino的液晶声光万年历的设计与实现
2017-05-10张喜凤
张喜凤
(陕西国防工业职业技术学院电子信息学院,陕西西安,710300)
基于Arduino的液晶声光万年历的设计与实现
张喜凤
(陕西国防工业职业技术学院电子信息学院,陕西西安,710300)
针对Arduino平台日益广泛的应用,设计了液晶声光万年历系统。系统采用Arduino UNO R3作为主控板,采用1602液晶屏模块作为数值显示部分,采用DS3231模块提供时间、日期和温度数据,采用蜂鸣器和RGB LED发光管为闹钟和整点提示发出声光信号。通过系统软硬件功能验证和性能测试,设计的液晶声光万年历具备了时间、日期、星期和温度显示,以及声光闹钟和整点提示等实用功能,每周计时误差小于1秒。系统可以作为Arduino教学的典型项目应用于教学实践,也可以作为一个具有实用性的计时产品投入使用。
Arduino;液晶屏;万年历;DS3231
0 引言
Arduino是一款便捷灵活、方便上手的开源电子原型设计平台[1],近年来在全球范围内获得了快速的推广应用,成为新的硬件开发趋势。由于Arduino硬件原理图、电路图、IDE软件及核心库文件都是开源的,而且编程使用的wiring语言是对AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单的开发方式使得开发者可以更关注创意与实现,更快的完成自己的项目开发[2-4],节约了学习的成本,缩短了开发的周期。
因为Arduino的种种优势,越来越多的专业硬件开发者开始使用Arduino来开发项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域[5];大学里,电子信息、自动化、软件,甚至艺术类专业,也纷纷开设了Arduino相关课程。
首先回顾了Arduino平台的基本特性,然后设计了一种以Arduino UNO R3为主控板,由1602液晶屏显示数据的液晶声光万年历系统。该系统可以作为Arduino教学的典型项目应用于教学实践,也可以作为一个具有实用性的计时产品投入使用。
1 Arduino平台
Arduino平台由Arduino 硬件开发板和Arduino IDE 集成软件开发环境两部分组成[6]。Arduino 开发板是以Atmel 微处理器为核心微控制器的硬件系统电路板。软件程序(sketch)可以在IDE下编辑和编译[3],通过USB接口可以上传到Arduino1板,实现对硬件板的编程,硬件会自动执行写入的软件。
Arduino的主要功能特点有:
(1)软硬件开源,开发接口可以免费获得,并根据需要自行修改;
(2)使用低价格微处理器(单片机),如 ATMEGA8和ATMEGA128等[7],可以用USB 供电,也可以外接直流电源;
(3)自带 bootloader程序,也支持 ISP 线上烧入,将固件烧入芯片。Bootloader程序是系统上电后运行的代码,它对Arduino 就像 BIOS 对于 PC 机一样;
(4)扩展性强,Arduino提供了丰富的接口,包括 USB、I2C、SPI等,可插入传感器装置、无线通信装置,插入的感应装置可以是获得外界的光、温度、湿度、距离等信息,无线通信装置可方便地与其他设备进行无线通信;
(5)Arduino的缺点在于它缺乏人机界面,虽然可以通过外接蓝牙、WIFI 等连接无线网络,但用户无法方便地操作,需要借助其他平台进行控制和处理。
Arduino平台有自己的一套集成开发环境(Arduino IDE)[5],是与硬件平台相匹配的集成软件开发环境,基于Eclipse,开发界面如图1所示。它是由Java、Processing、avr-gcc等软件写成,跨平台兼容,可以通过它对 Arduino板进行编程,编程语言采用 C++,被 IDE 传递给AVRGCC编译器转换成机器码得以执行[6]。Arduino 官方自带的内容包括语言、函数、库等,它把 AVR单片机相关的设置都参数化了,开发者不必了解其底层的编写就可以借此开发项目。用户可以通过 IDE 用 C++编写自己的的程序(sketch),编译通过后下载到开发板上由开发板执行。
本文设计的液晶声光万年历使用Arduino UNO R3开发板作为主控板,是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板,应用广泛。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。
图1 Arduino IDE开发环境界面
图2 1602液晶屏外观和尺寸图
2 1602液晶屏
1602液晶显示屏是一种常用的工业字符型液晶,能够同时显示2行,每行16个字符,一共32个字符[8]。1602液晶屏是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,同时,由于间隔的存在,所以不能很好地显示图形。1602液晶屏的外观和尺寸图如图2所示。
目前1602液晶屏绝大多数是由HD44780液晶驱动芯片控制的[9],针对HD44780写的液晶控制程序可以很方便地应用于市面上大部分的字符z型液晶,具有良好的通用性。
1602液晶屏具有16个引脚,具体的引脚功能如表1所示。
表1 1602液晶屏引脚功能表
3 液晶声光万年历的硬件系统设计
本文设计的液晶声光万年历系统结构框图如图3所示,使用fritzing软件绘制的系统接线示意图如图4所示。系统各部分的主要功能如下。
图3 万年历系统结构框图
电源模块:由于Arduino UNO R3可以使用USB数据端口的5V电源供电,也可以使用独立的电源接口输入5V~9V电源供电。本文设计的液晶声光万年历使用9V干电池作为电源,通过独立电源端口输入。或者也可以使用移动电源通过USB数据端口供电。使用移动电源,或者9V干电池作为电源,目的都在于使液晶声光万年历可以独立工作,为进一步改进系统,使之成为可以独立运行的产品提供了便利。
图4 液晶声光万年历系统接线示意图
DS3231授时模块:该模块使用独立电池供电,续航时间超过2年,经校对后,可以提供年、月、日、时、分、秒计时数据,并能自动计算闰年,年计时误差小于1分钟[10]。芯片内部的控制电路可实现自动电源检测,并管理主电源和备用电源(即独立电池)之间的电源切换。如果主电源掉电,DS3231仍可继续提供精确的计时,性能不受影响。当主电源重新加电或电压值返回到容许范围内时,片上复位功能可重新启动系统授时输出。另外DS3231芯片内部有一个数字温度计单元,可以提供精度为±3℃的温度检测数据。
主控部分:系统采用配备了ATMEGA328单片机的Arduino UNO R3开发板作为主控板。主控部分的主要功能包括:接收DS3231授时模块的计时数据和温度检测数据,控制1602液晶屏的数据显示,控制蜂鸣器发出声音提示信号,控制RGB LED发出灯光提示信号。具体而言,主控板每隔固定的时钟周期0.1秒,从DS3231授时模块读取一次计时数据,然后对该数据进行判决。如果时间到达设定的闹钟时间或者每个小时的整点时间,则蜂鸣器和RGB LED发出一分钟的声光提示信号。
1602液晶模块:该液晶屏分为上下两行分别显示数据,第一行的前8个字符用于显示日期数据“年-月-日”,第9个字符空格,第10至12个字符显示“DAY”,第13个字符用数字1~7表示星期一至星期日;第二行前8个字符用于显示计时数据“时:分:秒”,第9个字符空格,第10至13个字符显示“TEMP”,第14至15个字符显示温度检测数据,第16个字符显示“C”代表温度单位摄氏度。需要说明的是,由于万年历系统需要显示的数据量有限,而且Arduino UNO R3主控板的数字I/O接口资源有限,所以液晶屏使用的是4位通信方式,而不是8位通信方式,这样就只需要使用D4~D7数据I/O端口,而不是全部D0~D7数据I/O端口,这样就可以把节约出来的四个数字I/O端口用于控制蜂鸣器和RGB LED。
图5 辉光管万年历整理照片
声光提示部分:系统使用蜂鸣器提供声音提示功能,采用PWM信号合成声音信号,获得连续的“滴滴滴”声响。系统使用一个5mm共阴极RGB LED发光管提供光线提示信号。RGB LED发光管是在一个封装内组装了红、绿、蓝三个颜色的LED,三色LED共用一个阴极或者阳极。当系统时间到达设定的闹钟时间或者每小时整点时,除了蜂鸣器会响一分钟外,RGB LED会以10Hz频率闪烁白光信号。正常计时过程中,RGB LED会根据当前秒计时的十位数字,在一分钟内依次显示红、黄、绿、青、蓝、紫六种颜色,每种颜色持续10秒。上述六种颜色,红、绿、蓝为RGB LED发光管的本色,黄、青、紫则分别是红绿、绿蓝、蓝红的合成色。
4 系统软件设计
为了实现系统的计时、闹钟和整点提示等功能,本文在Arduino IDE开发环境下完成了系统软件设计。系统软件流程图如图6所示。软件程序的核心部分是使用IF语句选择结构设计闹钟和整点提示。
IF语句选择结构的格式如下:
If(表达式) 语句项;
Else 语句项;
如果表达式取值真(除 0以外的任何值),则执行if的语句项;否则,如果else存在的话,就执行else的语句项。每次只会执行if或else中的某一个分支。语句项可以是单独的一条语句、也可以是多条语句组成的语句块。if语句可以嵌套,有多个if语句时,else与最近的一个配对。对于多分支语句,可以使用if ... else if ... else if ... else...的多重判断结构。
另外,对于正常计时状态时的灯光信号,使用switch多分支选择语句进行设计。
Switch语句基本格式如下:
switch(表达式)
{
case 常数 1:
语句项 1
break;
case常数 2:
语句项 2
break;
…………
default:
语句项
}
根据case语句中所给出的常量值,按顺序对表达式的值进行测试,当常量与表达式值相等时,就执行这个常量所在的case后的语句,直到break语句,或者switch的末尾为止。
若没有一个常量与表达式值相符,则执行 default后的语句。 default是可选的,如果它不存在,并且所有的常量与表达式值都不相符,那就不做任何处理。
图6 软件流程图
5 系统功能测试
系统硬件组装调试和软件编译下载完成后,针对系统各设计功能要求尽心了测试,经反复测试,系统闹钟和整点提示功能运行良好,系统计时数据精确,每周计时误差小于1秒,温度数据采集运行正常。为了检定系统温度检测的精度,使用工业级精度的WS2080A温湿度表进行了对比测试,测试结果如表2所示。
表2 温度对比测试数据
6 小结
本文设计的液晶声光万年历经硬件验证,具备了时间显示、日期显示、星期显示、温度显示等设计功能。设计液晶声光万年历的目的在于,使用arduino平台设计一个具有实用性的典型应用案例,为《电子产品设计与制作》等相关课程提供教学范例,从而在实际使用和教学推广方面获得应用。目前该液晶声光万年历有待进一步探讨的问题在于,其一,目前系统连线使用的是面包板和杜邦线作为连线方式,这种方式利于原型开发,但并不稳固,需要进一步设计专用PCB来制作焊接安装的万年历系统,从而形成实用化的产品。其二,受限于Arduino UNO R3开发板的接口资源,并未提供外部时间校准功能,可以更换接口资源更丰富的开发板,或者使用I2C接口的液晶屏来节约系统所需I/O接口资源,从而可以接入键盘或红外遥控器来实现外部时间校准。其三,目前的声光提示分别使用的是蜂鸣器和单个RGB LED,可以引入拟合音乐提高声音提示信号的娱乐性,增加更多的LED灯获得夜灯功能,提高液晶声光万年历的实用性。
[1]杨继志,郭敬. Arduino的互动产品平台创新设计[J]. 单片机与嵌入式系统应用. 2012,04:39-41.
[2]张子木.基于Arduino的物联网接入技术的研究.北京工业大学硕士论文.2015.06
[3]崔阳,张维华,白云峰. 一种基于Arduino的智能家居控制系统[J]. 电子技术应用. 2014,04:123-25
[4]卞云松. 基于Arduino单片机的避障小车机器人[J]. 自动化技术与应用. 2014,01:16-19
[5] Massimo Banzi. Getting Started with Arduino. Edition 2. O’REILLY, Beijing. 2011.
[6]蔡睿妍. Arduino的原理及应用[J].电子设计工程[J].2012(8)
[7] 孙一帆,厉复新,赵睿哲等. 基于Arduino控制板的多功能数字万年历设计[J]. 电气自动化. 2016,05:29-30
[8] 林嘉. 基于89S52的LCD1602程序设计[J]. 电脑知识与技术.2012,26:6376-6378
[9] 赵亮. 跟我学51单片机(七)——LCD1602液晶显示模块[J]. 电子制作.2011,07:74-77
[10] 徐健,陈永冰,刘勇等. DS3231在嵌入式环境文件系统中的应用[J]. 单片机与嵌入式系统应用.2014,11:15-17.
The Design of the Liquid Crystal Acousto-optic Calendar Based on Arduino
Zhang Xifeng
(Electronics Engineer Department of ShaanXi Institute of Technology, Xi’an Shanxi ,710300)
With the widespread application of Arduino platform , LCD acousto-optic calendar system are designed. The Arduino UNO R3 are used as the main control board. 1602 LCD module are adopted as a numerical display section. DS3231 modules provide time, date and temperature data, while buzzer and RGB LED tube for the alarm clock and tip acousto-optic signal sent by the hour. Through the system hardware and software function verification and performance test, the design of liquid crystal light calendar with the time, date, week and temperature display, and practical function such as sound and light alarm, and prompt the hour a week timing error is less than 1 second. System can be used as a typical project Arduino teaching in teaching practice, also can be used as a practical timing products.
Arduino; Liquid Crystal Display; Calendar; DS3231
TM910.6 ;
A
本文由陕西国防工业职业技术学院研究与开发项目(GFY-16-28)“基于arduino的辉光管万年历的设计与实现”项目提供基金支持。