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. 六種授權條款

              2020年3月19日 星期四

              [AI] 心情指數:使用VIA Pixetto視覺感測器之形狀偵測(Shape Detection)功能

              心情指數:

              使用VIA Pixetto視覺感測器之形狀偵測(Shape 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/

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

              難易度

              ★★★☆☆

              主題:人機互動

              生我者父母,知我者…?如果AIread our mind那該有多好呢?(請參考 https://reurl.cc/MddgmL 和 https://reurl.cc/Y66br0 這兩篇的20種解釋)。

              任務

              請設計一款能顯示今日心情指數(blue Monday、生人勿近…)的小燈來點亮你我心中那盞光明燈!
              利用8787的形狀偵測功能來觸發燈條以閃爍不同顏色。

              材料

              項目品名單位數量
              1VTS-8787視覺感測器1
              2micro USB傳輸線1
              3Arduino Nano(FT232晶片,含mini USB傳輸線)1
              4mini USB傳輸線1
              5Grove – 4x公端杜邦線+母座 to Grove 4pin連接線1
              6麵包板1
              7WS2812B燈條1

                • 如果讀者要將項目3的開發板換成Uno或其他Arduino版本,請自行將項目4的傳輸線做調當的調整。
                • 技術咨詢(手機加Line:https://reurl.cc/Vadax6)。

                造形設計(機構)

                為自己的創作小物https://reurl.cc/AqgWG3)加上心情顏色https://reurl.cc/AqgWQK),例如萌萌橘、鎮定藍…。

                  功能設計(電路、程式)

                  先依照下表及圖1接妥8787、Nano、燈條與電池盒雙電源共地的連接線路。若僅作功能測試,可以將燈條直接使用Nano上的5V電源,以省去準備外接電源的功夫。

                  NanoWS2812B8787
                  D0
                  D1
                  D8DIN
                  5V5V
                  GNDGND

                  圖1:接線圖。


                  在Pixetto Utility上(圖2)選用形狀偵測功能後,將之套用至8787。

                  圖2:在Pixetto Utility上選用形狀偵測功能。

                  接著,在Pixetto Junior上拉出圖3的積木程式。這個程式的邏輯是當8787識別出圓形時就讓Nano板載D13腳位的SMD LED點亮;若為矩形就關閉。其中,點亮LED將於最後的Arduino程式中改為燈條的顏色顯示。

                  圖3:Pixetto Junior的Blockly程式碼。

                  在進行最後一個步驟前,先將燈條的Arduino函數庫https://reurl.cc/j7qZ8n)加到Pixetto Junior中(預設路經為C:\Pixetto\PixettoJunior\arduino\libraries)。然後再將以下標示底線用來控制燈條的指令(初始化綠光、圓形:紅光、矩形:藍光)加到圖3自動產生的Arduino程式碼中。

                  #include <Adafruit_NeoPixel.h>


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

                  SmartSensor ss(0,1);

                  #define PIN 8 //Which pin on the Arduino is connected to the NeoPixels? 
                  #define NUMPIXELS 6 // How many NeoPixels are attached to the Arduino?

                  // When setting up the NeoPixel library, we tell it how many pixels,
                  // and which pin to use to send signals. Note that for older NeoPixel
                  // strips you might need to change the third parameter -- see the
                  // strandtest example for more information on possible values.
                  Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

                  void setup() {
                    ss.begin();

                    pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
                    pixels.fill(0x00FF00, 0, 6);
                    pixels.show();  
                    delay(500);

                    pixels.clear(); // Set all pixel colors to 'off'  
                    pixels.show();  
                  } //end of setup()

                  void loop() {
                    if (ss.isDetected()) {
                      if (ss.getTypeID() == ss.SHAPE_ROUND) {
                          pixels.fill(0xFF0000, 0, 6);
                          pixels.show();  
                      } else if (ss.getTypeID() == ss.SHAPE_RECTANGLE) {
                          pixels.fill(0x0000FF, 0, 6);
                          pixels.show();  
                      } //end of if
                    } //end of if
                  } //end of loop()

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

                    圖4:展示影片。

                      教學活動設計

                      1. 讓8787看到圓形時閃流水燈(https://reurl.cc/N66gV5樣式(pattern)(圖5),看到矩形時閃霹靂燈(https://reurl.cc/9XXqgX)樣式(圖6)。

                        圖5:燈條的流水燈樣式。


                        圖6:燈條的霹靂燈樣式。

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