劉家寶

近些年來(lái),隨著科技尤其是物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,家庭中的智能電器越來(lái)越多,它們能夠根據(jù)家中的實(shí)際狀況,自動(dòng)開(kāi)關(guān)或進(jìn)行調(diào)整,使用起來(lái)非常方便。這些電器設(shè)備只是普普通通的硬件,怎么會(huì)這么聰明?怎么會(huì)有感知判斷的能力?它們是如何做到的呢?筆者將以“會(huì)聽(tīng)話的風(fēng)扇——聲控智能風(fēng)扇”這個(gè)項(xiàng)目的實(shí)現(xiàn)為例,來(lái)回答這些問(wèn)題。
聲控智能風(fēng)扇,當(dāng)對(duì)著它說(shuō)“開(kāi)”時(shí),風(fēng)扇開(kāi)始轉(zhuǎn)動(dòng);再對(duì)它說(shuō)“關(guān)”,風(fēng)扇停止轉(zhuǎn)動(dòng)。這是使用者操作后直觀的感受。
從聲控智能風(fēng)扇角度來(lái)說(shuō),它能夠聽(tīng)到外界的聲音,聽(tīng)到后能控制自己的開(kāi)和關(guān)。因此,要實(shí)現(xiàn)這個(gè)智能風(fēng)扇,需要解決怎樣讓風(fēng)扇聽(tīng)到外界的聲音和風(fēng)扇獲取指令決定開(kāi)還是關(guān)這兩個(gè)問(wèn)題。
怎樣讓風(fēng)扇聽(tīng)到外界的聲音?人是通過(guò)耳朵來(lái)獲取外界聲音的,在物聯(lián)網(wǎng)技術(shù)應(yīng)用中,物體是通過(guò)各種傳感器來(lái)感知世界的,因此可以借助聲音傳感器來(lái)讓風(fēng)扇獲取外界的聲音。
風(fēng)扇獲取指令后如何做出開(kāi)、關(guān)的命令?物體其實(shí)是沒(méi)有智能的,它的智能是人給予的,智能硬件設(shè)備是通過(guò)人編寫(xiě)的程序作出決定的,因此智能的核心在于算法,在于編寫(xiě)的程序。
1.明確聲控智能風(fēng)扇工作的具體流程
明確了聲控智能風(fēng)扇工作的整個(gè)流程,其實(shí)也就確定了聲控智能風(fēng)扇的算法。
聲控智能風(fēng)扇收集當(dāng)前環(huán)境聲音音量值,據(jù)此來(lái)判斷開(kāi)、關(guān),接著讓風(fēng)扇轉(zhuǎn)動(dòng)或者停止,這個(gè)過(guò)程一直在重復(fù)執(zhí)行著。
2.聲控智能風(fēng)扇的輸入、輸出
聲控智能風(fēng)扇獲取外界聲音后作出反應(yīng),因此聲控智能風(fēng)扇的輸入是當(dāng)前聲音音量值;作出的反應(yīng)是風(fēng)扇轉(zhuǎn)還是停,因此聲控智能風(fēng)扇的輸出為風(fēng)扇的轉(zhuǎn)速。以Python語(yǔ)言為例,使用input語(yǔ)句輸入聲音的具體數(shù)值,數(shù)值越大,聲音越強(qiáng),使用print語(yǔ)句輸出風(fēng)扇的轉(zhuǎn)速。
聲控智能風(fēng)扇的工作過(guò)程中,一直在接收當(dāng)前工作環(huán)境下的音量值,判斷后,輸出轉(zhuǎn)速值,重復(fù)執(zhí)行這個(gè)操作,沒(méi)有停止的時(shí)候,除非拔掉電源。因此,風(fēng)扇的工作過(guò)程是一個(gè)沒(méi)有結(jié)束條件的循環(huán)。在Python語(yǔ)言中可以使用while條件循環(huán),且循環(huán)條件一直為真,用偽代碼表示如下:

3.判斷風(fēng)扇的開(kāi)和關(guān)
風(fēng)扇什么時(shí)候開(kāi)、什么時(shí)候關(guān),需要確定風(fēng)扇的開(kāi)、關(guān)條件。
聲控智能風(fēng)扇打開(kāi)的條件是獲取的當(dāng)前聲音音量值高于標(biāo)準(zhǔn)值(無(wú)指令時(shí)環(huán)境的聲音音量值),聲控智能風(fēng)扇關(guān)閉的條件也是獲取的當(dāng)前音量值高于標(biāo)準(zhǔn)值的時(shí)候,用偽代碼表示如下:

為了便于后面閱讀和理解程序,統(tǒng)一變量名,當(dāng)前音量值用變量x來(lái)存儲(chǔ)(x類型為整型),音量標(biāo)準(zhǔn)值為20,速度變量名為v(值為0表示不轉(zhuǎn),值為100表示轉(zhuǎn))。用Python語(yǔ)言描述風(fēng)扇工作過(guò)程(本文代碼均用Python語(yǔ)言描述),參考程序代碼如下:

程序運(yùn)行調(diào)試,驗(yàn)證發(fā)現(xiàn)問(wèn)題,轉(zhuǎn)速值一直為0沒(méi)有變化,問(wèn)題出在哪里?
聲控智能風(fēng)扇開(kāi)和關(guān)的判斷條件是相同的,音量值高于標(biāo)準(zhǔn)值時(shí),風(fēng)扇開(kāi)和關(guān)的條件都滿足,兩條給風(fēng)扇速度的語(yǔ)句都執(zhí)行了,無(wú)法區(qū)分是轉(zhuǎn)還是停。回想風(fēng)扇工作過(guò)程,音量值第一次高于標(biāo)準(zhǔn)值時(shí),風(fēng)扇轉(zhuǎn),第二次停,第三次轉(zhuǎn),第四次停……我們可以發(fā)現(xiàn)這個(gè)規(guī)律:當(dāng)音量值高于標(biāo)準(zhǔn)值的時(shí)候,奇數(shù)次轉(zhuǎn),偶數(shù)次停,需要記錄次數(shù)。


1.Python編程完成風(fēng)扇的程序
至此,聲控智能風(fēng)扇程序部分完成了,參考代碼如下(代碼不唯一):

2.實(shí)際產(chǎn)品中輸入、輸出
將程序代碼中input輸入當(dāng)前聲音音量值的語(yǔ)句改為由聲音傳感器自動(dòng)獲取,通過(guò)聲音傳感器獲取當(dāng)前環(huán)境標(biāo)準(zhǔn)值,替換程序中設(shè)定的標(biāo)準(zhǔn)值20,再將print輸出風(fēng)扇速度改為給電機(jī)一個(gè)電流,可以借助例如Arduino這類的開(kāi)源硬件,將聲音傳感器、風(fēng)扇電機(jī)與Arduino連接起來(lái),將程序代碼灌入硬件中,就可以看到實(shí)際效果。
了解了聲控智能風(fēng)扇智能的核心和實(shí)現(xiàn)過(guò)程,那么,溫控智能風(fēng)扇、光控智能燈等智能設(shè)備是怎么做出來(lái)的、怎么會(huì)這么聰明、怎么會(huì)感知判斷等問(wèn)題,也就能回答了。
對(duì)著聲控智能風(fēng)扇說(shuō)“開(kāi)”,它真的能聽(tīng)懂意思嗎?其實(shí)不然,根據(jù)編寫(xiě)的代碼,它只是通過(guò)聲音傳感器獲取聲音,并沒(méi)有理解“開(kāi)”這個(gè)語(yǔ)音的意思,第一次對(duì)著它說(shuō)“關(guān)”,同樣也會(huì)轉(zhuǎn)起來(lái)。要想讓聲控風(fēng)扇真正理解“開(kāi)”這個(gè)語(yǔ)音,還得加上語(yǔ)音識(shí)別技術(shù)。
隨著人工智能時(shí)代的到來(lái),生活中的智能設(shè)備會(huì)越來(lái)越聰明,功能會(huì)越來(lái)越強(qiáng)大,使用會(huì)越來(lái)越便捷。科技改變未來(lái),讓我們一起期待更加美好的未來(lái)吧!
(責(zé)任編輯:白玉磊)