牟曉東
常規(guī)的顏色傳感器內(nèi)置有紅、綠、藍(lán)三基色傳感元器件,在濾色器的作用下從可視光的區(qū)域中進(jìn)行顏色數(shù)據(jù)的獲取,輸出RGB數(shù)值。如果將顏色傳感器接入樹莓派進(jìn)行“識(shí)色”,然后在古德微機(jī)器人網(wǎng)站進(jìn)行“積木”式圖形化編程,可以非常方便地開發(fā)出一些比較有趣、實(shí)用的創(chuàng)客作品模塊,比如看卡識(shí)色的“變色龍”燈帶和視覺障礙者的“紅綠燈語音提醒器”。
根據(jù)顏色傳感器獲取到不同卡片(或其他物體)的顏色信息,分解出對(duì)應(yīng)的RGB數(shù)值,作為燈帶60顆燈珠的發(fā)光三基色,相當(dāng)于“復(fù)制”卡片的顏色再“粘貼”到每一顆燈珠上,實(shí)現(xiàn)“變色龍”燈帶的顯示效果。
實(shí)驗(yàn)器材包括樹莓派3B+和古德微擴(kuò)展板各一塊,GY-33 TCS34725顏色傳感器(帶遮光筒)一個(gè),可編程ws281x燈帶一條,公對(duì)母異色杜邦線四根,各種顏色卡片若干。
首先將燈帶插入擴(kuò)展板的18號(hào)引腳,注意三根線的標(biāo)注要與擴(kuò)展板一一對(duì)應(yīng);接著,將四根杜邦線一端連接顏色傳感器(VCC、GND、SCL和SDA端),另一端連接至擴(kuò)展板IIC接口(VCC、GND、CLK和DATA端);最后,給樹莓派通電,啟動(dòng)操作系統(tǒng)(如圖1)。
訪問古德微機(jī)器人網(wǎng)站(http://www.gdwrobot.cn),登錄進(jìn)入自己賬號(hào)后點(diǎn)擊“設(shè)備控制”進(jìn)入“積木”界面,開始圖形化編程:
首先,通過模塊語句“設(shè)置GPIO‘18可控制燈帶‘60個(gè)燈珠并設(shè)置亮度為‘50”對(duì)燈帶進(jìn)行初始化;接著,建立一個(gè)“重復(fù)當(dāng)‘真執(zhí)行”的循環(huán)結(jié)構(gòu),通過模塊語句“輸出調(diào)試信息‘獲取顏色檢測傳感器的數(shù)據(jù)”,將顏色傳感器獲取的RGB數(shù)據(jù)以數(shù)組的形式在LOG調(diào)試信息區(qū)輸出,比如:“[172,144,240]”;然后建立三個(gè)變量:“紅色分量”、“綠色分量”和“藍(lán)色分量”,分別賦值為RGB數(shù)據(jù)列表中的“第一”、“第二”和“最后”序列值,即分別獲取對(duì)應(yīng)的顏色分量數(shù)值;再建立一個(gè)內(nèi)部循環(huán)結(jié)構(gòu),設(shè)置60個(gè)燈珠的發(fā)光顏色為對(duì)應(yīng)的三個(gè)變量值;最后,添加“燈帶刷新顯示”模塊語句,控制燈帶按照設(shè)置的顏色效果發(fā)光,再添加“等待0.2秒”,防止程序運(yùn)行占用過多的系統(tǒng)資源而“死機(jī)”(如圖2)。
將程序保存后點(diǎn)擊“連接設(shè)備”,再點(diǎn)擊“運(yùn)行”按鈕進(jìn)行測試。此時(shí),會(huì)在調(diào)試信息區(qū)不斷顯示由顏色傳感器實(shí)時(shí)獲取的各組RGB顏色數(shù)據(jù);嘗試將紅色、綠色、藍(lán)色和黃色卡片分別放置于顏色傳感器的遮光筒附近,燈帶立刻會(huì)隨之變色,發(fā)出對(duì)應(yīng)顏色的光(如圖3),實(shí)現(xiàn)了“變色龍”燈帶的顯示效果。
顏色傳感器“負(fù)責(zé)”實(shí)時(shí)檢測十字路口的紅綠燈變換情況,根據(jù)不同顏色的燈光信號(hào)信息,樹莓派控制音箱發(fā)出對(duì)應(yīng)的語音提醒信息,比如“綠燈,行!”、“紅燈,停!”。
實(shí)驗(yàn)器材包括樹莓派3B+和古德微擴(kuò)展板各一塊,顏色傳感器一個(gè),杜邦線四根,紅色、黃色和綠色LED燈各一支,音箱一個(gè)。
保持顏色傳感器與案例1相同的連接方式,然后,將紅色、黃色和綠色LED燈分別連接至擴(kuò)展板的5號(hào)、6號(hào)和12號(hào)引腳(注意長腿為正極、短腿為負(fù)極),用來模擬路口紅綠燈;接著,將音箱的連接線插入樹莓派的圓形音頻輸出孔,通電,啟動(dòng)操作系統(tǒng)(如圖4)。
首先,建立一個(gè)名為“紅綠燈”的函數(shù),作用是模擬路口“紅綠燈”實(shí)現(xiàn)的功能:綠燈(12號(hào))亮10秒,閃爍三次,熄滅;黃燈(6號(hào))亮3秒,熄滅;紅燈(5號(hào))亮10秒,熄滅(如圖5)。
接著,建立對(duì)應(yīng)的子線程(注意名稱要與函數(shù)完全一致),對(duì)函數(shù)進(jìn)行調(diào)用;然后,再建立一個(gè)“重復(fù)當(dāng)‘真執(zhí)行”的循環(huán)結(jié)構(gòu),將顏色傳感器獲取的顏色數(shù)據(jù)在LOG調(diào)試信息區(qū)進(jìn)行實(shí)時(shí)顯示輸出;建立兩個(gè)變量“紅色分量”和“綠色分量”,分別為其賦值為顏色傳感器輸出數(shù)據(jù)的RGB列表中的第一個(gè)和第二個(gè)數(shù)據(jù);建立第三個(gè)變量,名為“最大值分量”,為其賦值為RGB列表中數(shù)值最大的數(shù)據(jù),表示RGB分量中最“占優(yōu)勢”的顏色對(duì)應(yīng)數(shù)據(jù);接著,建立一個(gè)“如果…執(zhí)行…否則如果…執(zhí)行…否則…”三分支選擇結(jié)構(gòu),判斷條件為“最大值分量”與“綠色分量”或“紅色分量”是否相等,相等則說明對(duì)應(yīng)顏色的LED燈亮起,執(zhí)行的動(dòng)作分別是輸出文字調(diào)試信息和音箱播放對(duì)應(yīng)的語音信息:“綠燈,行!”和“紅燈,停!”,注意要分別添加“等待3秒”模塊語句,作用是等待音箱播放完語音提醒;如果兩個(gè)條件均不符合,說明是黃色LED燈亮起,則執(zhí)行“黃燈,等!”的文字信息輸出和提醒語音的播放(如圖6)。
將程序保存后點(diǎn)擊“運(yùn)行”按鈕進(jìn)行測試,“紅綠燈”LED開始循環(huán)閃亮工作,同時(shí)顏色傳感器在不斷檢測燈光的顏色,并且音箱中也會(huì)響起對(duì)應(yīng)的“綠燈,行!”、“黃燈,等!”和“紅燈,停!”提醒語音,實(shí)現(xiàn)了預(yù)設(shè)的視覺障礙者“紅綠燈語音提醒器”的功能(如圖7)。