牟曉東
“定時叫醒”可謂是鬧鐘的最根本功能,但在平時生活中幾乎所有人都因想“再睡一會兒”而中止正在叮鈴作響的鬧鐘,結(jié)果一不小心就會睡過頭而誤事。何不利用樹莓派和稱重儀(壓力傳感器)等進行圖形化編程,開發(fā)制作一個“不躺平”的創(chuàng)意鬧鐘呢?到了預(yù)設(shè)的時間,只要人不離開床,音箱就會一直喊“該起床啦!”的語音提醒,同時LED燈還會一直閃爍。
實驗器材包括樹莓派3B+及古德微擴展板一塊,稱重儀一個,杜邦線若干,音箱一個,紅色LED燈一支,小人偶一個。
首先,將稱重儀水平放置于平整桌面,四個引腳(VCC電源正極、SCK時鐘接口、DT數(shù)據(jù)接口和GND接地端)通過杜邦線連接至擴展板的20和21號引腳,分別對應(yīng)VCC、Trig、Echo和GND端;接著,將紅色LED燈插入5號引腳,音箱插入樹莓派的音頻輸出孔;最后,給樹莓派通電,啟動操作系統(tǒng)(圖1)。
在瀏覽器中進入古德微機器人平臺,點擊“積木”切換至圖形化編程界面,開始進行編程:
先編寫一個名為“LED燈閃爍”的函數(shù),通過一個“重復(fù)3次執(zhí)行”的循環(huán)結(jié)構(gòu),控制5號紅色LED燈進行“亮0.2秒、滅0.1秒”的3次閃爍提醒功能。然后,在主程序中進行稱重儀的兩步初始化操作:一是設(shè)置數(shù)據(jù)GPIO為21號、時鐘GPIO為20號(濾波處理字節(jié)保持默認的128不變);二是進行“稱重儀去皮處理”(測量的是“凈重”)。
接著,在LOG調(diào)試信息區(qū)顯示輸出“夜已深,請在10秒內(nèi)上床休息!”的提示信息,并且等待10秒鐘;再建立一個“重復(fù)當(dāng)‘真’執(zhí)行”的循環(huán)結(jié)構(gòu),內(nèi)嵌一個“如果…執(zhí)行…”的選擇分支結(jié)構(gòu),判斷條件為“‘獲取當(dāng)前日期和時間的字符串格式’是否大于等于‘2021-11-25 18:05:00’”,后者即為設(shè)置的鬧鐘“定時”,該模塊語句的功能是檢測當(dāng)時的系統(tǒng)時間是否到了或超過了鬧鐘的預(yù)設(shè)時刻(大于等于),如果條件成立,則先調(diào)用“LED燈閃爍”函數(shù)、再輸出文字信息“該起床啦!”,音箱則進行“該起床啦!”的語音提醒,然后為變量“稱重”進行賦值——“獲取稱重儀上物體的凈重”,作用是檢測計算稱重儀面板上(相當(dāng)于“床”)物體的質(zhì)量,并進行輸出顯示(單位是“克”);接著,對“稱重”進行是否小于30的判斷(事先已經(jīng)測量過小人偶的質(zhì)量大約是198克),條件成立的話,說明“人”已經(jīng)離開了“床”——此處的30可調(diào)的范圍比較大(比如100、50等均可,要根據(jù)實際實驗時所使用道具的實際質(zhì)量來設(shè)置),于是執(zhí)行“中斷循環(huán)”,跳出循環(huán),再通過“稱重儀結(jié)束退出”模塊語句實現(xiàn)重置稱重儀GPIO口的功能(圖2)。
將程序保存后點擊“運行”按鈕,進行測試。
LOG調(diào)試信息區(qū)先是出現(xiàn)“夜已深,請在10秒內(nèi)上床休息!”的溫馨提示,將小人偶輕輕放置于稱重儀的面板“躺下”,進入正常的睡眠免打擾模式;當(dāng)時間到了設(shè)置的18:05時——剛開始執(zhí)行程序時是18:02,紅色LED燈開始急促地閃爍,同時有“該起床啦!”的文字信息出現(xiàn)于LOG調(diào)試信息區(qū),音箱則不斷進行“該起床啦!”的語音播報提醒;如果小人偶一直保持“不離開床”的狀態(tài)(包括站立姿勢),這三種形式的叫醒服務(wù)都會一直持續(xù)下去,而且在LOG調(diào)試信息區(qū)也會每隔3秒鐘就顯示一次實時檢測到的稱重數(shù)據(jù):198、198……當(dāng)從稱重儀面板上移走小人偶后,“不躺平”的鬧鐘系統(tǒng)就認為“人已經(jīng)起床了”,則中斷程序,結(jié)束本次“叫醒”服務(wù)(圖3)。
如果在樹莓派中增加OLED顯示屏的話,就可以將“該起床啦!”的文字提醒信息進行顯示輸出;如果有數(shù)碼管,則可以實現(xiàn)時間的實時顯示,或者用來顯示“起床”的拖延時間;也可以在判斷“起床”動作發(fā)生后,讓音箱播放比較輕柔的音樂,或是播放天氣預(yù)報;還可以增加全向麥克風(fēng),實現(xiàn)更加智能的人機交互應(yīng)答;或是增加燈帶的多色彩燈珠點亮裝飾功能……