武漢晴川學(xué)院 方 潔 蔡 璇
本設(shè)計采用ARM架構(gòu)的STM32F103C8T6芯片與藍牙模塊實現(xiàn)了一個能夠通過藍牙控制并擁有65級亮度控制的智能臺燈。通過藍牙或者按鈕進行控制,使臺燈具有4種照明模式:普通照明模式,手動調(diào)節(jié)照明亮度;感知照明模式,臺燈的亮度會根據(jù)環(huán)境光的亮度變化而變化;睡眠模式,臺燈會根據(jù)時間變得越來越暗;用戶自定義模式,用戶通過預(yù)設(shè)定好的一些指令來控制臺燈的照明行為,從而實現(xiàn)更加豐富的照明功能。
引言:臺燈是我們?nèi)粘I钪斜夭豢缮俚囊环N照明工具,在智能家居流行的時代,臺燈的功能應(yīng)該不僅僅只局限于照明。我們也可以將臺燈加入物聯(lián)網(wǎng)中,提供更加便利的現(xiàn)代生活。本次智能臺燈設(shè)計主要圍繞藍牙模塊的實現(xiàn),通過臺燈與其他藍牙設(shè)備,例如手機的鏈接,提供更加智能的照明功能,通過藍牙控制臺燈的亮度與明滅,讓人們在夜晚的時候不需要去尋找開關(guān),只需要打開手機APP即可開燈,另外,臺燈還具有多種照明模式,滿足在不同條件下的照明需求,臺燈的亮度會根據(jù)環(huán)境光照來自動調(diào)節(jié),既可以節(jié)能,也能滿足照明需求。當(dāng)然還可以支持睡眠模式,臺燈的亮度會漸暗,特別適合兒童對漆黑的恐懼感,也不會影響其睡眠質(zhì)量。還有自定義的可編程照明功能,由用戶來對臺燈照明條件進行簡單編程,滿足用戶的多種需求。希望此次設(shè)計的智能臺燈能夠完全融入人們的生活,為智能生活帶來實惠、節(jié)能、高效的照明。
本臺燈的方案設(shè)計使用4個按鈕采用GPIO中斷方式控制整個系統(tǒng),分別是控制開關(guān)、亮度增加、亮度減少、模式選擇。并采用USART串口方式來與藍牙模塊通信,藍牙模塊在進入“已鏈接”狀態(tài)時,會進入透傳模式(杜春雷.ARM體系結(jié)構(gòu)與編程(第2版)[M].北京:清華大學(xué)出版社,2015.),讓系統(tǒng)與其他智能設(shè)備通信。采用STM32自帶的ADC轉(zhuǎn)換器將光敏模塊的輸出電壓轉(zhuǎn)換為亮度信息,并控制照明系統(tǒng)的亮度。而照明亮度控制電路采用TLC5615芯片提供不同的亮度信號給照明模塊,系統(tǒng)會使用
串口驅(qū)動TLC5615芯片,使TLC5615芯片輸出不同的高低電壓來控制照明模塊的亮度。由于TLC5615芯片的輸出電流有大小限制,直連照明模塊會導(dǎo)致LED燈珠亮度不足,所以在照明模塊中還加入了S8050三極管來驅(qū)動LED燈珠,達到高亮度的照明需求。
圖1所示是本設(shè)計的總原理圖,整個設(shè)計由6個部分組成,分別STM32核心板、光敏電阻模塊、TLC5615 DAC轉(zhuǎn)換器、照明模塊、藍牙模塊與4個按鈕組成的控制模塊。
圖1 設(shè)計總原理圖
考慮到照明模塊故障需要隨時更換,并且照明模塊需要能夠隨時更換照明目標(biāo)等需求,所以采用了照明模塊與核心控制模塊分離的形式。并且由于臺燈用于閱讀,作業(yè)等場景比較多,所以本課題選用了色溫在2800-3300K的暖光LED燈珠。具體的燈珠參數(shù)如表1所示。
表1 照明LED燈珠參數(shù)
另外由于TLC5615有最大電流限制,不足以驅(qū)動LED燈珠,所以需要一個S8050三極管來驅(qū)動LED燈珠,將S8050的集電極接地,基極鏈接TLC5615的輸出口,發(fā)射極鏈接LED燈珠負(fù)極,即可驅(qū)動LED燈珠(劉書生.藍牙技術(shù)應(yīng)用[M].遼寧:東北大學(xué)出版社,2011.)。圖2所示是照明模塊的原理圖,將STM32輸出的亮度信號的數(shù)字量通過TLC5615的數(shù)模轉(zhuǎn)換,轉(zhuǎn)換為模擬量,再通過三極管的放大,驅(qū)動LED燈珠的照明。這樣就可以通過STM32控制燈珠的亮度。
在系統(tǒng)中我們加入了4個機械按鈕,來保證在沒有藍牙設(shè)備的情況下控制照明功能,按鈕控制模塊通過STM32的4個IO口鏈接起來,并使用EXTI中斷方式(華成英,童詩白.模擬電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2011.)處理按鈕的信號。這4個按鈕分別采用PB6,PB7,PB8,PB9四個IO口,并使用一個10K的上拉電阻(陳志旺.STM32嵌入式微控制器快速上手[M].北京:電子工業(yè)出版社,2012.),當(dāng)按鈕斷開時為高電平,當(dāng)按鈕按下時會觸發(fā)一個下降沿,所以采用上拉輸入的方式初始化IO口,并啟用EXTI的6,7,8,9線中斷,觸發(fā)方式為下降沿。
圖2 照明模塊原理圖
圖3 亮度模塊原理圖
圖4 藍牙模塊原理圖
圖3所示是亮度控制模塊原理圖,由于STM32F103C8T6不支持DAC轉(zhuǎn)換,所以在系統(tǒng)中的亮度控制是基于TLC5615數(shù)模轉(zhuǎn)換芯片。TLC5615是采用串行總線的10位DAC轉(zhuǎn)換芯片,由于采用串行總線方式,所以TLC5615的驅(qū)動程序要稍微復(fù)雜一些,但是能夠節(jié)省很多IO口。
在本系統(tǒng)中,我們采用PA5,PA6,PA7口來驅(qū)動TLC5615,并為TLC5615提供5V的工作電壓,參考電壓為3.3V。
系統(tǒng)連接了一個采用光敏電阻的環(huán)境光感知的模塊,該模塊可以根據(jù)環(huán)境光的強度輸出不同的電壓大小,再通過STM32F-103C8T6的自帶的ADC轉(zhuǎn)換器即可將環(huán)境光量化成數(shù)字量。在本系統(tǒng)中,該模塊位于照明模塊的背面,可以防止照明模塊的照明效果影響環(huán)境光的檢測結(jié)果。
系統(tǒng)采用的藍牙通信模塊是基于CC2541藍牙模塊實現(xiàn)的,該藍牙模塊屏蔽了很多開發(fā)中不需要注意的細(xì)節(jié),只需要將輸入與輸出與STM32F103C8T6連接,并供電即可使用,采用標(biāo)準(zhǔn)的UART的串口IO,不需要為藍牙模塊寫復(fù)雜的驅(qū)動,極大的減輕了開發(fā)負(fù)擔(dān)。
圖4所示是藍牙模塊的連接圖,將PA9口作為系統(tǒng)的發(fā)送端口,藍牙模塊的接受端口。PA10作為系統(tǒng)的接受端口,藍牙模塊的發(fā)送端口(陳志旺.STM32嵌入式微控制器快速上手[M].北京:電子工業(yè)出版社,2012.)。同時PA9,PA10又是STM32的USART1的TX與RX,所以直接采用STM32的USART1即可完成藍牙通信。
在本設(shè)計中,消息總線(Message Bus)是最核心的部分,所有的外部操作,藍牙消息、按鈕消息等都會被處理成系統(tǒng)能夠理解的消息,并交給主程序中的消息處理部分,來對系統(tǒng)外設(shè)進行操作。消息總線共分為3個部分,消息池、消息隊列、消息處理。
消息池是一種比較高級的內(nèi)存維護模型,每次需要創(chuàng)建消息,都會從消息池中拿出一條空的消息。當(dāng)有一條消息處理完成之后,將會初始化這條消息,放入消息池回收,供后續(xù)的使用。由于STM32使用的是比較低級的語言運行時,沒有一個比較方便的內(nèi)存分配與內(nèi)存回收的機制。使用消息池來管理內(nèi)存的使用,是十分符合STM32的特性的。
消息池又能分為3個部分,池管理、消息回收與消息初始化。在本系統(tǒng)中,消息中最為重要的是消息內(nèi)容,是一段字符串,所以池管理需要首先在內(nèi)存中分配固定數(shù)量的消息,與固定的字符串空間。在本系統(tǒng)中,在全局空間創(chuàng)建了128個消息,通過這固定的128個消息的回收利用實現(xiàn)無限消息的使用。消息回收將消息復(fù)位,以供下次使用,在這個過程中,會清除消息的字符串的全部內(nèi)容,并且清楚使用標(biāo)記,放入消息池。消息初始化是將消息的內(nèi)容標(biāo)記為正在使用,以免發(fā)生沖突。
消息池的實現(xiàn)難點主要在于,如何知道一個消息是否在被使用。在本系統(tǒng)中我們?yōu)橄⒓尤肓耸褂脴?biāo)記,當(dāng)一個消息正在被處理時,這個使用標(biāo)記將會為1,當(dāng)為空閑狀態(tài)的時候標(biāo)記為0。通過這個標(biāo)記來判斷一個消息是否是在被使用。
本設(shè)計支持按鈕控制,因此需要對按鈕控制進行測試,第一個按鈕為開關(guān)按鈕,控制臺燈的亮滅,按一下該按鈕能夠是臺燈在亮滅兩種狀態(tài)中切換。第二個按鈕為提高臺燈的亮度,每次調(diào)整一個擋位,只能在普通模式中使用。第三個按鈕為降低臺燈的亮度,每次調(diào)整一個擋位,只能在普通模式中使用。第四個按鈕為切換臺燈的運行模式,分別是普通模式、感知模式、睡眠模式、自定義模式。
藍牙控制是本次設(shè)計的中心,藍牙控制測試采用iOS上的Light-Blue程序進行串口通信與測試。經(jīng)測試各個指令均能成功執(zhí)行。
本設(shè)計主要研究了一個可以通過藍牙與其他智能設(shè)備控制的智能臺燈,該智能臺燈具有多個智能照明模式,這些照明模式已經(jīng)可以滿足日常生活的需要。特別是用戶自編程模式,為了實現(xiàn)該模式,本設(shè)計采用了消息的設(shè)計,動態(tài)分配回收消息,都是非常值得研究與說明的部分,此外,關(guān)于消息的拓展與腳本化也是一個主要的課題。另外在具體硬件制作的期間,還遇到了一些問題,驅(qū)動TLC5615或者是IO口具有電流限制,需要使用三極管來驅(qū)動LED,還有使用適量的上拉電阻來拉起開關(guān)。