李澤豪
(華南師范大學,廣東廣州,510006)
當今快節(jié)奏的生活方式,使得人們在忙于各類事工作事物時,常常忘記了按時飲用杯中的水來給自己身體補充水分,而當人們想起要飲用時,杯中的水的水溫早已不適宜飲用了。在這種背景下,許多保溫杯墊應時而生。但是目前的保溫杯墊,功能較為單一,不具備手機端APP遠程控制功能,還存在著以下的不足:沒有定時提醒用戶飲水的功能;不具備飲水量監(jiān)測功能;不能依據(jù)個人喜好設(shè)定自己的飲水習慣等。而本文設(shè)計的智能杯墊,在改進了以上問題的基礎(chǔ)上,還加入了物聯(lián)網(wǎng)功能,使得用戶可以在手機端APP查看每日的飲水量和設(shè)定補水提醒的時間間隔,大大提升了使用的便捷性和用戶的體驗感。
基于物聯(lián)網(wǎng)的智能杯墊由STC15F2系列微控制器和各類傳感器及外圍電路構(gòu)成,其構(gòu)成框圖如圖1所示。
圖1 基于物聯(lián)網(wǎng)的智能杯墊的構(gòu)成框圖
為了最大化降低生產(chǎn)成本和提高產(chǎn)品落地的可行性,本智能杯墊采用了晶宏STC15F2K60S2系列MCU作為控制器。它的內(nèi)部集成了RC振蕩電路,因此無需外接晶振,有利于減少產(chǎn)品的體積和生產(chǎn)成本。不僅如此,它在集成了38個I/O口、2路UART和2K字節(jié)的大容量SRAM的同時,還具有超低價位、超低功耗和高可靠性的特點[1],能夠滿足智能杯墊的數(shù)據(jù)采集和控制的要求。
為了監(jiān)測用戶的飲水量,該杯墊使用了精度達24bits的 HX711模數(shù)轉(zhuǎn)換模塊來采集壓力傳感器的數(shù)據(jù)[2]。由于水的密度是不變的,所以可以從水杯重量的變化值,推導出飲水量的多少。具體計算如下:
式中:Vi為第i次飲用后水杯中剩余的水的體積,mi為第i次飲用后水杯和水的總重量,VΔ為本次的飲水量。并為了計算方便,取ρ水=1.0g/cm3。
溫度檢測功能使用了DS18B20數(shù)字溫度傳感器[3],其測量范圍為-55℃~125℃,分辨率達±0.5℃,能夠滿足水杯溫度的精確采集要求,使得控制器能夠根據(jù)水杯底部的溫度值與設(shè)定的閾值作對比,完成自動加熱保溫功能。
為實現(xiàn)高質(zhì)量地、穩(wěn)定地與服務器無線通信,該杯墊選用了安可信公司的ESP-01模塊。該WiFi模塊的傳輸距離可達400米左右[4],同時它采用AT指令與單片機進行通信[5],通信時只需要1路UART口即可完成,減少了不必要的連接線,有利于集成化設(shè)計,減小產(chǎn)品的體積。
為確保能夠安全地、較快地加熱杯中的水,該杯墊選直徑為48 mm、最大功率可達12 W的MCH氧化鋁陶瓷加熱片。但因為氧化鋁陶瓷加熱片的溫度特性曲線不夠平滑,且加熱過程中容易受到外界的干擾,存在測量傳送的滯后問題,所以該杯墊使用了PID控制的思想對加熱過程進行調(diào)控,使得陶瓷加熱片的功率可隨水溫的高低而動態(tài)調(diào)整,防止因為某些因素導致過度加熱的情況發(fā)生[6]。PID模型的具體參數(shù)計算方法如下:將溫度傳感器作為PID控制系統(tǒng)的閉環(huán)反饋回路,求出當前的溫度值與設(shè)定的溫度值之間的偏差,代入PID的計算公式即可求出相應的參數(shù)[7]。
本文選擇的機智云平臺是廣州杰升信息科技有限公司開發(fā)的一款物聯(lián)網(wǎng)服務平臺,它具有友好的開發(fā)環(huán)境,能幫助開發(fā)者在短時間內(nèi)完成產(chǎn)品的開發(fā)[8]。在機智云開發(fā)者中心創(chuàng)建好“智能杯墊”的工程后,需要根據(jù)自己的需求創(chuàng)建相關(guān)的數(shù)據(jù)點,以便實現(xiàn)從平臺到手機端數(shù)據(jù)類型和功能的匹配。在本文中,共設(shè)定了5個數(shù)據(jù)點,具體如表1所示。
表1 機智云平臺設(shè)定的數(shù)據(jù)點
當設(shè)定好數(shù)據(jù)點后,便可在機智云平臺自動生成SCT15F2K60S2系列MCU的Keil C51底層代碼,減少產(chǎn)品開發(fā)的時間和工作量,降低開發(fā)成本。為了使智能杯墊能夠被機智云平臺唯一識別,需要將機智云平臺的產(chǎn)品號(Product Key)和產(chǎn)品密鑰(Product Secret)添加到Keil C51工程下的gizwits_product.h頭文件中,并在主循環(huán)中添加以下的語句,以便實現(xiàn)飲水量數(shù)據(jù)的上傳。
currentDataPoint.valueToday_Water = Water;
//將本地測量的飲水量上傳到機智云服務器
完成上述操作后,智能杯墊才能通過WiFi網(wǎng)絡(luò)接入到機智云服務器中,并將數(shù)據(jù)點的數(shù)據(jù)發(fā)送到服務器。
在溫度測量方面,使用DS18B20進行水杯底部的溫度采集時,為了盡可能的減少其他不確定因素對溫度數(shù)據(jù)的影響,采用了多次測量取平均值的方法,即:連續(xù)對水杯底部的溫度測量3次,然后用3次的平均值作為本次測量的結(jié)果,再進行相關(guān)處理分析。溫度數(shù)據(jù)處理的代碼如下:
在測量飲水量方面,由于是根據(jù)水杯的重量變化量來間接獲取用戶的飲水量大小,因此需要MCU不斷掃描壓力傳感器的重量值,以確保能夠及時捕捉到重量發(fā)生變化的事件。而當壓力傳感器讀取到一個變化的壓力值后,會將上一次測量的重量值減去當前的重量值,以便得到本次變化量的大小。由于飲水后,水杯的重量會減少,因此只有這個變化量為正值時,才能判定為用戶進行了一次飲水行為,否則判定為用戶往杯中加入了水的行為。當判定為飲水行為后,根據(jù)重量的變化量,代入(1)、(2)式中便可求出本次用戶的飲水量,并將其記錄到機智云服務器,即可實現(xiàn)飲水量的監(jiān)測功能。若判定為往水杯中加水的行為后,則將本次的重量值更新為下一次重量差值計算的被減數(shù),以便下次監(jiān)測到用戶飲水時能正確求得飲水量。具體的采集流程如圖2所示。
圖2 溫度與飲水量的采集流程圖
為實現(xiàn)定時提醒用戶飲水功能,本文選用了MCU內(nèi)部集成定時器0(T0)來完成定時計時功能。當用戶在手機端APP設(shè)定好提醒間隔并開啟定時提醒功能后,將會使能MCU的計時標志位counter_flag,使得計時值在定時器0的作用下從0開始每隔一秒鐘便加1。
當計時值與用戶設(shè)定的提醒時長相等時,將通過杯墊內(nèi)置的蜂鳴器提醒用戶按時飲水,同時也會在手機端APP發(fā)出相應的提示,確保用戶不會錯過任何一次補水提醒。如果在計時途中,計時值未到提醒時長便監(jiān)測到用戶進行了一次飲水行為時,將會自動重置計時值,使計時器能從用戶飲水后的時刻開始,重新計時,避免了一個提醒周期內(nèi)重復提醒用戶飲水的情況發(fā)生。
恒溫功能主要由快速加熱控制和PID控制構(gòu)成。為了使較低的水溫能夠迅速地達到設(shè)定的保溫溫度值,此處采用了分段控制的思想,即:溫度低時不采用PID控制,而是采用快速加熱控制使加熱片處于最大功率狀態(tài)。只有當水溫高于15℃時,PID控制才會介入,從而改變PWM的占空比使得陶瓷加熱片的加熱功率隨著水溫的改變而變化。這樣做的好處是,使得對水杯中的水快速加熱之外,也能使得水溫最終維持在一個固定的值。
當水溫高于15℃后,PID控制介入,此時溫度傳感器采集到的當前溫度值將作為PID控制的反饋量,PID控制函數(shù)會反復地將其與目標溫度值進行比較,每次比較后都會返回一個PID控制量。PID控制量與上次的定時器計數(shù)值共同決定本次的PWM占空比,進而實現(xiàn)動態(tài)控制陶瓷加熱片的加熱功率,達到恒溫控制的目標。PID算法的部分代碼如下所示:
主程序包含以下幾個部分,首先是對內(nèi)部資源(定時器T0和T1)、外部設(shè)備(按鍵、DS18B20溫度傳感器、HX711模數(shù)轉(zhuǎn)換模塊等)進行初始化,然后才開始執(zhí)行主循環(huán)中的各個子函數(shù)。其中主循環(huán)中的按鍵掃描用于識別智能杯墊上的各個按鍵狀態(tài),機智云數(shù)據(jù)點的傳輸函數(shù)負責MCU與服務器之間的數(shù)據(jù)點交互,定時飲水提醒函數(shù)則會按照設(shè)定的飲水提醒間隔自動提醒用戶飲水,恒溫控制函數(shù)現(xiàn)實PID恒溫控制。
每執(zhí)行一次主循環(huán),就會采集一次溫度數(shù)據(jù)和壓力傳感器的數(shù)據(jù),避免遺漏任何一次數(shù)據(jù)的變化。采集完后,再根據(jù)溫度和飲水量的相關(guān)計算方法,對采集到的數(shù)據(jù)進行處理分析。主程序的具體流程如圖3所示。
圖3 主程序流程圖
為了檢驗所設(shè)計的智能杯墊能否按照設(shè)想的功能正常執(zhí)行,評估智能杯墊恒溫控制和飲水量監(jiān)測功能的誤差大小,以方便后期對智能杯墊加以優(yōu)化與改進,本文對智能杯墊的各個功能分別作了測試。測試時的環(huán)境溫度為17℃,水杯中的水溫為20℃,具體測試方法與結(jié)果如下:
打開手機端的機智云APP并綁定該智能杯墊,然后在手機上觀察“今日的飲水量”,同時調(diào)節(jié)各個參數(shù)的值,觀察智能杯墊能否正確按照所設(shè)定的參數(shù)值給予相應的反饋。由圖4可以看到,智能杯墊能按照各個參數(shù)值,正確執(zhí)行相應的功能。
圖4 手機端APP實測圖
在玻璃杯中加入100mL、20℃的溫水,打開恒溫功能,并設(shè)定恒溫溫度為30℃。等待10分鐘,再用溫度計測量杯中的水溫,測得水溫在29°附近。雖然有些許偏差,但是總體上實現(xiàn)了PID恒溫控制功能,誤差在用戶能夠接受的范圍內(nèi)。
設(shè)定定時提醒的時間間隔為30分鐘。當放下水杯后,用秒表開始計時,靜待杯墊的蜂鳴器報警提醒。經(jīng)過多次測試,杯墊均能在30分鐘后,精確地發(fā)出提醒信號,定時飲水提醒功能可達到預期的設(shè)想。
將盛有500mL水的水杯放置在智能杯墊上,每次倒去100mL的水再放回杯墊上,觀察并記錄杯墊測量的飲水量大小,測試結(jié)果如表2所示。從表中可以看到,該智能杯墊能夠較好地測量飲水量,雖然存在一定的誤差,但誤差均比較小,不影響用戶的體驗。
表2 飲水量監(jiān)測結(jié)果
本文設(shè)計的基于機智云物聯(lián)網(wǎng)平臺的智能杯墊,通過溫度傳感器來獲取水溫并作為PID控制的反饋參數(shù),達到恒溫功能;通過HX711采集壓力傳感器的重量變化,實現(xiàn)飲水量監(jiān)測功能;通過機智云物聯(lián)網(wǎng)平臺的接入,實現(xiàn)了手機端APP控制和定時補水提醒功能。以上功能的增加,既解決了現(xiàn)有的加熱保溫杯墊存在的不足,又提升了產(chǎn)品的智能程度和使用的便捷性。此外,該智能杯墊還兼具生產(chǎn)成本低,制造簡單,可靠性高的特點,使得它具有較好的市場前景。若后期對手機端APP的界面加以優(yōu)化,令整體界面更加整潔高效,同時改進飲水量測量算法和PID控制算法,還能進一步提高產(chǎn)品的競爭力。