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