PixyCam是2013年集資推出的一款色彩辨識相機模組,又稱CMUcam5。簡單來說,這個模組能夠辨識使用者指定的特定顏色,並能將鏡頭前出現的該顏色物體的位置、大小資料傳給它連接的開發板。
PixyCam支援多種通訊方式能和開發板溝通,如SPI、I2C、UART(序列埠)甚至最單純的類比信號。我們將透過I2C方式讓micro:bit接收PixyCam的物體辨識結果。
首先,你必須下載PixyCam的專用軟體PixyMon。(如果您使用的是第二代PixyCam,那麼得使用這個版本。)用mini USB線連接PixyCam背面左側的接頭並連到電腦,然後打開PixyMon。若程式有正確抓到攝影機,就會看到即時畫面。
按主畫面上方大按鈕最右邊的設定鈕,接著在設定畫面下面找Interface(介面),並選擇資料輸出方式為I2C。
你也能看到預設I2C位址是0x54(= 84)。
這時你可以回到主畫面,把要辨識的物體舉在攝影機前,然後選Action → Set signature x... 接著畫面會靜止,讓你用滑鼠把要辨識的顏色圈選起來。圈選好後,就能看到攝影機開始能辨識到該顏色的物體了。
另一個方式是壓住PixyCam上的白色按鈕不放,直到亮起白燈、然後依序亮起紅、橘、黃...燈。這些燈的顏色與辨識物體無關,而是代表第幾個辨識代碼:
- 紅 = 1
- 橘 = 2
- 黃 = 3
- 綠 = 4
- 青 = 5
- 藍 = 6
- 紫 = 7
在你要的號碼放開手,這時相機會進入辨識學習模式。把你要辨識的物體舉到相機前,相機底下的RGB LED會亮起差不多的顏色,畫面上也會出現如下的格網。物體舉好位置後,再按一下白鈕,這顏色就會記錄在該號碼底下(如紅燈 = 辨識代碼1)。
這個按白鈕設定辨識顏色的方式,不需要接PixyMon也可以進行。等我們把相機接在小車上後,就可以用這個方式快速設定辨識顏色。
現在,我們要把PixyCam連到micro:bit與Nexus:bit擴充板。模組背面有兩排針腳(一代和二代相同):
故我們以杜邦線連接以下腳位:
- 5V(pin 2)→ Nexus:bit後方的5V針腳
- GND(pin 6)→ Nexus:bit後方的GND針腳
- I2C SCL(pin 5)→ Nexus:bit前方側面的SCL針腳
- I2C SDA(pin 9)→ Nexus:bit前方側面的SCL針腳
這裡我們把NexusBot小車上的超音波模組抽掉,好讓電線能穿過外殼。PixyCam則以橡皮擦和泡棉膠黏貼於車子正面。
Bytes 16-bit word Description ---------------------------------------------------------------- 0, 1 y sync: 0xaa55=normal object, 0xaa56=color code object 2, 3 y checksum (sum of all 16-bit words 2-6, that is, bytes 4-13) 4, 5 y signature number 6, 7 y x center of object 8, 9 y y center of object 10, 11 y width of object 12, 13 y height of object
每次會傳一個16-bit的資料。首先是sync(同步碼),作用是分隔每一筆資料並代表資料從何處開始。在顏色辨識模式中,這個值是0xaa55(在micro:bit會讀到-21931)。不過,每筆資料之間也會多插入一筆0xaa55,所以只要連續讀到兩次-21931,就代表有資料可接收了。
程式撰寫如下:
點圖可放大 |
這樣只要能辨識的物體出現在相機前時,就能讀到該物體的中心點座標與長寬。PixyCam的解析度是320x200,故座標值會落在這個區間。
checksum可用來核對資料是否無誤。不過,不檢查也是無妨啦。
既然能知道物體的中間點及大小,我們就能判斷它是否偏移、以及是否靠近或拉遠。我們給NexusBot小車撰寫程式如下:
沒有留言:
張貼留言