2020年4月4日 星期六

[micro:bit] 蒸汽彼特(STEAM on micro:bit)II──主題10:卡路里大作戰之鋼鐵人反應爐燈環傳

蒸汽彼特(STEAM on micro:bit)II

主題10:卡路里大作戰之鋼鐵人反應爐燈環傳


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/

Apr. 4, 2020
88x31.png[1]

 

難易度

★★☆☆☆

主題

跑跑跑…向前跑,邊跑邊消耗多食的卡路里之外,還可以替鋼鐵人反應爐積累能量

任務

反應爐是鋼鐵人的心臟,為了讓他好好活下去,請督促小彼特每天都要按時運動好將卡路里燃燒後轉換成反應爐所需的能量。
廣播計步功能結合,每跑十步就讓燈環多亮一顆燈。待燈環全數點亮後還會放音樂

材料

編號品名單位數量
1小彼特主板2
2傳輸線1
3燈環(註)4
4魔鬼氈1
5瓦楞紙板/PP板/木板…1

造形設計

以上一小節第5項材料,參考圓扁盒造形https://reurl.cc/O1Ap6A)、https://reurl.cc/xZ9OWNhttps://reurl.cc/vDdeEA…來設計反應爐的外觀。請留意要預留放置小彼特的尺寸。

功能設計=硬(電路設計)+軟(程式設計)

電路設計 電路設計如右圖所示。藍色小彼特為發送端(transmitter,Tx),它連接KSB040鋰電擴充板https://reurl.cc/ex33gM)供電;紅色小彼特為接收端(receiver,Rx),除了和接收端一樣使用KSB040做為電力來源外,考量到燈環需要5V電源(主板只需3V),因此,我們再加上一塊KSB047 PWM轉接板https://reurl.cc/E7rryn)後,恰巧可以把原本是要給外接伺服馬達用的5V電源接腳挪拿來驅動燈環使用。操作影片https://reurl.cc/1xZGpQ)如右圖所示。這個組合除了輕巧、省接線外,售價上也不會比外接獨立電源來的貴。所以,選用KSB040再搭配KSB047就會是一個經濟而實惠的不錯選擇了。


如何選擇合適的擴充板(extension boards) 關於小彼特常用的擴充板可參考我們在MakerPro專欄中《micro:bit搭載KAISE週邊的引導式教學組合》(https://reurl.cc/z8ZM2e)一文的詳細介紹。以下,我們條列幾項重要的原則供讀者在有需要採購時較好依循:
  1. 錢有涯,擴充無涯:硬體擴充本身就是個無底洞,需量(財/能)力而為之。
  2. 專款專用,切忌包山包海:將所有元件集結在同一塊電路板子上雖可省去收找材料的麻煩,但一有某處單獨的零件損壞常會是再多新買一塊新品替代。更重要的是,在做作品時就會發現雖需求功能不多,但因為整塊板子全都包了,遂而無法客制量身訂作。
  3. 教學需求至上:凡教學上用不到的硬體,請都放在最後再考量。
  4. 學習常規,不學特例:筆者上課常和學生們笑言:「我們很懶,只要辛苦地一次把他們學會,之後就不用再多花時間學第二次。」某些廠商為了防呆或者是刻意簡化的接線方式,一開始學時無腦地喀喳就接好了,但只要是非該廠商推出的產品,就會立即發現接起線來東卡、西卡的。
  5. 跟風無時停(台語):網上推坑不平之路很多,只要看推的人有沒在教學?有沒學員作品不斷的產出?大概就知道他們推薦東西的受測度了。以我們而言,我們得要站在教學第一線來考量。因為自己有在教學,所以會被學員操到金嚇嚇(台語)~。


程式設計 既然硬體先天就已畫分好了傳送端Tx和接收端Rx,軟體功能的程式撰寫當然也得遵循這個架構。Tx和Rx最基本的主/從式(Client/ Server)程式架構請參考以下這兩個連結:主Tx程式https://reurl.cc/oL1YMj)、從Rx程式https://reurl.cc/d02aM6)。
  1. 傳送端的程式如某右圖所示。我們使用87號廣播通道(radio channel)來傳遞訊息。當傳送端的小彼特晃動時,將計步的記錄傳送出去後發出提示音效。(隨時按下按鈕A可發射代碼99表示要歸零重新開始。)完整的參考程式碼可按https://reurl.cc/9EGGjd下載
  2. 接收端的程式如某右圖所示

Make Codehttps://makecode.microbit.org/)線上編輯工具中匯入燈環的擴充積木。本例是使用手邊的EzRing硬體,故需引入合適的積木擴充包https://reurl.cc/WdrrpL)。讀者若使用的是WS2812款式的燈環,則需匯入neopixel這包擴充積木
程式初始化時需指定和接收端相同的第87號廣播頻道。接著,我們要告訴接收端的小彼特是以P1(RX)和P2(TX)兩隻接腳來和EzRing傳遞序列(serial)控制資料(若是使用WS2812,則只要選用P1或P2一隻接腳來傳送5050 RGB LED的顯示資訊即可)。然後,再讓燈環閃礫一下表示備妥(ready)
當收到傳送端傳來的計步值時,則將結果顯示到燈環上(一步一顆、二步兩顆…)。
此外,若收到99的歸零訊息則將燈環換色後熄滅。
完整的參考程式碼可按
https://reurl.cc/vDdW11下載

展示影片請參考https://youtu.be/s-IAP8ER7Fg

    教學活動設計

    教學投影片可由https://reurl.cc/Y1v09o)下載。
    1. 手勢控燈 參考右手邊的影片https://reurl.cc/qd5OQp),設計若干不同手勢(gestures)來操控燈環的顯示樣式(patterns)
    2. 展示盒 TxRx


    積木指標

    Basic、Radio、Loops、Input、Logic、Math、Variables、Extensions

    編程指

    循序結構(sequence structure)判斷結構(decision structure)重覆結構(repetition structure)非同步事件處理(asynchronous event handling)

    硬體指

    擴充板、燈環。

    参考資料
    1. 六種授權條款

    2020年4月2日 星期四

    [AI] 幸運轉輪:使用VIA Pixetto視覺感測器之特徵點偵測(Keypoint Detection)功能

    幸運轉輪:

    使用VIA Pixetto視覺感測器之特徵點偵測(Keypoint Detection)功能


    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/

    Apr. 2, 2020
    88x31.png[1]

    難易度

    ★★★★☆


    主題

    設計一個抽獎活動可以用來選出獲獎幸運兒的轉輪

    任務

    一年一度的中秋同樂會快到了,小Jay正愁著不知該準備些什麼娛興節目才好。號稱創客大師的你,趕緊動動腦筋設計一個能炒熱現場氣氛的道具吧!
    利用8787特徵點偵測做為轉輪馬達的觸發開關來抽出表演的順序

    材料

    項目品名單位數量
    1VTS-8787視覺感測器1
    2micro USB傳輸線1
    3Grove – 4x公端杜邦線+母座 to Grove 4pin連接線1
    4Arduino Uno1
    5USB2.0 A公-B公傳輸線1
    6馬達擴充板(註)1
    7TT馬達1
    8四號電池盒(四入,含蓋、開關)、1
    9四號電池4
    • 註:本文是使援用KSB015這塊使用L298P IC的Arduino擴充板(shield)。讀者亦可使用其他類似功能的版本,例如:L9110S。
    • 如果讀者要將項目4的開發板換成Nano或其他Arduino版本,請自行將項目5的傳輸線做調當的調整。
    • 技術咨詢(手機加Line:https://reurl.cc/Vadax6)。


    造形設計(機構)

    請參考轉盤https://reurl.cc/62EpDr商品永不停轉的抽獎大轉盤https://reurl.cc/5lG72n)的概念設計作品的外觀。記得將8787及其相關電路的尺寸考量進去。

      功能設計(電路、程式)

      先依照下列二表格及圖1接妥8787、Uno、馬達擴充板與TT馬達的連接線路。

      馬達擴充板
      電池盒
      TT馬達
      OUT3(D5)
      OUT4(D6)
      5V/12V
      GND

      馬達擴充板
      8787
      D3
      D4
      5V
      GND

      圖1:接線圖。


      在Pixetto Utility上(圖2)選用形狀偵測功能,讓8787識別並套用之(例如我們以先前至夏威夷旅行帶回的川普大叔紀念筆做為待測物),詳細操作方法可參考拙著《VIA Pixetto視覺感測器大開箱(unboxing):AI開發工具(Development Kits)篇》(https://reurl.cc/Qd6eVO)一文。

      圖2:在Pixetto Utility上選用特徵點偵測功能。

      接著,在Pixetto Junior上拉出圖3的積木程式。這個程式的邏輯是一開機後先讓馬達順轉後停止做自我測試(self test)
      接著,若8787「看見」前述的川普大叔人像商品後就逆轉。否則,就停止馬達轉動。
      為了程式易於理解,我們亦在圖三中加入了副程式(subroutines)───本例是用無傳回傳的function)的概念將馬達順轉forward()、逆轉backward()與停止stop()控制獨立成個別的程式片段來呼叫。

      圖3:Pixetto Junior的Blockly程式碼。

      圖3積木程式自動生成的Arduino程式碼如下所示。

      #include <Arduino.h>
      #include <SmartSensor.h>

      SmartSensor ss(3,4);

      int motorIn1;
      int motorIn2;

      void forward() {
      digitalWrite(motorIn1, HIGH);
      digitalWrite(motorIn2, LOW);
      }

      void backward() {
      digitalWrite(motorIn1, LOW);
      digitalWrite(motorIn2, HIGH);
      }

      void stop() {
      digitalWrite(motorIn1, LOW);
      digitalWrite(motorIn2, LOW);
      }

      void setup() {
        ss.begin();

        motorIn1 = 5;
        motorIn2 = 6;
        pinMode(motorIn1, OUTPUT);
        pinMode(motorIn2, OUTPUT);
        forward();
        delay(500);
        stop();
      } //end of setup()

      void loop() {
        if (ss.isDetected()) {
        if (ss.getTypeID() == 0) {
        backward();
        delay(500);
        }
        } else {
        stop();
        } //end of if
      } //end of loop()

      本單元的操作影片https://youtu.be/OpC_7JnE4e0 如圖4所示。

      圖4:展示影片。

        教學活動設計

        1. 當音樂下了之後,讓8787識別到特徵點後表演左三圈,右三圈https://reurl.cc/qd5gZ0)。

          参考資料
          1. 六種授權條款

          2020年3月31日 星期二

          [micro:bit] 蒸汽彼特(STEAM on Micro:bit)II──主題9:小彼特心臟病

          蒸汽彼特(STEAM on micro:bit)II

          主題9:小彼特心臟病


          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/

          Mar. 31, 2020
          88x31.png[1]




          難易度

          ★★☆☆☆

          主題

          根據撲克牌遊戲來設計類似的小彼特玩法。

          任務

          小阿聰總是神經大條,對事情的反應老是慢半拍。請設計一個特訓機來協助他反應up up!
          利用導電原理,使用鋁箔(aluminum foil)作為接觸端點,並以鱷魚夾(crocodile clip)搭建出電路迴路來偵測瞬間觸碰的反應識別

          材料

          編號 品名 單位 數量
          1 小彼特主板 1
          2 傳輸線 1
          3 鱷魚夾 4
          4 鋁箔紙 1
          5 瓦楞紙板/PP板/木板… 1

          造形設計

          設計我們想們想要的外觀(例如這款由世界最偉大的林先生親手繪製的大象圖案,留出要黏貼發牌、奇數牌玩家、偶數牌玩家及GND四個鋁箔觸碰點的位置,再根據我們事先畫好的設計稿剪裁之

          功能設計=硬(電路設計)+軟(程式設計)

          參考撲克牌心臟病的實際玩法https://reurl.cc/z8MaW7)來制定我們的遊戲規則。例如:兩位玩家(以奇數或偶數數字搶答區別,文後以奇數玩家及偶數玩家簡稱之)都先將一手放在GND觸碰(touch)的共地鋁箔上。然後,選由其中的一位玩家按小彼特的A按鈕發牌。當牌數為偶數時,先前被指定為偶數需作答的玩家有按下觸碰則得一分。反之,若先前被指定為奇數需作答的玩家因誤判而按下觸碰時就扣一分。最後,在比賽時間結束後,按下A按鈕會自動顯示贏家代碼,奇數玩家為A,偶數玩家為B。平手則以=表示。


          導電原理:從電源正極出發,經開關到LED後回到電源負極的電路迴路(circuit loop),開關就是擔任迴路導通的切換關口。像本單元中的鋁箔正是做為迴路的導通開關之用。


          電路設計如圖所示
          另一方面,程式邏輯(program logic)参考樣版(template)步驟為:(變數played表示發牌的狀態,0:未發,1已發;card:記錄發牌的點數;scored_A/scored_B:奇數/偶數玩家的得分記錄)。

          1. 發牌(觸碰P0):程式流程為,轉換成對應的程式碼為
          2. 作答(觸碰P1/P2:程式流程為,轉換成對應的程式碼為
          3. 判斷輸贏(小彼特主板的按鈕A):程式流程為,轉換成對應的程式碼為。
          參考程式碼可按https://reurl.cc/qdOR70下載。教學投影片可由https://reurl.cc/9EOkja下載

          教學活動設計

          1. 敏捷王 採三戰兩勝分組進行競賽。選出最終的年度最佳「敏捷王」。
          2. 搶答機 請將上述的範例程式做適度的修改,並設計十道題目,由紅白兩隊各派十人參賽。主持人念完題目後開始按機搶答。
          3. 心臟病 用四塊小彼特WXYZ模擬四家對戰,並再放置一塊小彼特D來顯示各家翻出的牌。
            一開始按下小彼特D的A按鈕將52張牌平均發給小彼特WXYZ。
            然後由小彼特WXYZ輪流按按鈕A出牌,並顯示在小彼特D上。
            每家出完牌後即開始等候按下按鈕B搶答。
            搶答的先後次序由小彼特D來仲裁。
            (建議使用WiFi來處理五塊小彼特之間的訊息傳遞。根據筆者實測,多塊小彼特通訊會產生信號干擾而導致封包遺失(packet lose)https://reurl.cc/j7kzEn)的窘境。)

          積木指標

          Basic、Input、Logic、Math、Variables

          編程指

          循序結構(sequence structure)判斷結構(decision structure)非同步事件處理(asynchronous event handling)

          硬體指

          鋁箔紙、鱷魚夾。

          参考資料
          1. 六種授權條款

          2020年3月20日 星期五

          [AI] 快樂頌:使用VIA Pixetto視覺感測器之模板匹配(Template Matching)功能

          快樂頌:

          使用VIA Pixetto視覺感測器之模板匹配(Template Matching)功能


          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/

          Mar. 20, 2020
          88x31.png[1]

          難易度

          ★★★☆☆

          主題

          8787內建的AI影像處理(image processing)功能應用實作。

          任務

          石鐘媽為了近來疫情嚴重,家中兩個小寶貝將面臨學校隨時停課而要有家裡蹲的居家照護因應。
          各位讀者,請腦力激盪一下,利用8787來替石鐘媽隨時演奏一曲快樂頌提提神吧?
          利用8787的模板匹配功能來演奏音樂曲目,例如:看到LV標誌播一曲快樂頌。

          材料

          項目 品名 單位 數量
          1 VTS-8787視覺感測器 1
          2 micro USB傳輸線 1
          3 Arduino Nano(FT232晶片,含mini USB傳輸線) 1
          4 mini USB傳輸線 1
          5 Grove – 4x公端杜邦線+母座 to Grove 4pin連接線 1
          6 麵包板 1
          7 無源蜂鳴器 1
          8 杜邦線(公母,10cm以上) 2
          • 如果讀者要將項目3的開發板換成Uno或其他Arduino版本,請自行將項目4的傳輸線做調當的調整。
          • 技術咨詢(手機加Line:https://reurl.cc/Vadax6)。


          造形設計(機構)

          請參考音箱https://reurl.cc/exmDkR)或音樂盒https://reurl.cc/9E54bX)的概念設計作品的外觀。記得將8787及其相關電路的尺寸考量進去。

            功能設計(電路、程式)

            先依照下表及圖1接妥8787、Nano與蜂鳴器的連接線路。請留意,蜂鳴器需接在Nano的數位模擬類比之PWM(Pulse Width Modulation,脈衝寬度調變)腳位(pin)上,例如圖1的~D9。

            Nano
            蜂鳴器
            8787
            D0
            D1
            ~D9
            5V
            GND

            圖1:接線圖。


            在Pixetto Utility上(圖2)選用形狀偵測功能,以此LV商標https://reurl.cc/9E57nn)框選出即將要被識別的最小矩形後再將之套用至8787。可參考拙著《VIA Pixetto視覺感測器大開箱(unboxing):AI開發工具(Development Kits)篇》(https://reurl.cc/Qd6eVO)一文。

            圖2:在Pixetto Utility上選用模板匹配功能。

            接著,在Pixetto Junior上拉出圖3的積木程式。這個程式的邏輯是一開機後先讓蜂鳴器發出一頻率為100 Hz的聲音來做自我測試(self test)
            接著,若8787「看見」前述的LV商標後就播放音效(讀者可利用此簡譜https://reurl.cc/7X37b5)修改成對應的音頻)。否則,就讓蜂鳴器靜音。其中,為了讓8787不致於很快速的重覆識別到LV商標,我們加上變數i以做為旗標(sentinel)控制。

            圖3:Pixetto Junior的Blockly程式碼。

            圖3積木程式自動生成的Arduino程式碼如下所示。

            #include <Arduino.h>
            #include <SmartSensor.h>

            SmartSensor ss(0,1);
            int i;

            void setup() {
              ss.begin();

              pinMode(9, OUTPUT);
              i = 0;
              // D4: yellow (Tx)
              // D5: white (Rx)
              //
              // D0 (Rx): yellow (Tx)
              // D1 (Tx): white (Rx)
              analogWrite(9, 100);
              delay(300);
              analogWrite(9, 0);
            }


            void loop() {
              if (ss.isDetected()) {
              if (ss.getTypeID() == 1) {
              i = i + 1;
              if (i == 1) {
              analogWrite(9, 330);
              delay(300);
              analogWrite(9, 277);
              delay(300);
              analogWrite(9, 262);
              delay(300);
              }
              }
              } else {
              i = 0;
              analogWrite(9, 0);
              delay(300);
              }
            }

            本單元的操作影片https://youtu.be/uXTgHpT16wA 如圖4所示。

            圖4:展示影片。

              教學活動設計

              1. 將前述的LV商標換成Gucci後讓8787再重新識別看看。

                参考資料
                1. 六種授權條款