況昊
摘要:近幾年來隨著物聯(lián)網(wǎng)的發(fā)展以及低功耗藍(lán)牙的廣泛應(yīng)用,可穿戴的智能設(shè)備和微型控制器設(shè)備受到廣泛的關(guān)注?;贜ordic NRF51822開發(fā)的藍(lán)牙智能牙刷是一款可以與手機(jī)APP通過低功耗藍(lán)牙進(jìn)行連接并且可以相互操作的電動(dòng)牙刷。主要實(shí)現(xiàn)了低功耗、手機(jī)與牙刷互動(dòng)、大數(shù)據(jù)存儲(chǔ)、pH檢測(cè)、壓力檢測(cè)并反饋、故障報(bào)警等功能。該牙刷是充分利用了NRF51822的優(yōu)越性能的同時(shí)考慮到現(xiàn)在人們對(duì)手機(jī)的依賴以及對(duì)功能多樣性的要求,并且結(jié)合口腔醫(yī)學(xué)設(shè)計(jì)而成。在考慮到物聯(lián)網(wǎng)這一熱門理念時(shí),將手機(jī)通過APP和藍(lán)牙通信與牙刷結(jié)合起來形成一個(gè)完整的循環(huán)給用戶更好、更新奇的體驗(yàn)。
關(guān)鍵詞:物聯(lián)網(wǎng);低功耗;藍(lán)牙手機(jī);多功能
中圖分類號(hào):F27
文獻(xiàn)標(biāo)識(shí)碼:A
doi:10.19311/j.cnki.16723198.2016.13.022
1 引言
1.1 項(xiàng)目背景
物聯(lián)網(wǎng)即“Internet of things”一般簡(jiǎn)稱為IoT,是新一代信息技術(shù)的一部分也是現(xiàn)代科技提倡的信息化發(fā)展的重要環(huán)節(jié)。顧名思義,物聯(lián)網(wǎng)就是物與物相連接,包含兩個(gè)重要組成部分:相互連接通訊的網(wǎng)絡(luò)和途徑;具體連接的智能設(shè)備或者傳感器。因此創(chuàng)新就是物聯(lián)網(wǎng)的關(guān)鍵,而用戶要求和用戶體驗(yàn)則是我們進(jìn)行物聯(lián)網(wǎng)開發(fā)的靈魂。Nordic推出的自帶低功耗藍(lán)牙模塊的MCU—NRF51822是一款非常強(qiáng)大的,高度靈活的多協(xié)議的系統(tǒng)級(jí)芯片,非常適合用于藍(lán)牙智能和24GHz的超低功耗無線應(yīng)用?;贜RF51822開發(fā)的智能牙刷就是基于物聯(lián)網(wǎng)理念進(jìn)行開發(fā)的一款智能產(chǎn)品,通過低功耗藍(lán)牙與手機(jī)通訊,手機(jī)APP通過WiFi或者運(yùn)營(yíng)商提供的移動(dòng)網(wǎng)絡(luò)與服務(wù)器連接傳遞有用信息。同時(shí)注重創(chuàng)新首次結(jié)合口腔醫(yī)學(xué)健康知識(shí)把PH模塊以及檢測(cè)牙齒所受到壓力、適宜個(gè)人調(diào)節(jié)牙刷震動(dòng)頻率等功能集成起來,能夠給用戶提供一個(gè)自定義的健康的能夠直接監(jiān)控口腔以及刷牙過程中各個(gè)參數(shù)的有科技含量的智能牙刷。
1.2 設(shè)計(jì)思路
本項(xiàng)目由于涉及功能較多,使用的芯片NRF51822也只是一款Nordic推出的自帶低功耗藍(lán)牙協(xié)議的MCU并不能進(jìn)行多線程操作,因此需要單個(gè)功能模塊進(jìn)行詳細(xì)設(shè)計(jì)之后,結(jié)合用戶要求以及軟件合理性并且考慮到功耗問題,對(duì)各個(gè)功能模塊分配優(yōu)先級(jí)并按照不同的優(yōu)先級(jí)進(jìn)行整合從而形成一個(gè)完整的符合預(yù)期目標(biāo)的產(chǎn)品。同時(shí)按照需求配合手機(jī)調(diào)試一些互動(dòng)的功能,讓牙刷與手機(jī)以及服務(wù)器形成一個(gè)局部的物聯(lián)網(wǎng)系統(tǒng)。
1.3 本文實(shí)現(xiàn)的目標(biāo)
本文編寫的目的是:一是用實(shí)例來講述物聯(lián)網(wǎng)的概念,向大家普及一下項(xiàng)目涉及到的物聯(lián)網(wǎng)相關(guān)知識(shí);二是向大家詳細(xì)介紹關(guān)于Nordic推出的NRF51822芯片的相關(guān)性能;三是給讀者提供一些在NRF51822平臺(tái)上開發(fā)的經(jīng)驗(yàn)。本文的主要針對(duì)一些有相關(guān)基礎(chǔ)的對(duì)物聯(lián)網(wǎng)開發(fā)有興趣的或者想學(xué)習(xí)一下NRF51822平臺(tái)進(jìn)行智能穿戴開發(fā)的相關(guān)人員。
2 功能需求分析
本項(xiàng)目中對(duì)牙刷的功能需求主要分三部分:一是牙刷本身處理功能;二是通信功能;三是與手機(jī)互動(dòng)功能。其中通訊部分藍(lán)牙協(xié)議是芯片自帶,只需要配置相關(guān)模式即可。牙刷本身功能包括:一是兩個(gè)按鍵一個(gè)支持單擊、雙擊、長(zhǎng)按,一個(gè)需要識(shí)別單擊和長(zhǎng)按;二是能夠監(jiān)測(cè)牙刷頭與牙齒之間的壓力值;三是能夠調(diào)節(jié)馬達(dá)震動(dòng)頻率和模式;四是能夠測(cè)量口腔pH值;五是能夠永久存儲(chǔ)100KB的數(shù)據(jù)且不會(huì)斷電擦除;六是有實(shí)時(shí)時(shí)間;七是低電壓保護(hù);八是自動(dòng)記錄每次刷牙的數(shù)據(jù)。牙刷與手機(jī)互動(dòng)的功能模塊有:一是手機(jī)發(fā)送命令改變馬達(dá)震動(dòng)頻率和運(yùn)行模式;二是手機(jī)更改牙刷藍(lán)牙設(shè)備名稱;三是更改三個(gè)壓力閥值;四是牙刷向手機(jī)發(fā)送PH值、壓力值、按鍵事件等;五是手機(jī)讀取牙刷上儲(chǔ)存的刷牙信息;六是手機(jī)向牙刷同步時(shí)間等等。
3 部分功能模塊詳細(xì)設(shè)計(jì)
下面將講述部分功能模塊的設(shè)計(jì)思路以及實(shí)現(xiàn)途徑。
3.1 按鍵設(shè)計(jì)
本項(xiàng)目要求按鍵button_0支持單擊、雙擊、長(zhǎng)按,按鍵button_1支持單擊長(zhǎng)按,因此我們要詳細(xì)考慮的按鍵的每一個(gè)狀態(tài)和可能性來進(jìn)行功能設(shè)計(jì),防止出現(xiàn)錯(cuò)誤的事件。在此我定義了四個(gè)基本按鍵狀態(tài):空鍵、單擊、長(zhǎng)按、雙擊。定義的基本按鍵事件是:(1)單擊,按下時(shí)間小于12s;(2)長(zhǎng)按,按下時(shí)間大于等于12s。我在按鍵基本定義的基礎(chǔ)之上進(jìn)行擴(kuò)展:?jiǎn)螕糁蟛粫?huì)立即返回而是繼續(xù)監(jiān)控按鍵狀態(tài)在06s之內(nèi)如果再次產(chǎn)生單擊事件就返回雙擊事件,如果06s之內(nèi)沒有單擊事件產(chǎn)生就返回單擊事件。因此最終的按鍵效果為:長(zhǎng)按只會(huì)立即返回長(zhǎng)按事件;時(shí)間間隔在06s以內(nèi)的單擊將在第二次單擊事件產(chǎn)生后立即返回雙擊時(shí)間,同時(shí)兩次單擊時(shí)間取消;單擊事件是要等06s后檢測(cè)到06s內(nèi)再無單擊事件產(chǎn)生才會(huì)返回。這樣的設(shè)計(jì)就摒除了長(zhǎng)按對(duì)單雙擊事件的影響,同時(shí)防止了多次單擊產(chǎn)生對(duì)單雙擊事件的正確返回造成影響。在做好按鍵功能后按鍵button_0需要控制APP的某些功能因此在button_0的按鍵事件返回時(shí)要發(fā)送到手機(jī)上,而button_1則需要控制其他功能,稍后再講。
3.2 PH模塊的應(yīng)用
本牙刷使用的是一個(gè)獨(dú)立的PH模塊放入口中,用AD采樣的方法讀取PH模塊產(chǎn)生的電壓變化對(duì)應(yīng)標(biāo)準(zhǔn)酸堿度的溶液定義出準(zhǔn)確的PH值。NRF51822提供了8個(gè)AIN(Analog inputDigital I/O)PIN,支持ADC、LPCOMP等輸入。我們PH模塊的AD采樣使用霍爾開關(guān)進(jìn)行觸發(fā),當(dāng)開關(guān)處于高電平的時(shí)候開啟控制AD采樣的timer,使之不斷的進(jìn)行AD轉(zhuǎn)換讀取PH模塊的電壓變化并發(fā)送到手機(jī)上可以讓手機(jī)讀取當(dāng)前口腔PH信息,當(dāng)開關(guān)處于低電平的時(shí)候關(guān)閉控制AD采樣的timer。
3.3 壓力檢測(cè)功能
檢測(cè)牙刷頭與牙齒之間的壓力并不是一個(gè)非常簡(jiǎn)單的事,我們軟件硬件考慮過多種壓力傳感器都不是很適用,同時(shí)高精度高適應(yīng)性的壓力傳感器的價(jià)格也非常高不利于我們控制生產(chǎn)成本。因此我們轉(zhuǎn)換思路利用電磁感應(yīng)來實(shí)現(xiàn),利用杠桿原理將牙刷頭的壓力產(chǎn)生的位移在牙刷中間部分用檢測(cè)電磁的芯片和線圈進(jìn)行檢測(cè)來測(cè)取位移變化結(jié)合使用的彈簧規(guī)格參數(shù)算出牙刷頭與牙齒間的壓力值。在軟件上我用IO口模擬spi連接電磁檢測(cè)的傳感器來進(jìn)行通信。讀出的數(shù)據(jù)轉(zhuǎn)換成對(duì)應(yīng)的壓力值后需要判斷屬于那個(gè)壓力段位,我一般分為輕、中、重三個(gè)壓力階段并且用藍(lán)、綠、紅三個(gè)燈的閃爍來表示,同時(shí)記錄刷牙過程中停留在三個(gè)階段的時(shí)間與刷牙的起始時(shí)間一起存進(jìn)牙刷內(nèi)存。
3.4 馬達(dá)震動(dòng)頻率控制
我牙刷上的馬達(dá)是震動(dòng)式的而不是旋轉(zhuǎn)馬達(dá),硬件上是用的兩個(gè)PIN來進(jìn)行控制,因此控制IO口的供電情況來控制馬達(dá)震動(dòng)的頻率和強(qiáng)度。根據(jù)產(chǎn)品定義我給馬達(dá)設(shè)計(jì)了三個(gè)工作檔位以及一個(gè)自定義模式,三個(gè)工作檔位是由改變控制馬達(dá)震動(dòng)的PWM的相關(guān)參數(shù)來定義的,而自定義模式則是用戶體驗(yàn)過后根據(jù)自己的感受定義相關(guān)PWM參數(shù)并存入牙刷內(nèi)存讓它成為馬達(dá)工作的一個(gè)新的檔位。在馬達(dá)開啟震動(dòng)之后一段時(shí)間在無外部觸發(fā)條件控制的情況下如按鍵,會(huì)自動(dòng)關(guān)閉馬達(dá)。
3.5 實(shí)時(shí)時(shí)間功能
實(shí)時(shí)時(shí)間功能是要求在不斷電不重啟的情況牙刷能夠產(chǎn)生實(shí)時(shí)時(shí)間方便記錄刷牙的時(shí)間、牙刷頭使用壽命報(bào)警、定時(shí)自動(dòng)校驗(yàn)壓力偏轉(zhuǎn)值等功能,它能夠與手機(jī)時(shí)間進(jìn)行同步。
3.6 牙刷電量讀取與低電壓保護(hù)
同PH模塊一樣我們用AD采樣的方法讀取電池電量并發(fā)送到手機(jī),這個(gè)電量讀取的timer不僅僅是被手機(jī)讀取電量命令進(jìn)行控制,也可以被其它條件進(jìn)行觸發(fā)即在每次刷牙結(jié)束后自動(dòng)讀取電量如果電壓過低立即進(jìn)入低功耗模式,除非充電使電壓抬高到一定閥值才能正常工作。
3.7 數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)存儲(chǔ)對(duì)于我開發(fā)的智能牙刷整個(gè)產(chǎn)品來說也是比較重要的,它要求能夠存儲(chǔ)每次刷牙的起始時(shí)間、刷牙過程中在每個(gè)壓力段位停留的時(shí)間、手機(jī)更改牙刷藍(lán)牙設(shè)備名稱數(shù)據(jù)、牙刷刷頭壽命期限、馬達(dá)自定義模式數(shù)據(jù)、手機(jī)定義的壓力段位閥值、牙刷次數(shù)等等。要求是能夠被手機(jī)寫入也能被牙刷自動(dòng)錄入。這些存儲(chǔ)的數(shù)據(jù)不會(huì)因?yàn)閿嚯娀蛘咧貑⒈徊脸?,除非是被相關(guān)命令或者專業(yè)的燒錄工具才能清楚我們?cè)O(shè)定的存儲(chǔ)空間。
4 智能牙刷功能整合和代碼實(shí)現(xiàn)設(shè)計(jì)
4.1 功能優(yōu)先級(jí)處理
由于功能眾多,并且要與手機(jī)相互配合因此要用不同的優(yōu)先級(jí)來整合不同的功能防止在運(yùn)行的過程中出現(xiàn)不必要的邏輯性的錯(cuò)誤。如下是部分功能的邏輯性和優(yōu)先級(jí)處理。
4.1.1 無線充電
在檢測(cè)到牙刷處于無線充電的狀態(tài)下時(shí),自動(dòng)disable所有的按鍵功能、關(guān)閉所有的LED燈、并且防止馬達(dá)正在工作時(shí)直接充電也要關(guān)閉馬達(dá),一旦從充電環(huán)上拿開時(shí)自動(dòng)初始化按鍵。
4.1.2 壓力檢測(cè)模塊
壓力檢測(cè)由于可以受到手機(jī)控制因此對(duì)執(zhí)行步驟的邏輯性要求比較嚴(yán)格,每次執(zhí)行壓力檢測(cè)模塊的時(shí)候都要讀取牙刷內(nèi)存空間中壓力參數(shù)所處的地址判斷用戶是否設(shè)置了相關(guān)參數(shù)并且判斷是否符合規(guī)范,如果沒有就按照默認(rèn)的參數(shù)執(zhí)行,有的話如果不規(guī)范則按照默認(rèn)參數(shù)執(zhí)行反之按照用戶設(shè)定執(zhí)行。在按鍵觸發(fā)壓力檢測(cè)的時(shí)候壓力檢測(cè)模塊優(yōu)先于PH功能模塊,因此先禁用一下PH模塊。
4.1.3 牙刷自動(dòng)存儲(chǔ)數(shù)據(jù)
牙刷儲(chǔ)存數(shù)據(jù)是在牙刷事件結(jié)束之后存入牙刷內(nèi)存,但是由于牙刷事件結(jié)束的觸發(fā)條件比較多并且不適合放到馬達(dá)控制里面,因此需要考慮到不同情形下的自動(dòng)儲(chǔ)存數(shù)據(jù)。一是button_1單擊按鍵循環(huán)到馬達(dá)空檔的時(shí)候存儲(chǔ)存數(shù)據(jù);二是長(zhǎng)按直接關(guān)閉馬達(dá)震動(dòng)時(shí)存儲(chǔ);三是當(dāng)馬達(dá)沒有接到關(guān)閉命令而自動(dòng)關(guān)閉時(shí)儲(chǔ)存刷牙信息。
4.2 所有按鍵事件控制
Button_0產(chǎn)生的三個(gè)按鍵事件在產(chǎn)生的時(shí)候自動(dòng)發(fā)送到手機(jī)上,當(dāng)APP檢測(cè)到相關(guān)數(shù)據(jù),就會(huì)執(zhí)行相關(guān)的操作,實(shí)現(xiàn)的主要代碼如下:
該功能主要由按鍵timer進(jìn)行監(jiān)控電平變化,用兩個(gè)switch語句進(jìn)行判斷并在下一個(gè)switch語句中判斷出單擊、雙擊、長(zhǎng)按事件后直接通過ble_nus_string_send函數(shù)發(fā)送到手機(jī)。而button_0是單擊控制馬達(dá)工作模式,長(zhǎng)按關(guān)閉馬達(dá)工作。點(diǎn)擊開啟馬達(dá)的同時(shí)開始檢測(cè)壓力值并向手機(jī)傳輸壓力值,因此按鍵的同時(shí)先行關(guān)閉PH模塊timer,防止數(shù)據(jù)傳輸沖突同時(shí)disable控制PH模塊的霍爾開關(guān)防止誤觸發(fā)。單擊的同時(shí)還要分析牙刷是否存有用戶設(shè)定的自定義模式,有則從自定義模式、一、二、三、關(guān)閉循環(huán),沒有的話進(jìn)行一、二、三、關(guān)閉循環(huán)。并且在關(guān)閉之后檢測(cè)電壓等等。實(shí)現(xiàn)代碼如下:
5 開發(fā)總結(jié)
在基于NRF51822的智能牙刷的開發(fā)過程中,我加深了對(duì)NRF51822平臺(tái)的了解,本次開發(fā)項(xiàng)目用到了NRF51822的低功耗藍(lán)牙、電源管理、AD采樣、PWM控制、Pstorage管理、timer的控制使用等相關(guān)功能,同時(shí)讓我對(duì)功能設(shè)計(jì)的邏輯性和優(yōu)先級(jí)考慮得更加完善,本文主要是提供一些功能實(shí)現(xiàn)思路和產(chǎn)品功能模塊設(shè)計(jì)理念,同時(shí)希望促進(jìn)更多正在或者即將進(jìn)行NRF51822開發(fā)的軟件人員進(jìn)行技術(shù)交流和溝通。最后感謝老師和同學(xué)對(duì)我的指導(dǎo)和幫助,我將更加努力的學(xué)習(xí)軟件開發(fā)相關(guān)知識(shí)并在今后工作項(xiàng)目中得以實(shí)現(xiàn)和提高。