2021年2月27日 星期六

聖誕之珠:使用VIA Pixetto視覺感測器之四月標記功能

 聖誕之珠

使用VIA Pixetto視覺感測器之四月標記功能
Line:ted2016.kpvs
Email:Lct4246@gmail.com
FBhttp://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/

Feb. 27, 2021
88x31.png[1]


難易度★★★★★

主題:聖誕樹

Jingle bells 、jingle bells…鈴聲多響亮 。逢此歲末年終之際,讓我一起動動手來做一棵與眾不同的聖誕樹吧!

任務:

設計一自動感應裝置來控制手作聖誕樹的燈光變化(利用8787 的16h5家族四月標記[2]功能來觸發WS2812B燈條的顏色切換效果)。

 材料

品名

數量

單位

備註

VIA Pixetto視覺感測器(含長、短micro USB傳輸線各一條)

1

 

4-pin UART傳輸線

1

 

Arduino NanoFT232晶片)

1

mini USB傳輸線100 cm一條

WS2812B燈條

1

焊妥SGV接線

170孔麵包板

1

 

PP板(10×18cm

1

 

透明壓克力圓管(內徑80mm

1

 

*大膠帶紙捲

1

選配

*棉花

若干

選配

*冰棒棍

若干

選配

造形設計(電路、結構)

參考手作聖誕樹(https://reurl.cc/2b48Km)及Make a modern Christmas tree with cardboard(https://reurl.cc/jq3rA ) 的外觀畫出一棵屬於你自己的聖誕樹設計稿,例如:(註:請預留麵包板擺放到聖誕樹上的位置)。

接著,依照下表及接線圖將8787、Nano、燈條和電腦連接好,以便進行後續測試。

WS2812B

Nano

8787Grove線)

 

D4

 

D5

DIN

D8

 

+5V

5V

GND

GND


完整的參考設計流程為:
  1. 樹體造形手稿
  2. 樹體造形部件
  3. 底座造形部件
  4. 底座手作   
  5. 機電整合接線
  6. 機電整合電路板手焊  
  7. 機電整合電路板固定

  8. 樹面黏著棉花美化
  9. 0~2四月標記手作

  10. 原型成品照 

學生們的相關作品如下:






功能設計

四月標記是美國密西根大學於2010年發表使用於3D空間定位的標準。此標準目前已被應用在無人機精準落地(https://reurl.cc/xgDO8N)、倉儲機器人(https://reurl.cc/ZQnrog)、…等相關領域上。

接下來我們將討論如何使用8787的相關開發工具Pixetto Junior及其Arduino IDE來替我們在前一節手做完成的聖誕樹作品加上控制功能。本例所使用的四月標記的0~2小卡圖檔可由 https://reurl.cc/kVrQ89 下載列印。

  1. 套用8787內建的AI功能 在Pixetto Utility上先套用四月標記偵測功能

  2. 接線 依照上小節設計的接線圖接妥控制電路。
  3. 設定開發環境 在Pixetto Junior上

    ,選好開發板類型

    、連接埠
  4. 撰寫積木程式樣板 因為Pixetto Junior沒有燈條的擴充積木,所以我們先用它來產出一個四月標記偵測到0、1、2編碼圖形後讓燈條打出相對應的紅、綠、藍三原色的積木樣板程XmasEye.sb3此時我們先將Pixetto Junior由積木程式自動產生的Arduino語法程式複製並貼到任一文字編輯器(例如:記事本、Notepad++、…)中
    再以XmasEye.ino為檔名存檔
    其中,這塊積木上的Arduino Nano接腳(管腳為大陸用語,英文都是pin)編號無特別意義。我們會在下一個步驟中,使用Arduino IDE來修改成燈的控制語法。
  5. 編修Arduino語法程式 開啟已在步驟4存檔的XmasEye.ino。依照下列程式的內容修改後,參考筆者拙著〈心情指數:使用VIA Pixetto視覺感測器之形狀偵測(Shape Detection)功能https://reurl.cc/9Z7QaO〉,下載Adafruit的Arduino版NeoPixel函式庫https://reurl.cc/3N7ZQj)後將程式燒錄到Arduino Nano中做整體測試了。

#include <Adafruit_NeoPixel.h> //Adafruit的燈條控制函式庫NeoPixel

#include <Arduino.h>

#include <Pixetto.h> //8787的控制函式庫(V1.4.2版又改回這個名字)
Pixetto ss(4,5); //D4:黃、D5:白

#define PIN 8 //燈條接在Arduino Nano的D8
#define NUMPIXELS 17 //燈條上的LED數目
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB+NEO_KHZ800);

void setup() {
  ss.begin(); //初始化8787

  //初使化燈條並做開機顏色測試
    pixels.begin();
    pixels.fill(0x00FF00, 0, NUMPIXELS); //從0~NUMPIXELS將打亮LED為全綠色(綠色的成份是FF、紅色及藍色的成份為0)
    pixels.show(); //顯示LED的顏色設定
    delay(500);
    
  //清除燈條顏色 
    pixels.clear(); 
    pixels.show();
} //end of setup()

void loop() {
  if (ss.isDetected()) {
    if (ss.getTypeID()==0) { //四月標記0:燈條亮紅色
        pixels.fill(0xFF0000, 0, NUMPIXELS);
        pixels.show();
    delay(800);
    } else if (ss.getTypeID()==1) { //四月標記1:燈條亮綠色
        pixels.fill(0x00FF00, 0, NUMPIXELS);
        pixels.show();
    delay(800);
    }  else if (ss.getTypeID()==2) { //四月標記2:燈條亮藍色
        pixels.fill(0x0000FF, 0, NUMPIXELS);
        pixels.show();
    delay(800);
    } //end of if:四月標記數字0、1、2?

    delay(2*1000); //讓8787延遲2秒再開始偵測
  } //end of if:8787偵測到四月標記?
} //end of loop()

成果展示

本例的展示影片如(https://reurl.cc/rarXnx)所示。

教學活動設計

  1. 16h5家族的30組數字 密西根大學研發的這套16h5家族四月標記共有0~29共30個數字的圖形編碼(encoding)可用(https://reurl.cc/7y7WE1)。請試著修改範例程式XmasEys.ino,讓辛辛苦若手作的聖誕樹能展現出更多的燈光變化,例如:3亮霹靂燈、4亮彩虹燈…。
  2. 流水燈 參考Adafruit NeoPixel函式庫中的simple範例(這個例子是讓燈條呈現流水燈的燈光變化),將它和本例的XmasEye.ino整合,使得聖誕樹樹可以用四月標記0來啟動流水燈的展示效果。註:讀者請在simple.ino的第37行加上「pixels.show();」,否則燈條第一次顯示完流水燈特效後編號0的第1顆LED會一直亮著不會清除。

實作練習題

使用Pixetto Editor的AprilTag積木做為視覺感測,當8787偵測到四月標記1時,讓Arduino Nano板載的LED點亮。同理,當8787偵測到四月標記0時,讓LED熄滅。
參考程式:


参考資料

  1. 六種授權條款
  2. Apriltag原理簡介及原始程式碼:https://reurl.cc/0Dz1kx

2021年2月16日 星期二

當胖達遇見8787:使用VIA Pixetto視覺感測器之顏色偵測功能

當胖達遇見8787

使用VIA Pixetto視覺感測器之顏色偵測功能

FB2http://gg.gg/TedLeeMicrobitFB/
URL2http://gg.gg/TedLeeMicrobit/

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB1http://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/
URL1http://gg.gg/TedLeeURL/

Feb. 16, 2021
88x31.png[1]

難易度★★☆☆☆

主題:遙控

胖達因為兩眼黑輪看不清楚電燈開關在牆上何處,請大家想想法子來幫忙他「重見光明」吧。

 任務:mBlock5+8787擴充積木

以色彩當做電燈的切換開關(使用mBlock5的另一種積木式開發工具來控制8787顏色偵測功能)。

 材料

項目

品名

單位

數量

1

VIA Pixetto視覺感測器(含長、短micro USB傳輸線各一條)

1

2

Grove

1

3

Arduino Uno

1

4

USB2.0 A-B公傳輸線

1

l 請準備測試用物件(例如:紅、藍外殼的筆)各一
l 讀者安裝VIA Github上這個版本的mBlock5擴充積木xxx.mext後,就能改用Arduino Nano來控制

硬體連接

請依照以下接線將8787、Uno和電腦連接好,以便後續測試。

8787Grove線)

Uno

D4

D5

5V

GND




功能設計

在單元1中,我們介紹了以Pixetto Junior來開發8787的電控程式。在該單元末的實作題中,我們亦展示了它的攣生兄弟Pixetto Editor也能達到這個目的。此外,在單元2最後的實作題中,Arduino的C/C++語法也是十分便利的開發工具。另一方面,範例1~3在Pixetto Scratch上,8787更進一步的擔任起Scratch遊戲或動畫的外部AI視覺感測器。現在,本範例再進一步地展示Makeblock的mBlock5也可支援8787相關應用的開發任務。

首先,在Pixetto Utility

上先套用紅色及藍色的顏色偵測功能

接著,準備好mBlock5的8787開發環境[2]。

  1. 從Makeblock官網上(https://reurl.cc/V38Rbb)下載mBlock5單機離線版並安裝之
  2. 從VIA官網(https://reurl.cc/1ge05p)下載8787的mBlock5擴充積木 。請將下載的.zip解壓縮後,備妥 pixetto-v1.4.0.mext。
  3. 在mBlock上,刪除用不到的設備(device)。加入Arduino Uno開發板 
  4. 將步驟2的8787擴充積木檔案拖進mBlock5視窗中就可看見多了一個Pixetto積木抽屜了
  5. 初始化好8787後即可設定偵測到紅色物件亮燈(讓Arduino Uno的D13腳位輸出高電位);偵測到藍色物件關燈(讓Arduino Uno的D13腳位輸出高電位)。註:建議在開始拉積木程式前,以Blink程式先確認過軟硬體開發環境是否備妥。
  6. 將8787和Arduino Uno接到電腦的USB插槽,按後來建立和mBlock之間的序列傳輸通道
     (編號小的是Arduino Uno,編號大的是8787) 
    。其中,我們可以從裝置管理員確認到Arduino Uno及8787所被指定的序列編號
  7. 按下 按鈕上傳積木程式到Arduino Uno上 
     

本範例完整程式碼可由下載。

註:我們比較一下mBlock5、Pixetto Juniot和Pixetto Editor、Pixetto Scratch四種工具的8787擴充積木之差異處。 

  1.  mBlock5: 
  2. Pixetto Junior:
  3. Pixetto Editor:
  4. Pixetto Scratch:

看來Pixetto在mBlock5上的積木數量比他們原生的工具更完整喔!

成果展示

本文的展示影片如https://reurl.cc/ravqp1所示。

教學活動設計

1. 繼電器(relay) 讓Arduino Uno外掛一顆繼電器來控制家中小功率的電器用品(例如:檯燈),讓它可以用紅、藍色卡當作切換開關。

實作練習題

以「紅色:長亮綠色:短亮藍:關閉」的LED亮燈控制規則改寫本單元的範例
參考程式:。


参考資料

  1. 六種授權條款
  2. 感謝VIA的Vincnet副理技術支援。