2021年3月7日 星期日

小彼特開天眼:使用VIA Pixetto視覺感測器之形狀偵測功能

小彼特開天眼

使用VIA Pixetto視覺感測器之形狀偵測功能[1]
Line:ted2016.kpvs
Email:Lct4246@gmail.com
FBhttp://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/

Mar. 7, 2021
88x31.png[2]

難易度★★★☆☆

主題:音效

聲音效果常能在一般場合上起畫龍點睛之效。就讓我們一起來play music吧!

任務:

小彼特特別加裝了新設備「天眼」來破解酷巴佈下的重重障礙而賺取滿滿的金幣。我們一起來看小彼特如何大顯身手吧!(利用8787的形狀偵測功能來啟動micro:bit內建的瑪莉歐撞金幣的音效「ba ding)。

 材料

品名

數量

單位

備註

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

1

 

Grove

1

 

micro:bit主板

1

 

micro USB傳輸線(100cm

1

 

KSB034 I/O擴充板(90度排針)

1

 

圓形物件

1

 

造形分析(結構)

請參考瑪莉歐撞金幣的場景 ,將8787及micro:bit結合到讀者的情境之中,以便說一個您的設計故事。

功能分析(電路、程式)

如下表所示,將8787 Grove線的黃白Tx、Rx和micro:bit的P1、P2相接,以雙電源共地方式連接8787和micro:bit(做實驗時可將兩者都接到同一部電腦上供電)。註:因為micro:bit的P0腳和音源輸出同線路,習慣上,將它保留給外部的蜂鳴器使用。

8787

micro:bit

P1

P2

+3V3

GND

 


請參考本書範例5:心情指數的設定,在Pixetto Utility上套用圓形的形狀偵測功能

當micro:bit出現8787初始化完成圖形之後,如果8787偵測到圓形物件,則讓micro:bit播出瑪莉歐撞金幣的ba ding特效聲

完整的micro:bit積木程式可由https://reurl.cc/MZ6bVn)下載。

成果展示

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

教學活動設計

  1. 主題曲 根據瑪莉歐主題曲簡譜https://reurl.cc/8y6WE7),修改本範例程式,讓8787偵測到三角形時由micro:bit開始播曲子

實作練習題

修改本範例程式,使得小彼特可以隨時自動計算獲得的金幣數。参考程式碼如下:


参考資料

  1. 本文係參考VIA官網〈Micro:bit 程式設計〉(https://reurl.cc/Dvl20R)改寫而成。
  2. 六種授權條款

2021年3月3日 星期三

Pixetto Scratch版彩球機解析:使用VIA Pixetto視覺感測器之顏色偵測功能

Pixetto Scratch版彩球機[1]解析

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

Mar. 3, 2021
88x31.png[2]

難易度★★★☆☆

主題:樂齡

台灣已邁入(出)生不如死(亡)的高齡化社會。為了讓年長者能健康地維持身體機能,試著想想科技是否能幫上什麼忙呢?要老人家運動就要有伴,他們最想要和孫子們一塊兒玩。所以,做一台彩球機,祖孫可以同樂,豈不兩全其美呢?註:楊老師根據這個主題,原先設計有一實體的彩球機如影片所示(https://reurl.cc/6yd3dM

任務:

爺爺老了小7想要做個可以動手兼動腦的機台讓阿公可以每天one more, two more一下(利用8787 的顏色偵測功能製作一個可以首腦並用的Scratch抗老遊戲)。

 材料

品名

數量

單位

備註

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

1

 

紅、黃、藍、綠色球各一

1

 

*3D列印攝影機架

1

選配(楊昌珣老師分享)

造形分析(結構)

請參考楊老師安排的情境設置方式來設計彩球機的架設場景。其中在筆電上用來放置8787的攝影機架,可參考書附楊老師分享的「3D列印攝影機架.stl」(https://reurl.cc/E2jNra)自行印出使用。此外,楊老師還設計有一雷切版結構,讀者可参考原作者分享的「AI活力彩球機scratch手推型.rld」(https://reurl.cc/KxlY4m)雷切檔也切一台來組裝。

功能分析

 請先觀看書附楊老師錄製的操作影片(https://reurl.cc/9ZvAGx),讀者們應該可以看出彩球機主要有計時一分鐘及計分00~99兩大功能。本範例完整的程式碼可由下載(https://reurl.cc/NXlox5)。

  1. 舞台分析 使用這個文字圖形做為初始畫面的背景圖。

  2. 角色分析 本例中一共有 用來控制全局的controller,它一共有8個造形圖案,分別是紅綠黃藍的隨機出球、倒數計時的321、及遊戲結速的Game Over圖檔。

    計分部份有十位數point_10及個位數point_1兩個角色。另外,計分部份則有十位數time_10及個位數time_1兩個角色。point_10、time_10和time_1都會有0~9共十個數字來切換顯示  。另外,因為遊戲限時1分鐘,所以計時的十位數字time_10只會在0~6變化 
  3. 劇本分析 在Pixetto Utility上先套用顏色偵測功能後開啟8787硬體和Pixetto Scratch傳輸資料的Pixetto Link中介程式。此時,會在螢幕右下方看到這隻程式正在電腦背後執行著。連入雲加速器https://reurl.cc/pmvaLx),載入範例14:Pixetto Scratch版彩球機解析.sb3」這隻我們整理楊老師分享的原始程式碼。讀者設定好Pixetto Scratch與8787的序列埠  後就可先行體驗一下彩球機如何讓爺爺奶奶們「運動變年輕」的魅力。
    然後,我們來解析它的計分功能。玩家的得分範圍預設為00~99兩位數。所以,程式在controller角色裡建立了變數score

    做為得分的累計,控制的程式片斷如下。在計分顯示效果上,透過圖形數字(角色point_10和point_1的切換
     ,在視覺效果上就會看到畫面上好像有真實的數字在不斷跳動著 。和計分的邏輯相同,計時的做法如出一輒,在controller角色裡建立了變數time來記錄剩遊戲剩餘的時間。程式一開始時先呈現出3秒倒數計時的提示。如果時間尚在60秒遊戲限時內的話,5秒隨機切換出題、遊戲時間剩下3秒時出現提示音效
    、時間到時顯示收尾畫面
    在計時顯示效果上,取出60~00的十位數(角色time_10)方法是把它扣掉個位數後再取出10的餘數例如:(36-6)/10...餘3,所以,36的十位數便是3。而取出個位數(角色time_1)的方法是取原數字的餘數即可,例如:36/10...餘6,所以,36的個位數便是6

教學活動設計

  1. 阿公阿媽來打球 準備2套彩球機,邀請2位學員分飾阿公和阿媽來PK。請於2人的手上綁上重物來模擬長者行動遲緩的情境,以建立同理心。
  2. 多執行緒(multithreads) 在controller角色的程式中有數處擺放著等待積木,這是因為彩球機要同時要計分和計時,所以使用了CPU的多執行緒排程(scheduling)技術來實現。讀者們可試著調整這幾塊積木的數字大小,看看程式執果是否順暢。

實作練習題

修改彩球機的Pixetto Scratch程式,增加一得分90即達標遊戲停止的設定。
參考程式:修改controller角色計時程式片斷如下


参考資料

  1. 本文乃台北市仁愛國中楊昌珣老師及其公子楊喻丞共同創作作品。感謝楊老師惠允本書改寫後收錄。
  2. 六種授權條款

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