Tinker Kit 進階專案套件組 中文教案|奧斯丁國際有限公司 OURSTEAM Internationl
icon教學資源
2020/12/01

Tinker Kit 進階專案套件組 中文教案

Tinker Kit

ElecFreaks micro:bit Tinker Kit是一套micro:bit的配件,不需要一堆凌亂的電線就可輕鬆連接各種模組
 

元件清單
電池盒(2 x AA) x 1|Elecfreaks micro:bit擴充板x 1|micro-B USB線x 1|OLED顯示器x 1|迷你伺服馬達(1.6kg)x 1|人體物體紅外線感測器x 1|土壤濕度感測器x 1|多按鍵模組 x 1|碰撞感測器x 1|蜂鳴器 x 1|5mm LED模組OBLED-紅色x 1|5mm LED模組-綠色x 1|5mm LED模組OBLED-藍色x 1|角度控制器 x 1|碰撞感測器x 1

 

Octopus:bit

ELECFREAKS Octopus:bit是micro:bit的擴充板,可在micro:bit上擴充GPIO埠、序列埠、IIC埠、SPI埠。

Octopus:bit最大的特色是可切換某些GPIO的電平,讓micro:bit可用於5V感測器。

 



Tinker Kit 擴充程式

點選「Code Drawer」欄目中的「Advanced」,點選「Extensions」為Tinker kit套件下載擴充程式,將跳出一個搜尋欄。



輸入「Tinker kit」並點選下載其擴充程式。

注意:如果跳出「不相容的軟體包將被刪除」的警示,請按照提示操作,或點選「New Project 」建立一個新專案。
 


●示範專案

01 音響Music Machine


材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x ElecFreaks micro:bit擴充板
  • 1 x Octopus 蜂鳴器
  • 1 x Octopus ADKeypad
硬體連接

將USB線的一端連接到計算機;另一端連接到micro:bit;然後將micro:bit側邊的引腳插入擴充板。


將蜂鳴器插入引腳0;ADKeypad插入引腳2,確保蜂鳴器和ADKeypad的電線顏色與擴充板上的引腳顏色一致。



程式設計

接著要編寫一個條件指令,如下圖所示。「 if-then」條件在「code drawer」裡的「Logic」可找到。以下的第一行程式設計為:當ADKeypad在插入擴充板上P2引腳的狀態下時,按下ADKeypad上的按鈕A,蜂鳴器便會發出Middle D的聲音。由於ADKeypad有5個按鈕,因此可以編寫5個條件指令,讓每個按鈕分別控制特定的聲音。



可以再利用micro:bit本身的按鍵新增3個聲音,如此就能利用中音Do~高音Do來彈奏簡單的曲子。



如果您使用的是舊版micro:bit,透過外接此蜂鳴器就能解決舊版micro:bit沒有蜂鳴器無法發出聲音的問題;如果您使用的是已具備蜂鳴器的新版micro:bit V2,透過外接此蜂鳴器讓您的音樂更加大聲吧!

程式連結


 

02 智能燈Smart Light

 
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 X Octopus人體紅外線感測器
  • 1 x Octopus 5mm LED OBLED-紅色

硬體連接

將micro:bit插入擴充板,然後將Octopus人體紅外線感測器插入Pin 0。


將LED插入引腳1,確保電線顏色與引腳顏色相同。
 



程式設計



當Octopus人體紅外線感測器偵測到任何人體運動,會觸發亮起紅燈;反之,紅燈則會熄滅。

程式連結

 
 

03 特雷門琴Electro-Theremin



材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 蜂鳴器
  • 2 x 跳線
  • 1 x 電位器

硬體連接

將蜂鳴器插入Pin0、將電位器插入Pin1,可根據顏色插入,確保擴充板上的電線顏色和引腳顏色匹配!


程式設計

在Makecode中先利用下方程式讀取電位器的所有訊號範圍,逆時針方向旋轉到底可以取得最小值,而順時針方向旋轉則可以獲知最大值。
因為micro:bit需要一些時間才能在螢幕上以跑馬燈顯示數字,而電位器讀取數值的數度較快,請注意這些數值如何變動,測試後可以發現讀取範圍為0~1023。



利用Math(數學)積木中的map(對應),將電位器的0~1023數值對應到Music(音樂)積木中的ring tone數值131~988。補充:點選ring tone積木,可以了解到其最低音的頻率為131、最高音的頻率為988。




建立變數:sound,存取讀取到的數值,並透過ring tone積木來依照sound變數的數值發出不同頻率的聲音,製造出像是特雷門琴般的聲響!






程式連結

 

04 簡易警報器Simple Alarm Box

我們將製作一個簡易警報器,設計當有人竊取財物時,透過碰撞感測器偵測到物品被取走,紅色LED會開始閃爍並且在OLED螢幕上顯示Warn文字提示;反之,綠色LED會持續亮著,並且在OLED螢幕上顯示Safe文字代表目前很安全。



材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 2 x Octopus LED(綠色、紅色)
  • 1 x 碰撞感測器
  • 1 x OLED
  • 3 x跳線

硬體連接

將紅色LED模組連接到引腳1。



如下圖所示,將USB線連接到micro:bit,再連接到擴充板上。
 

確認電線的顏色與擴充板上的引腳顏色一致,將碰撞感測器插入引腳0、綠色LED插入引腳8,最後將OLED螢幕插入擴充板插槽的IIC接口(任一行)。




程式設計

使用「Tinkercademy」內的「OLED」程式來初始化OLED螢幕和碰撞感測器。



由於只有兩種情況,因此只需要一個「else-if」條件。判斷當碰撞感測器被按壓時(以物品壓住碰撞感測器,代表物品還在),綠色的Octopus LED會亮燈;反之,則紅色LED會持續閃爍。



補充:這部分的程式用來讓紅色LED可以製造出閃爍的效果,可以透過更改暫停時間來調整閃爍的速度。




程式連結



實際測試

找一本書或其他物品,將其放在碰撞感測器頂部,我們可以看到綠燈恆亮、OLED螢幕顯示Safe,如下圖所示;但當書或放置物品被拿起時,會看到紅燈開始閃爍、OLED螢幕顯示Warn,而綠燈熄滅。


 

05 植栽監控裝置Plant Monitoring Device

在本應用中,我們將討論如何使用連接了蜂鳴器、OLED和濕度感測器的micro:bit來製作植栽監控裝置。


材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 x 迷你蜂鳴器
  • 1 x OLED
  • 1 x 濕度感測器
  • 2 x 跳線
硬體連接

步驟一


首先,將OLED插入擴充板上IIC接口上的任一行插槽。


步驟二

將蜂鳴器連接到P0,確任電線的顏色與擴充板上的引腳顏色一致。


步驟三

將濕度感測器插入P1。


程式設計

使用「Tinkercademy」提供的「OLED」積木程式來初始化OLED。
由於只有兩種條件,因此只需要一個「else-if」條件。透過按下A鍵,使micro:bit從濕度感測器讀取數值,當濕度感測器數值小於50時,表示盆中水量不足(可自行依據不同植物的狀況設定數值),蜂鳴器會發出聲響,並在OLED上顯示該數值多寡及「Water your plant!」。反之,如果濕度感測器數值大於50,蜂鳴器不會響,而OLED上會顯示「Your plant is in good codition」。



程式連結



找一株綠色植物,將濕度感測器插入土壤中,按下A鍵來獲取濕度感測值。當水量不足時,蜂鳴器會發出警報,告訴您「Water your plant!」;當植物有足夠的水份時,OLED面板會顯示水量足夠的英文句子來告訴您不需澆水。是不是很有趣!

 

06 入侵偵測系統Intruder Detection

在這個應用中,我們將製作一組入侵檢測系統。有人開門時,系統會發出聲音,OLED會顯示房子的狀態。


材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 x 碰撞感測器
  • 1 x OLED
  • 1 x 蜂鳴器
  • 2 x 跳線
硬體連接

將micro:bit插入擴充板,然後插入micro USB線。


接著使用跳線將蜂鳴器連接到引腳0,將OLED插入擴充板上IIC接口其的中一行插槽,如下圖所示。


將碰撞感測器插入引腳1,確認電線的顏色與擴充板上的引腳顏色一致。


程式設計

一開始時都應先初始化OLED螢幕,而128和64分別代表OLED的寬度和高度,並初始化碰撞感測器。



由於只有兩個指令,因此只需要一個「else-if」條件。
觸發碰撞感測器時,蜂鳴器會響起,且OLED會顯示「Danger!」;如果碰撞感測器未偵測到壓力,蜂鳴器不會鳴響,且OLED會顯示「You're safe!」。




程式連結

 

07 餵魚器Fish Feeder

在這項應用中,我們將製作一組餵魚器。伺服馬達的運作由ADKeypad上的兩個紅色按鈕控制,且OLED會顯示伺服馬達目前的狀態。


材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 x ADKeypad
  • 1 x OLED
  • 1 x 伺服馬達
  • 電纜線
硬體連接

將micro:bit和micro USB線插入擴充板。


將OLED插入其中一行插槽,如圖所示。


將ADKeypad連接到引腳0,並將伺服馬達連接到引腳1(咖啡色為G、紅色為V、橘色為S)。


程式設計

先透過以下程式,了解伺服馬達在0度、90度與180度的角度位置,了解之後有助於我們為專案設計合適的伺服馬達轉動角度。



測試完伺服馬達之後,開始進行餵魚器的專案程式設計,一開始時都應先初始化OLED螢幕。



由於只有兩個指令,因此只需要一個「else-if」條件。按下ADKeypad的按鈕A,則伺服馬達會轉到70度角,且OLED會顯示「Loading food(加載食物)」。相反地,如果按下ADKeypad的按鈕B,則伺服馬達會轉到20度角,且OLED會顯示「feeding the fish(餵魚中)」。伺服馬達的角度可依實際需求調整。




程式連結


 

08 人體運動探測器Motion Detector

不喜歡別人偷偷摸摸地盯著你嗎?這項應用肯定適合您!在本課程中,我們學習如何使用人體紅外線感測器及濕度感測器。

材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 X 迷你蜂鳴器
  • 1 X Octopus人體紅外線感測器
  • 1 X 濕度感測器
  • 3 X 跳線
硬體連接

將USB線的一端連接到電腦後,將另一端連接到micro:bit,接著將micro:bit引腳那側連接到擴充板上。




將蜂鳴器插入引腳0、將人體紅外線感測器插入引腳1、將濕度感測器插入引腳3。
  

程式設計

首先在「On Start」的區塊裡加入「show icon 」,只要micro:bit通電,該笑臉就會出現在螢幕上,方便我們辨識設備有在運作。




接著,設計條件判斷,當人體紅外線感測器偵測到有人體運動時,先顯示幾個不同圖案當作警示,接這透過濕度感測器的數值建立一些音樂來製作警報聲。從「Music」項目中選擇「play tone」積木,並置入濕度感測器的程式,從「Math」項目中選擇「pick random」,將濕度感測器的數值隨機乘以1-5之間的數字,用來調整音高,如下圖所示。



當人體紅外線感測器檢測到人體運動時,蜂鳴器會根據濕度感測器的數值隨機乘數後而響起不同的聲音;如果未檢測到人體運動,micro:bit僅會在螢幕上顯示一個笑臉圖案。

程式連結


 

09 測謊儀Lie Detector

在這項應用中我們將製作一個簡單的測謊儀,通過測量皮膚的導電率來運作。
感到緊張時,人體皮膚的導電率會增加,而濕度感測器可以吸收這些水分,讓我們判斷受測者是否說謊。



材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 x OctopusOLED
  • 1 x 濕度感測器
  • 1 x 跳線
硬體連接

插入濕度感測器於P1腳位。


插入OLED螢幕於擴充板上三個IIC插槽中的任何一個。


程式設計

※此程式內容較多,您可以搭配下圖中的註解以理解相關積木的功能。

程式分為兩部分:第一張圖片的on start(在開始時執行)、第二章圖片的forever(重複執行)。
在on start(在開始時執行)的部分,透過測試者將手放在土壤溼度感測器30秒,來求得其導電率的標準差。




而forever(重複執行)的部分則是透過測試者將手放在土壤溼度感測器2.5秒(repeat 5 times x 500ms=2.5秒),依其測量出的導電率來判斷是否大於或等於平均數+標準差的值。如果為大於或等於,代表測試者說謊;若小於,則代表測試者是誠實的。



程式連結

 

使用方式

首先,必須將濕度感測器的一個金屬板對應到一根手指上,使用橡皮筋簡單又有效。您可以嘗試不同的方法,例如使用鱷魚夾或膠帶。


現在,開啟儀器,在平靜的情況下記錄皮膚的導電率,得出平均值及標準差。


初步獲取數值後後,再次詢問受測者!如果受測者撒謊,他會變得緊張,測謊儀可以檢測出來並顯示「X」。

 


10 太空遊戲Avoid Asteroids

在此項應用中,我們只會使用micro:bit和ADKeyboard製作Raiden風格的遊戲。該遊戲的目的是盡可能長時間躲避迎面而來的障礙物,這些障礙物會隨著遊戲進行越久增加速度。micro:bit LED會成為我們的螢幕,ADKeyboard則是當成控制器。

材料
  • 1 x BBC micro:bit
  • 1 x micro USB線
  • 1 x 擴充板
  • 1 x  ADKeyboard
製作方式

步驟一

ADKeyboard是該應用中唯一的外部組件。只需在連接ADKeyboard之前將micro:bit插入擴充板即可。確保電線的顏色與引腳的顏色匹配,非常簡單!


步驟二_預編碼

我們需要新增程式碼包才能使用套件。點選「Code drawer」中的「Advanced」,點選最底部的「Add Package」。


點選後會出現搜尋欄,請搜尋「Tinker Kit」,然後點選並下載。

注意:如果跳出「不相容的軟體包將被刪除」的警示,請按照提示操作,或在「Projects file」中建立一個新項目。

步驟三_編碼

變數讓我們可以在編程中存儲數據,利用它來分數存儲在遊戲中。


我們要使用micro:bit上的按鈕(按鈕B)顯示高分,因此利用「On button B pressed」程式碼滿足此條件,且在該程式碼內顯示變數「 highscore」。


我們要使用按鈕A來啟動遊戲,按下後會觸發倒計時。而在做任何動作之前,都必須初始化遊戲子畫面。子畫面基本上是由Micro:bit螢幕上的單顆LED顯示的實影,可使用MakeCode中提供的程式碼設定來回移動及方向的改變。另外,運用布林值初始化變數「alive」判斷玩家是否仍生還;以及「speed」變數決定障礙物的移動速度。數值與速度成反比,數字越小,障礙物移動得越快。


接著要新增一組while迴圈。只要滿足指定條件,while迴圈就會重複運行,只有玩家還活著時,遊戲才會繼續進行。

注意:這裡要小心!因為while迴圈有可能使micro:bit故障。

在迴圈內部,我們將新增一組由ADKeyboard控制遊戲的程式碼。按下紅色的A按鈕時,子畫面會向左移動;按下紅色的B按鈕時,子畫面會向右移動;按下藍色的D按鈕時,遊戲會立即停止。


接著,我們要為敵人的飛彈運動編碼。首先使用「Math」模組中的「pick random」選擇一個隨機數,該數字將決定哪個飛彈開始向上移動。但是,這僅限飛彈位於最底部時適用,因此我們需要更多程式碼設定飛彈偏離最底部時的運作。


此編碼設定了飛彈已經開始動作時的行為。如果飛彈位於中間的三排中,會繼續向上移動;如果已經位於最上排,則返回到底部。


我們還必須檢查子畫面是否正碰觸到玩家,可以知道玩家是否被擊中。如果玩家被擊中,變數「alive」會變為「False」,while迴圈將停止循環,遊戲也會停止。


最後,將每組迴圈的得分提高1。每獲得15點,變數「Speed」將降低40,加速飛彈的移動速度,而「pause」控制射彈的速度。


遊戲結束後,我們必須刪除這些子畫面,以免堵塞了LED螢幕。


在LED螢幕上會顯示「Game Over」,接著顯示分數。如果分數高於當前的最高分,那麼分數會被替換。


示範編碼:https://makecode.microbit.org/_i92YKmDhr9Tf
 

11 萬用遙控器Remote Control Everything

您是否有想從遠處利用micro:bit控制的東西呢?與朋友合作或使用備用的micro:bit,製作一個具有2個micro:bit的遠端控制器。(不要亂拿朋友的micro:bit,記得保持友好唷。)

材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 電池盒
  • 2 x AA電池
  • 1 x micro:bit汽車或
  • 1 x 想要遠端控制的物品
製作方法

步驟一


在「makecode」中設定收音機程式碼,這樣可以確保發射器和接收器在同一線路中。思考一下遙控器上每個按鈕的用法。收音機透過下列圖示所使用的程式碼區塊控制每個按鈕按下後,皆發送一個不同的編號。您可以在「Radio」裡找到這些程式碼,將其下載到要作為遙控器的micro:bit中。現在,您的micro:bit遙控器上的每個按鈕都會發送不同的指令!


步驟二

在micro:bit汽車(或您要遠程控制的特定項目)中,將相同的無線電模組新增到「on start」中。

這樣可以確保您要遠端控制的物品能接收正確的指令!

步驟三

還記得每次按下按鈕時從遙控器發送的數字嗎?我們將使用它來觸發動作。在「Radio」裡找到如圖所示的「radio received」程式碼。使用「if-then」條件檢查收到數值是否與按下按鈕A時發送的數值相同。利用此程式碼控制micro:bit汽車左轉,並插入「if-then」條件中。另外新增一個LED的指示,指向左側,顯示即將發生的情況。然後透過將引腳數字輸入0來關閉左伺服馬達。


步驟四

指示micro:bit汽車向右行駛的程式碼也是相同的操作!確保其隨後關閉右車輪。您可以選擇在收到每個指令後仍不停地轉動車輪,但是會出現汽車不斷旋轉的情況。將此程式下載到您的micro:bit汽車中。


示範編碼


12 micro:bit汽車


注意:此項目使用了Tinker Kit中沒有的零件。(敬請關注線上商店獲取車用套件!)

材料
  • 1 x BBC micro:bit
  • 1 x micro USB電纜
  • 1 x 電池盒
  • 2 x AA電池
  • 1 x 分線板
  • 2 x 伺服
  • 1 x 丙烯酸車身
  • 2 x 輪子
  • 1 x 氈墊
  • 1 x 膠帶
製作方式

步驟一
  • 如下圖所示組裝汽車零件。如果您使用的是汽車套件,請依照車身上的標籤,插入正確的組件,使用膠帶固定。
  • 將伺服馬達連接器連接到擴充板上的引腳0和1。
  • 請注意,普通伺服電纜的顏色與擴充板的黃色、紅色和黑色顏色不完全相符。將橙色伺服電纜與黃色引腳配對,棕色伺服電纜與黑色引腳配對。
  



步驟二

將「show icon」新增到「on start」。這是做什麼的呢?每次啟動時,都會將伺服馬達復位!MakeCode中的伺服馬達程式碼(紅色)的值介於0到180之間。您可以在「Advanced」裡的「Pins」找到它。接下來我們使用的伺服馬達程式碼,其中間的值為90。換句話說,是告訴伺服馬達「stay still」。顯示的圖像直接告訴我們已將程式碼下載到micro:bit中。

步驟三

讓我們轉動輪子吧!將右側顯示的程式碼新增到「Forever」區塊中。「Digital Write Pin to 0」也可在「Advanced」裡找到。這裡發生了什什麼事呢?將其中一個伺服馬達順時針旋轉(180),同時關閉另一個伺服馬達。短暫停頓後,關閉前一個伺服馬達,逆時針旋轉(0)。記得90度是直走!為什麼伺服馬達需要一開一關呢?這是由於電池電量無法同時讓Micro:bit為兩個伺服馬達供電。如果您有興趣,可以使用有外接電源的直流電動機進行實驗;或者發送電子郵件給我們以了解更多資訊!確保電動機可以通過轉換0和180值改變行進方向,朝向正確地方。


示範編碼:https://makecode.microbit.org/_Ef87EJAepcve

準備好發動車子時,請將電池組連接到micro:bit上,汽車就可以行駛了!此外,可以使用一些工藝材料來客製化您的汽車,改善其空氣動力學的性能!您還可以連接ADKeyboard來手動控制發動機代替自動行駛。​
  
 

13 翻轉煎餅Flipping Pancakes



材料
  • 1 x BBC Micro:bit主板
  • 1 x Micro USB線
  • 1 x 蜂鳴器
  • 2 x F-F跳線
  • 1 x ADKeypad
製作方法

步驟一
  • 將蜂鳴器插入Pin 0。確保正極引線連接到黃色信號引腳,負極引線連接到擴充板上的黑色接地引腳。
  • 將ADKeypad插入Pin1,使電線的顏色與擴充板上的顏色相符!


步驟二
  • 在Makecode中,我們將使用兩個變數來追踪時間長度。變數就像可以保存數值的存儲桶。
  • 每次我們打開micro:bit時,隱藏的計時器都會追踪開啟了多長時間。利用此隱藏計時器來計算開始時間、結束時間和遊戲總長度。
  • 在「Variable」中新建一個名為「startTime」的新變數(或任何你喜歡的都行)。
  • 開始遊戲時,在此我們想將變數「startTime」設定為micro:bit的運行時間。
  • 另外我們希望能在LED在螢幕上顯示一塊煎餅。


步驟三
  • 我們希望設定遊戲在按下ADKeypad上的A按鈕時,micro:bit上會播放煎餅翻轉的動畫。因此,需要新增一組函數。函數是一段程式碼,每次使用都會執行某個特定指令。在此的指令是顯示煎餅翻轉動畫。
  • 要建立其它功能,請點選「Functions」類別中的「Make a Function」按鈕。我將函數命名為「flipPancake」。執行此操作時,螢幕上會新增一個名為「 function flipPancake」的區塊。這是定義函數的地方,即每次執行功能區塊指令時會發生什麼!
  • 在此,我們將在flipPancake函數中新增多個LED區塊,讓煎餅看起來像被拋向空中,並在其掉落時搖擺不定。
  • 定義函數後,您可以隨時使用「Function」類別中的「call function flipPancake」來運行。隨意自定義個人專屬的的煎餅翻轉動畫。這裡所述的只是一個範例!


步驟四
  • 現在要測試ADKeypad上的按鈕,因此我們需要匯入特定的程式碼到MakeCode。
  • 點選「Advanced」,再點選最底部的「Add Package」。
  • 在搜尋欄中輸入「Tinker Kit」,然後點選標有「tinker kit」的框。
  • 接著就能在MakeCode中看到新增的內容:已新增亮綠色的Tinkercademy!
  • 在此類別內,會找到用於感應ADKeypad上的按鈕的程式碼。此軟體包只會匯入當下執行的項目中。因此,如果重開新項目,就需要重新匯入。


步驟五
  • 現在可以感測到按鈕被按下,讓我們為遊戲建立主要程式碼!這裡需要計算玩家按下按鈕A的時間,且能分辨出薄煎餅是糊狀的、完美的還是燒焦的。
  • 從「forever」迴圈開始。在此迴圈內,放置了一條「if-else」條件來檢試是否按下了按鈕A。「If-else」條件判斷如果為真,則執行該程序;如果為假則跳過。因為此「if-else」條件在「forever」的迴圈中,所以會永遠測試是否按下了按鈕A。為此,我們將檢查micro:bit當前的運行時間,並減去startTime變數的值,可以得到目前遊戲運行的總時間。再將其存儲到另一個名為「totalTime」的變數中(您可以在Variables類別中創建此變數)。計算了totalTime之後,使用flipPancake函數使薄煎餅動起來!
  • 接下來,需要測試totalTime來判斷薄煎餅是糊狀的、完美的還是燒焦的。為此,要再次使用「if-else」條件,但這次要將「if-else」條件連結在一起,連續測試各式各樣的情況。當if-else條件連結在一起時,只能執行一個。當micro:bit找到了其中一個為真,就會跳過對所有其他連結的測試。我們可以透過點選「if-else」上的齒輪圖標拖曳出更多「if-else」條件的連結。在這種情況下,我們首先測試totalTime是否小於7000(請記住,這是毫秒!所以7000毫秒= 7秒)。如果totalTime小於7000,確定薄煎餅是糊狀的,並顯示一張皺著眉頭和「MUSHY」的訊息。如果第一個條件為真,則micro:bit會跳過以下所有條件的測試!如果totalTime不小於7000,我們將測試totalTime是否小於8000毫秒。在這我們知道totalTime大於7000。因此,如果它也小於8000,可以確定該煎餅是完美的,並顯示一張開心的臉和「PERFECT」的訊息。
  • 最後,如果前兩個條件都不成立,那麼我們知道totalTime肯定大於8000。因此,可以確定煎餅燒焦,會顯示生氣的臉和「BURNT」的訊息。



步驟六
  • 現在可以進行遊戲了!接下來要讓玩家可以重複進行遊戲,不需重設micro:bit。為此,我們將在按下ADKeypad上的按鈕B時重置遊戲。需要再一次使用「forever」迴圈,並在其中放置「if-else」條件測試按鈕B是否被按下(記得再次指定正確的Pin號!)。
  • 重新啟動遊戲後,我們還需要做什麼呢?這種情況下,需要顯示一片新的煎餅,並重置開始時間。


步驟七
  • 現在遊戲正在進行(希望如此)!讓我們為遊戲增添更多樂趣吧!我們在micro:bit上連結了蜂鳴器,但還未使用!注意:要將其新增到現有的程式碼中!
  • micro:bit有許多預編碼的音樂旋律供我們使用。讓我們在遊戲中新增音樂吧!在這裡為遊戲的每個結果新增不同的旋律,對於糊狀或燒焦的煎餅,可以設定悲傷的旋律,而完美的煎餅,可以播放nyan-cat旋律!
  • 這些旋律播放需要設定為「once in the background」,否則整個遊戲可能會暫停到旋律播放完成為止。


步驟八
  • 最後,新增首次啟動Micro:bit時的開機音樂和開機訊息。注意:將其新增到現有的程式碼中,而非全新的程式碼!
  • 可以再次使用蜂鳴器播放旋律(依然是「once in background」)。另外還可以顯示遊戲名稱!


示範編碼:https://makecode.microbit.org/_aepYrcgwLFEy
 

14 跑跑迷宮Maze Runner



材料
  • 1 x BBC micro:bit主板
  • 1 x micro USB線
  • 1 x 蜂鳴器
  • 2 x 跳線
  • 1 x ADKeypad


製作方法

步驟一
  • 將蜂鳴器插入Pin0。將正極引線連接到擴充板上的黃色信號引腳,將負極引線連接到擴充板上的黑色接地引腳。
  • 將ADKeypad插入Pin1,確認電線顏色跟擴充板上的顏色相符!


步驟二

如何在micro:bit上創建迷宮遊戲?我們將在micro:bit上用LED顯示玩家的位置、牆壁和迷宮路徑。

如何在螢幕上追踪玩家的位置?micro:bit上的5 * 5 LED點矩陣可作為坐標。x坐標軸從左側的0開始到右側的4;y坐標軸從頂部的0開始到底部的4。代表左上方的LED為x = 0、y = 0;同樣,右下角的LED為x = 4、y = 4。

因此,我們需要新增一些變數。變數就像儲存訊息的存儲桶,當我們想要存儲訊息時,只需查看變數即可。這裡需要兩個變數來追踪玩家的位置。為什麼要兩個變數?一個追踪玩家的x位置,另一個追踪玩家的y位置。另外還需要一個變數來追踪迷宮等級(可以有多很多個等級!),以及一個追踪遊戲是否處於活動狀態(與遊戲結束相反)的變數。

接著開始編碼吧!在「on  start」中,插入播放音樂(選填)的程式碼,並在micro:bit上顯示遊戲的名稱「MAZE RUNNER!」,接著設定上述提到的4個變數:level、playerx、playery和gameOn。

為什麼要設定這些變數呢?從級別1開始,並且將「gameOn」設定為「True」,因為在開啟micro:bit電源時,我們想立即開始遊戲。我們可以選擇任何位置當作玩家的起點,但是需要在設定迷宮等級時記住該位置(我們不希望玩家從牆內開始!)。在此範例中,選擇在x = 0和y = 3處啟動播放器。


步驟三

現在已經設定了起始變數,讓我們的播放器顯示在micro:bit螢幕上吧!

我們希望播放器LED閃爍,以使其易於識別。為此,我們將在「forever」內插入「plot x__ y __」以及「pause (ms) __」 交替使用。記住,我們希望玩家永遠閃爍不停!但是,這部分的編碼不會立即作用。在步驟六中新增迷宮牆時,micro:bit每次繪製迷宮牆時都會覆蓋播放器,在此處新增一個「pause」區塊,讓播放器不會立即被重新繪製,進而產生閃爍效果。

我們要使用上面創建的playerx和playery變數。因為在此處輸入數字,無法輕鬆地使玩家移動!使用變數允許我們更改playerx和playery的值,「forever」的編碼會不停地繪製玩家的新位置。

請記住,「pause」區塊是以毫秒為單位(因此300 ms = .3秒)!您可以透過修改暫停時間自訂閃爍的速度。



步驟四
  • 我們已經在micro:bit上顯示了播放器,但是還不能移動!讓我們增加玩家的動作。我們將編寫當ADKeypad上的按鈕感應到被按下時的指令,為此需要新增一個特殊的程式碼包到MakeCode中。
  • 點選「Code drawer」中的「Advanced」,點選最底部的「Add Package」。
  • 在搜尋欄中,輸入「tinker kit」,點選「tinkercademy-tinker-kit」。
  • 您會在MakeCode中看到一些新增的亮綠色區塊即為Tinkercademy程式碼!
  • 在這些區塊內,可以找到用於感應ADKeypad上的按鈕按下的編碼。請注意,要在原有的編碼中插入這些區塊,如果新增編碼的話,則需要重新導入。


步驟五
  • 現在新增了Tinkercademy,可以使用ADKeypad上下左右移動。在此範例中,將按鈕A設置為向上移動;將按鈕C設置為向下移動;將按鈕D設置為向左移動;將按鈕E設置為向右移動。
  • 在此,使用if條件。If條件測試如果為true,將運行if區塊內的所有指令。當if條件放在「forever」區塊中時,將永遠測試條件是否為真。
  • 移動玩家只需更改玩家x或y變數。請記住,增減playerx控制左右移動,而增減playery可上下移動。而更改這些數值時,也會自動更改玩家的位置!
  • 我們還需要在每個按鈕按下後新增300ms的暫停,否則程式運行得太快,每次按下按鈕時玩家會移動太多。


步驟六

現在可以移動玩家了,讓我們開始打造迷宮關卡吧!而每次開始關卡時,我們還需要做一些事情。
  • 首先,要在micro:bit螢幕上顯示迷宮牆;其次,需要一直檢查玩家是否撞牆(如果撞牆,那就遊戲結束!)。第三,需要永遠檢查玩家是否成功走出迷宮(破關時讓玩家們知道此等級已破關,可繼續前進!)。
  • 對於每個關卡,將使用一個「forever」區塊。在此迴圈內,使用「if」條件檢查level變數是否等於1,意味著該程式碼僅在level變數等於1時運行。
  • 在if條件內,首先將LED點亮顯示迷宮牆,接著關閉表示迷宮路徑。可以使用「show leds」區塊來完成。不過要注意的是,還記得前面我們設置玩家的起始位置嗎?確保玩家的起始位置不在迷宮壁內!在該範例中,玩家的起始位置是x = 0,y = 3。
  • 接下來,需要檢查玩家是否碰壁。這該怎麼做呢?再一次,我們將使用「if」條件檢查playerx和playery變數是否與牆同一位置。我們使用5x5 LED網格的坐標進行此操作。在此範例中,有兩部分的牆。
  1. 第一堵牆會在playerx和playeryi均小於或等於2時出現。使用這些建立一個if條件,在其中將「gameOn」設訂為「false」(因為如果曾經為「true」,意味著玩家遇到了牆,應該結束遊戲)。
  2. 第二個牆會在playerx或playery等於4出現。在這些裝況下建立了另一個if條件,並將「gameOn」設訂為「false」(因為如果曾經為「true」,意味著玩家遇到了牆,應該結束遊戲)。
  • 最後,需要新增的最後一個編碼是檢查玩家是否成功通過迷宮!在此範例級別中,迷宮的末端位於x = 3,y = 0。我們新增另一個if條件來檢查x = 3和y = 0,並且在內部執行其他指令:
  1. 首先,播放成功的背景音樂
  2. 其次,為下一個關卡設訂玩家的起始位置(在此範例中,我們使用相同的起始位置,實際上可以不同!)
  3. 第三,露出笑臉告訴玩家成功破關!
  4. 第四,將關卡變數更改為1(將顯示下一個關卡)。


步驟七

設置關卡相當費工!既然已經有了關卡,那麼讓玩家結束遊戲時多點樂趣吧!。

利用「gameOn」的變數對其進行追踪,讓玩家碰壁時多點樂趣。
在「forever」內,使用if條件檢查「gameOn」變數的值。如果等於「false」,那麼我們希望遊戲結束!

在此範例中,播放悲傷的背景音樂,重置「level」,繪製玩家LED的圖將顯示一張生氣的臉,並顯示字符串,告訴玩家可以按B重新啟動遊戲。



步驟八

說到按B重新啟動遊戲,我們還沒有未新增此程式碼!

在「forever」內,要測試是否按下了ADKeypad上的按鈕B。如果是的話,我們希望將「level」設置為1,分別將「playerx」和「playery」變量設置為0和3,以重置玩家的起始位置,然後將「gameOn」變量設置為「true」。



步驟九

現在我們的遊戲應該可以正常運作了!唯一的遺憾是沒有更多的關卡!
  • 新增關卡只需透過複製上面的「level 1」程式碼來,輕而易舉!唯一會改變的是迷宮的牆壁和if條件的坐標(用於測試玩家是否撞牆或完成關卡)。
提示:有時建立if條件測試每面牆可能會很複雜。在這些情況下,請嘗試將您的牆壁分成單獨的矩形,並為每個矩形建立一個if條件。

需要注意的是:玩家每完成一個關卡,必須重置其playerx和playery變量,確保位置與下一個關卡相同,否則玩將會在牆壁內!




步驟十

完成上述編碼後,可以選擇新增勝利場景。在此範例中,一旦玩家成功完成了前三個關卡且級別等於4,我們將播放勝利的背景樂並顯示勝利訊息!


示範編碼:https://makecode.microbit.org/_fCqa4399XUpv
 

15 速算小天才Quick Maths



材料
  • 1 x BBC micro:bit
  • 1 x  micro USB線
  • 1 x蜂鳴器
  • 1 x Octopus:bit
  • 1 x OLED
製作方法

步驟一
  • 將蜂鳴器連接到P0
  • 將OLED插入上圖三行中的任何一行
 

步驟二_預編碼
  • 我們需要新增程式碼包才能使用套件。點選「Code drawer」中的「Advanced」,點選最底部的「Add Package」。
  • 點選後會出現搜尋欄,請搜尋「OLED」。點選搜尋圖標或按Enter,選擇「oled-ssd1306。」

步驟三_編碼(初始螢幕)


從音樂部分「start melody power up melody」,作為遊戲的開場樂,接著建立一個名為started的變量並將其設定為false。最後因為遊戲尚未啟動,使用「Tinkercademy」中的編碼初始化OLED並顯示訊息,如上圖所示。

步驟四_編碼(隨機函數)
  • 在此步驟中,我們將隨機化顯示的問題。首先,建立一個名為answer的變量。在此,我們將存儲對或錯的答案。透過使用「Math」中的「randomizer」區塊編寫。
  • 接下來,再建立3個變量– i1、i2、a。i1 + i2 = a將用來示範如何使用。然後,為i1和i2分配一個從1到9的隨機值。a的值將之後設定。
  • 之後,建立一個type變量,type將用於存儲問題類型。然後,使用「Math」中的區塊編寫問題類型,分配0-3的隨機數(0:加法 / 1:減法 / 2:乘法 / 3:除法)。
  • 從這裡開始,有一個if-else條件,用於判斷問題並運算答案。例如加法(0),如果答案正確,則將a設置為i1和i2之和。;如果錯誤,加1來更正答案。減法(1)部分,如果假定答案正確,則將a設置為i1和i2的總和,然後交換a和i1的值。但是如果假定是錯誤的,則將i1加1。至於乘法(2)的部分,如果答案正確,則將i1和i2的乘積設為a,但是如果錯誤,加1來更正答案。而第(3)項,如果答案是正確的,則將a設置為i1和i2的乘積,然後交換a和i1的值,但是如果錯誤,則將i1加1。

步驟五_編碼(顯示功能)


在此步驟中,我們將建立一個在螢幕上顯示問題的函數。首先,如圖所示初始化OLED。接下來要確定想要使用的符號,因此建立一個名為sign的變量。然後,使用if-else條件來檢查符號類型,從而設置符號的值。(0:+ 、1:-、 2:x、3:/)現在我們需要讓數學式顯示在OLED上。選擇「show string」,新增變量i1、sign、i2。完成了顯示功能,請在隨機功能的最後使用該功能,希望在數值隨機化後顯示問題。

步驟六_編碼(起始動作)


現在可以隨機出問題了,開始遊戲吧!首先,建立一個「function start」。在此函數中,將起始值設置為true並使用「call function randomise」。然後,從遊戲部分的「advanced」中,新增「set score」並將其值設置為0。現在功能已完成,在「input section」內編寫按下按鈕A和B的程式碼。在這兩個區塊中,建立if-else條件,用於檢查遊戲是否已開始。如果沒開始,則使用函數啟動。

步驟七_編碼(檢查功能)




接續步驟六,現在如果遊戲已經開始,我們將在其編碼上繼續編寫。首先,建立2個功能:「correct」和「wrong」。在correct的功能中,從「game」裡選擇「change score」,將得分更改為1。接著使用隨機函數獲取下一道題目。最後設定「start melody ba ding」播放一次,創造音效。答題錯誤時,設定「start melody wawawawaa」播放一次,並顯示X表示玩家答題錯誤。然後如圖所示初始化OLED。最後,我們要判斷最高得分。首先建立一個高分變量,再建立一個if-else條件,如上圖所示,在這個邏輯中,要檢查得分數是否高於玩家前次得分。

如果是,那麼高分值將被設置為當前分數。而結束遊戲時,請不要忘記將start變量設置為false。現在我們已經完成了正確和錯誤的功能,我們需要的程式碼如下圖所示。

步驟八_編碼(計時器)

現在,可以運行遊戲了!但為了使遊戲變得更加吸引人,應該新增一個計時器。在深入探討之前,需要先做一些事情。
  • 首先,建立一個相對應的「function end」,這裡的編碼與錯誤功能的最後一部分相似。您可以修改需替換的部分即可,不需重新編寫。
  • 接下來,建立一個「function slow」。如果玩家沒有及時回答,如下圖所示的編碼將會執行。
  • 之後,建立「set time」的新變數。玩家開始回答問題時會開始計算時間。將其值設置為「running time (ms)」,該程式碼可在「input 」當中找到。

  • micro:bit沒有內置計時器,因此設計一個計時器。現在知道開始時間是玩家開始答題的時間,而運算時間是程序運行了多長的時間。藉此兩兩相減,可以得出玩家在該問題上花費了多長時間。此款遊戲,每個問題僅給予玩家2.5秒(2500毫秒)的時間。因此如果回答太慢將會輸掉遊戲。
  • 最後,在「function correct」中新增「set time to runing time (ms)」,用於刷新問題的開始時間。

示範編碼:https://makecode.microbit.org/_ThdfipEwFbWs
 


16 絕對音準Pitch Perfect



材料
  • 1 x BBC micro:bit
  • 1 x micro USB線
  • 1 x 蜂鳴器
  • 2 x 跳線
  • 1 x OLED
  • 1 x ADKeypad
  • 1 x 擴充板
製作方式

步驟一
  • 首先,將蜂鳴器插入引腳0,確保正極(通常是較長的一端)連接到黃色信號引腳,並將負極連接到擴充板上的黑色接地引腳。
  • 將ADKeypad插入引腳1,確保電線和擴充板上的線顏色匹配。然後,將OLED螢幕安裝在擴充板左下方的插座上。


步驟二


我們需要新增程式碼包才能使用套件。點選「Code drawer」中的「Advanced」,點選最底部的「Add Package」。

點選後會出現搜尋欄,請搜尋「OLED」,點選圖標或按Enter,然後選擇「oled-ssd1306」。

注意:如果跳出「不相容的軟體包將被刪除」的警示,請按照提示操作,或在「Projects file」中建立一個新項目。

步驟三
  • 首先,必須初始化OLED螢幕設定高度64和寬度128,調整適當的螢幕大小。
  • 接下來,必須設定設定初始變數將起始得分設定為0,這代表著您在遊戲開始時的得分為0。接著在OLED螢幕上顯示遊戲名稱「Pitch Perfect」。
  • 您需要編寫有關如何開始遊戲的簡單說明。因此,一句簡單的「Press A to start」就可以了。

步驟四
  • 由於在步驟三中寫到需要按A才能開始,因此需要為其寫一個條件。條件基本上是指程序開始加載其指令的要求。因此一個按下A按鈕的if-else條件就足夠了。並將此條件嵌入「forever」的迴圈內。
  • 接下來,必須編寫另一組有關如何玩遊戲的說明。這裡寫的是:「You have guess which pitch it is by pressing the correct key.」。然後,必須設定大約5000ms(5秒)的時間讓玩家閱讀說明。

步驟五
  • 向玩家介紹如何收聽正在播放的音調。這裡要做的是將音階(例如:C)播放4拍(4秒),設定MicroBit上的LED閃爍,並將其顯示在OLED螢幕上。
  • 之後,設定時間,以便玩家可以在ADKeyboard選擇正確的相對應按紐。另外,可以設置特定音階需在OLED螢幕按下哪些相對應的按鈕。例如,播放音階C時,按下「Left blue button」的指示。
  • 為什麼要重複寫入初始化OLED和顯示字符的程式碼呢?這有點像模擬網頁刷新的概念。如果您不初始化顯示,文字只會被拿掉而不是建立新文字。


步驟六
  • 一旦玩家閱讀完有關音階的簡短介紹,就可以對開始倒數計時,準備進入遊戲。
  • 現在,可以新建音階測試。為此您需要彈奏音調,可以透過同時在MicroBit上顯示任何圖像和訊息「Key#1」進行自定義。
  • 如果玩家按下ADKeypad上的正確按鈕,將獲得分數;如果沒有,那就沒有意義。因此,如果正確設置變量分數,則將其更改為1,否則為-1。關於玩家是否按下正確按鈕的if-else的條件會進行判斷。
  • 為了讓玩家知道他們是否回答正確,可以顯示圖像勾號代表答案正確,顯示叉號以表示答案錯誤。
  • 重複此步驟,可以進行許多遊戲測試!


步驟七

當你厭倦了測試,可以顯示最新分數並結束遊戲。OLED螢幕上會顯示「Your score is : 」,顯示分數,再放個笑臉多點娛樂性。完成了!玩的開心!


示範編碼:https://makecode.microbit.org/_A26fCxRz1P1g
 

17 金手指Finger Dexterity

打造一款玩家必須點按隨機亮起的LED按鍵(在ADKeypad上)遊戲(第一列為A,最後一列為E)。隨著遊戲的進行,LED亮燈的速度會越來越快。您將學習如何:
  • 使用帶有micro:bit的ADKeypad。
  • 使用遞迴函式。
  • 使用while迴圈。
  • 提高手指的靈活性!
需要有關if-else條件及變量等的實作經驗。


材料
  • 1 x BBC Micro:bit
  • 1 x micro USB線
  • 1 x 跳線
  • 1 x ADKeypad或ElecFreaks micro:bit Tinker套件(包含上面所有組件。)
製作方法

步驟一

將ADkeypad插入Pin0,確保正極引線連接到黃色信號引腳,負極引線連接到擴充板上的黑色接地引腳。

步驟二
為了簡單地隨機點亮LED,將使用遞迴函數「itself(!)」以實現最終目標。因此建立了函數plotLight。

然後,將兩個變量「randomLightXIndex」和「randomLightYIndex」設置為0到4之間的整數對應於點亮特定的LED。這樣做可以確保隨機地點亮LED(不再討論真正可以隨機的地方),因此每次遊戲都會有所不同且無法預測。

另外設定「set bool to true」。現在可能沒什麼作用,但稍後會派上用場(實際上,這是後來在其它功能設置完成後才決定新增的編碼,稍後將對此予以說明)。這是編碼中的常用技術(尤其是用在while迴圈)。

為了增加難度,我認為時間變量可能有用。稍後可使用它來減少兩個LED之間點亮的暫停時間。我們已將暫停時間的下限設置為半秒,避免使遊戲無法進行。當使用遞迴函數時,修改暫停時間的「if」條件會逐次減少暫停時間。

在迴圈內建立了一堆if-else條件,這些條件會定期檢查是否按下了鍵盤上的按鈕,以及該按鈕是否對應於點亮的LED的x坐標。之所以必須這樣做,是因為按下鍵盤不會觸發Micro:bit核心模組中的偵測器並給予回應(例如,如何進行擺動或如何按下按鈕)。因此,必須建立自己的偵測器,且只有當bool(我們之前創建)為true時,此偵測器才運作。

步驟三



在if-else條件內部,檢查哪個鍵被按下,以及是否對應於LED(x坐標)。如果正確,將再次執行該功能。這就是遞回函式的工作方式。透過再次使用該函數,基本上是從一個新的LED開始。請注意,當次使用該函數時,會減少時間變量的值,因此暫停時間將縮短。

請注意,這邊的「unplot」LED是為了確保在每個回合中只有一個LED,以免混淆玩家。如果想讓遊戲變得更困難,則可以顯示多個LED直到最後一顆LED亮起,當作進階遊戲!有趣的是,在此我將bool設置為false,為什麼呢?

步驟四




將布林值設置為false,終止上述while迴圈的這部分不是必要的,我最初也沒有理會。但需要注意的是,終止while迴圈可大大提高程式的效率,通常值得納入考慮。

另外也建立了使用函數來處理玩家鍵入錯誤的情況,稍後將介紹。

步驟五


就一個功能來說,這程式碼真的很多!對於編碼新手來說可能太難,所以讓我再講解一次。

使用0到4之間的隨機整數來設定點亮的LED。(請注意,我們使用以0開頭的索引–這意味著左上角為(0,0))

考慮到將來會使用該函數,我們減少了暫停時間,未來發生這種情況時,遊戲會變得更加困難。

運用自製的偵測器(其實只是等待事件發生,並在事件發生時使用依照預設程式碼運作),使用while迴圈來偵測事件。如果未在一個迴圈中找到事件不會觸發其中的if-else條件,會繼續進行下一個反覆運算。當事件確實發生時(在本例中為按鍵),if-else條件會從休眠狀態被觸發,以這種相當巧妙的方式,建立了一個事件偵測器。(附註:瀏覽器以相同的方式偵測諸如點選或鍵盤按鍵之類的事件)。

步驟六




在每個if-else條件中,如果按下了錯誤的按鍵,我們設定結束遊戲,並告訴玩家我們對他/她的看法。

如果按下了右鍵,將立即轉到下一個LED燈,同時結束上一個while迴圈或效率目的(請注意,程式碼仍然可以使用,但最好不要養成這種不良習慣)。在繼續下一個LED燈的同時,我們使用一種稱為遞迴的概念。為了完全理解遞迴的內部工作原理,必須熟悉執行上下文之類的概念,這超出了本教程的範圍。

步驟七


好多的工作啊!

但最後,我們建立了一個很棒的遞迴函式可以重複使用。值得注意的是,這樣的遊戲可以化繁為簡,關鍵在於一組程式碼區塊!
 

步驟八


現在只要在新增一些功能即可,即玩家按下錯誤鍵時使用的功能。跳過前面複雜的部分,這個編碼的作用顯而易見。

步驟九


現在啟動第一個LED。

文件加載時會執行該函數。由於該函數具有遞迴性,此後可花費最少的精力自行處理遊戲,提高效率!
 
18 太空射擊Space Shooter



材料
  • 1 x BBC Micro:bit
  • 1 x Micro USB電線
  • 1 x 擴充板
  • 1 x ADKedpad


製作方法

步驟一:組裝

首先,插入ADKeypad,確保顏色匹配,並記錄插入的針腳,因為稍後會用到。

步驟二:編碼


在此項目中,將使用Javascript進行編碼,因此,首先在頁面頂部切換到Javascript模式。



在編寫程式碼前,需要初始化會使用的變量:「playerscore」用於當前玩家的得分;「noalien」作為儲存當前螢幕上是否出現外星人;「hi」用於當前的最高得分;「gamestart」持續追踪遊戲當下所處的狀態;「destroyedpos」的數組作為存儲玩家與外星人對戰的位置;「shots」儲存玩家射擊的位置;「aliens」儲存外星人的位置;「pos」持續追蹤玩家當下位置的軌跡;「toprow」儲存當下在第一行的每個位置中是否有外星人的一些臨時變量。稍後將需要使用這些變量。
函數unrendership熄滅代表我們飛船的LED。我們將用它來移動飛船。


函數unrendership亮燈代表我們飛船的LED。使用此功能可以更新玩家的位置更改飛船的位置。


此函數unrendershots代表玩家射擊的LED。同樣,我們將使用此功能更新子彈的位置。


函數rendershots點亮代表玩家射出的子彈。和unrendership與rendership一樣,在使用unrendershots之後,可以更新子彈的位置,然後用rendershots來改變所有已射出的子彈位置。


函數checkcollision會檢查兩種類型的碰撞:玩家和外星人,以及外星人和玩家發射的子彈。

首先,對於玩家與外星人之間的碰撞,由於船的形狀,必須檢查太空飛船中心的最低排或倒數第二排以及同一列中是否有外星人,以及底排到飛船中間的左邊或者右邊是否有外星人。請注意,在Javascript中,&& 代表「和」, ||代表「或」。如果在這些位置確實有外星人,我們將會把destroyedpos設置到外星人和飛船碰撞的地方,並且將gamestart的值變為2來象徵遊戲結束。

接下來,由於外星人與玩家都只佔用一個LED,因此只需要檢查它們的位置是否完全相同,使外星人與玩家射擊之間發生碰撞。但是,因為可能會有多次射擊或者多個外星人,所以需要為每個外星人循環每次射擊,並檢查它們是否在同一個位置。如果是這樣,我們將關閉該位置的LED。如果外星人在頂部行中,我們將該列的toprow值設置為0,以表示該列的頂部行中不再有外星人。然後,將鏡頭的高度設置為-1,將外星人的高度設置為5,將它們都移出屏幕,稍後再將其刪除。最後,我們將射擊外星人的得分提高1。我們必須遍歷每個外星人的每一個鏡頭,並檢查他們是否在同一位置。如果它們在同一個位置,就熄滅那個位置的LED燈。如果外星人在toprow(頂排),我們將toprow(頂排)那一列的數值設置為0,代表那一列的頂排沒有外星人。然後,我們將子彈的高度設置為-1,外星人的高度設置成5,並將它們兩者移出螢幕,也就是我們稍後需要刪除的地方。最後,如果玩家擊中了一個外星人,就將玩家的得分加1。



現在已經寫完了所有需要用到的函數,終於可以開始將它們連接起來了!你可能已經熟悉了在blocks編程中的forever函數。在Javascript中,我們透過輸入basic.forever(() => {Code to run forever here}來使用。 首先,如果gamestart的數值為0,我們就會在螢幕上顯示當前的高分。 接著,如果gamestart的數值等於2,這就意味著玩家的遊戲結束。我們將玩家和外星人碰撞的那個位置的LED等閃爍3次,讓玩家知道發生了碰撞。如果玩家獲得了新的高分,就顯示笑臉;如果沒有的話,就顯示哭臉。 最後,會顯示玩家的得分,並將gamestart的數值重新設置為0。



為了開始遊戲,需要檢測玩家是否按下了ADKeypad上的按鈕A以及gamestart的數值是否為0。如果玩家按下了ADKeypad上的按鈕A,需要將gamestart的數值設置為1(這代表遊戲已經開始),重置玩家的位置居中,將玩家的得分設置為0,關閉螢幕上所有的LED燈,然後將之前編寫的函數運用到飛船上。



最後,如果gamestart的數值等於1,說明玩家正在玩遊戲哦!在每個循環的開始,熄滅玩家射出的每顆子彈的LED燈,因為需要向前移動一個位置。我們用函數Math.random() 隨機判斷是否應該生成一個外星人外形。可以將這個數字設低一些,使遊戲變得更難;或者將這個數字設高一些,使遊戲變得更加簡單。在這裡,使用的數值是15,意味著一個外星人在每個循環中生成的機會只有1/15。但是,我們需要檢查想要生成外星人的那一列的頂排沒有被佔用,否則很多外星人就會重疊在一起哦!接著,讓外星人迴圈每次在forever運行5次之後向下移動1個位置。如果外星人到達了頂排,將那一列的頂排的數值設置為1;如果外星人離開頂排,就將這個數值設置為0。



然後,需要檢查每個外星人是否位於螢幕的外面。如果外星人位於螢幕外,就將它從外星人的數列中刪除。最後,如果螢幕上沒有外星人,儘管只有1/15的機會,也製作一個外星人。



在更新了外星人的位置之後,需要檢查碰撞,更新子彈的位置。接著,如果玩家按下了ADKeypad上的的按鈕D,就生成一個子彈。之後,需要把螢幕之外的子彈刪除。



最後,需要檢查玩家是否按下了ADKeypad上的按鍵C或者E,並更新相對的的飛船位置。在這之後,設置玩家發射的子彈,給每個循環設置0.08秒的暫停時間,以便遊戲以適當的速度進行。

示範編碼:https://makecode.microbit.org/_euRV3uHYJAfx

開始玩遊戲

這個遊戲非常簡單。只需要按下ADKeypad上的按鈕A來啟動遊戲;按下按鈕C和E來移動飛船;按下按鈕D來射擊外星人。

 
 
19 摩斯密碼訊息傳輸Wire Transmission

我們將使用2塊micro:bit:一塊用於發送摩斯電碼,另一塊用於接收摩斯電碼。數據的傳輸會透過一條線來完成。當伺服馬達拉扯線的時候(基於編碼輸入),碰撞感測器就會偵測到線的拉動並將摩斯電碼轉換成文字。當然,也可以透過micro:bit內建的無線電傳輸數據。但是,這樣會少了些樂趣吧!
  • 使用Python為micro:bit編碼。
  • 使用摩斯電碼表加密摩斯電碼或破解摩斯電碼。
  • 移動伺服馬達及使用碰撞感測器檢測。


材料
  • 2 x BBC micro:bit
  • 2 x 擴充板
  • 2 x micro-USB線
  • 1 x 伺服馬達
  • 1 x 碰撞感測器
  • 細線(例如:釣魚線)
  • 硬紙板(可有可無)
組裝



發報

步驟一:將文字轉換成摩斯電碼


假設我們給出文字「HELLO WORLD」,想要將其轉換成摩斯電碼的話,首先需要「table」說明每個字母的摩斯電碼是什麼。舉個例子:「E」是「.」、「W」是「.-」。

我們可以使用Python的數據結構「dictionary」,將關鍵字和數值聯結。在本應用中,關鍵字是字母,數值是摩斯電碼的相應符號。



這裡有一個dictionary的範例:

MORSE_CODE = {'A':'.-','B':'-...','C':'-.-。','D':'-..','E':'。', 'F':'..-。','G':'-。','H':'....','I':'..','J':'.—','K' :'-.-','L':'.- ..','M':'–','N':'-。','O':'-','P':'.– 。','Q':'–.-','R':'.-。','S':'...','T':'-','U':'..-',' V':'…-','W':'.–','X':'-..-','Y':'-.–','Z':'– ..','0 ':'--–','1':'.---','2':'..-','3':'…–','4':'….-','5': '.....','6':'-....','7':'–...','8':'-..','9':'-。' }

現在可以將每個單獨的字母轉換成摩斯電碼。我們需要把所有的訊息組合起來,在每個字母的尾端加一個空格,告訴接收端此字母已發送。

步驟二:用摩斯電碼驅動伺服馬達

當訊息轉換成摩斯電碼後,接下來根據編寫好的信息驅動伺服馬達。在本應用中,dit代表0.6s的拉力;dah代表1.2s的拉力;一個空格表示一個1.6s的拉力。

首先,需要找到伺服馬達旋轉的正確角度,製造出想要的效果:拉緊感測器一端的細線可以驅動伺服馬達,或是鬆開細線停止運動。將這些數值命名為press_angle和release_angle。這些設定的數值通常是150和60,但是根據伺服馬達和感測器位置的不同,數值也會有所不同。

為了使伺服馬達轉動,我們將使用一個類組,可以在此取用。要在線上編輯器中使用這個類組,需要將這段編碼複製貼到程序的開端。

對於每個字符(dit, dah 或空格),我們應該設置一段合適的時間長度用於拉緊或鬆開細線。




接收

步驟一:將感測器數據轉換為摩斯電碼

當感測器一端的細線被拉緊,感測器上的金屬彈片會被按下。使用類比輸入就可以檢測到彈片被按下,無論彈片什麼時候被按下,類比讀數都會小於一個閾值。在本應用中將使用一個100的閾值。

在彈片被按下的時候,可以使用事件接收器觸發事件,讓輪詢更簡單。輪詢的意思就是按照一定的間隔查看類比讀數,在本應用中檢查間隔是0.1s。

如果一組循環中,彈片被按下,我們會將press_length增加100來追踪彈片被按下了多久;如果彈片鬆開了,可以使用press_length知道按鈕被按下了多久,並由此來決定傳輸哪個字符(dit, dah或space)。這些設定會添加到到變量cur_letter,讓其追踪目前為止所發送的dits和dahs。




步驟二:將摩斯電碼轉換為文字

每當檢測到空格時,程式應該會選取目前已檢測到的字符(dits 或dahs),並將其轉換成字母。這將需要再次使用dictionary。這一次的關鍵字會以摩斯電碼表示,數值則是字母。

這裡有一個解碼字典的範例:

MORSE_DECODE = {'.-':'A','-...':'B','-.-。':'C','-..':'D','。':'E', '..-。':'F','–。':'G','....':'H','..':'I','.-':'J','-。 -':'K','.- ..':'L','–':'M','-。':'N','-':'O','.–。':' P','–.-':'Q','.-。':'R','...':'S','-':'T','..-':'U',' …-':'V','.–':'W','-..-':'X','-.–':'Y','– ..':'Z','- –':'0','.--':'1','..-':'2','...–':'3','....-':'4','..... ':'5','-....':'6','–...':'7','-..':'8','-。':'9'}



現在,無論字母在哪個時候被檢測到(或者空格被按下),我們可以在解碼字典裡面查詢相應的字母。但是有時候接收器可能無法準確檢測線被拉扯的序列,造成在字典裡面找不到該序列。如果試著在字典裡面查不到序列,Python會顯示錯誤,程式會停止運行。

因此,首先要檢查這個序列是否在字典的關鍵字中。如果不在,把當前的字符設置為「?」。一旦有了當前的字符,就能夠透過設置變量cur_char,在micro:bit的LED螢幕上顯示這個字符。我們將在每個循環中顯示檢測到的字符。

結合

如果初次使用這個裝置無法完美地運算也沒關係!試著調整一下伺服馬達或感測器的位置,並調整伺服馬達拉緊或鬆開細線的角度。此外可以試著調整一下拉線的持續時間。這裡有發送接收的完整編碼。

延伸

雖然這種數據傳輸的方法不是用於特殊用途,但是許多數據轉換的概念是相關連的。試著用線的長度來做實驗,看看多遠的距離可以平穩傳送,以及在哪個點「signal」會變得很弱,難以檢測。

為了增強「signal」,可以使用第三塊micro:bit來作為信號放大器。它可以把感測器的信號轉換為新的拉力,這和每20千米安裝在水下的光纖電纜的信號增強器的原理是類似的。

當然,摩斯電碼不是最有效最可靠的數據傳輸方式。也可使用不同類型的編碼(二進制代碼+ ASCII、漢明碼等等), 以及查閱錯誤修正後的編碼,檢測和修復傳輸過程中的任何數據損失或錯誤。



20 Game:bit套件



材料
  • 1 x Game:bit套件
  • 1 x螺絲起子
製作方法

步驟ㄧ:按鈕
  • 先組裝ADKeypad和上方的紅色按鈕
  • 用螺絲起子把四個角的螺絲擰緊,並用金色的螺母固定好
 

 

步驟二:接線
  • 通過小孔將三色線連接到ADKeypad,棕色線連至G (ground), 紅色線連至V (voltage) ,橘色線連至S (signal).
  • 其實三色線上的各個顏色不一定要與GVS對應,但對應安裝是最好的.
 

步驟三:連接micro:bit與ADKeypad
  • 把micro:bit安裝在木板的最上方
  • 分別在micro:bit的金手指P1, 3V 以及GND 內裝上螺絲,我們將會通過金手指P1連接micro:bit 與ADKeypad
  • 在反面,用螺母把P1上的螺絲和ADKeypad的橘色線固定,再用螺母把3V上的螺絲和ADKeypad的紅色線固定
  • 將棕色線和GND螺絲連接,但先不要固定!!
  

步驟四:安裝蜂鳴器
  • 在蜂鳴器的底部有標註正負極導線,注意哪種顏色是正極(+),哪種顏色是負極(-) ,電力參數能幫助您使用GND及3V
  • 將蜂鳴器的負極導線連接至GND上的螺絲並擰緊
  • 將蜂鳴器的正極導線連接至micro:bit的P0,用螺絲和螺母固定
  • 注意蜂鳴器只有和micro:bit的P0連接才會有聲音!否則makecode 中的「Music」積木編碼是無效的!
  

步驟五:安裝電池
  • 最後的步驟是替game:bit安裝電池
  • 安裝兩顆3A電池在micro:bit的電池盒裡
  • 將電池組水平置入game:bit中,方便操作on/off開關
 

步驟六
  • 關上game:bit,把反面的四個螺絲和螺母對齊,固定ADKeypad。
  • 將螺絲和螺母擰緊。


步驟七
  • 將邊上的2個孔裝上螺絲,並安上夾持器,用螺帽固定
  • 另一邊相同操作
  • 夾持器可以幫助固定,所以不要弄丟啦!
 

 

Game:bit完成啦!可以開始編碼!依照教學製作有趣的遊戲,例如:躲避小行星、迷宮賽跑或飛翔的小鳥。


21 招財貓Waving Fortune Cat



材料
  • 1 x ADKeypad
  • 1 x 電池組
  • 2 x 黃色LED
  • 1 x 擴充板
  • 1 x micro:bit
  • 1 x 迷你伺服馬達
製作方式

步驟一
  • 找一幅貓的圖片,將紙板按照圖片樣式裁剪。
  • 選你自己喜歡的貓~


步驟二:連接電子零件
  • 連接以下零件至擴充板
  1. ADKeypad連接至Pin0
  2. 迷你伺服馬達連接至Pin1
  3. 2盞LED燈分別連接至Pin2和Pin8

是否按規定顏色線連接跳線並不會影響電子零件的使用。但按照顏色連接能幫你更好的分辨電子連接口。

步驟三:將電子組件連接到紙板
  1. 將迷你伺服器安裝在紙板貓的右邊。
  2. 在紙板上留兩個圓孔,透出LED的閃光。


步驟四:Micro:bit編碼
  1. 如上圖在MakeCode頁面中編寫micro:bit程式碼。
  2. 按下按鈕「A」(2盞LED燈發出光芒,伺服馬達帶動貓手臂擺動)

 

22 反應時間測試儀Reaction Time Tester

用以Python為編碼語言的micro:bit和OLED做個小小的測試遊戲。

材料
  • 1 x Tinker Kit (或OLED顯示器)
  • 1 x 頭腦
  • 1 x 你
製作方法

步驟一:輸入/輸出
  • 將micro:bit和麵包板連接。
  • 連接LED至pin12數碼引腳。
  • 連接光感器至另一引腳pin 8。
  • 棕色線接至G (接地), 紅色線接至V (電壓) 以及橙色線接至S (信號)。
  • 以上操作可以得知燈是開還是關。
  • 將OLED顯示器連接至I^2C引腳。
  • 連接micro:bit至電腦,下載Mu編輯器。
步驟二:文件傳輸
  • 我們需要下載一些模組用於此應用。
  • 在連接中下載zip文檔(模組)。
  • 在Mu編輯器中編寫程式碼(如上圖1) 匯入文件。
  • 確認文件和本應用在同一個文件夾中。
  • 將電腦上的文件轉換至micro:bit。
  • 在Windows中,確保文件放在「users/Username/mu-code」下,MU-編輯器才檢測得到文件內的MU編碼。
  • 這些文檔不是micro:bit內建的,需要傳輸給micro:bit的。
步驟三:輸入畫面
  • 此步驟不是必須,但可讓程序加入一些基本性能。
  • 在OLED上顯示。
  • 使用模組「add_text」,可以在螢幕上顯示文字或其他符號。
  • 運用功能「loading_screen()」放映動畫。
  • 如果你想給螢幕新增更多變量,參考後文。
步驟四:編寫遊戲程式碼
  • 這是自測的實例。
  • 按下按鈕後,螢幕會顯示指令,在此需要設置一個等待時間。
  • 初始數字轉換為字符串後,我們會在末尾添加「000」隨機生成的數字並解析。
  • 變量time1和time2 在「#」前適用於2個任意點。(顯示指令)
  • 需要注意的是在micropython和micro:bit中,time模組被utime模組替代,需要輸入的是utime。
步驟五:新增邏輯
  • 此步驟是為了計算和顯示遊戲的反應時間。
  • 透過計算玩家按下按鈕和顯示指令的時間完成。
  • 然後OLED顯示器上會顯示玩家反應時間。

 

23 隱形機器人Reusebot
  • 組裝一個害羞的隱形機器人
  • 輸入代碼來製作一個害羞的機器人


材料
  • 1 x micro:bit
  • 電池
  • 任何盒子(適合micro:bit)
  • PIR感測器
  • 電位器
  • 被動蜂鳴器
  • 2 x 跳線
製作方法

步驟一:組裝micro:bit零件

 
  1. 如圖所示,將蜂鳴器連接到引腳0。蜂鳴器上的+號與斷路器板上的黃色端口相連。
  2. 將土壤濕度感測器連接到引腳1。
  3. 將PIR感測器連接到引腳2。
  4. 將電位器連接到引腳3。
步驟二:新增Tinker Kit

  1. 我們需要新增程式碼包才能使用套件。點選「Code drawer」中的「Advanced」,點選最底部的「Add Package」。
  2. 點選後會出現搜尋欄,請搜尋「Tinker Kit」,然後點選「tinkercademy-tinker-kit」並下載。
  3. 在此會增加兩個程式庫: Tinkercademy用於套件中的通用感測器, OLED用於OLED模組(高度為64,寬度為128)。我們在本應用中沒有使用OLED模組,但您可以使用!
步驟三:編碼

寫入micro:bit程式碼。 編寫隱形的機器人的程式碼包含「if」函數。我們希望機器人只對四種情況做出反應。
  • 第一個條件是機器人被拾起。
  • 第二個條件是有人觸摸土壤濕度感測器
  • 第三個條件是機器人檢測到面前的運動,並且
  • 最後一個條件是有人切換電位器。

你已經完成隱藏機器人所需組件的組裝,只要機器人受到驚嚇就會發出聲音!將它放入任何大到足以容納組件的盒子中,隨意打扮自己的隱形機器人,但要小心碰撞,否則機器人會受到驚嚇開始尖叫!
 
 
24 無線警報門Access Denied



材料
  • 2 x Micro:bit
  • 1 x分線板
  • 1個碰撞感測器
  • 1 x蜂鳴器
製作方法

步驟一:設定



將micro:bit插入分線板其中一個插槽。
將蜂鳴器連接到擴充板上的引腳0,將碰撞感測器連接到引腳1。
在執行步驟二之前,請確認已下載「 tinkercademy-tinker-kit」軟體包。


步驟二:編碼
  1. 將這些程式碼放入makecode平台中,然後將其下載到已連接到擴充板上的micro:bit中。
  2. 按幾下碰撞感測器,查看您的程式碼是否正常運作!
步驟三
  1. 下載第二組micro:bit(接收器)的程式碼。
  2. 現在測試碰撞感測器,看看接收的micro:bit是否運作正常!
  3. 既然已經設置了第一個無線門防盜系統,可以嘗試設定多扇門!
  4. 隨時在接收的micro:bit上增加其他形式的警報增強安全性。
     


25 Micropython

應用一:音樂機

引腳佈局
  • 蜂鳴器:Pin0
  • ADKeypad:Pin2


關於ADKeypad的注意事項

按下按鈕時,ADKeypad傳回一組模擬信號。每個按下的按鈕會傳回一個唯一的整數值,範圍從0(表示0V)到1023(表示3V)。但是,在不同的時間按下按鈕會給出較小範圍的值,且不同的ADKeypad可能會發出不同的信號,這很常見。因此在此示範的程式碼中,我們提供了ADKeypad的按鈕在按下時可能傳回的數值範圍。隨意測試一下按下ADKeypad可能傳回的值,並在示範的程式碼中更改這些值。



應用二:智慧燈

引腳佈局
  • PIR感測器:Pin0
  • LED:針腳1 
 

應用三:特雷門琴

引腳佈局
  • 蜂鳴器:Pin0
  • 電位器:Pin1
 

應用四:簡易警報器

引腳佈局
  • 碰撞感測器:Pin0
  • LED:針腳8
  • OLED:I2C行(在BoB底部)




應用五:植物監控設備

引腳佈局
  • 蜂鳴器:Pin0
  • 土壤濕度感測器:Pin1
  • OLED:I2C行(在BoB底部)



 

26 防盜門Build Your Own micro:bit Security Door



材料
  • 1 x擴充板
  • 1 x micro:bit
  • 1 x迷你伺服馬達
  • 1 x麵包板
  • 4 x 4薄膜鍵盤
  • 3 x 5kohm電阻
  • 3 x 1kohm電阻
  • 1 x10kohm電阻
  • 跳線
  • 1 xOLED
  • 18.5cm x28cm壓克力
  • 1 x小金屬鉸鏈
製作方法

步驟一:鍵盤連接
  1. 薄膜鍵盤有16個不同的開關、16個不同的字符
  2. 開關按行和列組合在一起,例如(R1、C1)對應於1,依此類推。當控制器在引腳1和引腳5檢測到1時,表示按鍵1被按下,數字輸出。
  3. 因此可以使用micro:bit的數字引腳與鍵盤連接,但這樣做會變得非常混亂。
  4. 讓我們為4x4鍵盤建立驅動電阻!
按照圖示如下:



步驟二:連線

 
  1. 將伺服馬達的3個引腳連接到擴充板上的P2
  2. 將micro:bit的接地線(黑色引腳)連接到10kOh電阻器
  3. 將3V(紅色引腳)連接到5k歐姆電阻
  4. 將A0(黃色引腳)連接到10k歐姆電阻和1k歐姆電阻之間的點
  5. 將擴充板的GND、VCC、SCl和SDA分別連接到OLED的GND、VCC、SCl和SDA。


步驟三:編碼
  • 將伺服馬達初始化到位置180(鎖定位置)
  • 初始化OLED顯示器
  • 初始化一個4x1陣列
  • 初始化鎖定計數器
  • 按鈕A當作輸入字符的按鈕
  • 每次按下4x4鍵盤上的某個鍵時都必須按下按鈕A才能鍵入4位數字
 
現在需要設定micro:bit檢測按鍵!
  • 透過驅動電阻,每次按鍵都對應於0到1024的唯一模擬值
  • 可以使用模擬讀取功能讀取模擬值
  • 字符中的值儲存在「TempString」變量中
  • 程式碼積木很長,因此提供了下列連結下載。
  • 按鈕B當作最後的「Enter」按鈕
  • 按下按鈕B讓「compare」程式檢查輸入的字符串是否等於「369#」
  • 如果答案為0則意味著字符串相符;如果是1,則字符串不相符
  • 每次入侵者輸入錯誤的密碼時,錯誤的嘗試次數會增加1
  • 一旦檢測到3次錯誤,程序將進入循環60秒
  • 要重設嘗試次數和輸入的字符,請按按鈕A + B
  • 重設按鈕還可以將伺服馬達重置到「Locked Position」
步驟四
  1. 使用雷射切割機裁出18.5厘米×28厘米的3毫米丙烯酸樹脂
  2. 如果沒有丙烯酸,可以用紙板代替
  3. 裁出OLED的插槽以及鍵盤線
  4. 在門鉸鏈上鑽孔/戳孔,並用螺絲固定門
  5. 將冰淇淋棒連接到伺服馬達上當作鎖頭
  6. 在門的另一側用冰淇淋棒黏貼伺服馬達
 

步驟五

 
  1. 每按一個鍵,相應的字符會出現在OLED上
  2. 解鎖要輸入3+按鈕A、6+按鈕A、9+按鈕A,最後按#
  3. 接著按按鈕B
  4. 重設請按A + B
  5. 如果輸入錯誤的密碼三遍,則OLED會顯示一個鎖定計時器,60秒後才能再輸入密碼。
  6. 恭喜你!製作了一扇micro:bit防盜門。

 
27 拼裝自走車Kraxy Car V2



材料
  • 1 x 自走車外殼
  • 2 x 連續伺服馬達
  • 2 x 車輪用的伺服馬達
  • 些許膠帶
  • 1 x Basic:bit
  • 5 x 螺絲
  • 1 x Micro:bit
  • 1 x 電池組
製作方式

步驟一:外殼
  • 沿線凹折紙板外殼。
  • 按上圖所示延邊用膠帶黏好。
  • 將有5個孔的頂殼插入底殼。
步驟二:內部零件安裝
  • 將兩個伺服馬達插入側面的孔中。
  • 將長方形底板安裝在兩個伺服馬達之間,用膠帶固定好。
  • 將電池盒內裝好電池,安裝在小車的正面。
步驟三:外部零件安裝
  • 在伺服馬達上鎖上螺絲。
  • 將伺服馬達和電池組的線通過頂蓋上的長方形孔穿出,將頂蓋和車底固定。
步驟四:安裝Micro:bit

  • 用長螺絲把micro:bit鎖至basic:bit。注意孔是按標識對應的,P0對P0;G對G。
  • 將二個伺服馬達分別接在basic:bit的P1和P2上,棕色的線連到G;黃色的線連到。
  • 將P0和basic:bit上的蜂鳴器接通。已經接通啦?你很幸運!
步驟五:完成
  • 用五個螺絲將micro:bit和basic:bit合體安裝到小車的頂蓋上。
  • 編輯程式碼來驅動小車吧!

 
28 超級神射手Shoot Em Up Kit


材料
  • 1 x 超級神射手盒子
  • 1 x 光線感測器
  • 1 x 伺服馬達
  • 1 x Ring:bit
  • 1 x micro:bit
  • 5 x 螺絲
  • 3 x AAA電池
製作方法

步驟一:整頓城鎮
  • 將所有山巒和灌木叢插入您所在城鎮的路徑。
  • 將伺服馬達安裝到彈射中心的孔洞。
  • 將伺服馬達電線穿入孔中,然後從前面的盒子中取出。
  

步驟二
  • 將micro:bit安裝在ring:bit上並用五個螺釘鎖緊。
  • 將三顆電池插入電池組背面。
  • 將左側開關切換到P2,右側開關切換到OFF。在我們編寫micro:bit之後將其打開。
  
 

步驟三:組裝所有零件
  • 將伺服馬達連接到ring:bit上的P2。確認棕色線接到G;黃色線接到P2。
  • 將光線感測器連接到ring:bit上的P1,黑線應連接到G。
 

步驟四:編碼


步驟五:校準

校準龍,確保龍在天空中來回飛行,不會一直在地面。
  • 將伺服馬達確實固定,編碼讓按鈕A被按下時將伺服馬達轉動到0度,按下按鈕B時轉動180度。
  • 按下按鈕A後,將伺服馬達臂放在伺服馬達頭上,觀察按下按鈕B時的位置。如果伺服馬達臂指向太遠或指向側面,請減少臂的角度。(例如調整0 - 180度至20 - 160度)
  • 用相同角度的龍臂更換伺服馬達並鎖緊。
步驟六:校準第二部分
 


在光線感測器上,必須捕捉當下的光線水平,當光線經過時,感測器會提醒micro:bit光線強度提高了。
  • 將光線感測器穿過彈出窗口下方的孔並穿過盒子的前部。
  • 將光線感測器放入龍的嘴中,然後固定。
  • 編寫micro:bit程式碼,按下按鈕時,透過光線感測器檢測光線水平。
步驟七:整合

現在我們希望能夠在龍被擊中時停止動作,而玩家得分!
  • 因此要結合這兩段程式碼並使用IF邏輯積木塊來檢查龍是否被擊中。
  • 如果被擊中,則在Micro:bit上更改圖標並暫停一會兒,然後再更改回預設圖標。
  • ELSE(如果未檢測到命中),則允許伺服馬達按正常方向移動。
  • 另外新增更多的積木塊,以便當龍被擊中時增加得分變量。
  •  


 


30 摩斯電碼發送器Morse Code Transmitter
  1. 成功連接2台micro:bit
  2. 通過A、B按鈕控制micro:bit間的信號發送
  3. 通過A、B按鈕控制micro:bit間的信號接收
  4. 學習在MakeCode中編碼


材料
  • 2 x micro:bits
  • 4 x 鱷魚夾
  • 1 x micro USB線
製作方式
  • 我們會編寫兩則程式碼:一是從micro:bit中發送信號;另一個則是從micro:bit中接收信號。
  • 為了讓接收信號的micro:bit辨別信號發送,我們需要在信號收發之間設定一個時間段。
  • 這樣可以透過暫停時間的長短來辨別信號收發。
步驟一:鱷魚夾

我們希望藉由第一台micro:bit上的pin1發送信號;透過第二台micro:bit的pin2接收(反之亦然)。

連接:
  1. GND(第一台micro:bit) 連GND(第二台micro:bit)。
  2. 3V (第一台micro:bit)連3V(第二台micro:bit)。
  3. Pin 1(第一台micro:bit) 連Pin 2(第二台micro:bit)。
  4. Pin 2(第一台micro:bit) to Pin 1(第二台micro:bit)。
步驟二

按下按鈕A即發送信號,把此信號定義為一個「dot」(如上圖示)。
  1. 打開一個未編輯的MakeCode頁面,命名為「Sender」。
  2. 從Logic中拖曳「if-then-else」嵌入至「forever」下方。
  3. 從Input中拖曳「button A is pressed」嵌入至「if」後方。
  4. 從Basic中拖曳「show led block」嵌入至「then」後方,讓信息發送螢幕顯示「dot」。
  5. 點擊Advacnced,在Pins中找到「digital write pin」,設置P0為1。(這個代碼表示發送信號)。
  6. 從Basic中拖出「pause(ms)」,設置為230 ms。(這個暫停時間指信號發送時間)。
  7. 點擊Advacnced,在Pins中找到「digital write pin」,設置P0為0。(這個代碼表示信號停止發送)。
  8. 從Basic中拖出「pause(ms)」,設置為50 ms。
步驟三:信號發送_按鈕B
../../_images/gtjlrr9.png
按下按鈕B即發送信號,把此信號定義為「dash」。
 
  1. 在「if-then-else」新增「else if」。
  2. 如上圖所示,按照步棸二重複操作。(按下按鈕B,顯示「dash」並暫停470 ms)。
  3. 在「else」後方嵌入「show icon」 表示信號發送完成。
步驟四:接收_感應信號

我們需要用到「running time (ms)」程式碼框記錄信號接收和停止的時間。
  1. 在MakeCode新建一個編碼,命名為「Receiver」。
  2. 從Loops中拖曳「while do」積木嵌入「forever」下方。
  3. 從「Logic」中拖曳「=」嵌入至while迴圈後方。
  4. 在「=」前面嵌入digital read pin積木,將數字設為1(這個代碼意為micro:bit已探測到信號;一定要將digital read pin設為P2彈簧夾夾取的位置)。
  5. 在「Variables」中設置一個新變量為「keyDownTime」。
  6. 新增「if-then」嵌入「do」後方。
  7. 從Logic中拖出「not」嵌入至if後方,附上keyDownTime變量。
  8. 進入Input,點擊more,拖曳「running time (ms)」嵌入至「set keyDownTime to」後方。
步驟五:接收_顯示信號

在螢幕上顯示正確信號。
  • 在「Logic」中拖曳「if-then」嵌入至「while」下方,嵌入「DragkeyDownTime」變量至if後方(此編碼表示方框內的指令會在接收信號後運行)。
  • 在「Variable」中新增變量「duration」,在後面嵌入「Math」中的「0-0」積木,新增「running time」和「keyDownTime」,此編碼表示程式開始運行的時長和信號被偵測的時間。
  • 從「Logic」中拖曳「if-then」積木,在後方嵌入「0<0」為duration < 250(在此設定為250是因為前面的編碼「dot」設定的是230ms)。
  • 如上圖編碼所示在if條件中顯示「dot」LED。
  • 新增else if至if-then-else中,如上圖編碼所示。設定「dash」為500。
  • 新增「clear screen」,在信號接收後,螢幕訊息會被清除。
  • 設置keyDownTime為0,當發送新信號的時候,micro:bit又會開始運行。
logo
iconiconiconiconicon
icon  電話:04-2375-3535
icon  傳真:04-2256-9949
icon  統編:90386785
icon  E-mail:service@oursteam.com.tw
icon  LINE ID:@oursteam
Inspire every child to create