CMUcam5 Pixy視覺相機感測器簡介

camera sensor

PixyMon 和 Arduino

該專案的目標是向您介紹CMUcam5 Pixy,並展示如何在您自己DIY的項目中實現相機功能,您會發現即使對於一個複雜的機電系統(比如輪式自主機器人)來說,這也是非常簡單易執行的操作。Pixy是一種靈活、緊湊、可調節且易於設定的相機感測器,能夠檢測並傳遞某些類型物件的資訊。我們將介紹有關相機的基礎知識,並瞭解在Pixy和Arduino之間進行通信的一般方法。

硬體

  • Arduino Uno (您可以使用任何 Arduino)
  • CMUcam5 Pixy 相機
  • 伺服馬達 (S06NF)
  • 一小塊木頭 (用來將相機安裝到伺服上, 我將只使用螺絲安裝)
  • 線纜 (用於相機USB MINI 以及 Uno USB B)
  • 用於伺服的外接5V電源 (警告!如果您將伺服連接到您的Arduino上,並透過USB供電,您的 Arduino將會被燒壞)

軟體

  • Arduino IDE 1.6.9
  • PixyMon 軟體
  • 用於Arduino的PixyMon程式館
camera sensor

圖1:CMUcam5 Pixy相機

CMUcam5 Pixy是一款小型、易於操作、成本低且開源的相機。它擁有獨立的處理器,每秒可對探測到的資訊進行50次輸出。它還可以與Arduino、Raspberry Pi等連接。CMUcam5 Pixy使用非常常見的介面,例如SPI、12C、UART以及USB,並且具有一個自訂程式,可讓您連接到您的裝置上,點擊此處可以免費下載。

設定 Pixy

點擊此處下載軟體PixyMon並安裝。安裝時,請透過USB連接Pixy,然後檢查RGB Led燈是否亮起。

打開PixyMon,並確保Pixy是透過USB進行連接的。如果所有連接正確,它將輸出相機所“看到”的內容。例如,我放置了一個紫色的蓋子作為測試物件,來檢查Pixy相機的輸出。

camera sensor

圖2:Pixy Raw輸出圖像

進入“Action”子功能表,並點擊“Set Signature 1”,視訊將會停滯,您可以選擇想要用相機檢測的顏色/物件。

camera sensor

標記好顏色/物件後,視訊將會開始播放,並且相機感測器將會對顏色/物件進行檢測,如圖3所示。在同一時間,您最多可以設定7個想要檢測的物件/顏色。如果您進行了正確標記,並且設定了視野範圍,就可以實現對多個物件/顏色的檢測。

camera sensor

圖3:Pixy檢測下的視圖

如果想要清除預設標記,您可以點擊Action-> Clear All Signatures,直接清除所有標記 ,或者選擇Clear Signature來對標記一一清除(在控制頁面輸入標記編號)。

點擊Settings -> Signature 1進行調整,您可以修改Pixy視野尺寸的大小。

其他設定 (File->Configure)

  • 透過更改相機亮度,您可以在黑暗環境中進行資訊探測。
  • Camera 選項中,您可以調整白平衡,這非常有用。
  • 使用 Action->Default 程式,您將只看到所檢測到的顏色,沒有視訊輸出。

有一個專用於在您的Arduino上使用Pixy的自訂程式館。我使用的是Arduino Uno,但是您可以使用任何版本。這個程式館非常有用,不僅為初學者提供了簡單的範例,也為專家提供了絕佳的研發平台。

首先,我們要設定一個檢測物件,類似於我們之前在設定相機時所進行的操作。

點擊此處下載Arduino程式館(在“Arduino libraries and examples”資料夾下)。 [http://www.cmucam.org/attachments/download/1157/arduino_pixy-0.1.7.zip]。這將實現您的Arduino和Pixy相機之間的通信。然後,將其添加到Arduino IDE(Sketch->Include Library->Add .zip Library)。

點擊Example->Pixy->hello_world,打開一個名稱為hello_world的簡單範例。

camera sensor

將其上傳到您的研發板上,並打開端子(Tools->Serial Monitor)。

此時,您將看到一條資訊,顯示“Starting… ”,然後將顯示有關檢測到的物件的資訊。

hello_world 代碼釋義

setup() 函數中,對編號和pixy進行初始化和相關設定。

loop() 函數包含幾個變數,這些變數用於列印以及從pixy獲取模組。使用 pixy.getBlocks() 函數,我們可以獲取檢測到的物件。 if (i%50==0) 代碼可以用來設定我們想要獲取資訊的FPS。如果我們想要每秒鐘獲取一條資訊,就要寫 %1 而不是 %50

 

sprintf(buf, “Detected %d:\n”, blocks); 輸出由ID檢測到的當前物件,並將必要的資料放入緩衝區。在for迴圈中,我們將會獲得所有類型的資訊,包括檢測物件、寬度、高度、x、y以及標記資訊。

camera sensor

透過伺服進行控制

現在,Pixy已經成功連接到了Arduino,我將做一個簡單的實驗,將Pixy連接到伺服,並且在相機“看到“某種類型的顏色/物件時讓伺服控制離開。

在本實驗中,我將把Pixy的檢測物件設定為圓形紫色容器,然後進行程式設計,這樣一來,每當這種容器進入相機的視野,伺服就會控制離開這個物體。

裝置結構:

camera sensor

圖4:已完成的裝置結構

我使用的是S06NF伺服,並且用小螺絲釘將伺服連接到相機上,如圖5所示。

camera sensor

圖5:相機與伺服馬達連接

對於硬體部分,僅進行簡單的接線。將SPI線纜連接到相機上,將伺服與Arduino連接。我使用引腳9來控制伺服。

camera sensor

圖6:接線圖

警告!

不要忘記連接GND。如果您沒有將電源、伺服和Arduino GND連接在一起,伺服器將會奔潰!

這裡,我使用的是用於5V電源的舊型合適器。

總結

在本課程中,我們介紹了PixyMon相機的基礎知識,並且研發了一個簡單的伺服驅動應用。我們創建了一個會離開檢測物件而不是物件追蹤的系統。在第二部分中,我們會繼續深入拓展這個理念,研發出一種具有多個伺服的交互系統,透過將一個球作為物件,實現對桌子方位的控制。

如果您有任何意見或疑問,請在Google +上留言,並關注我們的動態。

繼續閱讀本文的第二部分 >

Silard Gal
Silard Gal
Silard來自塞爾維亞,熱愛與電子和程式設計有關的所有事物。喜歡使用Arduino、Raspberry Pi、Atmel等來創建各種項目,並為成為自主機器人團隊的一員而感到自豪。

Check us out on Social Media