「酷跑遊台灣」之機電整合分享:
新北市108年資訊科技教育成果展專案 [1]
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
專案說明
結構設計
專案架構
- 客戶端(client side):前端資料以不織布及手工縫紉的錶帶的三塊 Watch:bit 作為客戶端的傳輸載具。這三部 Watch:bit 穿戴在玩家們身上以取得各自的快走步數。
- 伺服器端(server side):三家的計步數值全數送往固定在展示架後頭作為伺服器端的 micro:bit R 累計。如所圖 6 所示,此端點以(3/5V)雙電源共地的方式和 WS2812B 的213 顆套管燈條連接來 [3] 展示玩家環台的進度燈號。此外, micro:bit R 以 USB 傳輸線和筆電相接。一方面除了供電給它之外,也透 過mbed 的序列埠驅動程式(https://reurl.cc/pW8M4e)將由 Watch:bit A-C 以無線電廣播傳來各自的計步和透過有線的序列埠傳輸到筆電上。最後,再將 Excel 的排行榜輸出至液晶電視上顯示。
編號 |
品名 |
單位 |
數量 |
備註 |
1 |
手作 Watch:bit(含 micro:bit 主板與 KSB040 鋰電池擴充板各一塊) |
套 |
3 |
客戶端 |
3 |
收納盒 |
個 |
1 |
|
2 |
micro:bit 主板(含 KSB040 鋰電池擴充板一塊) |
塊 |
1 |
伺服器端 |
9 |
USB 傳輸線 |
條 |
2 |
|
10 |
USB 延長線(2.0 A 公-A 母 3 米) |
條 |
1 |
|
4 |
WS2812B 燈條 |
包 |
1 |
展示端 |
5 |
杜邦線(公母三條、公公一條) |
條 |
4 |
|
6 |
USB 轉 TTL 線 |
條 |
1 |
|
7 |
5V 變壓器 |
個 |
1 |
|
8 |
魔鬼氈 |
段 |
1 |
|
11 |
延長線 |
條 |
1 |
|
12 |
筆記型電腦 |
部 |
1 |
|
13 |
液晶電視 |
台 |
1 |
機電整合編程
- 重置(reset):開始闖關前,選手們都按下A+B按鈕來重置各自的Watch:bit。
- 開始(start):按下A按鈕後啟動計步器,Watch:bit每動一下便累計行走步數。
- 停止(stop):當競賽時間到時,三位選手各自按下B按鈕結束計數,並將步數廣播給 micro:bit R。
// 啟動計步器 input.onButtonPressed(Button.A, function () {
basic.showNumber(0) start =
true }) // 計步 input.onGesture(Gesture.Shake, function () { if (start)
{ no =
no + 1 radio.sendValue("A",
no)
basic.showNumber(no) } }) radio.onReceivedValue(function (name, value) { if (name
== "AA") { ack =
0
music.playTone(262, music.beat(BeatFraction.Whole)) } }) // reset input.onButtonPressed(Button.AB, function () { ack = 0 no = 0 start =
false
basic.showString("A") }) // stop input.onButtonPressed(Button.B, function () { ack = 1 start =
false }) let no = 0 let start =
false let ack = 0 radio.setGroup(168) basic.showString("A") ack = 0 basic.forever(function
() { if (ack) { radio.sendValue("SA", no) basic.pause(0) } }) |
- 重置:按下 A+B 按鈕將 micro:bit R 恢復到初始狀態(initial state)。
- 廣播接收:micro:bit R 接收 Watch:bit A-C 的計步廣播資料 (A/ B/ C, 計步值) 如圖 11 所示。
// 歸零
input.onButtonPressed(Button.AB, function () {
basic.showString("R")
led_sum = 0
initStrip()
})
radio.onReceivedValue(function (name, value) {
if (name == "SA") {
a = value
radio.sendValue("AA", a)
} else if (name == "SB") {
b = value
radio.sendValue("AB", b)
} else if (name == "SC") {
c = value
radio.sendValue("AC", c)
}
if (name == "RA" || name == "RB" || name == "RC") {
basic.showString("R")
led_sum = 0
initStrip()
} else {
// stop
if (name == "SA") {
a = value
led_sum = a + (b + c)
sa = 1
radio.sendValue("AA", 0)
basic.pause(0)
} else if (name == "SB") {
b = value
led_sum = a + (b + c)
sb = 1
radio.sendValue("AB", 0)
basic.pause(0)
} else if (name == "SC") {
c = value
led_sum = a + (b + c)
sc = 1
radio.sendValue("AC", 0)
basic.pause(0)
}
if (sa && (sb && sc)) {
basic.showLeds(`
. # # # .
# . . # #
# . # . #
# # . . #
. # # # .
`)
basic.showNumber(led_sum)
serial.writeString("Data,")
serial.writeNumber(led_sum)
serial.writeLine("")
sa = 0
sb = 0
sc = 0
} else {
if (name == "A") {
a = value
} else if (name == "B") {
b = value
} else if (name == "C") {
c = value
}
led_sum = a + (b + c)
basic.showNumber(led_sum)
basic.pause(0)
if (led_sum <= led_no) {
showStrip(led_sum)
}
}
}
})
function showStrip (num: number) {
for (let i = 0; i <= num - 1; i++) {
strip.setPixelColor(i, strip_color)
strip.show()
// 這裡不pause一下下就會出錯,hen鳥…
basic.pause(200)
}
}
function initStrip () {
strip_color = neopixel.colors(NeoPixelColors.Yellow)
a = 0
b = 0
c = 0
sa = 0
sb = 0
sc = 0
strip.clear()
strip.show()
}
let strip_color = 0
let sc = 0
let sb = 0
let sa = 0
let c = 0
let b = 0
let a = 0
let strip: neopixel.Strip = null
let led_no = 0
let led_sum = 0
radio.setGroup(168)
basic.showString("R")
led_sum = 0
// start from 0
led_no = 213
// 初始化灯條
strip = neopixel.create(DigitalPin.P1, led_no, NeoPixelMode.RGB)
strip.clear()
strip.show()
initStrip()
3. 燈條顯示環島進度:如圖 12 中紅色區塊所示。
- 本專案因已過保密年限,並經由明志國中(戴春成校長與林耀坤主任)同意而公開分享「機電整合」之技術內容,以供各方同好參考。
- 六種授權條款。
- micro:bit R 串接 KSB034 I/O 擴充板後由筆電供應 3V 電源,燈條由 110V 轉 5V 變壓器供電,兩者間的 GND 彼此相連。另一方面,燈條的資料輸入 DI(Data In) 接到 KSB034 上的 P1 接腳接線。
- 該外掛要求:序列埠需調整到編號 7 以內。同時,發送端以( Data, 傳送數值)格式和 Excel 工作表(worksheet)對應之。其中,Data 固定對應到圖 14 的「分數」欄位。
沒有留言:
張貼留言