一、前言
1.1 項(xiàng)目開(kāi)發(fā)背景
隨著現(xiàn)代教育和工作模式的不斷變化,尤其是在智能化和數(shù)字化的推動(dòng)下,青少年和成人的學(xué)習(xí)環(huán)境與生活方式也發(fā)生了深刻的變化。長(zhǎng)時(shí)間使用電子產(chǎn)品和久坐的學(xué)習(xí)或工作方式,導(dǎo)致了許多健康問(wèn)題,特別是在青少年群體中,近視、脊椎問(wèn)題、眼疲勞等問(wèn)題日益嚴(yán)重。尤其是孩子們?cè)诩抑虚L(zhǎng)時(shí)間坐在書桌前學(xué)習(xí),往往忽視了坐姿的重要性,造成了不良的坐姿習(xí)慣。此外,環(huán)境光線的變化對(duì)眼睛健康的影響也不容忽視,過(guò)暗或過(guò)強(qiáng)的光線都可能對(duì)視力造成負(fù)擔(dān)。
目前市場(chǎng)上雖然有許多臺(tái)燈產(chǎn)品,但大多數(shù)都只是單一的照明功能,缺乏智能化管理?,F(xiàn)有的智能臺(tái)燈大多數(shù)僅能調(diào)節(jié)亮度,或者配備了定時(shí)關(guān)燈的功能,但對(duì)于坐姿的提醒、環(huán)境光線的自動(dòng)調(diào)節(jié)、學(xué)習(xí)時(shí)長(zhǎng)的管理等方面的功能則較為欠缺。而這些正是現(xiàn)代學(xué)習(xí)環(huán)境中亟需解決的問(wèn)題。如何在保證照明效果的同時(shí),通過(guò)科技手段提供健康管理,已經(jīng)成為家長(zhǎng)和教育工作者關(guān)心的重點(diǎn)。
針對(duì)這一需求,本項(xiàng)目設(shè)計(jì)了一款基于STM32的智能臺(tái)燈,集成了多項(xiàng)功能,包括坐姿監(jiān)測(cè)、環(huán)境光照強(qiáng)度自動(dòng)調(diào)節(jié)、學(xué)習(xí)時(shí)長(zhǎng)管理、語(yǔ)音控制和監(jiān)控等。通過(guò)超聲波和環(huán)境光傳感器,臺(tái)燈能夠?qū)崟r(shí)檢測(cè)學(xué)生與書桌的距離和環(huán)境光線的變化,從而智能地調(diào)節(jié)臺(tái)燈亮度,并在坐姿過(guò)近或光線不足時(shí)發(fā)出提醒。此外,臺(tái)燈還配備了視頻監(jiān)控和藍(lán)牙數(shù)據(jù)傳輸功能,家長(zhǎng)可以通過(guò)手機(jī)APP遠(yuǎn)程查看孩子的學(xué)習(xí)狀態(tài),確保孩子保持健康的學(xué)習(xí)姿勢(shì)。
本項(xiàng)目的目標(biāo)是通過(guò)將智能技術(shù)與傳統(tǒng)學(xué)習(xí)工具結(jié)合,創(chuàng)造一個(gè)更智能、更健康的學(xué)習(xí)環(huán)境,幫助青少年養(yǎng)成正確的坐姿習(xí)慣,避免長(zhǎng)期不良坐姿導(dǎo)致的健康問(wèn)題。同時(shí),通過(guò)學(xué)習(xí)時(shí)長(zhǎng)和疲勞提醒等功能,促使學(xué)生合理安排學(xué)習(xí)時(shí)間,避免長(zhǎng)時(shí)間用眼造成的視力損傷。隨著智能硬件和移動(dòng)互聯(lián)網(wǎng)的發(fā)展,用戶的需求不僅僅局限于傳統(tǒng)的功能性產(chǎn)品,更傾向于智能化、個(gè)性化、便捷化的使用體驗(yàn),這也促使我們?cè)诒卷?xiàng)目中采用了語(yǔ)音控制、APP管理等前沿技術(shù),進(jìn)一步提升了臺(tái)燈的智能化水平。
通過(guò)本項(xiàng)目的實(shí)現(xiàn),我們希望能夠?yàn)閺V大青少年提供一個(gè)智能健康的學(xué)習(xí)工具,幫助他們?cè)诮】档沫h(huán)境中進(jìn)行高效學(xué)習(xí),同時(shí)為家長(zhǎng)提供更多的便捷管理手段。
1.2 設(shè)計(jì)實(shí)現(xiàn)的功能
(1)坐姿距離測(cè)量與提醒
通過(guò)超聲波測(cè)距模塊實(shí)時(shí)監(jiān)測(cè)學(xué)生與書桌的距離。當(dāng)距離低于設(shè)定值(如30厘米)時(shí),臺(tái)燈會(huì)通過(guò)蜂鳴器發(fā)出提醒音,提醒學(xué)生保持合理的坐姿,避免近距離用眼帶來(lái)的視力損傷。
(2)環(huán)境光強(qiáng)度檢測(cè)
集成BH1750光強(qiáng)傳感器,實(shí)時(shí)監(jiān)測(cè)環(huán)境中的光照強(qiáng)度。當(dāng)光線不足時(shí),臺(tái)燈自動(dòng)增加亮度,確保學(xué)生在合適的光照環(huán)境下學(xué)習(xí);如果光線過(guò)強(qiáng),臺(tái)燈則會(huì)自動(dòng)關(guān)閉,避免浪費(fèi)電能并確保舒適的學(xué)習(xí)環(huán)境。
(3)臺(tái)燈亮度調(diào)整
通過(guò)PWM控制技術(shù),支持精確調(diào)節(jié)臺(tái)燈的亮度,既可以手動(dòng)通過(guò)手機(jī)APP調(diào)整,也可以通過(guò)自動(dòng)模式根據(jù)環(huán)境光強(qiáng)度自動(dòng)調(diào)節(jié)。用戶可根據(jù)學(xué)習(xí)需求選擇合適的亮度檔位。
(4)學(xué)習(xí)時(shí)長(zhǎng)記錄與疲勞提醒
臺(tái)燈會(huì)記錄其開(kāi)燈的時(shí)間,即學(xué)習(xí)時(shí)長(zhǎng)。當(dāng)學(xué)習(xí)時(shí)長(zhǎng)超過(guò)設(shè)定的閾值時(shí),臺(tái)燈通過(guò)語(yǔ)音播報(bào)模塊提醒學(xué)生進(jìn)行適當(dāng)休息,避免長(zhǎng)時(shí)間用眼造成的視力疲勞。學(xué)習(xí)時(shí)長(zhǎng)和提醒閾值可通過(guò)APP進(jìn)行設(shè)置和修改。
(5)語(yǔ)音控制功能
集成海凌科V20語(yǔ)音識(shí)別模塊,用戶可以通過(guò)語(yǔ)音控制臺(tái)燈的開(kāi)關(guān)和亮度調(diào)節(jié)。支持如“開(kāi)燈”、“關(guān)燈”、“亮度一檔”等指令,提高操作便捷性,尤其在學(xué)習(xí)過(guò)程中無(wú)需手動(dòng)操作即可完成調(diào)節(jié)。
(6)自動(dòng)與手動(dòng)模式切換
提供自動(dòng)模式和手動(dòng)模式兩種選擇:
??自動(dòng)模式:根據(jù)超聲波測(cè)距模塊檢測(cè)到的距離和光照強(qiáng)度自動(dòng)調(diào)節(jié)臺(tái)燈亮度。如果距離過(guò)近(低于30厘米),語(yǔ)音播報(bào)提醒“距離過(guò)近,請(qǐng)注意坐姿”;如果環(huán)境光線較暗,自動(dòng)開(kāi)啟臺(tái)燈;光線較強(qiáng)時(shí)自動(dòng)關(guān)閉臺(tái)燈,并播報(bào)“光線較強(qiáng),已關(guān)燈”。
??手動(dòng)模式:用戶可以通過(guò)手機(jī)APP手動(dòng)調(diào)節(jié)臺(tái)燈的亮度,無(wú)需自動(dòng)控制。
(7)視頻監(jiān)控功能
臺(tái)燈內(nèi)置ESP32+OV2640模塊,支持實(shí)時(shí)視頻監(jiān)控功能。父母可以通過(guò)手機(jī)APP查看書房中的實(shí)時(shí)視頻,遠(yuǎn)程監(jiān)督孩子的學(xué)習(xí)狀態(tài),確保孩子在合適的坐姿下專心學(xué)習(xí),并且不受環(huán)境干擾。
(8)藍(lán)牙數(shù)據(jù)傳輸
采用HC-05藍(lán)牙模塊實(shí)現(xiàn)數(shù)據(jù)傳輸,臺(tái)燈采集的相關(guān)數(shù)據(jù)(如環(huán)境光強(qiáng)、坐姿距離、學(xué)習(xí)時(shí)長(zhǎng)、亮度狀態(tài)等)通過(guò)藍(lán)牙實(shí)時(shí)傳輸?shù)绞謾C(jī)APP,方便家長(zhǎng)隨時(shí)查看和管理孩子的學(xué)習(xí)狀態(tài)。
(9)OLED顯示屏信息顯示
集成0.96寸SPI接口OLED顯示屏,實(shí)時(shí)顯示臺(tái)燈工作狀態(tài),包括環(huán)境光強(qiáng)度、坐姿距離、學(xué)習(xí)時(shí)長(zhǎng)、當(dāng)前亮度等信息,便于用戶隨時(shí)查看并進(jìn)行調(diào)整。
(10)智能模式切換與自定義設(shè)置
用戶可以通過(guò)手機(jī)APP進(jìn)行智能模式切換及自定義設(shè)置,包括學(xué)習(xí)時(shí)長(zhǎng)閾值、自動(dòng)模式下的坐姿距離警報(bào)設(shè)置、亮度自動(dòng)調(diào)節(jié)的光照強(qiáng)度閾值等。APP界面友好,用戶可以方便地進(jìn)行各種個(gè)性化配置。
1.3 項(xiàng)目硬件模塊組成
(1)主控芯片 STM32F103RCT6
主控芯片負(fù)責(zé)整個(gè)系統(tǒng)的控制與數(shù)據(jù)處理。STM32F103RCT6具有強(qiáng)大的計(jì)算能力,支持多種外設(shè)接口,能夠?qū)崿F(xiàn)超聲波測(cè)距、環(huán)境光強(qiáng)度檢測(cè)、PWM調(diào)光、藍(lán)牙通訊等多種功能。它是本項(xiàng)目的核心部件,負(fù)責(zé)協(xié)調(diào)各個(gè)模塊的工作。
(2)環(huán)境光強(qiáng)度傳感器 BH1750
該傳感器用于檢測(cè)環(huán)境中的光照強(qiáng)度。BH1750是一款數(shù)字輸出的光傳感器,能夠高精度地測(cè)量周圍環(huán)境的光強(qiáng)。根據(jù)測(cè)得的光強(qiáng),主控芯片將自動(dòng)調(diào)節(jié)臺(tái)燈的亮度或決定是否開(kāi)啟臺(tái)燈。
(3)超聲波測(cè)距模塊
該模塊用于檢測(cè)學(xué)生與書桌的距離,以判斷其坐姿是否正確。通過(guò)超聲波發(fā)射和接收原理,模塊能夠準(zhǔn)確測(cè)量到距離,并將結(jié)果傳輸給主控芯片。如果距離過(guò)近,主控芯片會(huì)觸發(fā)蜂鳴器提醒學(xué)生保持適當(dāng)?shù)淖恕?/p>
(4)OLED顯示屏(0.96寸SPI接口)
該顯示屏用于實(shí)時(shí)展示臺(tái)燈的工作狀態(tài)和數(shù)據(jù),包括環(huán)境光強(qiáng)度、測(cè)量的坐姿距離、學(xué)習(xí)時(shí)長(zhǎng)和當(dāng)前亮度等信息。OLED顯示屏采用SPI接口,能夠快速響應(yīng)數(shù)據(jù)更新,提供清晰直觀的反饋。
(5)藍(lán)牙模塊 HC-05
HC-05藍(lán)牙模塊實(shí)現(xiàn)臺(tái)燈與手機(jī)APP之間的無(wú)線數(shù)據(jù)傳輸。它負(fù)責(zé)將臺(tái)燈的各項(xiàng)實(shí)時(shí)數(shù)據(jù)傳輸?shù)绞謾C(jī)APP,同時(shí)也接收來(lái)自APP的控制指令,如調(diào)節(jié)亮度、切換模式等。該模塊支持與Android手機(jī)的藍(lán)牙配對(duì)與通信。
(6)臺(tái)燈LED光源與PWM調(diào)光控制
臺(tái)燈采用白色LED燈泡,通過(guò)PWM(脈寬調(diào)制)技術(shù)調(diào)節(jié)亮度。PWM調(diào)光能夠精確控制臺(tái)燈的亮度,根據(jù)環(huán)境光強(qiáng)度或用戶設(shè)定的需求自動(dòng)調(diào)整燈光亮度,以確保最佳學(xué)習(xí)環(huán)境。
(7)語(yǔ)音識(shí)別模塊 海凌科V20
該語(yǔ)音識(shí)別模塊能夠識(shí)別用戶的語(yǔ)音指令,例如“開(kāi)燈”、“關(guān)燈”、“調(diào)亮度”等。它接收并處理語(yǔ)音輸入,通過(guò)無(wú)線傳輸將指令傳遞給主控芯片,實(shí)現(xiàn)語(yǔ)音控制臺(tái)燈的開(kāi)關(guān)和亮度調(diào)節(jié)。
(8)語(yǔ)音播報(bào)模塊 SYN6288
該模塊負(fù)責(zé)根據(jù)臺(tái)燈的工作狀態(tài)通過(guò)語(yǔ)音提示用戶。例如,在自動(dòng)模式下,臺(tái)燈會(huì)在環(huán)境光線較暗時(shí)播放“光線較暗 已開(kāi)燈”,在學(xué)習(xí)時(shí)長(zhǎng)超過(guò)設(shè)定值時(shí)播放“休息一下”提醒等。語(yǔ)音播報(bào)模塊通過(guò)串口與主控芯片連接,提供清晰的語(yǔ)音反饋。
(9)視頻監(jiān)控模塊 ESP32 + OV2640
該模塊用于實(shí)時(shí)視頻監(jiān)控功能,結(jié)合ESP32和OV2640攝像頭模塊,可以捕捉書房?jī)?nèi)的實(shí)時(shí)畫面,并通過(guò)Wi-Fi將視頻流傳輸?shù)绞謾C(jī)APP。家長(zhǎng)可以通過(guò)APP隨時(shí)查看孩子的學(xué)習(xí)情況,確保孩子保持正確的坐姿和專注度。
(10)穩(wěn)壓電源 12V 2A
臺(tái)燈系統(tǒng)使用12V 2A穩(wěn)壓電源為所有硬件模塊供電。穩(wěn)壓電源能夠提供穩(wěn)定的電壓和電流,確保系統(tǒng)正常運(yùn)行,避免因電壓波動(dòng)而導(dǎo)致設(shè)備故障或性能下降。
1.4 設(shè)計(jì)思路
本項(xiàng)目的設(shè)計(jì)思路是通過(guò)將智能硬件與現(xiàn)代技術(shù)相結(jié)合,創(chuàng)建一個(gè)既能提升學(xué)習(xí)效率又能保障用戶健康的智能臺(tái)燈。設(shè)計(jì)的核心目標(biāo)是通過(guò)多個(gè)傳感器、語(yǔ)音控制、自動(dòng)調(diào)節(jié)以及遠(yuǎn)程監(jiān)控等功能,幫助學(xué)生改善坐姿,優(yōu)化學(xué)習(xí)環(huán)境,從而降低眼疲勞和視力損傷的風(fēng)險(xiǎn)。
整個(gè)系統(tǒng)基于STM32F103RCT6微控制器來(lái)實(shí)現(xiàn)數(shù)據(jù)采集、處理和控制任務(wù)。STM32F103RCT6作為主控芯片,具有足夠的運(yùn)算能力和多個(gè)外設(shè)接口,能夠同時(shí)處理多項(xiàng)功能的實(shí)現(xiàn)。所有模塊的數(shù)據(jù)輸入都由主控芯片進(jìn)行實(shí)時(shí)處理,確保系統(tǒng)的高效運(yùn)行。
在環(huán)境感知方面,系統(tǒng)采用了多個(gè)傳感器來(lái)監(jiān)測(cè)學(xué)生的學(xué)習(xí)環(huán)境。超聲波測(cè)距模塊實(shí)時(shí)檢測(cè)學(xué)生與書桌的距離,以判斷坐姿的合理性。如果學(xué)生的坐姿過(guò)近,系統(tǒng)會(huì)通過(guò)蜂鳴器發(fā)出提醒,提示學(xué)生保持合適的距離。此外,BH1750光照強(qiáng)度傳感器能夠監(jiān)測(cè)環(huán)境光線的強(qiáng)度,臺(tái)燈可以根據(jù)實(shí)時(shí)的光照情況自動(dòng)調(diào)節(jié)亮度,確保學(xué)生在適宜的光照下學(xué)習(xí),避免因光線過(guò)強(qiáng)或過(guò)弱造成的眼部不適。
為了增強(qiáng)用戶體驗(yàn),系統(tǒng)還引入了語(yǔ)音控制與語(yǔ)音播報(bào)功能。通過(guò)語(yǔ)音識(shí)別模塊,用戶可以通過(guò)語(yǔ)音指令直接控制臺(tái)燈的開(kāi)關(guān)、亮度調(diào)整等操作。這一設(shè)計(jì)提供更為便捷的操作方式,尤其是在學(xué)生專注學(xué)習(xí)時(shí)無(wú)需打斷,減少手動(dòng)操作的干擾。同時(shí),語(yǔ)音播報(bào)模塊能夠在關(guān)鍵時(shí)刻提供語(yǔ)音提示,如“光線較暗 已開(kāi)燈”或“學(xué)習(xí)時(shí)長(zhǎng)過(guò)長(zhǎng),請(qǐng)休息一下”,幫助學(xué)生及時(shí)調(diào)整學(xué)習(xí)狀態(tài),防止過(guò)度疲勞。
為了進(jìn)一步提升智能化體驗(yàn),系統(tǒng)采用了視頻監(jiān)控模塊(ESP32+OV2640),通過(guò)Wi-Fi將書房中的實(shí)時(shí)畫面?zhèn)鬏數(shù)礁改傅氖謾C(jī)APP,方便家長(zhǎng)隨時(shí)觀察孩子的學(xué)習(xí)狀態(tài)。這不僅增強(qiáng)了家長(zhǎng)的安心感,還確保了孩子能在沒(méi)有過(guò)多干擾的環(huán)境中專注學(xué)習(xí)。
臺(tái)燈的亮度調(diào)節(jié)采用PWM控制技術(shù),可以實(shí)現(xiàn)細(xì)膩的亮度調(diào)整。通過(guò)手機(jī)APP,用戶可以根據(jù)需要調(diào)整臺(tái)燈的亮度或選擇自動(dòng)模式,讓臺(tái)燈根據(jù)環(huán)境光的變化自動(dòng)調(diào)節(jié)亮度,保證學(xué)習(xí)環(huán)境的舒適性與健康性。
在整體設(shè)計(jì)上,系統(tǒng)注重各個(gè)模塊的協(xié)同工作。通過(guò)藍(lán)牙模塊HC-05與手機(jī)APP的無(wú)線連接,臺(tái)燈可以實(shí)時(shí)將采集的數(shù)據(jù)上傳至APP,用戶可以通過(guò)手機(jī)查看臺(tái)燈的運(yùn)行狀態(tài),調(diào)整設(shè)置或監(jiān)控孩子的學(xué)習(xí)過(guò)程。所有數(shù)據(jù)與控制指令都通過(guò)藍(lán)牙傳輸,實(shí)現(xiàn)了無(wú)線便捷的操作方式。
在硬件選擇上,系統(tǒng)采用了穩(wěn)定可靠的組件,確保在長(zhǎng)期使用中不易發(fā)生故障。OLED顯示屏提供直觀的顯示,用戶可以隨時(shí)查看臺(tái)燈的工作狀態(tài),如環(huán)境光強(qiáng)度、坐姿距離、學(xué)習(xí)時(shí)長(zhǎng)等重要信息。穩(wěn)壓電源為整個(gè)系統(tǒng)提供了穩(wěn)定的電力保障,確保每個(gè)模塊的正常運(yùn)行。
通過(guò)以上設(shè)計(jì)思路,目標(biāo)是創(chuàng)造一個(gè)智能、高效、健康的學(xué)習(xí)環(huán)境。臺(tái)燈不僅僅是一個(gè)普通的照明設(shè)備,而是一個(gè)集成了坐姿提醒、環(huán)境適配、學(xué)習(xí)時(shí)長(zhǎng)管理等多功能的智能產(chǎn)品。通過(guò)這些智能化的設(shè)計(jì),系統(tǒng)能夠有效地提升學(xué)生的學(xué)習(xí)效率,同時(shí)保護(hù)學(xué)生的視力健康和身體姿態(tài)。
1.5 系統(tǒng)功能總結(jié)
功能模塊 | 功能描述 | 實(shí)現(xiàn)方式 |
坐姿距離測(cè)量與提醒 | 通過(guò)超聲波測(cè)距模塊檢測(cè)學(xué)生與書桌的距離,提醒學(xué)生保持合適坐姿。當(dāng)距離過(guò)近時(shí),蜂鳴器發(fā)出提醒音。 | 超聲波測(cè)距模塊 + 蜂鳴器 |
環(huán)境光強(qiáng)度檢測(cè) | 使用BH1750傳感器檢測(cè)環(huán)境光強(qiáng)度,自動(dòng)調(diào)節(jié)臺(tái)燈亮度,確保最佳光照條件。光線過(guò)暗時(shí)開(kāi)啟臺(tái)燈,光線過(guò)強(qiáng)時(shí)關(guān)閉臺(tái)燈。 | BH1750傳感器 + 主控芯片 + PWM調(diào)光控制 |
臺(tái)燈亮度調(diào)整 | 支持手動(dòng)或自動(dòng)調(diào)節(jié)臺(tái)燈亮度,自動(dòng)模式下根據(jù)環(huán)境光強(qiáng)度調(diào)節(jié)亮度,手動(dòng)模式下用戶通過(guò)APP進(jìn)行控制。 | PWM調(diào)光控制 + 主控芯片 + 手機(jī)APP控制 |
學(xué)習(xí)時(shí)長(zhǎng)記錄與疲勞提醒 | 記錄臺(tái)燈開(kāi)燈的時(shí)長(zhǎng),當(dāng)學(xué)習(xí)時(shí)長(zhǎng)超過(guò)設(shè)定閾值時(shí),語(yǔ)音播報(bào)提醒學(xué)生休息。學(xué)習(xí)時(shí)長(zhǎng)和閾值可通過(guò)APP設(shè)置。 | 主控芯片 + 語(yǔ)音播報(bào)模塊 + APP設(shè)置 |
語(yǔ)音控制功能 | 通過(guò)語(yǔ)音識(shí)別模塊,用戶可通過(guò)語(yǔ)音控制臺(tái)燈開(kāi)關(guān)及亮度調(diào)節(jié)等功能。支持指令如“開(kāi)燈”、“關(guān)燈”、“調(diào)亮度”等。 | 海凌科V20語(yǔ)音識(shí)別模塊 + 主控芯片 |
自動(dòng)與手動(dòng)模式切換 | 支持自動(dòng)模式和手動(dòng)模式切換。自動(dòng)模式下,臺(tái)燈根據(jù)環(huán)境光照強(qiáng)度和坐姿距離自動(dòng)調(diào)整亮度和提示。手動(dòng)模式下,通過(guò)APP手動(dòng)調(diào)節(jié)亮度。 | 主控芯片 + 環(huán)境光傳感器 + 超聲波測(cè)距模塊 + APP控制 |
視頻監(jiān)控功能 | 內(nèi)置攝像頭模塊(ESP32+OV2640),實(shí)時(shí)監(jiān)控學(xué)習(xí)環(huán)境,家長(zhǎng)通過(guò)APP遠(yuǎn)程查看孩子學(xué)習(xí)狀態(tài)。 | ESP32 + OV2640攝像頭 + Wi-Fi傳輸 + 手機(jī)APP |
藍(lán)牙數(shù)據(jù)傳輸 | 使用HC-05藍(lán)牙模塊將臺(tái)燈的實(shí)時(shí)數(shù)據(jù)傳輸?shù)绞謾C(jī)APP,便于家長(zhǎng)查看和控制臺(tái)燈狀態(tài)。 | HC-05藍(lán)牙模塊 + 主控芯片 + 手機(jī)APP |
OLED顯示屏 | OLED顯示屏實(shí)時(shí)顯示環(huán)境光強(qiáng)、坐姿距離、學(xué)習(xí)時(shí)長(zhǎng)和臺(tái)燈亮度等信息,方便用戶查看當(dāng)前狀態(tài)。 | 0.96寸OLED顯示屏 + 主控芯片 |
智能模式切換與自定義設(shè)置 | 用戶可通過(guò)手機(jī)APP進(jìn)行智能模式的切換及自定義設(shè)置,如學(xué)習(xí)時(shí)長(zhǎng)閾值、自動(dòng)模式的坐姿距離和光照閾值等。 | 手機(jī)APP + 主控芯片 |
1.6 開(kāi)發(fā)環(huán)境介紹
【1】設(shè)備端開(kāi)發(fā)
本項(xiàng)目的設(shè)備端開(kāi)發(fā)采用的是Keil uVision 5(Keil5)集成開(kāi)發(fā)環(huán)境(IDE)。Keil5是一個(gè)廣泛使用的開(kāi)發(fā)工具,專為嵌入式系統(tǒng)開(kāi)發(fā)設(shè)計(jì),支持多種處理器架構(gòu),包括STM32系列微控制器。它提供了一個(gè)直觀的界面,幫助開(kāi)發(fā)人員進(jìn)行代碼編寫、調(diào)試和編譯,并且具有強(qiáng)大的調(diào)試工具,能夠方便地進(jìn)行單步調(diào)試和變量監(jiān)控,非常適合嵌入式軟件的開(kāi)發(fā)。
編程語(yǔ)言方面,本項(xiàng)目采用了C語(yǔ)言。C語(yǔ)言是一種高效、靈活的編程語(yǔ)言,廣泛應(yīng)用于嵌入式系統(tǒng)開(kāi)發(fā)中,尤其是在對(duì)性能要求較高、需要直接操作硬件的場(chǎng)景下。由于C語(yǔ)言可以直接操作寄存器,程序員能夠更細(xì)粒度地控制硬件的行為,從而提高系統(tǒng)的效率和響應(yīng)速度。
為了提高代碼執(zhí)行效率并節(jié)省資源,本項(xiàng)目決定不使用STM32的標(biāo)準(zhǔn)庫(kù)(Standard Peripheral Library,SPL)和硬件抽象層(HAL)庫(kù)接口。雖然這些庫(kù)提供了便捷的API接口,但它們會(huì)增加代碼的大小和運(yùn)行時(shí)開(kāi)銷。因此,我們選擇直接通過(guò)位運(yùn)算來(lái)操作STM32的寄存器,以實(shí)現(xiàn)更高效的硬件控制。位運(yùn)算可以讓程序員更精確地控制每個(gè)硬件模塊的配置和狀態(tài),減少系統(tǒng)的資源消耗,并且增強(qiáng)了代碼的可移植性和可維護(hù)性。
程序的下載采用了ISP(In-System Programming)串口下載方式。ISP下載是一種通過(guò)串口接口將程序直接寫入微控制器的方式,不需要額外的編程器或調(diào)試器。使用ISP下載可以簡(jiǎn)化硬件設(shè)計(jì),降低開(kāi)發(fā)成本,并且提供了靈活的開(kāi)發(fā)和測(cè)試環(huán)境。通過(guò)串口與開(kāi)發(fā)板連接,程序可以實(shí)時(shí)下載到STM32芯片中進(jìn)行調(diào)試和測(cè)試,這使得開(kāi)發(fā)過(guò)程更加高效和便捷。
整個(gè)開(kāi)發(fā)環(huán)境注重效率、簡(jiǎn)潔和靈活性,采用了最直接的方式與硬件交互,保證了系統(tǒng)在嵌入式應(yīng)用中的高效性和穩(wěn)定性。
【2】APP端開(kāi)發(fā)
本項(xiàng)目的上位機(jī)應(yīng)用程序開(kāi)發(fā)使用的是Qt框架,版本為5.12.6。Qt是一個(gè)跨平臺(tái)的應(yīng)用程序開(kāi)發(fā)框架,廣泛應(yīng)用于GUI(圖形用戶界面)和嵌入式系統(tǒng)開(kāi)發(fā)。Qt具有強(qiáng)大的圖形界面支持和豐富的庫(kù),可以幫助開(kāi)發(fā)者快速構(gòu)建現(xiàn)代化、響應(yīng)式的用戶界面,同時(shí)支持多種平臺(tái),如Windows、Linux、macOS及移動(dòng)設(shè)備平臺(tái)(Android、iOS)等。
本項(xiàng)目選擇的Qt版本是5.12.6,這個(gè)版本在穩(wěn)定性、性能和功能性上都有很好的平衡。Qt 5.12系列是LTS(長(zhǎng)期支持)版本,意味著它在未來(lái)幾年內(nèi)會(huì)獲得持續(xù)的更新和維護(hù),因此使用這個(gè)版本能夠保證開(kāi)發(fā)環(huán)境的穩(wěn)定性和長(zhǎng)期可維護(hù)性。
在編程語(yǔ)言方面,使用C++進(jìn)行上位機(jī)程序的開(kāi)發(fā)。C++是一種強(qiáng)大的編程語(yǔ)言,具備面向?qū)ο蟮奶匦?,能夠高效地處理系統(tǒng)級(jí)任務(wù)。C++在Qt框架中的使用非常廣泛,它不僅能夠創(chuàng)建高效的應(yīng)用程序,還能充分利用Qt的信號(hào)與槽機(jī)制,方便地實(shí)現(xiàn)應(yīng)用程序內(nèi)部模塊間的通信。C++語(yǔ)言的高效性和靈活性使得開(kāi)發(fā)者能夠輕松處理大量的傳感器數(shù)據(jù)、控制臺(tái)燈狀態(tài)以及實(shí)現(xiàn)與硬件設(shè)備的通信。
上位機(jī)程序在Windows 10操作系統(tǒng)下進(jìn)行開(kāi)發(fā)。Windows 10為Qt開(kāi)發(fā)提供了強(qiáng)大的開(kāi)發(fā)支持,兼容Qt的所有功能,且擁有完善的調(diào)試工具和庫(kù)支持。開(kāi)發(fā)者可以在Windows環(huán)境下使用Qt Creator集成開(kāi)發(fā)環(huán)境(IDE)進(jìn)行程序編寫、調(diào)試和編譯,享受更快速的開(kāi)發(fā)和測(cè)試流程。Windows 10的穩(wěn)定性和廣泛應(yīng)用確保了開(kāi)發(fā)過(guò)程中能夠進(jìn)行高效的測(cè)試和調(diào)試。
值得一提的是,本項(xiàng)目的上位機(jī)應(yīng)用不僅支持Windows版本,還支持Android版本的編譯和部署。Qt框架的跨平臺(tái)能力使得同一套代碼可以在不同平臺(tái)上編譯和運(yùn)行。開(kāi)發(fā)者可以將Windows版本的應(yīng)用程序輕松遷移到Android平臺(tái),保證了更廣泛的用戶覆蓋。Android版本的應(yīng)用能夠通過(guò)藍(lán)牙與STM32設(shè)備端進(jìn)行無(wú)線通信,查看實(shí)時(shí)數(shù)據(jù)并控制設(shè)備,因此提供了良好的用戶體驗(yàn)。
綜上所述,整個(gè)上位機(jī)開(kāi)發(fā)環(huán)境通過(guò)Qt框架的跨平臺(tái)特性和C++語(yǔ)言的高效性,確保了開(kāi)發(fā)過(guò)程的高效性和應(yīng)用程序的靈活性。無(wú)論是Windows平臺(tái)還是Android平臺(tái),開(kāi)發(fā)者都能夠使用相同的代碼進(jìn)行開(kāi)發(fā)和部署,大大提升了開(kāi)發(fā)效率和后期的維護(hù)工作。
1.6 模塊的技術(shù)詳情介紹
【1】HC05-藍(lán)牙模塊
HC-05是一款常用的藍(lán)牙模塊,廣泛應(yīng)用于嵌入式系統(tǒng)中,特別是在STM32、Arduino等微控制器的無(wú)線通信應(yīng)用中。它支持串口通信(UART),可以方便地與各種微控制器進(jìn)行連接,從而實(shí)現(xiàn)藍(lán)牙無(wú)線數(shù)據(jù)傳輸。HC-05模塊支持經(jīng)典藍(lán)牙(Bluetooth 2.0)協(xié)議,能夠在短距離內(nèi)進(jìn)行數(shù)據(jù)交換,適用于低功耗、低帶寬的數(shù)據(jù)傳輸需求。
HC-05模塊本身包含了藍(lán)牙無(wú)線通信的核心硬件和協(xié)議棧,它的工作原理是通過(guò)無(wú)線電波進(jìn)行數(shù)據(jù)的發(fā)送和接收。模塊內(nèi)部集成了藍(lán)牙通信協(xié)議,可以使設(shè)備通過(guò)藍(lán)牙與其他設(shè)備(如手機(jī)、電腦、其他藍(lán)牙模塊等)進(jìn)行配對(duì)和數(shù)據(jù)交換。與藍(lán)牙設(shè)備配對(duì)后,HC-05模塊就能夠通過(guò)串口接口(UART)接收和發(fā)送數(shù)據(jù),從而實(shí)現(xiàn)設(shè)備間的無(wú)線通信。
在硬件接口方面,HC-05模塊通常提供多個(gè)引腳,最常用的包括VCC、GND、TXD(發(fā)送數(shù)據(jù))、RXD(接收數(shù)據(jù))、STATE(連接狀態(tài)指示)等。TXD和RXD是通過(guò)串口進(jìn)行數(shù)據(jù)通信的關(guān)鍵引腳,可以直接與STM32、Arduino等開(kāi)發(fā)板的串口接口連接。VCC和GND則是電源引腳,需要為模塊提供3.3V或5V的電源(具體電壓依賴于模塊的型號(hào))。
HC-05模塊支持兩種工作模式:主模式(Master)和 從模式(Slave)。在主模式下,HC-05可以主動(dòng)發(fā)起藍(lán)牙連接并連接到其他設(shè)備;在從模式下,HC-05等待其他設(shè)備的連接請(qǐng)求,并且只能接收來(lái)自主設(shè)備的連接。通常,在實(shí)際應(yīng)用中,HC-05模塊常常工作在從模式,即等待手機(jī)或其他設(shè)備進(jìn)行配對(duì)和通信。
對(duì)于嵌入式系統(tǒng)開(kāi)發(fā),HC-05模塊的應(yīng)用非常簡(jiǎn)單,特別是在需要實(shí)現(xiàn)短距離無(wú)線通信時(shí),它能通過(guò)串口與微控制器實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸。開(kāi)發(fā)者可以通過(guò)AT命令配置HC-05模塊的工作模式、波特率、設(shè)備名稱等參數(shù),使得模塊更加靈活地適應(yīng)不同的應(yīng)用場(chǎng)景。
通過(guò)使用HC-05藍(lán)牙模塊,設(shè)備端與上位機(jī)(如手機(jī)、電腦)之間的數(shù)據(jù)傳輸?shù)玫搅撕?jiǎn)化。上位機(jī)APP可以通過(guò)藍(lán)牙與設(shè)備進(jìn)行通信,實(shí)時(shí)接收傳感器數(shù)據(jù)或發(fā)送控制指令,無(wú)需物理連接線纜。藍(lán)牙的低功耗特性也使得該模塊適用于電池供電的移動(dòng)設(shè)備或長(zhǎng)時(shí)間運(yùn)行的嵌入式應(yīng)用。HC-05藍(lán)牙模塊是一款功能強(qiáng)大且易于使用的無(wú)線通信模塊,它通過(guò)串口通信為微控制器和智能設(shè)備之間提供了無(wú)線數(shù)據(jù)傳輸?shù)哪芰?,是?shí)現(xiàn)短距離無(wú)線通信的理想選擇。
【2】ESP32-CAM
ESP32-CAM 是一款基于 ESP32 芯片的開(kāi)發(fā)板,集成了攝像頭模塊(OV2640)和多個(gè)強(qiáng)大功能,廣泛應(yīng)用于圖像采集、視頻監(jiān)控、物聯(lián)網(wǎng)設(shè)備等領(lǐng)域。它結(jié)合了 ESP32 的強(qiáng)大處理能力和無(wú)線通信能力,能夠?qū)崿F(xiàn)圖像數(shù)據(jù)的采集、處理和遠(yuǎn)程傳輸,適用于各種智能應(yīng)用,如智能監(jiān)控、遠(yuǎn)程傳感器、圖像識(shí)別等場(chǎng)景。
ESP32-CAM 板載的核心處理器是 ESP32 微控制器,這是一款雙核處理器,具有 Wi-Fi 和藍(lán)牙的無(wú)線通信功能。ESP32 的雙核架構(gòu)和高性能使得它能夠同時(shí)處理多個(gè)任務(wù),例如圖像采集、視頻傳輸和數(shù)據(jù)處理,且支持多線程操作。此外,ESP32 還具有豐富的外設(shè)接口和強(qiáng)大的計(jì)算能力,能夠有效支持圖像處理、傳感器采集和控制指令的執(zhí)行。
該模塊配備了 OV2640 攝像頭傳感器,能夠拍攝 2MP 的圖像,支持高質(zhì)量的圖像采集。OV2640 攝像頭的分辨率和圖像質(zhì)量對(duì)于大多數(shù)物聯(lián)網(wǎng)監(jiān)控應(yīng)用來(lái)說(shuō)已經(jīng)足夠,能夠提供清晰的圖像以供分析和傳輸。通過(guò) ESP32-CAM,用戶可以實(shí)現(xiàn)實(shí)時(shí)圖像捕捉,并將其通過(guò) Wi-Fi 無(wú)線傳輸?shù)皆贫嘶蚴謾C(jī)等設(shè)備,適用于遠(yuǎn)程監(jiān)控、圖像存儲(chǔ)以及圖像處理任務(wù)。
ESP32-CAM 模塊內(nèi)置了多個(gè)輸入/輸出引腳,包括 GPIO、ADC、PWM 等接口,可以與外部傳感器和設(shè)備進(jìn)行連接。通過(guò)這些引腳,ESP32-CAM 能夠接入更多傳感器或其他外設(shè),從而擴(kuò)展其功能。在實(shí)際應(yīng)用中,開(kāi)發(fā)者可以根據(jù)需要連接外部麥克風(fēng)、傳感器或其他模塊,增強(qiáng)系統(tǒng)的多功能性。
ESP32-CAM 的無(wú)線通信能力是其一大優(yōu)勢(shì)。它支持 Wi-Fi 連接,可以通過(guò)無(wú)線網(wǎng)絡(luò)將采集的圖像數(shù)據(jù)實(shí)時(shí)傳輸?shù)竭h(yuǎn)程設(shè)備或云端平臺(tái)。此外,ESP32 還支持藍(lán)牙功能,能夠與藍(lán)牙設(shè)備進(jìn)行連接或作為主設(shè)備進(jìn)行通信。Wi-Fi 和藍(lán)牙的雙重支持使得 ESP32-CAM 模塊在各種物聯(lián)網(wǎng)應(yīng)用中都非常適用,特別是在智能家居、遠(yuǎn)程監(jiān)控和傳感器網(wǎng)絡(luò)中。
在開(kāi)發(fā)方面,ESP32-CAM 模塊支持通過(guò) Arduino IDE 和 ESP-IDF(Espressif 提供的官方開(kāi)發(fā)框架)進(jìn)行編程和開(kāi)發(fā)。開(kāi)發(fā)者可以使用這些開(kāi)發(fā)工具方便地編寫、調(diào)試和上傳代碼,快速實(shí)現(xiàn)圖像采集和處理的功能。同時(shí),ESP32-CAM 也支持通過(guò)串口調(diào)試,幫助開(kāi)發(fā)者進(jìn)行實(shí)時(shí)調(diào)試和問(wèn)題排查。
ESP32-CAM 模塊以其高性價(jià)比、強(qiáng)大的處理能力和無(wú)線通信能力,成為許多物聯(lián)網(wǎng)應(yīng)用的首選平臺(tái)。無(wú)論是圖像采集、遠(yuǎn)程監(jiān)控,還是數(shù)據(jù)傳輸和處理,ESP32-CAM 都能夠提供可靠的解決方案,適用于智能家居、安防監(jiān)控、機(jī)器人視覺(jué)等各種應(yīng)用。
【3】海凌科V20模塊
海凌科 V20 語(yǔ)音識(shí)別模塊是一款高性能的語(yǔ)音識(shí)別模塊,專為嵌入式系統(tǒng)設(shè)計(jì),廣泛應(yīng)用于智能家居、語(yǔ)音控制、物聯(lián)網(wǎng)設(shè)備等領(lǐng)域。該模塊通過(guò)語(yǔ)音識(shí)別技術(shù)使得設(shè)備能夠響應(yīng)特定的語(yǔ)音命令,實(shí)現(xiàn)人與機(jī)器之間的自然互動(dòng)。V20模塊具備高效、準(zhǔn)確的語(yǔ)音識(shí)別能力,能夠在不同噪聲環(huán)境下實(shí)現(xiàn)穩(wěn)定的識(shí)別效果,非常適合用于嵌入式語(yǔ)音控制系統(tǒng)。
V20模塊采用了先進(jìn)的語(yǔ)音識(shí)別技術(shù),并內(nèi)置了語(yǔ)音識(shí)別庫(kù),可以處理常見(jiàn)的語(yǔ)音命令識(shí)別任務(wù)。該模塊支持用戶自定義命令集和離線語(yǔ)音識(shí)別,這意味著它可以不依賴于云服務(wù)進(jìn)行語(yǔ)音指令的解析,大大提高了響應(yīng)速度并減少了網(wǎng)絡(luò)延遲。通過(guò)預(yù)先配置好的指令庫(kù),V20可以快速準(zhǔn)確地識(shí)別和執(zhí)行命令,適用于各種智能設(shè)備的控制應(yīng)用。
V20模塊具有較強(qiáng)的噪聲抑制能力,能夠在一定程度上消除環(huán)境噪音對(duì)語(yǔ)音識(shí)別的影響。即使在嘈雜的環(huán)境中,V20仍然能夠較為準(zhǔn)確地捕捉語(yǔ)音指令并進(jìn)行識(shí)別。這一特點(diǎn)使得V20非常適合用于現(xiàn)實(shí)環(huán)境中的語(yǔ)音控制,能夠保證在家居、辦公室等復(fù)雜環(huán)境中的良好性能。
該模塊的使用非常簡(jiǎn)單,通過(guò)串口(UART)與主控芯片(如STM32、Arduino等)進(jìn)行連接。V20模塊通過(guò)串口接收語(yǔ)音指令并將識(shí)別結(jié)果傳遞給主控芯片,主控芯片根據(jù)識(shí)別結(jié)果執(zhí)行相應(yīng)的操作。V20模塊支持多種接口,包括硬件串口、GPIO口等,方便開(kāi)發(fā)者根據(jù)實(shí)際應(yīng)用需求進(jìn)行靈活連接。
V20模塊不僅支持語(yǔ)音指令的識(shí)別,還能夠進(jìn)行語(yǔ)音反饋功能。結(jié)合語(yǔ)音播報(bào)模塊,V20可以實(shí)現(xiàn)語(yǔ)音反饋,增強(qiáng)用戶與設(shè)備的交互體驗(yàn)。比如,當(dāng)用戶發(fā)出某個(gè)命令時(shí),V20可以通過(guò)語(yǔ)音播報(bào)模塊返回操作的結(jié)果或狀態(tài),進(jìn)一步提升設(shè)備的智能化水平。
在開(kāi)發(fā)上,海凌科V20語(yǔ)音識(shí)別模塊有著較為簡(jiǎn)單的接口和靈活的配置選項(xiàng),開(kāi)發(fā)者可以根據(jù)需要進(jìn)行命令的設(shè)置、識(shí)別模式的選擇以及系統(tǒng)的調(diào)優(yōu)。其開(kāi)發(fā)支持豐富的文檔和工具,幫助開(kāi)發(fā)者快速實(shí)現(xiàn)語(yǔ)音識(shí)別功能并進(jìn)行二次開(kāi)發(fā)。
海凌科V20語(yǔ)音識(shí)別模塊是一款高性能、易于集成的語(yǔ)音識(shí)別解決方案,它不僅支持語(yǔ)音命令的離線識(shí)別,還具備出色的噪聲抑制能力,適用于各種語(yǔ)音控制應(yīng)用。憑借其強(qiáng)大的功能和簡(jiǎn)單的使用接口,V20模塊為嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備提供了便捷的語(yǔ)音交互功能,使得設(shè)備能夠更加智能化并與用戶進(jìn)行更自然的互動(dòng)。
二、硬件選型(搭建模型參考)
如果大家想自己搭建模型,完成這個(gè)項(xiàng)目的功能測(cè)試。
那么可以看參考下面的部分硬件模塊選型。
1.?STM32F103RCT6 主控芯片
? 作為項(xiàng)目的核心控制單元,負(fù)責(zé)處理所有輸入、輸出信號(hào),并控制其他硬件模塊的協(xié)同工作。
2.?BH1750 環(huán)境光強(qiáng)度傳感器
? 用于檢測(cè)環(huán)境的光照強(qiáng)度,獲取周圍環(huán)境的光線信息,以調(diào)整臺(tái)燈亮度并提供反饋。
3.?超聲波測(cè)距模塊
? 用于檢測(cè)人體距離書桌的距離,幫助判斷坐姿是否正確,提醒用戶保持合適的坐姿距離。
4.?0.96寸 SPI接口 OLED顯示屏
? 用于實(shí)時(shí)顯示臺(tái)燈的工作狀態(tài),包括光照強(qiáng)度、測(cè)量距離、學(xué)習(xí)時(shí)長(zhǎng)和燈光亮度等信息。
5.?HC-05 藍(lán)牙模塊
? 負(fù)責(zé)與手機(jī)APP進(jìn)行數(shù)據(jù)傳輸,通過(guò)藍(lán)牙實(shí)現(xiàn)設(shè)備與手機(jī)之間的無(wú)線通信,傳輸環(huán)境數(shù)據(jù)、學(xué)習(xí)時(shí)長(zhǎng)等信息。
6.?12V 2A 穩(wěn)壓電源
? 為整個(gè)系統(tǒng)提供穩(wěn)定的電源,確保各個(gè)硬件模塊能夠正常工作。
7.?白色 LED 燈泡(PWM控制)
? 作為臺(tái)燈的光源,通過(guò)PWM控制亮度,支持根據(jù)環(huán)境光和用戶設(shè)置自動(dòng)調(diào)整亮度。
8.?QT設(shè)計(jì)的Android手機(jī)APP
? 用于與硬件設(shè)備進(jìn)行交互,支持設(shè)置學(xué)習(xí)時(shí)長(zhǎng)、調(diào)整臺(tái)燈亮度、切換模式、查看攝像頭視頻等功能。
9.?ESP32+OV2640 監(jiān)控?cái)z像頭模塊
? 用于捕捉實(shí)時(shí)圖像,監(jiān)控學(xué)生的學(xué)習(xí)情況,實(shí)時(shí)傳輸視頻到手機(jī)APP。
10.?海凌科 V20 語(yǔ)音識(shí)別模塊
? 用于實(shí)現(xiàn)語(yǔ)音控制功能,用戶可以通過(guò)語(yǔ)音指令控制臺(tái)燈的開(kāi)關(guān)和亮度調(diào)節(jié)。
1.?SYN6288 語(yǔ)音播報(bào)模塊
? 用于實(shí)現(xiàn)語(yǔ)音反饋,當(dāng)臺(tái)燈的狀態(tài)發(fā)生變化時(shí),提供語(yǔ)音提醒,增強(qiáng)用戶體驗(yàn)。
三、STM32代碼設(shè)計(jì)
當(dāng)前項(xiàng)目使用的相關(guān)軟件工具,模塊源碼以及基礎(chǔ)學(xué)習(xí)的視頻教程可以去網(wǎng)盤里下載:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
【1】代碼框架
下面是完整的?main.c
?代碼框架示例,需要先封裝好其他子模塊代碼(如超聲波測(cè)距、環(huán)境光檢測(cè)、OLED顯示、語(yǔ)音控制、藍(lán)牙通訊等)已經(jīng)寫好并且封裝為相應(yīng)的庫(kù)函數(shù)。
#include?"stm32f10x.h"
#include?"gpio.h"
#include?"usart.h"
#include?"tim.h"
#include?"lcd.h"????//?OLED顯示
#include?"ultrasonic.h"??//?超聲波測(cè)距
#include?"bh1750.h"??????//?環(huán)境光強(qiáng)度傳感器
#include?"bluetooth.h"???//?藍(lán)牙通信
#include?"voice.h"???????//?語(yǔ)音識(shí)別模塊
#include?"pwm.h"?????????//?PWM控制LED亮度
//?定義常量
#define?MAX_STUDY_TIME?3600??//?最大學(xué)習(xí)時(shí)間閾值?(秒),可以根據(jù)實(shí)際需求調(diào)整
#define?DISTANCE_THRESHOLD?30??//?最小距離閾值(單位:cm)
//?全局變量
volatile?uint32_t?study_time?=?0;??//?學(xué)習(xí)時(shí)長(zhǎng)(單位:秒)
volatile?uint32_t?light_intensity?=?0;??//?環(huán)境光強(qiáng)度(單位:lx)
volatile?uint32_t?distance?=?0;??//?坐姿距離(單位:cm)
volatile?uint8_t?lamp_brightness?=?0;??//?臺(tái)燈亮度(0-100)
//?系統(tǒng)初始化
void?System_Init(void)?{
????//?初始化時(shí)鐘
????SystemClock_Config();
????
????//?初始化GPIO(如:LED、蜂鳴器等)
????GPIO_Init();
????
????//?初始化串口通信
????USART_Init();
????
????//?初始化定時(shí)器
????TIM_Init();
????
????//?初始化超聲波測(cè)距模塊
????Ultrasonic_Init();
????
????//?初始化環(huán)境光強(qiáng)度傳感器
????BH1750_Init();
????
????//?初始化藍(lán)牙模塊
????Bluetooth_Init();
????
????//?初始化PWM控制LED亮度
????PWM_Init();
????
????//?初始化OLED顯示屏
????OLED_Init();
????
????//?初始化語(yǔ)音模塊
????Voice_Init();
}
//?更新臺(tái)燈狀態(tài)
void?Update_Lamp_Status(void)?{
????//?獲取當(dāng)前環(huán)境光強(qiáng)度
????light_intensity?=?BH1750_Read_Light_Intensity();
????
????//?獲取當(dāng)前坐姿距離
????distance?=?Ultrasonic_Read_Distance();
????
????//?獲取當(dāng)前學(xué)習(xí)時(shí)長(zhǎng)
????study_time?=?TIM_Get_Elapsed_Time();??//?假設(shè)定時(shí)器提供了已經(jīng)消耗的時(shí)間
????
????//?處理學(xué)習(xí)時(shí)長(zhǎng)提醒
????if?(study_time?>=?MAX_STUDY_TIME)?{
????????Voice_Play_Message("學(xué)習(xí)時(shí)間過(guò)長(zhǎng),請(qǐng)休息一下!");
????}
????//?檢查坐姿距離
????if?(distance?<?DISTANCE_THRESHOLD)?{
????????Voice_Play_Message("距離過(guò)近,請(qǐng)注意坐姿!");
????}
????//?根據(jù)光照強(qiáng)度調(diào)整臺(tái)燈亮度
????if?(light_intensity?<?100)?{
????????lamp_brightness?=?100;??//?環(huán)境光較暗,開(kāi)燈并調(diào)高亮度
????????PWM_Set_Light_Brightness(lamp_brightness);
????????Voice_Play_Message("光線較暗,已開(kāi)燈");
????}?else?if?(light_intensity?>?200)?{
????????lamp_brightness?=?0;??//?環(huán)境光較強(qiáng),關(guān)閉燈
????????PWM_Set_Light_Brightness(lamp_brightness);
????????Voice_Play_Message("光線較強(qiáng),已關(guān)燈");
????}?else?{
????????lamp_brightness?=?50;??//?環(huán)境光適中,設(shè)置為中等亮度
????????PWM_Set_Light_Brightness(lamp_brightness);
????}
????//?更新OLED顯示屏
????OLED_Display_Status(distance,?light_intensity,?study_time,?lamp_brightness);
}
//?主循環(huán)
int?main(void)?{
????//?系統(tǒng)初始化
????System_Init();
????//?進(jìn)入主循環(huán)
????while?(1)?{
????????//?定期更新臺(tái)燈狀態(tài)
????????Update_Lamp_Status();
????????
????????//?檢查藍(lán)牙通信
????????Bluetooth_Check_Connection();
????????
????????//?處理語(yǔ)音識(shí)別指令
????????Voice_Check_Command();
????????
????????//?如果需要,定期清除學(xué)習(xí)時(shí)長(zhǎng)和報(bào)警
????????if?(/*?按下重置按鈕?*/)?{
????????????study_time?=?0;
????????????Voice_Play_Message("學(xué)習(xí)時(shí)長(zhǎng)已重置");
????????}
????????
????????//?其他功能處理...
????}
????return?0;
}
【2】代碼說(shuō)明
1.?系統(tǒng)初始化 (System_Init
):
? 初始化時(shí)鐘、GPIO、USART、定時(shí)器等系統(tǒng)基本功能。
? 初始化各個(gè)硬件模塊,包括超聲波測(cè)距、環(huán)境光傳感器、藍(lán)牙通信、OLED顯示屏等。
2.?臺(tái)燈狀態(tài)更新 (Update_Lamp_Status
):
? 獲取環(huán)境光強(qiáng)度、坐姿距離和學(xué)習(xí)時(shí)長(zhǎng)。
? 根據(jù)坐姿距離、學(xué)習(xí)時(shí)長(zhǎng)和環(huán)境光強(qiáng)度來(lái)控制臺(tái)燈亮度。
? 播放語(yǔ)音提示(例如:提醒用戶調(diào)整坐姿、學(xué)習(xí)時(shí)間過(guò)長(zhǎng)等)。
3.?主循環(huán) (main
):
? 在主循環(huán)中不斷更新臺(tái)燈狀態(tài),檢查藍(lán)牙連接狀態(tài),接收語(yǔ)音命令。
? 如果按下重置按鈕,可以清除學(xué)習(xí)時(shí)長(zhǎng)和報(bào)警。
【2】模塊和函數(shù)
??超聲波測(cè)距模塊:提供?Ultrasonic_Init
?和?Ultrasonic_Read_Distance
?函數(shù)來(lái)初始化和獲取距離。
??環(huán)境光強(qiáng)度傳感器(BH1750):提供?BH1750_Init
?和?BH1750_Read_Light_Intensity
?函數(shù)來(lái)初始化和獲取光照強(qiáng)度。
??藍(lán)牙模塊:提供?Bluetooth_Init
?和?Bluetooth_Check_Connection
?函數(shù)來(lái)初始化和檢查藍(lán)牙連接。
??語(yǔ)音模塊:提供?Voice_Init
?和?Voice_Play_Message
?函數(shù)來(lái)初始化語(yǔ)音模塊和播放語(yǔ)音提示。
??PWM控制臺(tái)燈亮度:提供?PWM_Init
?和?PWM_Set_Light_Brightness
?函數(shù)來(lái)控制臺(tái)燈亮度。
??OLED顯示屏:提供?OLED_Init
?和?OLED_Display_Status
?函數(shù)來(lái)初始化顯示屏并實(shí)時(shí)更新顯示內(nèi)容。
??定時(shí)器:提供?TIM_Init
?和?TIM_Get_Elapsed_Time
?函數(shù)來(lái)初始化定時(shí)器和獲取學(xué)習(xí)時(shí)長(zhǎng)。
四、Qt上位機(jī)代碼設(shè)計(jì)
【1】C++版本的代碼示例
#include?<QApplication>
#include?<QWidget>
#include?<QLabel>
#include?<QVBoxLayout>
#include?<QHBoxLayout>
#include?<QPushButton>
#include?<QSlider>
#include?<QGroupBox>
#include?<QPalette>
#include?<QString>
class?SmartDeskLampApp?:?public?QWidget?{
????Q_OBJECT
public:
????SmartDeskLampApp(QWidget?*parent?=?nullptr)?:?QWidget(parent)?{
????????setWindowTitle("智能臺(tái)燈控制");
????????setGeometry(100,?100,?400,?600);??//?設(shè)置窗口初始大小
????????setStyleSheet("background-color:?#2e2e2e;?color:?#ffffff;?font-size:?18px;");??//?設(shè)置背景色和字體樣式
????????initUI();
????}
private?slots:
????void?update_brightness_label(int?value)?{
????????brightnessLabel->setText("亮度:"?+?QString::number(value)?+?"%");
????}
????void?turn_on_light()?{
????????studyDurationLabel->setText("學(xué)習(xí)時(shí)長(zhǎng):?1?分鐘");??//?示例:開(kāi)燈后開(kāi)始記錄學(xué)習(xí)時(shí)長(zhǎng)
????}
????void?turn_off_light()?{
????????studyDurationLabel->setText("學(xué)習(xí)時(shí)長(zhǎng):?0?分鐘");??//?示例:關(guān)燈后停止學(xué)習(xí)時(shí)長(zhǎng)記錄
????}
private:
????void?initUI()?{
????????QVBoxLayout?*mainLayout?=?new?QVBoxLayout;
????????//?顯示信息的標(biāo)簽
????????lightIntensityLabel?=?new?QLabel("光照強(qiáng)度:?500?lux");
????????distanceLabel?=?new?QLabel("測(cè)量距離:?30?cm");
????????studyDurationLabel?=?new?QLabel("學(xué)習(xí)時(shí)長(zhǎng):?0?分鐘");
????????lightBrightnessLabel?=?new?QLabel("臺(tái)燈亮度:?50%");
????????//?設(shè)置標(biāo)簽樣式
????????for?(QLabel?*label?:?{lightIntensityLabel,?distanceLabel,?studyDurationLabel,?lightBrightnessLabel})?{
????????????label->setAlignment(Qt::AlignCenter);
????????}
????????//?添加顯示標(biāo)簽
????????mainLayout->addWidget(lightIntensityLabel);
????????mainLayout->addWidget(distanceLabel);
????????mainLayout->addWidget(studyDurationLabel);
????????mainLayout->addWidget(lightBrightnessLabel);
????????//?臺(tái)燈亮度調(diào)整
????????QGroupBox?*brightnessGroup?=?createBrightnessControl();
????????mainLayout->addWidget(brightnessGroup);
????????//?臺(tái)燈開(kāi)關(guān)
????????QGroupBox?*powerButtonGroup?=?createPowerButton();
????????mainLayout->addWidget(powerButtonGroup);
????????setLayout(mainLayout);
????}
????QGroupBox*?createBrightnessControl()?{
????????QGroupBox?*brightnessGroup?=?new?QGroupBox("臺(tái)燈亮度調(diào)節(jié)");
????????QSlider?*slider?=?new?QSlider(Qt::Horizontal);
????????slider->setRange(0,?100);
????????slider->setValue(50);
????????slider->setStyleSheet("QSlider::groove:horizontal?{?background:?#4e4e4e;?height:?10px;?border-radius:?5px;?}"
?????????????????????????????"QSlider::handle:horizontal?{?background:?#00FF00;?border-radius:?5px;?width:?20px;?}");
????????connect(slider,?&QSlider::valueChanged,?this,?&SmartDeskLampApp::update_brightness_label);
????????brightnessLabel?=?new?QLabel("亮度:50%");
????????brightnessLabel->setAlignment(Qt::AlignCenter);
????????QVBoxLayout?*layout?=?new?QVBoxLayout;
????????layout->addWidget(slider);
????????layout->addWidget(brightnessLabel);
????????brightnessGroup->setLayout(layout);
????????return?brightnessGroup;
????}
????QGroupBox*?createPowerButton()?{
????????QGroupBox?*group?=?new?QGroupBox("臺(tái)燈開(kāi)關(guān)");
????????QPushButton?*onButton?=?new?QPushButton("開(kāi)燈");
????????QPushButton?*offButton?=?new?QPushButton("關(guān)燈");
????????onButton->setStyleSheet("background-color:?#28a745;?color:?white;?font-size:?18px;?padding:?10px;?border-radius:?5px;");
????????offButton->setStyleSheet("background-color:?#dc3545;?color:?white;?font-size:?18px;?padding:?10px;?border-radius:?5px;");
????????connect(onButton,?&QPushButton::clicked,?this,?&SmartDeskLampApp::turn_on_light);
????????connect(offButton,?&QPushButton::clicked,?this,?&SmartDeskLampApp::turn_off_light);
????????QHBoxLayout?*layout?=?new?QHBoxLayout;
????????layout->addWidget(onButton);
????????layout->addWidget(offButton);
????????group->setLayout(layout);
????????return?group;
????}
private:
????QLabel?*lightIntensityLabel;
????QLabel?*distanceLabel;
????QLabel?*studyDurationLabel;
????QLabel?*lightBrightnessLabel;
????QLabel?*brightnessLabel;
};
int?main(int?argc,?char?*argv[])?{
????QApplication?app(argc,?argv);
????SmartDeskLampApp?window;
????window.show();
????return?app.exec();
}
【2】Python版本代碼示例
import?sys
from?PyQt5.QtWidgets?import?QApplication,?QWidget,?QLabel,?QVBoxLayout,?QHBoxLayout,?QPushButton,?QSlider,?QGroupBox
from?PyQt5.QtCore?import?Qt
from?PyQt5.QtGui?import?QColor,?QPalette
class?SmartDeskLampApp(QWidget):
????def?__init__(self):
????????super().__init__()
????????self.setWindowTitle("智能臺(tái)燈控制")
????????self.setGeometry(100,?100,?400,?600)??#?設(shè)置窗口初始大小
????????self.setStyleSheet("background-color:?#2e2e2e;?color:?#ffffff;?font-size:?18px;")??#?設(shè)置背景色和字體樣式
????????self.initUI()
????def?initUI(self):
????????main_layout?=?QVBoxLayout()
????????#?顯示信息的標(biāo)簽
????????self.light_intensity_label?=?QLabel("光照強(qiáng)度:?500?lux")
????????self.distance_label?=?QLabel("測(cè)量距離:?30?cm")
????????self.study_duration_label?=?QLabel("學(xué)習(xí)時(shí)長(zhǎng):?0?分鐘")
????????self.light_brightness_label?=?QLabel("臺(tái)燈亮度:?50%")
????????#?設(shè)置標(biāo)簽樣式
????????for?label?in?[self.light_intensity_label,?self.distance_label,?self.study_duration_label,?self.light_brightness_label]:
????????????label.setAlignment(Qt.AlignCenter)
????????#?添加顯示標(biāo)簽
????????main_layout.addWidget(self.light_intensity_label)
????????main_layout.addWidget(self.distance_label)
????????main_layout.addWidget(self.study_duration_label)
????????main_layout.addWidget(self.light_brightness_label)
????????#?臺(tái)燈亮度調(diào)整
????????brightness_group?=?self.create_brightness_control()
????????main_layout.addWidget(brightness_group)
????????#?臺(tái)燈開(kāi)關(guān)
????????power_button_group?=?self.create_power_button()
????????main_layout.addWidget(power_button_group)
????????self.setLayout(main_layout)
????def?create_brightness_control(self):
????????brightness_group?=?QGroupBox("臺(tái)燈亮度調(diào)節(jié)")
????????slider?=?QSlider(Qt.Horizontal)
????????slider.setRange(0,?100)
????????slider.setValue(50)
????????slider.setStyleSheet("QSlider::groove:horizontal?{?background:?#4e4e4e;?height:?10px;?border-radius:?5px;?}"
?????????????????????????????"QSlider::handle:horizontal?{?background:?#00FF00;?border-radius:?5px;?width:?20px;?}")
????????slider.valueChanged.connect(self.update_brightness_label)
????????brightness_label?=?QLabel("亮度:50%")
????????brightness_label.setAlignment(Qt.AlignCenter)
????????layout?=?QVBoxLayout()
????????layout.addWidget(slider)
????????layout.addWidget(brightness_label)
????????brightness_group.setLayout(layout)
????????self.brightness_label?=?brightness_label
????????return?brightness_group
????def?create_power_button(self):
????????group?=?QGroupBox("臺(tái)燈開(kāi)關(guān)")
????????on_button?=?QPushButton("開(kāi)燈")
????????off_button?=?QPushButton("關(guān)燈")
????????on_button.setStyleSheet("background-color:?#28a745;?color:?white;?font-size:?18px;?padding:?10px;?border-radius:?5px;")
????????off_button.setStyleSheet("background-color:?#dc3545;?color:?white;?font-size:?18px;?padding:?10px;?border-radius:?5px;")
????????on_button.clicked.connect(self.turn_on_light)
????????off_button.clicked.connect(self.turn_off_light)
????????layout?=?QHBoxLayout()
????????layout.addWidget(on_button)
????????layout.addWidget(off_button)
????????group.setLayout(layout)
????????return?group
????def?update_brightness_label(self,?value):
????????self.brightness_label.setText(f"亮度:{value}%")
????def?turn_on_light(self):
????????self.study_duration_label.setText("學(xué)習(xí)時(shí)長(zhǎng):?1?分鐘")??#?示例:開(kāi)燈后開(kāi)始記錄學(xué)習(xí)時(shí)長(zhǎng)
????def?turn_off_light(self):
????????self.study_duration_label.setText("學(xué)習(xí)時(shí)長(zhǎng):?0?分鐘")??#?示例:關(guān)燈后停止學(xué)習(xí)時(shí)長(zhǎng)記錄
if?__name__?==?'__main__':
????app?=?QApplication(sys.argv)
????window?=?SmartDeskLampApp()
????window.show()
????sys.exit(app.exec_())
五、總結(jié)
本項(xiàng)目設(shè)計(jì)并實(shí)現(xiàn)了一款基于STM32的智能坐姿矯正臺(tái)燈,結(jié)合了環(huán)境監(jiān)測(cè)、燈光控制、學(xué)習(xí)時(shí)長(zhǎng)記錄、語(yǔ)音控制等多種功能,旨在為學(xué)生提供一個(gè)更加智能、健康的學(xué)習(xí)環(huán)境。通過(guò)集成超聲波測(cè)距、環(huán)境光強(qiáng)度感應(yīng)、語(yǔ)音識(shí)別和藍(lán)牙通信等技術(shù),該臺(tái)燈不僅能夠?qū)崟r(shí)監(jiān)測(cè)學(xué)習(xí)環(huán)境,還能提供個(gè)性化的學(xué)習(xí)提醒和疲勞預(yù)警,幫助學(xué)生調(diào)整坐姿,保持正確的用眼習(xí)慣,從而有效提高學(xué)習(xí)效率和健康水平。
項(xiàng)目中使用的硬件如STM32F103RCT6主控芯片、HC-05藍(lán)牙模塊、ESP32-CAM監(jiān)控?cái)z像頭等,確保了系統(tǒng)的穩(wěn)定性和可擴(kuò)展性。而在軟件方面,利用Keil5開(kāi)發(fā)環(huán)境對(duì)STM32進(jìn)行了編程,確保了硬件控制的精確性。同時(shí),通過(guò)Qt框架開(kāi)發(fā)的Android APP,用戶可以遠(yuǎn)程控制臺(tái)燈的亮度、查看學(xué)習(xí)時(shí)長(zhǎng)、切換工作模式等功能,實(shí)現(xiàn)了人性化的操作和實(shí)時(shí)數(shù)據(jù)反饋。
本項(xiàng)目不僅具備了智能控制和健康提醒功能,還通過(guò)藍(lán)牙和視頻監(jiān)控功能,方便家長(zhǎng)實(shí)時(shí)了解孩子的學(xué)習(xí)狀態(tài),避免了干擾,提供了更加貼心的解決方案。此外,語(yǔ)音識(shí)別與語(yǔ)音播報(bào)的應(yīng)用,使得操作更加便捷,通過(guò)語(yǔ)音指令即可進(jìn)行燈光開(kāi)關(guān)與亮度調(diào)節(jié),提升了用戶體驗(yàn)。
本項(xiàng)目不僅展示了現(xiàn)代智能硬件與嵌入式開(kāi)發(fā)的結(jié)合,也通過(guò)對(duì)用戶需求的細(xì)致研究,設(shè)計(jì)了符合實(shí)際應(yīng)用的功能模塊。項(xiàng)目的成功實(shí)現(xiàn)不僅具有較強(qiáng)的實(shí)用價(jià)值,同時(shí)也為智能硬件的創(chuàng)新應(yīng)用提供了一個(gè)參考范例。未來(lái),隨著技術(shù)的不斷發(fā)展,本項(xiàng)目可以進(jìn)一步擴(kuò)展更多功能,如人工智能分析學(xué)習(xí)數(shù)據(jù)、自動(dòng)調(diào)整臺(tái)燈亮度和學(xué)習(xí)提醒等,使其成為一款更為全面和智能的學(xué)習(xí)輔助工具。