牟曉東
“定時叫醒”可謂是鬧鐘的最根本功能,但在平時生活中幾乎所有人都因想“再睡一會兒”而中止正在叮鈴作響的鬧鐘,結果一不小心就會睡過頭而誤事。何不利用樹莓派和稱重儀(壓力傳感器)等進行圖形化編程,開發制作一個“不躺平”的創意鬧鐘呢?到了預設的時間,只要人不離開床,音箱就會一直喊“該起床啦!”的語音提醒,同時LED燈還會一直閃爍。
實驗器材包括樹莓派3B+及古德微擴展板一塊,稱重儀一個,杜邦線若干,音箱一個,紅色LED燈一支,小人偶一個。
首先,將稱重儀水平放置于平整桌面,四個引腳(VCC電源正極、SCK時鐘接口、DT數據接口和GND接地端)通過杜邦線連接至擴展板的20和21號引腳,分別對應VCC、Trig、Echo和GND端;接著,將紅色LED燈插入5號引腳,音箱插入樹莓派的音頻輸出孔;最后,給樹莓派通電,啟動操作系統(圖1)。

在瀏覽器中進入古德微機器人平臺,點擊“積木”切換至圖形化編程界面,開始進行編程:
先編寫一個名為“LED燈閃爍”的函數,通過一個“重復3次執行”的循環結構,控制5號紅色LED燈進行“亮0.2秒、滅0.1秒”的3次閃爍提醒功能。然后,在主程序中進行稱重儀的兩步初始化操作:一是設置數據GPIO為21號、時鐘GPIO為20號(濾波處理字節保持默認的128不變);二是進行“稱重儀去皮處理”(測量的是“凈重”)。
接著,在LOG調試信息區顯示輸出“夜已深,請在10秒內上床休息!”的提示信息,并且等待10秒鐘;再建立一個“重復當‘真’執行”的循環結構,內嵌一個“如果…執行…”的選擇分支結構,判斷條件為“‘獲取當前日期和時間的字符串格式’是否大于等于‘2021-11-25 18:05:00’”,后者即為設置的鬧鐘“定時”,該模塊語句的功能是檢測當時的系統時間是否到了或超過了鬧鐘的預設時刻(大于等于),如果條件成立,則先調用“LED燈閃爍”函數、再輸出文字信息“該起床啦!”,音箱則進行“該起床啦!”的語音提醒,然后為變量“稱重”進行賦值——“獲取稱重儀上物體的凈重”,作用是檢測計算稱重儀面板上(相當于“床”)物體的質量,并進行輸出顯示(單位是“克”);接著,對“稱重”進行是否小于30的判斷(事先已經測量過小人偶的質量大約是198克),條件成立的話,說明“人”已經離開了“床”——此處的30可調的范圍比較大(比如100、50等均可,要根據實際實驗時所使用道具的實際質量來設置),于是執行“中斷循環”,跳出循環,再通過“稱重儀結束退出”模塊語句實現重置稱重儀GPIO口的功能(圖2)。

將程序保存后點擊“運行”按鈕,進行測試。
LOG調試信息區先是出現“夜已深,請在10秒內上床休息!”的溫馨提示,將小人偶輕輕放置于稱重儀的面板“躺下”,進入正常的睡眠免打擾模式;當時間到了設置的18:05時——剛開始執行程序時是18:02,紅色LED燈開始急促地閃爍,同時有“該起床啦!”的文字信息出現于LOG調試信息區,音箱則不斷進行“該起床啦!”的語音播報提醒;如果小人偶一直保持“不離開床”的狀態(包括站立姿勢),這三種形式的叫醒服務都會一直持續下去,而且在LOG調試信息區也會每隔3秒鐘就顯示一次實時檢測到的稱重數據:198、198……當從稱重儀面板上移走小人偶后,“不躺平”的鬧鐘系統就認為“人已經起床了”,則中斷程序,結束本次“叫醒”服務(圖3)。

如果在樹莓派中增加OLED顯示屏的話,就可以將“該起床啦!”的文字提醒信息進行顯示輸出;如果有數碼管,則可以實現時間的實時顯示,或者用來顯示“起床”的拖延時間;也可以在判斷“起床”動作發生后,讓音箱播放比較輕柔的音樂,或是播放天氣預報;還可以增加全向麥克風,實現更加智能的人機交互應答;或是增加燈帶的多色彩燈珠點亮裝飾功能……