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