顯示具有 威盛 標籤的文章。 顯示所有文章
顯示具有 威盛 標籤的文章。 顯示所有文章

2020年4月16日 星期四

[AI] 8787影像故事:誰撿到這抹紅,520(Whoever finds the red, 520)

8787影像故事:

誰撿到這抹紅,520(Whoever finds the red, 520)


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. 16, 2020
88x31.png[1]


難易度★★


主題

老皮的皮夾裡放有一封信https://reurl.cc/lVv93d),據說信中述說著一個美麗的動人故事。這個故事曾經被這位神仙姐姐https://reurl.cc/b57kMl)傳唱過。
在這8787主題課的最後一個單元裡,我們就以紅顏色8787及其週邊硬體盒子設計三個元素替老皮重譜一個屬於曾經的他的主題曲,就姑且
把它喚做:8787的影像故事

任務

老皮的女朋友小派的生日快到了。今年,小派想測試一下小彼特的彼特功練到哪個化境了,就故意以自己生日為由要考考他:「以小彼特小派三元素做出一個生日禮物。」大夥兒也幫幫忙一起破關吧!
(讓8787偵測到人臉後啟動快閃的七彩LED。)

材料

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

    造形設計(機構)

    記得將8787及其相關電路的尺寸考量進去。

      功能設計(電路、程式)

      先依照下表及圖1 [2]接妥8787、Nano與快閃LED的連接線路。

      NanoOLED8787
      D0
      A4SDA
      A5SCL
      5V
      GND短腳(-)



      圖1:接線圖。


      在Pixetto Utility上(圖2)選用人臉偵測功能,讓8787識別並套用之,詳細操作方法可參考拙著《使用VIA Pixetto視覺感測器的辨色功能》(https://reurl.cc/20LR8m)一文。

      圖2:在Pixetto Utility上選用顏色偵測功能。

      接著,在Pixetto Junior上拉出圖3的積木程式的基本架構(稍後我們將手動加上OLED控制的Arduino程式碼)。這個程式的設計邏輯為開機時在setup()的ㄈ字形積木中先初始化接在D0和D1腳接上的8787。
      接著,若8787「看見」紅色(在上一段選用Color Detection功能時會看見紅色物件會被綠框框出,並於左上顯示red(1)的綠字字樣)後就讓Nano板載在D13接腳上的LED閃爍0.3秒後關閉。否則,就將之熄滅。

      圖3:Pixetto Junior的Blockly程式碼。

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

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

      SmartSensor ss(0,1);

      void setup() {
        ss.begin();
        pinMode(13, OUTPUT);
      } //end of setup()

      void loop() {
        if (ss.isDetected()) {
        // red color
        if (ss.getTypeID() == 1) {
        digitalWrite(13, HIGH);
        delay(300);
        }
        } else {
        digitalWrite(13, LOW);
        } //end of if
      } //end of loop()

      匯入OLED的函式庫 如圖5,在Pixetto Studio附的Arduino IDE(預設的路徑為C:\Pixetto\PixettoEditor\arduino)中,依照《Arduino 運用SSD1306 OLED 0.96吋 、0.91吋》(https://reurl.cc/1xGg7Y)一文提到的方式,匯入(import)Adafruit SSD1306Adafruit GFX Library兩隻函式庫(libraries),完成的結果如圖6所示。

      圖5:Pixetto Studio V1.0.1內含有V1.8.9版rduino IDE。

      圖6:匯入OLED控制的相關函式庫。


      Arduino IDE的幾個藏身處(存放路徑)
      檔案總管下我們使用暴力法從 C:\ 鉅細靡遺地搜出以下資訊:
      1. Pixetto Studio附帶:存在 C:\Pixetto\PixettoEditor\arduino 下,版次為V1.8.9(在V1.1.0版的Pixtto Studio中)。
      2. 自行下載安裝:預設路徑為 C:\Program Files (x86)\Arduino ,我們目前安裝的版本為V1.8.10。
        • 匯入的外部函式庫會自動存到 C:\Users\User\Documents\Arduino\libraries 。
      3. Windows App版:安裝在 C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.33.0_x86__mdqgnx93n4wtt ,我們裝的版本是V1.8.12。


      修改標頭檔
      根據《0.96寸 藍色 白色 IIC通信 小OLED顯示屏模塊 51單片機》(https://reurl.cc/9ERZLa)一文,將路徑「C:\Users\User\Documents\Arduino\libraries」下的「Adafruit_SSD1306.h」修改為正確的顯示尺寸:

           #define SSD1306_128_64
      //   #define SSD1306_128_32


      調整OLED輸出 參考《Coordinate System and Units》(https://reurl.cc/kdaVbr)內容說明,將《Arduino 運用SSD1306 OLED 0.96吋 、0.91吋》(https://reurl.cc/1xGg7Y)內的參考程式的testdrawstyles()函數修改如下:

      void showText(char text[]) {
        display.clearDisplay();
        display.setTextSize(5);             // 設定文字大小
        display.setTextColor(1);        // 1:OLED預設的顏色(這個會依該OLED的顏色來決定)
        display.setCursor(30,18);             // 設定起始座標
        display.print(text);        // 要顯示的字串
        display.display();                  // 要有這行才會把文字顯示出來
        //delay(1000);
      }


      加在一起 經過以上從Pixetto Junior自動生成程式架構、匯入Adafruit原廠的OLED函式庫及修改輸出顯式後可得到如下的完整程式:


      #include <SPI.h>
      #include <Wire.h>
      #include <Adafruit_GFX.h>
      #include <Adafruit_SSD1306.h>

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

      SmartSensor ss(0,1);

      #define SCREEN_WIDTH 128 // OLED 寬度像素
      #define SCREEN_HEIGHT 64 // OLED 高度像素

      // 設定OLED

      #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
      Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

      void setup() {
        pinMode(13, OUTPUT);
        digitalWrite(13, HIGH);
        delay(500);
        digitalWrite(13, LOW);

        ss.begin();


        // 偵測是否安裝好OLED了

        if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 一般1306 OLED的位址都是0x3C
          Serial.println(F("SSD1306 allocation failed"));
        } //end of if

        // 顯示Adafruit的LOGO,算是開機畫面

        display.display();
        delay(1000); // 停1秒

        // 清除畫面

        display.clearDisplay();
      } //end of setup()

      void loop() {
        if (ss.isDetected()) {
          if (ss.getTypeID() == 1) {
            digitalWrite(13, HIGH);
            showText("520");
            //delay(300);
          }
        } else {
          showText("");
          display.display();
          digitalWrite(13, LOW);
        } //end of if
      } //end of loop()

      void showText(char text[]) {

        display.clearDisplay();
        display.setTextSize(5);             // 設定文字大小
        display.setTextColor(1);        // 1:OLED預設的顏色(這個會依該OLED的顏色來決定)
        display.setCursor(30, 18);            // 設定起始座標
        display.print(text);        // 要顯示的字串
        display.display();                  // 要有這行才會把文字顯示出來
      }// end of showText()

      最後,我們在圖7的Pixetto Junior內選用後就可以開開心心了!



      圖7:在Pixetto Junior內手動編輯Arduino程式碼上傳到Nano

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

      圖8:展示影片。

        教學活動設計

        1. 加掛一個MP3播放器模組https://reurl.cc/E7o5XA),使得8787看到紅色後可以一邊播放《Whoever Finds This , I Love You》一邊在OLED顯示歌詞https://reurl.cc/Kk01MR),或一段話、一個點陣圖https://reurl.cc/ZOWLXV)。

          2020年4月5日 星期日

          [AI] 一見你就閃:使用VIA Pixetto視覺感測器之人臉偵測(Face Detection)功能

          一見你就閃:

          使用VIA Pixetto視覺感測器之人臉偵測(Face 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. 5, 2020
          88x31.png[1]

          難易度★★★☆☆


          主題

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

          任務

          小彼特女朋友小派的生日快到了。今年,小派想測試一下小彼特的彼特功練到哪個化境了,就故意以自己生日為由要考考他:「以小彼特我(小派)三元素做出一個生日禮物。」大夥兒也幫幫忙一起破關吧!
          (讓8787偵測到人臉後啟動快閃的七彩LED。)

          材料

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

            造形設計(機構)

            請參考禮物盒子https://reurl.cc/ZObNQV)或小造型盒https://reurl.cc/lVe49A)概念設計作品外觀。記得將8787及其相關電路的尺寸考量進去。

              功能設計(電路、程式)

              先依照下表及圖1接妥8787、Nano與快閃LED的連接線路。

              Nano 快閃LED 8787
              D0
              D1
              D7 長腳(+)
              5V
              GND 短腳(-)


              圖1:接線圖。


              在Pixetto Utility上(圖2)選用人臉偵測功能,讓8787識別並套用之(例如:以這個AI生成的偽人臉https://reurl.cc/NjRLAQ)來做為待識別影像),詳細操作方法可參考拙著《VIA Pixetto視覺感測器大開箱(unboxing):AI開發工具(Development Kits)篇》(https://reurl.cc/Qd6eVO)一文。

              圖2:在Pixetto Utility上選用人臉偵測功能。

              接著,在Pixetto Junior上拉出圖3的積木程式。這個程式的邏輯是一開機後先初使化8787。
              接著,若8787「看見」前述的人臉後就讓接在Nano D7接腳上的快閃七彩LED閃爍0.5秒。否則,就將之熄滅。

              圖3:Pixetto Junior的Blockly程式碼。

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

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

              SmartSensor ss(0,1);

              void setup() {
                ss.begin();
                pinMode(7, OUTPUT);
              } //end of setup()

              void loop() {
                if (ss.isDetected()) {
                   if (ss.getTypeID() == 0) {
                digitalWrite(7, HIGH);
                delay(500);
                }
                } else {
                digitalWrite(7, LOW);
                } //end of if
              } //end of loop()

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

              圖4:展示影片。

                教學活動設計

                1. 參考《快樂頌:使用VIA Pixetto視覺感測器之模板匹配(Template Matching)功能》(https://reurl.cc/lVe479)一文的做法接上蜂鳴器,使得8787看到小派後邊閃爍LED邊唱歌。

                  参考資料
                  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. 六種授權條款