2018年7月19日 星期四

[Micro:bit] 蒸汽彼特(STEAM on Micro:bit)之創意發明王養成班教材──主題4:小彼特play十點半

蒸汽彼特(STEAM on Micro:bit)

之創意發明王養成班教材[1]

主題4:小彼特play十點半


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/

July 19, 2018
88x31.png[2]

難度

★★★★☆

任務

會用撲克牌玩十點半不稀奇,會用小彼特寫程式來玩一局才叫威!
人和電腦PK十奌半,會自動判斷輸贏。也可擴充成兩人对战模式。)

材料

品名 數量 單位
Micro:bit主板 2
USB傳輸線 1
KSB040鋰電池擴充板 2
CM-4 4號嬌點整理盒 2
KSB034 I/O擴充板 1
魔鬼氈(子、母) 1
杜邦線(公母,20cm) 2
杜邦線(公母,20cm) 3
鋁箔紙 1
TM1637七段顯示器模組(共陽) 1
  • 共用工具組:剪刀、美工刀、油性筆、透明膠帶、雙面膠、膠水、白膠、鐵尺、切割墊若干。

解說  
本例是小彼特和一位玩家PK,先達到十奌半或結算時奌數和高的一方獲勝。
  1. 外觀設計:參考照片123或其他與十奌半撲克牌主題相関之图案,以設計出個人作品的造型
  2. 接線圖TM1637與KSB034的串接方式為Vcc:3V3、GND:GND、CLK:P13、DIO:P14。另外,分別將P1與GND各自連接一鋁箔以做為發牌控制按鈕
  3. 參考程式碼:TM1637的Make Code擴充積木可參考此網頁所示,加入https://github.com/microbit-makecode-packages/TM1637所列之TM1637套件。
    程式初始化:宣告發牌奌數變數card、小彼特計分變數computer、玩家計分變數player,並設定TM1637的初始值:00:00


    發牌:使用P1的按压事件來模擬電腦發牌的过程。

    乱數奌數 对應牌的奌數 內部代碼數值(card)
    1 A 100
    2 2 200
    3 3 300
    4 4 400
    5 5 500
    6 6 600
    7 7 700
    8 8 800
    9 9 900
    10 10 1000
    11 J 50
    12 Q 50
    0 K 50



    收牌(taken):玩家收下新翻牌後會產生三种狀況之一,
    第一:牌和正好為十奌半。播放过関音效並在小彼特的5×5 LED奌矩陣上顯示过関訊息。
    第二:牌和仍小於十奌半。計算新的牌和奌數,並顯示到TM1637上。
    第三:驚爆十奌半。播放闖関失敗音效,並在小彼特的5×5 LED奌矩陣上顯示对應訊息。

    不收牌(not taken):若小彼特手中牌的奌數和加上新翻牌仍尚不足十奌半時,則小彼特收下此新翻牌



    判輸贏:比較小彼特和玩家的手中牌的奌數和,積分大者為勝。
完整程式碼可由此下載。


學員作品选粹



教學活動設計

  1. 活動1:學員交換玩其他學員的作品,逐一進行PK賽。
  2. 活動2:設置多線多關(各關卡間以廣播串聯)之闖關賽,選出最厲害的「半點王」。
  3. 活動3:由十點半擴充成二十一點半,請學員改寫程式。
  4. 活動4:用兩塊板子,各自連接一顆TM1637。一塊當扮演玩家,一塊扮演電腦。玩家和電腦PK。

    積木指标

    Basic、Input、Variables、Logic、Logic、Math、Music。


    編程指标

    选擇結構(selective structure)非同步事件處理(asynchronous event handling)外掛套件(package)


    硬体指标

    廣播(radio)。

    STEAM指標

    TEAM。


    和108課綱的对照

        • 科技領域核心素養:科-J-A2 具備理解情境與獨立思考的能力,並運用適當科技工具與策略處理,以解決並處理生活問題與生命議題。
          • 科技領域/資訊科技學習重點
            • 學習表現:資p-IV-1 能選用適當的資訊科技組織思維,並進行有效的表達。
            • 學習內容:資P-IV-2 結構化程式設計(循序與選擇結構)。

                参考資料
                1. 本PBL教材皆採:任務解說(含筆者多年教學經驗分享)、教學活動設計三大段的寫作架構撰文。
                2. 六種授權條款

                2018年7月15日 星期日

                [Micro:bit] 蒸汽彼特(STEAM on Micro:bit)之創意發明王養成班教材──主題18:敬君一杯茶/酒

                蒸汽彼特(STEAM on Micro:bit)

                之創意發明王養成班教材[1]

                主題18:敬君一杯茶/酒


                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/

                July 15, 2018
                88x31.png[2]

                任務

                來來來,coffee or tea?茶,有茶道;酒,有品酒;咖啡,有咖道(台語的「地板」?)。
                使用板載重力加速度感測器來練習茶/動畫

                材料

                品名 數量 單位
                Micro:bit主板 2
                USB傳輸線 1
                KSB040鋰電池擴充板 2
                CM-4 4號嬌點整理盒 2
                灰銅紙(1mm厚) 1
                魔鬼氈(子、母) 2
                • 共用工具組:剪刀、美工刀、油性筆、、透明膠帶、雙面膠、膠水、白膠、鐵尺、切割墊若干。

                解說 
                1. 外觀設計:在馬糞紙上畫出茶壺/酒瓶的外形,用工具剪下並在小彼特背後及此造型上貼妥魔鬼氈。
                2. 參考程式碼[3]
                  小彼特往左傾(tilt left)時展示倒酒動畫;
                  右傾(tilt right)時播放倒茶動畫。

                  因此,需有一塊主人彼特(master Micro:bit)當做茶壺或酒瓶來倒入僕人彼特(slave Micro:bit)的茶杯或酒杯中[4]。
                1. 程式初始時設妥廣播群組(group),並將開麥拉旗號action放下(disable)。 
                2. 按A鍵則重置(reset)
                3. 往左傾時,舉起開麥拉旗號action、播放酒杯漸空的倒酒動畫(酒杯漸空)。播完後發出通知碼0給僕人彼特,誏它接著啟動酒杯漸滿的倒酒動畫。
                4. 往右傾時,舉起開麥拉旗號action、顯示茶壺图示,並發出通知碼1給僕人彼特,誏它接著啟動茶壺漸滿的倒茶動畫。


                  1. 設定廣播群組並清除LED奌矩陣畫面。
                  2. 按A鍵則清除LED畫面
                  3. 若收到的廣播通知碼為0時,則啟動酒杯漸滿的倒酒動畫。
                  4. 若收到的廣播通知碼為1時,則啟動茶壺漸滿的倒茶動畫

                學員作品选粹



                教學活動設計

                1. 活動1:將公版程式改成倒三杯動畫。
                2. 活動2:

                  積木指标

                  Basic、Input、Variables、Logic、Radio。


                  編程指标

                  选擇結構(selective structure)非同步事件處理(asynchronous event handling)、動畫


                  硬体指标

                  廣播(radio)。

                  STEAM指標

                  TEAM。


                  和108課綱的对照

                      • 科技領域核心素養:科-J-A2 具備理解情境與獨立思考的能力,並運用適當科技工具與策略處理,以解決並處理生活問題與生命議題。
                        • 科技領域/資訊科技學習重點
                          • 學習表現:資p-IV-1 能選用適當的資訊科技組織思維,並進行有效的表達。
                          • 學習內容:資P-IV-2 結構化程式設計(循序與選擇結構)。

                              参考資料
                              1. 本PBL教材皆採:任務解說(含筆者多年教學經驗分享)、教學活動設計三大段的寫作架構撰文。
                              2. 六種授權條款
                              3. 感謝換心一文帶給我們的靈感。
                              4. 這就是資訊科學常聽到的主/從式架構(client/ server architecture)。

                              2018年7月12日 星期四

                              [Micro:bit] 蒸汽彼特(STEAM on Micro:bit)之創意發明王養成班教材──主題11:小彼特妖怪手錶

                              蒸汽彼特(STEAM on Micro:bit)

                              之創意發明王養成班教材[1]

                              主題11:小彼特妖怪手錶


                              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/

                              July 12, 2018
                              88x31.png[2]


                              任務

                              法力高強的小彼特把森林裡老妖收服在寶貝手錶裡了,上緊發條讓它轉動吧!
                              利用不織布設計手錶的外型並以編程來控制故事腳本的逻輯。)

                              材料


                              品名 數量 單位
                              Micro:bit主板 1
                              USB傳輸線 1
                              KSB040鋰電也擴充板 1
                              CM-4 4號嬌點整理盒 1
                              不織布 1
                              長尾夾 1
                              魔鬼氈(子、母) 1
                                • 共用工具組:剪刀、美工刀、油性筆、、透明膠帶、雙面膠、膠水、白膠、鐵尺、切割墊若干。


                                解說 
                                1. 外觀設計:在稿紙上畫出妖怪手錶的外觀,再將設計好的手錶外框拓印到不織布上並裁剪下來
                                2. 根据小綠人好客動畫,設計手錶的計時動畫
                                3. 功能程式碼
                                程式初始化(initialization):隨機產生驚喜抽獎surprise,誏手錶開始計時。隨後播放特定音效及图案後,依照向左或向右的箭頭指示按下按鈕A或B
                                 

                                按鈕A:獲得Luck 7幸運符一枚,並開始奏樂

                                按鈕B:獲得魔王関免費招待卷一張
                                 

                                計時動畫副程式Clock

                                  1.  let surprise = 0
                                  2. function clock() {
                                  3. basic.showLeds(`
                                  4.         . . # . .
                                  5.         . . # . .
                                  6.         . . # . .
                                  7.         . . . . .
                                  8.         . . . . .
                                  9.         `)
                                  10. music.playTone(330, music.beat(BeatFraction.Whole))
                                  11. basic.pause(100)
                                  12. basic.showLeds(`
                                  13.         . . # # .
                                  14.         . . # # .
                                  15.         . . # . .
                                  16.         . . . . .
                                  17.         . . . . .
                                  18.         `)
                                  19. music.playTone(330, music.beat(BeatFraction.Whole))
                                  20. basic.pause(100)
                                  21. basic.showLeds(`
                                  22.         . . # . .
                                  23.         . . # # #
                                  24.         . . # . .
                                  25.         . . . . .
                                  26.         . . . . .
                                  27.         `)
                                  28. music.playTone(330, music.beat(BeatFraction.Whole))
                                  29. basic.pause(100)
                                  30. basic.showLeds(`
                                  31.         . . # . .
                                  32.         . . # . .
                                  33.         . . # # #
                                  34.         . . . . .
                                  35.         . . . . .
                                  36.         `)
                                  37. music.playTone(330, music.beat(BeatFraction.Whole))
                                  38. basic.pause(100)
                                  39. basic.showLeds(`
                                  40.         . . # . .
                                  41.         . . # . .
                                  42.         . . # . .
                                  43.         . . . # #
                                  44.         . . . . .
                                  45.         `)
                                  46. music.playTone(330, music.beat(BeatFraction.Whole))
                                  47. basic.pause(100)
                                  48. basic.showLeds(`
                                  49.         . . # . .
                                  50.         . . # . .
                                  51.         . . # . .
                                  52.         . . . # .
                                  53.         . . . . #
                                  54.         `)
                                  55. music.playTone(330, music.beat(BeatFraction.Whole))
                                  56. basic.pause(100)
                                  57. basic.showLeds(`
                                  58.         . . # . .
                                  59.         . . # . .
                                  60.         . . # . .
                                  61.         . . # . .
                                  62.         . . # . .
                                  63.         `)
                                  64. music.playTone(330, music.beat(BeatFraction.Whole))
                                  65. basic.pause(100)
                                  66. basic.showLeds(`
                                  67.         . . # . .
                                  68.         . . # . .
                                  69.         . . # . .
                                  70.         . # . . .
                                  71.         # . . . .
                                  72.         `)
                                  73. music.playTone(330, music.beat(BeatFraction.Whole))
                                  74. basic.pause(100)
                                  75. basic.showLeds(`
                                  76.         . . # . .
                                  77.         . . # . .
                                  78.         . . # . .
                                  79.         # # . . .
                                  80.         . . . . .
                                  81.         `)
                                  82. music.playTone(330, music.beat(BeatFraction.Whole))
                                  83. basic.pause(100)
                                  84. basic.showLeds(`
                                  85.         . . # . .
                                  86.         . . # . .
                                  87.         # # # . .
                                  88.         . . . . .
                                  89.         . . . . .
                                  90.         `)
                                  91. music.playTone(330, music.beat(BeatFraction.Whole))
                                  92. basic.pause(100)
                                  93. basic.showLeds(`
                                  94.         # . # . .
                                  95.         . # # . .
                                  96.         . . # . .
                                  97.         . . . . .
                                  98.         . . . . .
                                  99.         `)
                                  100. music.playTone(330, music.beat(BeatFraction.Whole))
                                  101. basic.pause(100)
                                  102. basic.showLeds(`
                                  103.         . # # . .
                                  104.         . # # . .
                                  105.         . . # . .
                                  106.         . . . . .
                                  107.         . . . . .
                                  108.         `)
                                  109. music.playTone(330, music.beat(BeatFraction.Whole))
                                  110. basic.pause(100)
                                  111. basic.showLeds(`
                                  112.         . . # . .
                                  113.         . . # . .
                                  114.         . . # . .
                                  115.         . . . . .
                                  116.         . . . . .
                                  117.         `)
                                  118. }
                                  119. input.onButtonPressed(Button.A, () => {
                                  120. basic.clearScreen()
                                  121. basic.showIcon(IconNames.Meh)
                                  122. music.playTone(330, music.beat(BeatFraction.Half))
                                  123. music.playTone(330, music.beat(BeatFraction.Half))
                                  124. music.playTone(330, music.beat(BeatFraction.Half))
                                  125. music.playTone(262, music.beat(BeatFraction.Double))
                                  126. music.playTone(294, music.beat(BeatFraction.Half))
                                  127. music.playTone(294, music.beat(BeatFraction.Half))
                                  128. music.playTone(294, music.beat(BeatFraction.Half))
                                  129. music.playTone(247, music.beat(BeatFraction.Double))
                                  130. })
                                  131. input.onButtonPressed(Button.B, () => {
                                  132. basic.clearScreen()
                                  133. basic.showIcon(IconNames.Angry)
                                  134. music.beginMelody(music.builtInMelody(Melodies.Nyan), MelodyOptions.Once)
                                  135. })
                                  136. surprise = Math.random(2)
                                  137. clock()
                                  138. music.beginMelody(music.builtInMelody(Melodies.Wawawawaa), MelodyOptions.Once)
                                  139. basic.clearScreen()
                                  140. basic.pause(500)
                                  141. for (let i = 0; i < 3; i++) {
                                  142. basic.showLeds(`
                                  143.         # . # . #
                                  144.         # # # # .
                                  145.         . . # . .
                                  146.         # # # # .
                                  147.         # . # . #
                                  148.         `)
                                  149. basic.pause(500)
                                  150. basic.clearScreen()
                                  151. basic.pause(500)
                                  152. }
                                  153. if (surprise == 0) {
                                  154. basic.showArrow(ArrowNames.East)
                                  155. } else {
                                  156. basic.showArrow(ArrowNames.West)
                                  157. }

                                學員作品选粹



                                教學活動設計

                                1. 活動1:請學員在稿紙上寫下手錶的功能發想,教師再使用創意思考整理術,帶領學員整理出一個公版的範例程式供參。
                                2. 活動2:

                                積木指标

                                Basic、Music、Input、Functions、Variables、Loops、Math。


                                編程指标

                                副程式(subroutines)乱數(random number)重覆結構(repetitive structure)非同步事件處理(asynchronous event handling)、動畫


                                硬体指标

                                無。

                                STEAM指標

                                TEAM。


                                和108課綱的对照

                                    • 科技領域核心素養:科-J-A2 具備理解情境與獨立思考的能力,並運用適當科技工具與策略處理,以解決並處理生活問題與生命議題。
                                    • 科技領域/資訊科技學習重點
                                      • 學習表現:資t-IV-1 能了解資訊系統的基本組成架構與運算原理。
                                      • 學習內容:資P-IV-2 結構化程式設計。

                                          参考資料
                                          1. 本PBL教材皆採:任務解說(含筆者多年教學經驗分享)、教學活動設計三大段的寫作架構撰文。
                                          2. 六種授權條款