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

作者:Ted Lee

Jingle bells 、jingle bells…鈴聲多響亮 。逢此歲末年終之際,讓我一起動動手來做一棵與眾不同的聖誕樹吧!設計一自動感應裝置來控制手作聖誕樹的燈光變化(利用8787 的16h5家族四月標記[2]功能來觸發WS2812B燈條的顏色切換效果)。

材料清單

造形設計(電路、結構)

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

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

設計流程

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中做整體測試了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include //Adafruit的燈條控制函式庫NeoPixel

#include

#include //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()

成果展示

學生成果作品

(作者為本刊專欄作家,本文同步表於作者部落格,原文連結;責任編輯:林亮潔)

Ted Lee

Author: Ted Lee

從工程師轉任中學教師,又為了捍衛教育理念,投身成為 STEAM 教育工作者,自稱「無可救藥的人文教育理想主義者」的李俊德(Ted Lee)。

Share This Post On

發表