張喜鳳
(陜西國防工業職業技術學院電子信息學院,陜西西安,710300)
基于Arduino的液晶聲光萬年歷的設計與實現
張喜鳳
(陜西國防工業職業技術學院電子信息學院,陜西西安,710300)
針對Arduino平臺日益廣泛的應用,設計了液晶聲光萬年歷系統。系統采用Arduino UNO R3作為主控板,采用1602液晶屏模塊作為數值顯示部分,采用DS3231模塊提供時間、日期和溫度數據,采用蜂鳴器和RGB LED發光管為鬧鐘和整點提示發出聲光信號。通過系統軟硬件功能驗證和性能測試,設計的液晶聲光萬年歷具備了時間、日期、星期和溫度顯示,以及聲光鬧鐘和整點提示等實用功能,每周計時誤差小于1秒。系統可以作為Arduino教學的典型項目應用于教學實踐,也可以作為一個具有實用性的計時產品投入使用。
Arduino;液晶屏;萬年歷;DS3231
Arduino是一款便捷靈活、方便上手的開源電子原型設計平臺[1],近年來在全球范圍內獲得了快速的推廣應用,成為新的硬件開發趨勢。由于Arduino硬件原理圖、電路圖、IDE軟件及核心庫文件都是開源的,而且編程使用的wiring語言是對AVRGCC庫的二次封裝,不需要太多的單片機基礎、編程基礎,簡單的開發方式使得開發者可以更關注創意與實現,更快的完成自己的項目開發[2-4],節約了學習的成本,縮短了開發的周期。
因為Arduino的種種優勢,越來越多的專業硬件開發者開始使用Arduino來開發項目、產品;越來越多的軟件開發者使用Arduino進入硬件、物聯網等開發領域[5];大學里,電子信息、自動化、軟件,甚至藝術類專業,也紛紛開設了Arduino相關課程。
首先回顧了Arduino平臺的基本特性,然后設計了一種以Arduino UNO R3為主控板,由1602液晶屏顯示數據的液晶聲光萬年歷系統。該系統可以作為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液晶屏外觀和尺寸圖
1602液晶顯示屏是一種常用的工業字符型液晶,能夠同時顯示2行,每行16個字符,一共32個字符[8]。1602液晶屏是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,同時,由于間隔的存在,所以不能很好地顯示圖形。1602液晶屏的外觀和尺寸圖如圖2所示。
目前1602液晶屏絕大多數是由HD44780液晶驅動芯片控制的[9],針對HD44780寫的液晶控制程序可以很方便地應用于市面上大部分的字符z型液晶,具有良好的通用性。
1602液晶屏具有16個引腳,具體的引腳功能如表1所示。

表1 1602液晶屏引腳功能表
本文設計的液晶聲光萬年歷系統結構框圖如圖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發光管的本色,黃、青、紫則分別是紅綠、綠藍、藍紅的合成色。
為了實現系統的計時、鬧鐘和整點提示等功能,本文在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 軟件流程圖
系統硬件組裝調試和軟件編譯下載完成后,針對系統各設計功能要求盡心了測試,經反復測試,系統鬧鐘和整點提示功能運行良好,系統計時數據精確,每周計時誤差小于1秒,溫度數據采集運行正常。為了檢定系統溫度檢測的精度,使用工業級精度的WS2080A溫濕度表進行了對比測試,測試結果如表2所示。

表2 溫度對比測試數據
本文設計的液晶聲光萬年歷經硬件驗證,具備了時間顯示、日期顯示、星期顯示、溫度顯示等設計功能。設計液晶聲光萬年歷的目的在于,使用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的輝光管萬年歷的設計與實現”項目提供基金支持。