聖誕之珠:
使用VIA Pixetto視覺感測器之四月標記功能
Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
Blog:http://gg.gg/TedLeeBlog/
Feb. 27, 2021
主題:聖誕樹
Jingle bells 、jingle bells…鈴聲多響亮 。逢此歲末年終之際,讓我一起動動手來做一棵與眾不同的聖誕樹吧!
任務:
設計一自動感應裝置來控制手作聖誕樹的燈光變化(利用8787 的16h5家族四月標記[2]功能來觸發WS2812B燈條的顏色切換效果)。
材料
品名 |
數量 |
單位 |
備註 |
VIA Pixetto視覺感測器(含長、短micro USB傳輸線各一條) |
1 |
盒 |
|
4-pin UART傳輸線 |
1 |
條 |
|
Arduino Nano(FT232晶片) |
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 | 8787(Grove線) |
| D4 | 黃 |
| D5 | 白 |
DIN | D8 | |
+5V | 5V | 紅 |
GND | GND | 黑 |
完整的參考設計流程為:
功能設計
。- 接線 依照上小節設計的接線圖接妥控制電路。
,選好開發板類型
、連接埠。- 編修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()
。- 接線 依照上小節設計的接線圖接妥控制電路。
,選好開發板類型
、連接埠。- 編修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)所示。
教學活動設計
- 16h5家族的30組數字 密西根大學研發的這套16h5家族四月標記共有0~29共30個數字的圖形編碼(encoding)可用(https://reurl.cc/7y7WE1)。請試著修改範例程式XmasEys.ino,讓辛辛苦若手作的聖誕樹能展現出更多的燈光變化,例如:3亮霹靂燈、4亮彩虹燈…。
- 流水燈 參考Adafruit NeoPixel函式庫中的simple範例(這個例子是讓燈條呈現流水燈的燈光變化),將它和本例的XmasEye.ino整合,使得聖誕樹樹可以用四月標記0來啟動流水燈的展示效果。註:讀者請在simple.ino的第37行加上「pixels.show();」,否則燈條第一次顯示完流水燈特效後編號0的第1顆LED會一直亮著不會清除。
實作練習題
参考資料:
- 六種授權條款。
- Apriltag原理簡介及原始程式碼:https://reurl.cc/0Dz1kx。
沒有留言:
張貼留言