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