VIA Pixetto X Arduino首次接觸就上手 顏色辨識實作

前言

延續上一篇『VIA Pixetto X Arduino首次接觸就上手人臉辨識實作』技術文,其原理就是VIA Pixetto偵測到人臉時,可以控制 Arduino首次接觸就上手套件 (以下簡稱Arduino) 的LED燈及蜂鳴器。上一篇文章中提到 Arduino的程式可透過Pixetto Editor燒錄,也可用 HanGeekduino 的Arduno IDE燒錄。

本篇要接續分享利用 VIA Pixetto 偵測到特定顏色時,可把辨識的顏色結果顯示在 Arduino 的 OLED 模組上,但為了能夠使用OLED模組,就有了另一個作法—使用HanGeekduino的Arduno IDE燒錄程式到Arduino。

撰寫/攝影 許鈺莨
時間 1小時 材料表
難度 2 (滿分5)

 

本文

若想透過HanGeekduino的Arduno IDE來燒錄程式到Arduino的話,就會有匯入Pixetto函式庫版本的問題,必須搭配VIA Pixetto的韌體版本1.6.2版,因此在進行本篇實作之前,建議先看過『VIA Pixetto X Arduino首次接觸就上手人臉辨識實作』技術文章,其中已經說明如何更新 VIA Pixetto 的韌體版本,本文就不再重複,以下就從匯入Pixetto 函式庫和 VIA Pixetto 顏色辨識來說明。

HanGeekduino的Arduno IDE匯入Pixetto函式庫

步驟1.下載HanGeekduino

HanGeekduino 是我們根據 BlocklyDuino 並針對 Arduino 首次接觸就上手套件所修改的圖形化介面 (按此下載)

步驟2.解壓縮開啟Arduno IDE執行檔

在arduino-1.8.5的資料夾中開啟Arduno IDE執行檔

 

步驟3.匯入Pixetto函式庫

Arduino IDE 中,請點選 Sketch 🡪 Include Library 🡪 Manage Libraries…  開啟函式庫管理員

在 Library Manager 的搜尋欄位中輸入 pixetto,可以找到相關函式庫,並下載 Pixetto 相關函式庫到最新版。

步驟4.Pixetto相關函式庫下載完後,重新啟動Arduino IDE

步驟5.上傳程式碼到Arduino

程式傳送門(按此下載),修改自 PixettoLite 範例程式 ColorDetection 修改而來,以下是完整程式碼

#include <SoftwareSerial.h>
#include <PixettoLite.h>
#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_ALT0_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

SoftwareSerial pxtSerial(A0, A1); // RX黃色, TX白色


char pxtbuf[PXT_BUF_SIZE];
struct pxt_data* pxtdata = (struct pxt_data*)pxtbuf;

void setup()
{
  Serial.begin(38400);
  pxtSerial.begin(38400);
  Serial.println(pxtGetVersion(pxtSerial), HEX);
  pxtSetFunc(pxtSerial, FUNC_COLOR_DETECTION);
  u8x8.begin();
  u8x8.setFlipMode(1);
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  u8x8.clear();

}

void loop()
{
  char s[32];
  int n = pxtAvailable(pxtSerial);
  while (n--) {
    if (pxtGetData(pxtSerial, pxtbuf, PXT_BUF_SIZE) > 0) {
      sprintf(s, "%02d %d %d %d %d", pxtdata->class_id,
              pxtdata->x, pxtdata->y, pxtdata->w, pxtdata->h);
      Serial.println(s);
    }
    if (pxtdata->class_id ==1) {u8x8.setCursor(0, 0); u8x8.print("RED");}
    else if  (pxtdata->class_id ==2) {u8x8.setCursor(0, 0); u8x8.print("YELLOW");}
    else if  (pxtdata->class_id ==3) {u8x8.setCursor(0, 0); u8x8.print("GREEN");}
    else if  (pxtdata->class_id ==4) {u8x8.setCursor(0, 0); u8x8.print("BLUE");}
    else if  (pxtdata->class_id ==5) {u8x8.setCursor(0, 0); u8x8.print("RPURPLE");}
    else if  (pxtdata->class_id ==6) {u8x8.setCursor(0, 0); u8x8.print("BLACK");}
  }
  delay(200);
  u8x8.clear();
}
ColorDetection_OLED.ino

VIA Pixetto顏色辨識

在Pixetto的視覺感測器介面就有訓練好的顏色識別模型了,只需要勾選要識別的顏色,然後套用即可,以下說明步驟。

步驟1.用USB傳輸線將VIA Pixetto和電腦連接

步驟2.開啟1.6.2版的Pixetto Utility

在功能處的選項選顏色辨識,最大顯示物件數量選1,顏色則是看使用者決定要辨識的顏色,筆者是全部勾選,最後按下套用,記住一定最後要點選套用,顏色識別的模型才會確定載入VIA Pixetto中。

 

步驟3.顏色識別測試

筆者是拿三種不同顏色的三角錐來測試,分別是黃色、藍色及紅色,可以由以下的圖看見,黃色是2號。

 

而每個顏色的標籤如下表所示:

 

步驟4.Grove連接線接到Arduino

將 VIA Pixetto 和電腦的USB連接線斷開,並用一條 Grove 連接線接到Arduino 的A0腳位。

 

成果展示

 

 

本篇為您說明了如何使用 Arduino IDE 上傳程式碼進行顏色辨識,並將 VIA Pixetto 辨識結果顯示在 OLED 中,期待大家可能發想出更多有趣的應用。若各位讀者成功,或有其他的應用,歡迎以在留言區和我們分享囉,那麼下一篇文章見囉!

相關文章與資源連結

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *