張喜鳳
(陜西國防工業(yè)職業(yè)技術(shù)學(xué)院電子信息學(xué)院,陜西西安,710300)
基于Arduino的液晶聲光萬年歷的設(shè)計(jì)與實(shí)現(xiàn)
張喜鳳
(陜西國防工業(yè)職業(yè)技術(shù)學(xué)院電子信息學(xué)院,陜西西安,710300)
針對Arduino平臺日益廣泛的應(yīng)用,設(shè)計(jì)了液晶聲光萬年歷系統(tǒng)。系統(tǒng)采用Arduino UNO R3作為主控板,采用1602液晶屏模塊作為數(shù)值顯示部分,采用DS3231模塊提供時間、日期和溫度數(shù)據(jù),采用蜂鳴器和RGB LED發(fā)光管為鬧鐘和整點(diǎn)提示發(fā)出聲光信號。通過系統(tǒng)軟硬件功能驗(yàn)證和性能測試,設(shè)計(jì)的液晶聲光萬年歷具備了時間、日期、星期和溫度顯示,以及聲光鬧鐘和整點(diǎn)提示等實(shí)用功能,每周計(jì)時誤差小于1秒。系統(tǒng)可以作為Arduino教學(xué)的典型項(xiàng)目應(yīng)用于教學(xué)實(shí)踐,也可以作為一個具有實(shí)用性的計(jì)時產(chǎn)品投入使用。
Arduino;液晶屏;萬年歷;DS3231
Arduino是一款便捷靈活、方便上手的開源電子原型設(shè)計(jì)平臺[1],近年來在全球范圍內(nèi)獲得了快速的推廣應(yīng)用,成為新的硬件開發(fā)趨勢。由于Arduino硬件原理圖、電路圖、IDE軟件及核心庫文件都是開源的,而且編程使用的wiring語言是對AVRGCC庫的二次封裝,不需要太多的單片機(jī)基礎(chǔ)、編程基礎(chǔ),簡單的開發(fā)方式使得開發(fā)者可以更關(guān)注創(chuàng)意與實(shí)現(xiàn),更快的完成自己的項(xiàng)目開發(fā)[2-4],節(jié)約了學(xué)習(xí)的成本,縮短了開發(fā)的周期。
因?yàn)锳rduino的種種優(yōu)勢,越來越多的專業(yè)硬件開發(fā)者開始使用Arduino來開發(fā)項(xiàng)目、產(chǎn)品;越來越多的軟件開發(fā)者使用Arduino進(jìn)入硬件、物聯(lián)網(wǎng)等開發(fā)領(lǐng)域[5];大學(xué)里,電子信息、自動化、軟件,甚至藝術(shù)類專業(yè),也紛紛開設(shè)了Arduino相關(guān)課程。
首先回顧了Arduino平臺的基本特性,然后設(shè)計(jì)了一種以Arduino UNO R3為主控板,由1602液晶屏顯示數(shù)據(jù)的液晶聲光萬年歷系統(tǒng)。該系統(tǒng)可以作為Arduino教學(xué)的典型項(xiàng)目應(yīng)用于教學(xué)實(shí)踐,也可以作為一個具有實(shí)用性的計(jì)時產(chǎn)品投入使用。
Arduino平臺由Arduino 硬件開發(fā)板和Arduino IDE 集成軟件開發(fā)環(huán)境兩部分組成[6]。Arduino 開發(fā)板是以Atmel 微處理器為核心微控制器的硬件系統(tǒng)電路板。軟件程序(sketch)可以在IDE下編輯和編譯[3],通過USB接口可以上傳到Arduino1板,實(shí)現(xiàn)對硬件板的編程,硬件會自動執(zhí)行寫入的軟件。
Arduino的主要功能特點(diǎn)有:
(1)軟硬件開源,開發(fā)接口可以免費(fèi)獲得,并根據(jù)需要自行修改;
(2)使用低價格微處理器(單片機(jī)),如 ATMEGA8和ATMEGA128等[7],可以用USB 供電,也可以外接直流電源;
(3)自帶 bootloader程序,也支持 ISP 線上燒入,將固件燒入芯片。Bootloader程序是系統(tǒng)上電后運(yùn)行的代碼,它對Arduino 就像 BIOS 對于 PC 機(jī)一樣;
(4)擴(kuò)展性強(qiáng),Arduino提供了豐富的接口,包括 USB、I2C、SPI等,可插入傳感器裝置、無線通信裝置,插入的感應(yīng)裝置可以是獲得外界的光、溫度、濕度、距離等信息,無線通信裝置可方便地與其他設(shè)備進(jìn)行無線通信;
(5)Arduino的缺點(diǎn)在于它缺乏人機(jī)界面,雖然可以通過外接藍(lán)牙、WIFI 等連接無線網(wǎng)絡(luò),但用戶無法方便地操作,需要借助其他平臺進(jìn)行控制和處理。
Arduino平臺有自己的一套集成開發(fā)環(huán)境(Arduino IDE)[5],是與硬件平臺相匹配的集成軟件開發(fā)環(huán)境,基于Eclipse,開發(fā)界面如圖1所示。它是由Java、Processing、avr-gcc等軟件寫成,跨平臺兼容,可以通過它對 Arduino板進(jìn)行編程,編程語言采用 C++,被 IDE 傳遞給AVRGCC編譯器轉(zhuǎn)換成機(jī)器碼得以執(zhí)行[6]。Arduino 官方自帶的內(nèi)容包括語言、函數(shù)、庫等,它把 AVR單片機(jī)相關(guān)的設(shè)置都參數(shù)化了,開發(fā)者不必了解其底層的編寫就可以借此開發(fā)項(xiàng)目。用戶可以通過 IDE 用 C++編寫自己的的程序(sketch),編譯通過后下載到開發(fā)板上由開發(fā)板執(zhí)行。
本文設(shè)計(jì)的液晶聲光萬年歷使用Arduino UNO R3開發(fā)板作為主控板,是Arduino USB接口系列的最新版本,作為Arduino平臺的參考標(biāo)準(zhǔn)模板,應(yīng)用廣泛。UNO的處理器核心是ATmega328,同時具有14路數(shù)字輸入/輸出口(其中6路可作為PWM輸出),6路模擬輸入,一個16MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSP header和一個復(fù)位按鈕。

圖1 Arduino IDE開發(fā)環(huán)境界面


圖2 1602液晶屏外觀和尺寸圖
1602液晶顯示屏是一種常用的工業(yè)字符型液晶,能夠同時顯示2行,每行16個字符,一共32個字符[8]。1602液晶屏是一種專門用來顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶模塊。它由若干個5X7或者5X11等點(diǎn)陣字符位組成,每個點(diǎn)陣字符位都可以顯示一個字符,每位之間有一個點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,同時,由于間隔的存在,所以不能很好地顯示圖形。1602液晶屏的外觀和尺寸圖如圖2所示。
目前1602液晶屏絕大多數(shù)是由HD44780液晶驅(qū)動芯片控制的[9],針對HD44780寫的液晶控制程序可以很方便地應(yīng)用于市面上大部分的字符z型液晶,具有良好的通用性。
1602液晶屏具有16個引腳,具體的引腳功能如表1所示。

表1 1602液晶屏引腳功能表
本文設(shè)計(jì)的液晶聲光萬年歷系統(tǒng)結(jié)構(gòu)框圖如圖3所示,使用fritzing軟件繪制的系統(tǒng)接線示意圖如圖4所示。系統(tǒng)各部分的主要功能如下。

圖3 萬年歷系統(tǒng)結(jié)構(gòu)框圖
電源模塊:由于Arduino UNO R3可以使用USB數(shù)據(jù)端口的5V電源供電,也可以使用獨(dú)立的電源接口輸入5V~9V電源供電。本文設(shè)計(jì)的液晶聲光萬年歷使用9V干電池作為電源,通過獨(dú)立電源端口輸入。或者也可以使用移動電源通過USB數(shù)據(jù)端口供電。使用移動電源,或者9V干電池作為電源,目的都在于使液晶聲光萬年歷可以獨(dú)立工作,為進(jìn)一步改進(jìn)系統(tǒng),使之成為可以獨(dú)立運(yùn)行的產(chǎn)品提供了便利。

圖4 液晶聲光萬年歷系統(tǒng)接線示意圖
DS3231授時模塊:該模塊使用獨(dú)立電池供電,續(xù)航時間超過2年,經(jīng)校對后,可以提供年、月、日、時、分、秒計(jì)時數(shù)據(jù),并能自動計(jì)算閏年,年計(jì)時誤差小于1分鐘[10]。芯片內(nèi)部的控制電路可實(shí)現(xiàn)自動電源檢測,并管理主電源和備用電源(即獨(dú)立電池)之間的電源切換。如果主電源掉電,DS3231仍可繼續(xù)提供精確的計(jì)時,性能不受影響。當(dāng)主電源重新加電或電壓值返回到容許范圍內(nèi)時,片上復(fù)位功能可重新啟動系統(tǒng)授時輸出。另外DS3231芯片內(nèi)部有一個數(shù)字溫度計(jì)單元,可以提供精度為±3℃的溫度檢測數(shù)據(jù)。
主控部分:系統(tǒng)采用配備了ATMEGA328單片機(jī)的Arduino UNO R3開發(fā)板作為主控板。主控部分的主要功能包括:接收DS3231授時模塊的計(jì)時數(shù)據(jù)和溫度檢測數(shù)據(jù),控制1602液晶屏的數(shù)據(jù)顯示,控制蜂鳴器發(fā)出聲音提示信號,控制RGB LED發(fā)出燈光提示信號。具體而言,主控板每隔固定的時鐘周期0.1秒,從DS3231授時模塊讀取一次計(jì)時數(shù)據(jù),然后對該數(shù)據(jù)進(jìn)行判決。如果時間到達(dá)設(shè)定的鬧鐘時間或者每個小時的整點(diǎn)時間,則蜂鳴器和RGB LED發(fā)出一分鐘的聲光提示信號。
1602液晶模塊:該液晶屏分為上下兩行分別顯示數(shù)據(jù),第一行的前8個字符用于顯示日期數(shù)據(jù)“年-月-日”,第9個字符空格,第10至12個字符顯示“DAY”,第13個字符用數(shù)字1~7表示星期一至星期日;第二行前8個字符用于顯示計(jì)時數(shù)據(jù)“時:分:秒”,第9個字符空格,第10至13個字符顯示“TEMP”,第14至15個字符顯示溫度檢測數(shù)據(jù),第16個字符顯示“C”代表溫度單位攝氏度。需要說明的是,由于萬年歷系統(tǒng)需要顯示的數(shù)據(jù)量有限,而且Arduino UNO R3主控板的數(shù)字I/O接口資源有限,所以液晶屏使用的是4位通信方式,而不是8位通信方式,這樣就只需要使用D4~D7數(shù)據(jù)I/O端口,而不是全部D0~D7數(shù)據(jù)I/O端口,這樣就可以把節(jié)約出來的四個數(shù)字I/O端口用于控制蜂鳴器和RGB LED。

圖5 輝光管萬年歷整理照片
聲光提示部分:系統(tǒng)使用蜂鳴器提供聲音提示功能,采用PWM信號合成聲音信號,獲得連續(xù)的“滴滴滴”聲響。系統(tǒng)使用一個5mm共陰極RGB LED發(fā)光管提供光線提示信號。RGB LED發(fā)光管是在一個封裝內(nèi)組裝了紅、綠、藍(lán)三個顏色的LED,三色LED共用一個陰極或者陽極。當(dāng)系統(tǒng)時間到達(dá)設(shè)定的鬧鐘時間或者每小時整點(diǎn)時,除了蜂鳴器會響一分鐘外,RGB LED會以10Hz頻率閃爍白光信號。正常計(jì)時過程中,RGB LED會根據(jù)當(dāng)前秒計(jì)時的十位數(shù)字,在一分鐘內(nèi)依次顯示紅、黃、綠、青、藍(lán)、紫六種顏色,每種顏色持續(xù)10秒。上述六種顏色,紅、綠、藍(lán)為RGB LED發(fā)光管的本色,黃、青、紫則分別是紅綠、綠藍(lán)、藍(lán)紅的合成色。
為了實(shí)現(xiàn)系統(tǒng)的計(jì)時、鬧鐘和整點(diǎn)提示等功能,本文在Arduino IDE開發(fā)環(huán)境下完成了系統(tǒng)軟件設(shè)計(jì)。系統(tǒng)軟件流程圖如圖6所示。軟件程序的核心部分是使用IF語句選擇結(jié)構(gòu)設(shè)計(jì)鬧鐘和整點(diǎn)提示。
IF語句選擇結(jié)構(gòu)的格式如下:
If(表達(dá)式) 語句項(xiàng);
Else 語句項(xiàng);
如果表達(dá)式取值真(除 0以外的任何值),則執(zhí)行if的語句項(xiàng);否則,如果else存在的話,就執(zhí)行else的語句項(xiàng)。每次只會執(zhí)行if或else中的某一個分支。語句項(xiàng)可以是單獨(dú)的一條語句、也可以是多條語句組成的語句塊。if語句可以嵌套,有多個if語句時,else與最近的一個配對。對于多分支語句,可以使用if ... else if ... else if ... else...的多重判斷結(jié)構(gòu)。
另外,對于正常計(jì)時狀態(tài)時的燈光信號,使用switch多分支選擇語句進(jìn)行設(shè)計(jì)。
Switch語句基本格式如下:
switch(表達(dá)式)
{
case 常數(shù) 1:
語句項(xiàng) 1
break;
case常數(shù) 2:
語句項(xiàng) 2
break;
…………
default:
語句項(xiàng)
}
根據(jù)case語句中所給出的常量值,按順序?qū)Ρ磉_(dá)式的值進(jìn)行測試,當(dāng)常量與表達(dá)式值相等時,就執(zhí)行這個常量所在的case后的語句,直到break語句,或者switch的末尾為止。
若沒有一個常量與表達(dá)式值相符,則執(zhí)行 default后的語句。 default是可選的,如果它不存在,并且所有的常量與表達(dá)式值都不相符,那就不做任何處理。

圖6 軟件流程圖
系統(tǒng)硬件組裝調(diào)試和軟件編譯下載完成后,針對系統(tǒng)各設(shè)計(jì)功能要求盡心了測試,經(jīng)反復(fù)測試,系統(tǒng)鬧鐘和整點(diǎn)提示功能運(yùn)行良好,系統(tǒng)計(jì)時數(shù)據(jù)精確,每周計(jì)時誤差小于1秒,溫度數(shù)據(jù)采集運(yùn)行正常。為了檢定系統(tǒng)溫度檢測的精度,使用工業(yè)級精度的WS2080A溫濕度表進(jìn)行了對比測試,測試結(jié)果如表2所示。

表2 溫度對比測試數(shù)據(jù)
本文設(shè)計(jì)的液晶聲光萬年歷經(jīng)硬件驗(yàn)證,具備了時間顯示、日期顯示、星期顯示、溫度顯示等設(shè)計(jì)功能。設(shè)計(jì)液晶聲光萬年歷的目的在于,使用arduino平臺設(shè)計(jì)一個具有實(shí)用性的典型應(yīng)用案例,為《電子產(chǎn)品設(shè)計(jì)與制作》等相關(guān)課程提供教學(xué)范例,從而在實(shí)際使用和教學(xué)推廣方面獲得應(yīng)用。目前該液晶聲光萬年歷有待進(jìn)一步探討的問題在于,其一,目前系統(tǒng)連線使用的是面包板和杜邦線作為連線方式,這種方式利于原型開發(fā),但并不穩(wěn)固,需要進(jìn)一步設(shè)計(jì)專用PCB來制作焊接安裝的萬年歷系統(tǒng),從而形成實(shí)用化的產(chǎn)品。其二,受限于Arduino UNO R3開發(fā)板的接口資源,并未提供外部時間校準(zhǔn)功能,可以更換接口資源更豐富的開發(fā)板,或者使用I2C接口的液晶屏來節(jié)約系統(tǒng)所需I/O接口資源,從而可以接入鍵盤或紅外遙控器來實(shí)現(xiàn)外部時間校準(zhǔn)。其三,目前的聲光提示分別使用的是蜂鳴器和單個RGB LED,可以引入擬合音樂提高聲音提示信號的娛樂性,增加更多的LED燈獲得夜燈功能,提高液晶聲光萬年歷的實(shí)用性。
[1]楊繼志,郭敬. Arduino的互動產(chǎn)品平臺創(chuàng)新設(shè)計(jì)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用. 2012,04:39-41.
[2]張子木.基于Arduino的物聯(lián)網(wǎng)接入技術(shù)的研究.北京工業(yè)大學(xué)碩士論文.2015.06
[3]崔陽,張維華,白云峰. 一種基于Arduino的智能家居控制系統(tǒng)[J]. 電子技術(shù)應(yīng)用. 2014,04:123-25
[4]卞云松. 基于Arduino單片機(jī)的避障小車機(jī)器人[J]. 自動化技術(shù)與應(yīng)用. 2014,01:16-19
[5] Massimo Banzi. Getting Started with Arduino. Edition 2. O’REILLY, Beijing. 2011.
[6]蔡睿妍. Arduino的原理及應(yīng)用[J].電子設(shè)計(jì)工程[J].2012(8)
[7] 孫一帆,厲復(fù)新,趙睿哲等. 基于Arduino控制板的多功能數(shù)字萬年歷設(shè)計(jì)[J]. 電氣自動化. 2016,05:29-30
[8] 林嘉. 基于89S52的LCD1602程序設(shè)計(jì)[J]. 電腦知識與技術(shù).2012,26:6376-6378
[9] 趙亮. 跟我學(xué)51單片機(jī)(七)——LCD1602液晶顯示模塊[J]. 電子制作.2011,07:74-77
[10] 徐健,陳永冰,劉勇等. DS3231在嵌入式環(huán)境文件系統(tǒng)中的應(yīng)用[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用.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
本文由陜西國防工業(yè)職業(yè)技術(shù)學(xué)院研究與開發(fā)項(xiàng)目(GFY-16-28)“基于arduino的輝光管萬年歷的設(shè)計(jì)與實(shí)現(xiàn)”項(xiàng)目提供基金支持。