Category Archives: 物聯網

[教學文] What!智能寶比可遙控!!沒錯,用超級搭檔LinkIt 7697 + Robot Shield達到(文末有彩蛋喔)

作者/攝影

文:Mason Chen (Mason亦為遙控智能寶比的作者,特此致謝!)

圖:Mason Chenfreepik (主題圖片背景)

文字潤飾:CAVEDU 宗諭

文章分類教學技術文
時間

成本

難度

材料表
  • LinkIt 7697*1

  • Robot Shield*1

  • 寶工智能寶比*1

  • 用來遙控的手機 *1

近來,不少Maker皆喜愛把現成的套件、模組加以改裝,置入開發板,例如LinkIt 7697、Arduino系列⋯⋯等等,使改裝後的套件、模組有更、更聰明的應用。比如之前我門曾專文介紹過的Wall-E機器人,便是一個很好的例子。

 

接著這股趨勢,本文所要介紹的,是由Mason Chen大大所改裝,可用手機的低功耗藍牙遙控的AI智能寶比。

 

寶工(Pro’s Kit)出品的「AI智能寶比」是一款智慧型機器人,能與8歲以上的小朋友一起互動、遊玩。它配有紅外線感應器,因此具備避障的功能,經過Mason的改裝後,把原先的紅外線感應玩法,改換成以手機的低功耗藍牙( BLE )進行遙控。

圖1 卡哇伊的智能寶比

 

小知識:什麼是低功耗藍牙(Bluetooth Low Energy,簡稱BLE)?

低功耗藍牙是一種個人區域網路技術,多應用於醫療保健、運動健身、家庭娛樂⋯⋯等領域。顧名思義,低功耗藍牙跟經典藍牙相比,目的在於保持同等通訊範圍的同時,顯著降低功耗及成本。根據藍牙技術聯盟(SIG)預測,至2018年,高於90%有藍牙的智慧型手機將支援低功耗藍牙。

 

接下來,我們就要進到硬體改裝部分:

 

Step1:把寶比的頭部拆下來,並且以斜口鉗或適當工具,把原先的電池檔板破壞掉。這部分會需要花點時間,且要小心處理,只破壞裏面,外殼要保留好。 處理完後可試擺LinkIt 7697與MiniPlan出品的Robot Shield,看看是否可以完全置入。

圖2

 

圖3

 

圖4

 

Step2:把原先的馬達插頭,按照圖5中所標示的,連接至 Robot Shield 中。

圖5

 

Step3:再把寶比的頭部小心地裝回去。這樣,硬體部分就完成了。

 

再來,是軟體開發部分:

Step1:我們使用 LinkIt 7697 arduino 進行開發。

  • 設定好Arduino IDE的環境,並燒錄已經寫好的程式至LinkIt 7697 中。
圖6

 

Step2:手機端請下載LinkIt Remote APP

  • 請打開手機藍芽,以及Robot Shield的電源。
  • 開啟 LinkIt Remote APP,順利的話,便可以找到已改裝好的寶比。
圖7

 

  • 按住Joystick移動,便可遙控寶比了。
圖8

 

文末彩蛋:透過Scratch 3.0遙控智能寶比

還記得之前的一篇文章,教大家運用Scratch 3.0連接micro:bit嗎?在Masen Chen大大的努力下,現在Scratch 3.0也可連接LinkIt 7697,進而控制智能寶比囉!其基本原理仍是運用Scratch Link連接Scratch 3.0與LinkIt 7697,然而,因Scratch 3.0並不支援LinkIt 7697,所以在運用Scratch Link之外,LinkIt 7697的韌體及Scratch 3.0上的指令積木皆必須重寫。至於如何撰寫、操作,就請各位讀者多跟Mason Chen大大交流了。

 

備註:若想購買相關開發板,請點這裡,謝謝。

 

相關文章

[教學文] 當Scratch 3.0連接上micro:bit 驚人的創意產生了⋯⋯

作者/攝影

撰寫:宗諭

圖片:freepik

文章分類教學技術文
時間1hr
成本

材料表
  • micro:bit*1(如欲購買,請洽機器人王國

  • USB2.0 A公 to Mini-B/公傳輸線*1

之前阿吉老師曾拍攝過一段影片,也同步發表了一篇文章,向大家解說如何運用Scratch 3.0介面連接LEGO EV3機器人,獲得許多讀者的迴響。因此,CAVEDU教育團隊再接再厲,將透過本文跟大家分享,如何運用Scratch 3.0介面連接時下最夯的micro:bit。一起來操作吧!

 

Step1:點選程式左下角的「擴充功能」

圖1

 

Step2:在擴充功能頁面中,點選「micro:bit」。

圖2

 

Step3:若您首次嘗試用Scratch 3.0連接micro:bit,將跳出一個視窗,詢問:(1)確定已經安裝並執行Scratch Link;(2)檢查藍牙是否開啟。直接點選「?幫助」即可。

圖3

 

Step4:根據您電腦的作業系統是Windows或macOS,下載並安裝適合的「Scratch Link」。筆者的電腦是Macbook air,但在Windows作業系統上的操作步驟也是大同小異的。

圖4 點擊藍色按鈕,下載並安裝「Scratch Link」。

 

Step5:安裝好「Scratch Link」後,在您的電腦的程式集中點擊Scratch Link的圖標,啟動Scratch Link。

圖5 啟動Scratch Link

 

如果Scratch Link有成功被啟動的話,應該會有小圖標顯示在工具列上,如圖6。

圖6

 

Step6:將micro:bit連接至電腦

圖7

 

Step7:接下來,要下載Scratch micro:bit HEX檔案。請點擊圖中箭頭指示處。

圖8

 

小知識:HEX檔案是什麼?

HEX文件檔案是嵌入式軟體開發中,經常可見的數據格式,常被用來保存單晶片或其它處理器的目標程序代碼。而HEX文件包含了地址資訊,所以在燒入或下載HEX檔案時,一般都不需要使用者指定地址資訊。

 

Step8:然後,我們要把剛剛下載的HEX檔案,拖曳至micro:bit中,如圖9。

圖9

 

Step9:讓我們回到Scratch 3.0編輯器,選擇「擴充功能」,點選「micro:bit」。

圖10

 

Step10:會看到圖11的畫面,按下「開始連線」。

圖11

 

這樣就連線成功了,請參考圖12。接下來,讓我們回到Scratch 3.0編輯器進行一點小測試。

圖12 連線成功!請點選「回到編輯器」。

 

回編輯器後,可看見指令積木區當中,多了一個micro:bit指令區,見圖13。

圖13

 

然後我們拉出兩個指令積木:「when A button pressed」及「display Hello!」,然後組合起來,如圖14。

圖14

 

現在,按一下micro:bit上的A按鈕,是不是看到LED矩陣閃爍出「Hello!」呢?接下來,就是讀者們發揮創意的時間囉!

 

相關文章

[Micro:bit] 一次學Micro:bit就有概念!?是的,請看這一篇(三)

作者/攝影

陳怡璇

文章分類教學技術文
時間20mins
成本
難度**(1~10)
材料表
  • Micro:bit

  • (如欲購買,請洽機器人王國商城

  • Micro:bit BOSON擴充板

  • BOSON g 聲音感測器(Sound Senser)

  • BOSON 運動感測器(Motion Senser)

  • BOSON 彩色LED燈條(Multicolor LED String Light)

  • (如欲購買,請洽機器人王國商城

本篇中,我們要向讀者們介紹的是音樂盒及彩色LED燈條。

 

第一題:智慧音樂盒

Step1

圖1

 

Step2

圖2

 

第二題:色彩繽紛的LED燈條

任務一:

Step1

圖3

 

 

圖4

 

Step2

圖5

 

Step3

圖6

 

圖7

 

任務二:

Step1

圖8

 

Step2、3:這裡要注意的是,顏色的表示是色像環,所以若範圍輸入0至360,會全部顯示紅色;0至0、360至360也是全紅色。但如果是0至340,就會是有紫紅色的彩虹。

圖9

 

 

完成以後,音樂盒可以試試看自己編曲,LED則可以依照色環進行顏色調整,或是加入前一篇使用過的感測器進行改變。

 

相關文章

[CAVEDU化學小教室] pH值知多少?運用類比式酸鹼感測模組,讓滴定實驗更精準!!

照片改編自pixabay下載的兩張圖片,蒙允免費使用,特此致謝。

炎炎夏日,小編手刀衝進公司附近的7-11,準備好好解一解身體的渴。然而,打開擺放飲料的冰櫃才發現,原來光是礦泉水就有那麼多品牌,而且許多都標榜自己是鹼性水(重點是賣得比較貴)。但是,究竟這些礦泉水是否真為鹼性呢?所以啦,今天CAVEDU化學小教室第一天開張,就是要教讀者們「酸鹼滴定實驗」,這樣就可以測量所喝的飲料,到底是酸還是鹼。

作者/攝影

撰寫:宗諭

攝影:鈺莨、pixabay

文章分類
時間
成本
難度
材料表
  • 蒸餾水

  • 筆記型電腦*1

  • LinkIt 7697或Arduino系列開發板*1

  • 類比式酸鹼感測模組*1

  • 滴定管*1

  • 錐形瓶*1

什麼是酸鹼滴定實驗?

酸鹼滴定實驗的主要原理,主要是利用已知濃度的鹼或酸溶液,透過滴定的方式,測量出未知濃度溶液的酸鹼值。

圖1

 

實驗會使用哪些裝置?

1.滴定管

裝酸性溶液時,多使用玻璃材質;盛裝鹼性溶液時改用鐵氟龍材質,因鹼性溶液會腐蝕玻璃。

 

2.錐形瓶/燒杯

為什麼用錐形瓶會更好呢?因為錐形瓶形狀上窄下寬,當滴入酸或鹼溶液時,液體比較不會噴濺至外面。若是沒有錐形瓶,亦可使用燒杯,但要特別注意液體的噴濺。

 

3.類比式酸鹼感測模組

在一般酸鹼滴定實驗中,會在下方的錐形瓶或燒杯中加入酸鹼指示劑,作用是當酸鹼指示劑變色時,即達到「滴定終點」,表示氫離子(H+)的ml數剛好等於氫氧根離子(OH-)的ml數,完全反用成為水。然而,在此我們使用「類比式酸鹼感測模組」,也是這次實驗的特點。當我們使用「類比式酸鹼感測模組」,便能透過開發板及筆電,更精準測量出每一段實驗時間內pH值的變化。同時,由於我們測量出的是明確的數字,所以,在記錄上會更加精準,並可作為日後實驗的參考。(若欲購買類比式酸鹼感測模組,請洽機器人王國。)

圖2

 

4.LinkIt 7697開發板或Arduino系列開發板

主要是作為感測裝置的類比式酸鹼感測模組,必須連接至開發板,開發板再連接至電腦,才能將感測到的酸鹼值上傳至電腦進行觀測。

 

5.筆記型電腦

作為觀測酸鹼值之用。須在筆電上安裝好Arduino IDE,因為我們會透過這個程式,打開Serial port監測酸鹼值。

 

6.蒸餾水

主要用來清洗實驗器具

 

實驗步驟:

1.以鹼滴定酸:

  • 滴定管中置入鹼液;

  • 錐形瓶/燒杯中置入酸液;

  • 把類比式酸鹼感測模組連接好開發板及電腦;

  • 將類比式酸鹼感測模組置入錐形瓶/燒杯中的溶液;

  • 觀察pH值的變化,以及當達到滴定終點pH 7時,記錄下滴定液體體積為多少。

圖3

 

2.以酸滴定鹼:

  • 滴定管中置入酸液;

  • 錐形瓶/燒杯中置入鹼液;

  • 把類比式酸鹼感測模組連接好開發板及電腦;

  • 將類比式酸鹼感測模組置入錐形瓶/燒杯中的溶液;

  • 觀察pH值的變化,以及當達到滴定終點pH7時,記錄下滴定液體體積為多少。

圖4

 

實驗結果:

1.以鹼滴定酸:

記錄下滴定過程中pH值的變化,可得出類似下面的圖表:

圖5

 

2.以酸滴定鹼:

記錄下滴定過程中pH值的變化,可得出類似下面的圖表:

圖6

 

需要注意的事情:

  1. 類比式酸鹼感測模組是利用置入pH 7的穩定溶液中,進行參數校正。

  2. 水溫要設定。如果水溫沒有設定好,pH值會偏移。所以在進行滴定實驗時,需要準備一個比較準的溫度計。

 

經過這次酸鹼滴定實驗,相信讀者們對於酸鹼混合時的現象,以及當加入的鹼性液體或酸性液體體積漸多時,pH值的變化情形有更深入了解。下一次,若是有富教育意義的化學實驗,我們再跟大家分享。See you!

 

相關文章

[Micro:bit] 一次學Micro:bit就有概念!?是的,請看這一篇(二)

本文沿續上一篇「一次學Micro:bit就有概念!?是的,請看這一篇(一)」,主要講述以下三個專題:電子蠟燭、電子風扇及自動門。第一個專題著重在麥克風感測器的使用;後兩個專題則是馬達的應用。

作者/攝影

陳怡璇

文章分類教學技術文
時間10mins
成本
難度*(1~10)
材料表

第一題:電子蠟燭

任務一

Step1:

圖1

 

Step2:

圖2

 

Step3:

圖3

 

 

任務二

Step1:

圖4

 

Step2:

圖5

 

 

第二題:電子風扇

任務一

Step1:

圖6

 

Step2:

圖7

 

Step3:

圖8

 

 

任務二

Step1:

圖9

 

Step2:

圖10

 

 

第三題:自動門

Step1:

圖11

 

Step2:

圖12

 

Step3:

同電子蠟燭第一步(圖1)

 

Step4:

圖13

 

 

完成以後,可以試著加上分配模組(split),讓二個輸出配合在一起,也就是以一個輸入同時控制兩個輸出。例如,可以用LED和馬達組合在一起,並搭配上旋鈕。

 

相關文章

 

[翻譯] 2018.08.02-根據MakeCode Team,新版micro:bit編輯器將有6大新功能! !

原文作者

MakeCode team

紀錄攝影

MakeCode team

翻譯宗諭訪問地點
訪問時間

原文刊登日期:2018年7月23日

前言

MakeCode團隊近來持續不斷努力,爲要完成micro:bit編輯器的更新。讀者們可在這裡https://makecode.microbit.org/beta ,進行事先預覽。

 

micro:bit編輯器的更新,目前仍在Beta版階段,並且只包括增加在現有程式上的改變及調整,目的是不影響或破壞任何使用者的既有程式。所以,當發佈更新時,我們仍會為還沒有準備好使用新版本的使用者,繼續支援先前的版本。

 

我們希望讀者們試試看Beta版,並讓我們知道您的想法!若您發現任何問題,請將問題記入GitHub:https://github.com/Microsoft/pxt-microbit/issues

 

此外,若讀者們有任何評論、建議及回饋,請參與團隊溝通平台Slack上的micro:bit社群: https://tech.microbit.org/get-involved/where-to-find/

 

新功能

現在,就讓我們介紹一些新功能:

1.首頁(Home Page):我們一直想藉由創造一套手把手、步驟接步驟的教學文件,以及在網路上更容易搜尋到的範例,讓開始使用micro:bit編輯器的經驗更加直覺化。所以,我們移除了先前在「project」選單中的所有內容,並把這些內容放在新的首頁中,以網頁照片藝廊的方式呈現。

圖1 micro:bit編輯器新的首頁

 

若您想要略過首頁,您可直接進入編輯器,網址:https://makecode.microbit.org/beta#editor (小提醒:只要在首頁的網址後面,加上#editor即可)。

 

2.更新指令積木的使用者介面:也許您已經注意到,我們的指令積木看起有點不一樣了!沒錯,為了與我們團隊所維運的其它編輯器一致,我們把使用者介面,從Blockly的介面更新成新的Scratch積木使用者介面(實際上,新的Scratch積木使用者介面是Blockly和Scratch的組合)。新的使用者介面有一些很讚的更新,特別是:

 

  • 指令積木變大了!讓觸控式螢幕裝置的使用者,更容易以手指拖拉積木。同時,他們運用積木的空間也更有效率。
圖2 新版
圖3 舊版

 

 

 

 

 

 

 

 

 

 

 

 

  • 不同的資料類型以不同的積木形狀呈現:特別是布林值的資料類型,以六角型呈現,而數字和字串則以圓形呈現。
圖4 不同資料型態以不同形狀的積木呈現

 

  • 對於在哪個位置,指令積木可組合在一起,有更清楚的指示。另外,增加了一個明顯的「卡入到位」動作。
圖5 對於積木的組合,有更清楚指示。

 

3.小齒輪,安息吧!:您可能隨著If Then Else積木使用小齒輪,以增加額外的條件。但小齒輪卻是個尷尬的介面,因為大多數人都不知道該如何使用。所以,當使用者想要增加或移除條件時,我們採用更直覺、在指令積木上的「+」、「-」圖標,取代了原本的小齒輪。

圖6 原本用來增加額外條件的小齒輪

 

圖7 現在以積木上「+」、「-」圖標代替。

 

4.創造變數:根據使用者的回饋,我們試著讓創造變數的過程更加清楚。現在,您將明確地點擊「變數指令區」中的「Make a Variable……」按鈕,以創造一個新的變數,並爲這個變數命名。然後,這個變數會與變數指令區中的其它積木建立關聯。

圖8 創造變數的過程更清楚

 

5.廣播積木(Radio blocks):我們針對一些廣播API做了小小的改變,好讓它們使用起來更簡單。大部分人不會注意到這些改變,但若您是位進階的廣播功能使用者,您也許會注意到,我們已重新安排廣播封包被接收的方式。功能都還在,但透過一次性使用的積木,讓廣播功能更加明確。

 

6.浮點:這大概是本次更新最大的改變。所有的數學老師們,準備揚聲歡呼吧!新版的編輯器支援浮點數運算,這可是使用者們的大力要求呢!因為之前的版本只支援整數,但現在3/2真的等於1.5,而不是產生出整數1。

圖9 新版的micro:bit編輯器支援浮點數運算

 

小提醒:關於搬遷專案

在此,我們提醒每位使用者,您在新的Beta版編輯器創作的程式,在舊版編輯器中將無法使用。然而,當您首次造訪新的Beta版編輯器,您在舊版編輯器中創作的專案,將被自動拷貝至新的Beta版編輯器,讓您可繼續工作。然而,經過這次搬遷後,若您回到舊版編輯器,您之前的專案仍存在。但若您在舊版編輯器中修改這些專案,它們將不會被自動拷貝至新的Beta版編輯器。換句話說,自動搬遷是個一次性的過程,只發生在您首次造訪新的Beta版編輯器。之後,您的舊專案和新專案將各自獨立。

圖10

 

聽起來好像有點饒口,總之,祝大家使用愉快!

 

備註:中文翻譯圖文經MakeCode團隊授權,特此致謝!原文請見:https://makecode.com/blog/microbit/v1-beta

 

相關文章

[介紹文]以LinkIt7697搭配LinkIt Remote打造智慧門禁系統 6項功能、6大特色一次帶您看!!

作者/攝影

智慧門禁系統作者:曾希哲老師

文字整理:CAVEDU 宗諭

圖片:曾希哲老師、pixabay

文章分類介紹文
時間

成本
難度
材料表
  • LinkIt 7697*1(若欲購買,請洽機器人王國商城)

  • RC522 RFID讀取器*1

  • 電磁鎖*1

  • LCD*1

  • 蜂鳴器*1

  • Mifare S50 Card*1

  • 智慧型手機*1

因長期致力於科技教育,CAVEDU團隊認識許多老師,但慢慢地我們才發現,教師當中真是人才濟濟,高手藏身於教育界。對科技、程式教育,有熱忱又富能力的老師其實相當多,例如熱衷於四軸飛行器教學的洪雅慧老師,還有對於Micro:bit深有研究的劉正吉老師⋯⋯等等,而花蓮的曾希哲老師也是其中之一。

圖1 各路高手在教師界

 

若仔細瞧瞧曾希哲老師的臉書頁面,上面幾乎都是他各種學習程式、物聯網、開發板的心得、照片及影片,例如,他最近就在玩LinkIt 7697的擴充板,不斷發出新的貼文,真感受到他的樂此不疲!為將所學得的技術充分教導給學生,曾老師也架設一個網站「曾希哲的學習天地」,上面有他學習物聯網、LinkIt 7697、Arduino⋯⋯等等心得,讀者們記得抽空去逛逛喔!

圖2 曾希哲老師的個人網站

 

本文的主角是曾希哲老師一手打造的「智慧門禁系統」。當初,曾老師有做過RFID的門禁系統,並於2017年以此系統參加過「花蓮創客賽物聯網組」,卻一直找不著適合的按鍵輸入方式。

 

因此,曾希哲老師便逐漸萌生以手機當作藍牙鍵盤的想法,並想透過LinkIt Remote實現。後來,他在手機上實做出藍牙鍵盤,並加入原有的門禁系統中,再把幾項一直想做出的功能實現,最後「智慧門禁系統」就大功告成。(噹啷~~)

圖3 智慧門禁系統

 

讓我們先看看曾希哲老師親自錄製的介紹影片:

 

這個「智慧門禁系統」包含哪些單元呢?請見下圖:

圖4

 

智慧門禁系統的功能與特色

系統是以LinkIt 7697為核心建立,有以下幾項功能:

  1. 可用RFID刷卡輸入

  2. 可以藍牙鍵盤輸入

  3. LCD顯示輸出

  4. 蜂鳴器輸出

  5. 若使用者兩次輸入錯誤,系統就會透過Line即時訊息通知屋主。

  6. 假設使用者受威脅必須開門,可輸入威脅密碼,門一樣會打開,但會在威脅者無法察覺情況下,以Line即時訊息通知屋主,使屋主能盡快報警。

 

這個系統又有哪些特色呢?

  1. 以手機作為藍牙鍵盤,使用起來相對方便。

  2. 使用者受威脅需開門時,可使用威脅密碼。

  3. 同時使用藍牙與WiFi功能,LinkIt 7697是以IFTTT網路服務,透過Wi-Fi傳送Line即時訊息。

  4. 不需使用App Inventor撰寫手機程式,只要撰寫7697程式即可。

  5. 使用LinkIt 7697 BlocklyDuino,程式撰寫比較容易。

圖5

 

圖6 圖5、6為曾希哲老師運用LinkIt 7697 BlocklyDuino,所撰寫的程式碼。

 

6.可透過這個系統,學習RFID的概念。

 

進一步交流

關於如何自造智慧門禁系統,應是因製作步驟較複雜,曾希哲老師只簡單提及,就是拆解系統各部分功能,然後進行各單元製作、測試,逐步組成為一個完整系統。若讀者閱畢本文,有興趣進一步了解此系統,歡迎直接至曾希哲老師的臉書頁面與他交流。

 

前文提及,曾老師設計、製作此系統很重要的原因,是為了實踐把手機當成藍牙鍵盤。而他是用BlocklyDuino撰寫藍牙鍵盤的程式,若讀者想更多了解,可點此下載原始程式碼。

 

結語

總之,曾希哲老師目前正積極測試LinkIt 7697擴充板的各式功能,若後續有任何消息、成果,CAVEDU教育團隊也會成為報馬仔,透過技術部落格或臉書粉絲專頁,跟讀者們分享,敬請期待!

 

附錄:

曾希哲老師以BlocklyDuino撰寫藍牙鍵盤的程式碼

/*
 * Generated using BlocklyDuino:
 *
 * https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt
 *
 * Date: Wed, 27 Jun 2018 18:58:00 GMT
 */

#include <LRemote.h>

int SetPasswd;

int PhonePasswd;

int c;

String S1;

String S2;

String S3;

String S4;

String InputPsaawd;

String OpeningDoor;

String PasswdError;

LRemoteLabel label1;
LRemoteButton button7;
LRemoteButton button8;
LRemoteButton button9;
LRemoteButton button4;
LRemoteButton button5;
LRemoteButton button6;
LRemoteButton button1;
LRemoteButton button2;
LRemoteButton button3;
LRemoteButton button0;
LRemoteButton button10;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);
    label1.setPos(0, 0);
    label1.setText("Input Password");
    label1.setSize(3, 1);
    label1.setColor(RC_ORANGE);
    LRemote.addControl(label1);

    button7.setPos(0, 1);
    button7.setText("7");
    button7.setSize(1, 1);
    button7.setColor(RC_BLUE);
    LRemote.addControl(button7);

    button8.setPos(1, 1);
    button8.setText("8");
    button8.setSize(1, 1);
    button8.setColor(RC_GREEN);
    LRemote.addControl(button8);

    button9.setPos(2, 1);
    button9.setText("9");
    button9.setSize(1, 1);
    button9.setColor(RC_BLUE);
    LRemote.addControl(button9);

    button4.setPos(0, 2);
    button4.setText("4");
    button4.setSize(1, 1);
    button4.setColor(RC_GREEN);
    LRemote.addControl(button4);

    button5.setPos(1, 2);
    button5.setText("5");
    button5.setSize(1, 1);
    button5.setColor(RC_BLUE);
    LRemote.addControl(button5);

    button6.setPos(2, 2);
    button6.setText("6");
    button6.setSize(1, 1);
    button6.setColor(RC_GREEN);
    LRemote.addControl(button6);

    button1.setPos(0, 3);
    button1.setText("1");
    button1.setSize(1, 1);
    button1.setColor(RC_BLUE);
    LRemote.addControl(button1);

    button2.setPos(1, 3);
    button2.setText("2");
    button2.setSize(1, 1);
    button2.setColor(RC_GREEN);
    LRemote.addControl(button2);

    button3.setPos(2, 3);
    button3.setText("3");
    button3.setSize(1, 1);
    button3.setColor(RC_BLUE);
    LRemote.addControl(button3);

    button0.setPos(0, 4);
    button0.setText("0");
    button0.setSize(1, 1);
    button0.setColor(RC_GREEN);
    LRemote.addControl(button0);

    button10.setPos(1, 4);
    button10.setText("Clear");
    button10.setSize(2, 1);
    button10.setColor(RC_ORANGE);
    LRemote.addControl(button10);
  LRemote.begin();
  SetPasswd = 10;
  PhonePasswd = 0;
  c = 0;
  digitalWrite(LED_BUILTIN, LOW);
  S1 = "*";
  S2 = "**";
  S3 = "***";
  S4 = "****";
  InputPsaawd = "Input Password";
  OpeningDoor = "Opening Door";
  PasswdError = "Password Error";
}


void loop()
{
  LRemote.process();
  if (button0.isValueChanged()) {
    if (button0.getValue() == 1) {
      c = c + 1;
      if (c == 1) {
        PhonePasswd = PhonePasswd + 1;

      }

    }

  } else if (button1.isValueChanged()) {
    if (button1.getValue() == 1) {
      c = c + 1;
      if (c == 2) {
        PhonePasswd = PhonePasswd + 2;

      }

    }
  } else if (button2.isValueChanged()) {
    if (button2.getValue() == 1) {
      c = c + 1;
      if (c == 3) {
        PhonePasswd = PhonePasswd + 3;

      }

    }
  } else if (button3.isValueChanged()) {
    if (button3.getValue() == 1) {
      c = c + 1;
      if (c == 4) {
        PhonePasswd = PhonePasswd + 4;

      }

    }
  } else if (button4.isValueChanged()) {
    if (button4.getValue() == 1) {
      c = c + 1;

    }
  } else if (button5.isValueChanged()) {
    if (button5.getValue() == 1) {
      c = c + 1;

    }
  } else if (button6.isValueChanged()) {
    if (button6.getValue() == 1) {
      c = c + 1;

    }
  } else if (button7.isValueChanged()) {
    if (button7.getValue() == 1) {
      c = c + 1;

    }
  } else if (button8.isValueChanged()) {
    if (button8.getValue() == 1) {
      c = c + 1;

    }
  } else if (button9.isValueChanged()) {
    if (button9.getValue() == 1) {
      c = c + 1;

    }
  } else if (button10.isValueChanged()) {
    if (button10.getValue() == 1) {
      label1.updateText(String(InputPsaawd));
      c = 0;
      PhonePasswd = 0;

    }
  }
  if (c == 1) {
    label1.updateText(String(S1));

  } else if (c == 2) {
    label1.updateText(String(S2));
  } else if (c == 3) {
    label1.updateText(String(S3));
  } else if (c == 4) {
    label1.updateText(String(S4));
    delay(500);
    if (SetPasswd == PhonePasswd) {
      label1.updateText(String(OpeningDoor));
      digitalWrite(LED_BUILTIN, HIGH);
      delay(5000);
      digitalWrite(LED_BUILTIN, LOW);

    } else {
      label1.updateText(String(PasswdError));
      delay(5000);

    }
    label1.updateText(String(InputPsaawd));
    c = 0;
    PhonePasswd = 0;
  }
  delay(100);
}

 

相關文章

[MCS雲端服務] 如何透過 Scene (場景)功能快速打造物聯網應用情境 (二)

作者/攝影

本文改編自聯發科技Cloud Sandbox(MCS)官方部落格上的文章,特此感謝聯發科技的授權,圖文版權均屬於聯發科技。

文章分類教學技術文
時間
成本
難度
材料表

上一篇文章,我們介紹了如何透過上傳物聯網的場景圖,使裝置可在圖片上呈現。

但如果這個場域很大,或整個場域有多層式的關係時,無法透過一張場景圖呈現所有裝置的話,該怎麼做呢?以下,我們繼續以上篇文章的養殖場為範例:

假設這個魚塭養殖場的業主有多個魚池且彼此相連,而業主需要一次管控多個魚池,那麼業主可先上傳一張俯瞰多個魚池的圖片,如下圖:

圖1 一個魚塭養殖區的俯瞰圖 | mcs.mediatek.com

 

上篇文章中有提到,由於每個場域圖的網址本身皆為獨立的Url,所以我們可將某多個場景嵌入至這個俯瞰圖上。點擊左側的網址項目,貼上該場景的Url 連結,以及其顯示在這個俯瞰圖中的名稱,將這個場景的「網址元件」,一樣透過拖拉的方式,拉至這個俯瞰圖上。

圖2 將上一篇建立的場景網址嵌入到此俯瞰圖內 | mcs.mediatek.com

 

圖3

 

圖4 圖3、4說明,使用者可透過多個網頁Tab切換場景,或將不同場景個別顯示於多重螢幕上,做到中央控管。 | mcs.mediatek.com

 

應用至智慧產線上會像這樣:

圖5

 

點擊填充機台的 Url項目,可進一步看見該填充機台的場景。

圖6 可點擊右上角的展開圖示,觀看整個場景圖(若再按F11使瀏覽器變全螢幕,就會只剩下完整的場景圖了)。 | mcs.mediatek.com

 

當然,Url 項目的功能也提供更多客製化的彈性。假設某位業主希望進一步看見「原料容器」這個裝置的歷史資料,整合進公司內部的物流程系統,或以其它第三方的軟體呈現(例如Google Sheet、Tableau等),則使用者可將透過MCS API,以其它方式收集的長期數據圖表的Url連結,嵌入至該裝置的附近(如下圖),以利業主做進一步查看。

圖7

 

然而,使用者也需注意在不同場景鏈結中,各個使用者針對不同場景是否皆具有權限。

透過這兩篇的介紹,讀者們是否更了解場景的功能了呢?快回MCS建立屬於你自己的場景吧!

Thanks to Michael Hsu.

 

相關文章

[Micro:bit ] 一次學Micro:bit就有概念!?是的,請看這一篇(一)

LED燈示意圖

關於這套Boson Starter Kit for Micro:bit,先前已有開箱文介紹,當然對某些讀者而言還想要多瞭解可以如何使用,以及可做出什麼成果。為此,小編推出一系列使用心得文,並同時補充使用者手冊裡的圖文內容,方便讀者操作。

作者/攝影

陳怡璇

文章分類教學技術文
時間10mins
成本
難度*(1~10)
材料表
  • Micro:bit

  • (如欲購買,請洽機器人王國商城

  • Micro:bit BOSON擴充板

  • BOSON 發光二極體(Ultra-BrightLED)

  • BOSON 旋鈕(Rotation Sensor)

  • BOSON 藍色無段按鈕(Blue Push Button)

  • (如欲購買,請洽機器人王國商城

在手冊內的前三章,介紹了Micro:bit的硬體配置和使用方式,以下就第三章的題目,補上圖片說明,讓整個步驟更清楚。

第一題:神秘的Micro:bit(專案一)

Step1

圖1 開啟一個新專案

 

Step2

圖2 找到基本積木櫃內的「顯示LEDs」

 

Step3

圖3 在基本積木櫃內找到「當啟動時」

 

Step4Step5

圖4 在一開始時顯示愛心圖

 

練習看看:

把Step3的開始換成重複無限多次,這樣才能夠一直轉換。然後在原本的愛心下面再放入一個顯示的積木,點出自己想要的圖案。這裡要注意的是,顯示的積木下面都要再加入一個暫停(也在基本積木櫃內),這樣才不會在兩個圖片轉換時只能看到殘影。

圖5 愛心與菱形每秒變換

 

 

第二題: 閃爍的LED燈

Step1

圖6 找到進階->引腳

 

Step2Step3

圖7 P1引腳閃爍間隔一秒

 

 

練習看看:

SOS訊號裡,S的訊號是三次短燈號,O是三次長燈號。所以,我們可依照前面閃爍燈的積木,改成SOS訊號燈,不過因它是重複三次後要換另一個訊號燈,所以要先在迴圈積木櫃內找到重複4次(如圖8)。然後改裝成圖9的樣子。這裡要注意的是,S跟O的訊號中間要再加上一個暫停,暫停的時間就是S跟O的時間差,這樣訊號變化時才會很清楚。

圖8 找到迴圈積木櫃內的重複4次

 

圖9 (SOS)

 

第三題:通知燈

Step1:同閃爍的LED燈的Step2。

Step2

圖10 找到「等號」

 

圖11

 

Step3

圖12

 

圖13

 

 

程式積木完成並燒錄至Micro:bit之後,我們可以透過一些素材,例如樂高積木、壓克力板、厚紙板⋯⋯等等,使成品更像檯燈。盡情發揮您的創意吧!

相關文章

[ 教學文 ] 深度剖析:如何在QNAP上架設App Inventor私服器

作者/攝影

文/林祥瑞

文字整理/CAVEDU 宗諭

圖/CAVEDU教育團隊

文章分類教學技術文

App Inventor原來是Google實驗室(Google Lab)的一個子計畫,由一群Google工程師,以及勇於挑戰的Google使用者共同參與。App Inventor是一個完全線上開發的Android程式環境,拋棄複雜的程式碼,而使用樂高積木式的堆疊法,來完成使用者的Android程式。Google實驗室後於2012年1月1日,將App Inventor整個計畫移交給麻省理工學院行動學習中心進行維護,並維持免費及開放原始碼的精神繼續運作。

圖1 App Inventor原來是Google實驗室(Google Lab)的一個子計畫

 

使用App Inventor其實相當直覺、方便,開發一個App Inventor程式,就從使用者的網路瀏覽器展開!使用者首先要設計程式的外觀;接下來是設定程式的行為,這部分就如同玩樂高積木般簡單有趣。最後,只要將手機與電腦連線,剛出爐、熱騰騰的程式就會出現在使用者的手機上了。

圖2 App Inventor的設計介面

 

正因使用起來簡易、直覺、方便,連小學生也能使用App Inventor撰寫手機應用程式,所以,App Inventor被相當程度應用於教育領域。在台灣,有不少關於App Inventor的課程,以CAVEDU教育團隊為例,一年至少有30至40場的研習。正因持續辦理研習,CAVEDU團隊在教育現場發現了一些使用App Inventor的問題和需要,而這正是本文將教導在QNAP上架設App Inventor私服器的主要原因。

圖3 在App Inventor設定程式的行為,如同玩樂高積木般簡單有趣。

 

為何要在QNAP上架設App Inventor私服器?

因著推廣App Inventor,CAVEDU教育團隊在研習過程中發現,許多學校的教室能夠讓學生上網,但在使用App Inventor時,因為每位使用者皆需一定的網路頻寬,而教室的網路頻寬並不足以應付這麼多學生,往往導致教室的網路斷線,眾人都連不上網路。

 

除了在教育現場發現上述問題外,為了想知道App Inventor使用者究竟在做些什麼,例如,在課堂上教導學生製作一個程式,大家普遍會使用什麼樣的元件?然而,因麻省理工學院行動學習中心的App Inventor伺服器上的資料不對外公開,若是自己架設一台App Inventor私服器,便能有效獲得前述問題的答案,掌握使用者行為,進行大數據分析。

圖4 自己架設一台App Inventor私服器, 便能有效掌握使用者行為,進行大數據分析。

 

至於為什麼要將App Inventor私服器架設在QNAP上,主要原因是學校等教育機構時常在管理資訊技術及大量的教師與學生資料上面臨挑戰,往往需要以有限的預算建置儲存平台,以實現檔案共用與更精簡的管理,而QNAP正提供了很好的解決方式。

圖5 在QNAP上自行架設App Inventor私服器

 

基於以上幾點原因,所以,CAVEDU教育團隊不僅在有需要時自己架設App Inventor私服器,也盼望藉由這篇文章的分享,讓更多人可以在QNAP上自行架設App Inventor私服器,不僅避免了網路頻寬不足的問題,更進一步掌握使用者行為,甚至還有更多的應用!

圖6 CAVEDU教育團隊所維護的「App Inventor中文學習網」

 

以下,我們將一步步向您示範,如何在QNAP上架設App Inventor私服器。而下文將介紹到QDK 這個開發者工具,若想更多了解QDK,歡迎收看這段影片:

 

編譯 MIT AppInventor 伺服器

準備工作

專案仰賴兩個重要工具,一是我們藉由git 版本控制工具獲取原始碼;二是我們需要Apache Ant執行自動化組建,我們確認環境已經安裝。

 

apt-get install ant git  # Debian/Ubuntu

pacman -S apache-ant git # Arch Linux

dnf install ant git      # RHEL/Fedora

 

此外,執行伺服器需要 Google App Engine for Java 的工具,請到下載頁取得最近版本,本文截稿前的版號是 1.9.63 。

 

# 移到家目錄

cd ~/ 

 

# 使用指令下載檔案的範例,請自行修改版號

wget ‘https://storage.googleapis.com/appengine-sdks/featured/appengine-java-sdk-x.y.zz.zip’ 

 

# 解壓縮檔案

unzip appengine-java-sdk-x.y.zz.zip

 

組建伺服器

獲取原始碼

MIT AppInventor 專案寄託在GitHub,每位參與者都必須透過 git 提交程式碼,我們自然也是用 git 來下載所有原始碼。

 

# 獲得原始碼

git clone https://github.com/mit-cml/appinventor-sources.git

 

# 進入專案目錄

cd appinventor-sources/appinventor

 

# 下載子模組

git submodule init

git submodule update

 

上述有 git submodule 相關的指令,在有些專案這不是必要步驟,由於 AppInventor 的原始碼有引用其他專案,我們必須透過這些指令把引用的專案一併下載下來。

 

GitHub 不僅僅是來放置原始碼的空間而已,同時也作爲對開發者友善的工作環境,開發者可以在討論區回報臭蟲後者討論新功能,此外提供Pull request機制,當你想對專案提報你的修改,只要去他的專案上發送 pull request ,經專案負責人審查通過,你的修改就會被併入原始碼。

 

執行編譯

執行 ant 指令就行了,就像呼吸一樣簡單。由於專案相當龐大,所有編譯流程至少耗時三分鐘以上,直到 BUILD SUCCESSFUL 字樣出現即編譯成功。

 

ant

 

如果你不幸編譯失敗,最後跑出 BUILD FAILED 字樣,建議回前面步驟再三確認有沒有遺漏。在你重新編譯前,先執行 ant clean 清理前一次組建留下來的垃圾再執行 ant 。

 

執行伺服器

開始前先提醒 AppInventor 並非單一的程式,我們總共會開啓兩個不同的伺服器,除了 App Engine 寫成的網頁伺服器之外,還有一個專門打包 apk 檔案的伺服器,我們在 AppInventor 網頁上寫成的程式必須透過打包伺服器來編譯成 apk 檔案。

 

啓動網頁伺服器

這時候就是 App Engine 出馬的時機了,如果已經依照前面步驟下載好工具,我們用它的工具啓動本地的伺服器。

 

~/appengine-java-sdk-x.y.zz/bin/dev_appserver.sh –address=127.0.0.1 –port=8888 appengine/build/war

 

啓動後開啓瀏覽器進入網址 http://127.0.0.1:8888/ 來檢查是否有登入頁面。

–address=127.0.0.1 伺服器的位置 綁定 在代表本機的特殊 IP 位置 127.0.0.1 ,只能在本機使用,若要允許外部連線,可以考慮改成 –address=0.0.0.0 。

–port=8888 表示伺服器使用 8888 埠口來提供服務,你也可以改成其他的數字。

 

啓動 apk 打包伺服器

我們再開啓另外一個終端,透過 ant 指令幫啓動打包伺服器。

 

# 進入專案目錄

cd ~/appinventor-sources/appinventor/

 

# 啓動打包伺服器

ant RunLocalBuildServer

 

在 QNAP NAS 執行 MIT AppInventor

準備工作

編譯 AppInventor

進入正題之前,我們得確認已經下載 Google App Engine ,且 AppInventor 已經編譯完成,操作方式請參考文章「編譯 MIT AppInventor 伺服器」。之後的段落我們假定幾個配置好的目錄如下:

 

  • ~/appinventor-sources/ 包含已經編譯好的 AppInventor 程式。

  • ~/appengine-java-sdk-x.yy.zz 爲解壓縮的 Google App Engine SDK for Java ,版號請自行填入。

 

下載 QPKG 打包工具

一般而言,打包 QPKG 過程中必須根據 QNAP 公司提供的 QPKG 開發手冊 撰寫套件設定檔,並使用他們提供的 QDK 開發工具打包套件。這部分我們提供已經寫好的設定環境,請使用 git 下載。

 

cd ~/

git clone https://github.com/jerry73204/appinventor-qpkg.git

 

在我們的設定環境下有兩個目錄:

 

  • package-source/ 檔案結構是根據 QPKG 開發手冊的內容配置,屆時要打包進入 QPKG 套件的檔案都放置於此。

  • qnap-chroot/是引用他人的 chroot 環境,可以幫我們在本機即可完成QPKG打包,而不需要透過QNAP NAS機器。

 

目錄結構的說明如下,其說明請參考 QPKG 開發手冊

appinventor-qpkg/

├── package-source/

│   ├── package_routines/

│   ├── qpkg.cfg                 # 套件設定檔

│   ├── icons/                   # App 圖示

│   │   ├── appinventor_80.gif

│   │   ├── appinventor.gif

│   │   └── appinventor_gray.gif

│   └── shared/                  # 安裝於各類 NAS 的檔案目錄

│       ├── appinventor.sh       # 服務控制腳本,可命令啓動、關閉 AppInventor 服務

│       ├── run_appinventor.py   # 啓動 AppInventor 伺服器的腳本

│       └── run_buildserver.py   # 啓動 apk 打包伺服器的腳本

└── qnap-chroot/

 

準備 QPKG 套件

帶入 Google App Engine for Java

考慮到 QNAP NAS 上面沒有預載 Google App Engine ,必須一併打包到套件裏面。

 

cd ~/appinventor-qpkg/shared/

cp -rv ~/appengine-java-sdk-x.y.zz/ appengine-java-sdk/

 

帶入編譯好的 AppInventor

編譯完成的 AppInventor 檔案相當龐大,我們只需要其中包含網頁伺服器及打包伺服器的兩個目錄,因此做工會細一點。

 

# 準備 AppInventor 目錄

cd ~/appinventor-qpkg/shared/

mkdir appinventor-bin/

cd appinventor-bin/

 

# 複製 AppInventor 網頁伺服器

mkdir -p appengine/build/

cp -rv ~/appinventor-sources/appinventor/

appengine/build/war appengine/build/war/

 

# 複製 apk 打包伺服器

mkdir -p buildserver/build

cp -rv ~/appinventor-sources/appinventor/

buildserver/build/run buildserver/build/run/

 

完成準備

這段告一個段落前,我們再三檢查一下套件目錄是不是如下方式配置。

package-source/

├── appengine-java-sdk/

├── appinventor-bin/

│   ├── appengine/build/war/

│   └── buildserver/build/run/

├── appinventor.sh

├── run_appinventor.py

└── run_buildserver.py

 

編譯 QPKG 套件

起手式

根據 QPKG 開發手冊的做法,我們必須在 NAS 上面安裝 QDK 開發工具,把我們的套件工作目錄 package-source 傳到 NAS 上面之後方能打包。不過,作者常常有手邊沒有 NAS 機器的困擾,本文介紹 chroot 的技巧,可以在你的本機創造一個模擬 QNAP NAS 的環境(這裏聲明 chroot 不是 虛擬機),我們在此環境下打包 QPKG 套件。

 

這部分感謝 plexinc 這位大大在 GitHub 提供了 qnap-chroot 工具,讓我們省去不少設定 chroot 環境的功夫,我們也引用在 qnap-chroot 目錄下。

 

準備並進入 chroot 環境

準備工作我們需要完成兩件事,一是掛載 devtmpfs 至下面的 /dev 目錄下,再者是要把做好的 package-source 目錄複製一份到 chroot 環境下。

 

cd ~/appinventor-qpkg/

 

# 掛載 devtmpfs

mkdir -p qnap-chroot/dev

sudo mount –bind /dev qnap-chroot/dev

 

# 複製套件目錄

cp -rv package-source/ qnap-chroot/package-source/

 

完成準備工作後便可以進入 chroot 環境。

 

sudo chroot –userspec=$(id -un):$(id -gn) qnap-chroot/

 

打包 QPKG 套件

這步驟也會花許久時間,請耐心等候。

 

# 更改 PATH 環境變數

export PATH=/bin:/usr/bin:/sbin

 

# 打包套件

cd package-source/qbuild

 

一旦打包成功, qbuild 指令會生成一個 build 目錄放置我們的 qpkg 套件,完成後離開 chroot 環境。

 

ls build/  # 得到檔名 appinventor_2.0.0.qpkg

exit

 

清理 chroot 環境

完成工作後,當然得有始有終把之前設定好的 chroot 環境清理乾淨。

 

# 取出 QPKG 套件

mv qnap-chroot/package-source/build/appinventor_2.0.0.qpkg .

 

# 清理工作檔

rm -rf qnap-chroot/package-source/

 

# 卸載 devtmpfs

sudo umount qnap-chroot/dev

 

在 NAS 上安裝 QPKG 套件

啓動 App Center

首先我們進入 NAS 的管理界面,啓動 App Center 程式。

 

安裝 JRE 套件

由於我們的套件相依於 Java 程式,我們點選左邊選單的 Developer Tools ,然後點選並安裝 JRE 。

 

手工安裝 AppInventor 套件

點選在 App Center 右上角有一個手工安裝的圖示。

 

在跳出的小視窗上點選我們提供的 QPKG 檔案,然後點選安裝,這步驟會花點時間,請耐心等待。

 

安裝完畢後,在 App Center 選單就會出現 AppInventor 選項,點選選項即可進入 AppInventor 界面。

 

相關文章

[教學文] 係金ㄝ !!不需3D列印外觀元件,也能製作的機械生物——OTTO Like

原本,筆者將此作品命名為「果凍步兵」,但命名後,總感覺已跳脫原始設定的框架,於是便改為前輩Bridan Wang大哥所稱的「OTTO Like」吧!也透過此命名,向Otto開源者Camilo Parra Palacio表達無限敬意!

作者/攝影

機甲人形師 林益成

文章分類教學技術文
時間

成本
難度
材料表
  • Arduino nano X 1組

  • Nano多用擴展板 X 1 組

  • 伺服馬達SG90 X 4 顆

  • 開關(有段)X 1 顆

  • 塑膠罐 X 1 個

  • 塑膠(木)板 X 2 片

  • L型機構件X 2 片

製作緣起

2017年偶然在網路上看見Otto機器人,心中十分喜愛,但因當時手邊並無3D列印機,因此無法列印自造⋯⋯(遺憾啊啊啊……)。

 

在入手3D列印機後的某一天,想起了這過往的殘念,因此在Thingiverse網站取得開源資料後,迫不及待地列印、組裝,同時也下載製作了同類型、貌似青蛙的 arduped。當時,為讓Otto和arduped二者看起來更協調,因此筆者硬是改掉了Otto的腳部。以下是它們共舞的影片:

 

之後,因爲花在3D列印上的時間過長,並且希望外觀上能有更高的自由度,筆者開始試以生活周遭方便取得的物品進行製作。以下是首次試作作品的影片:

 

筆者個人一個很大的願望,是讓沒有3D列印機的朋友們,也能享受自造類Otto機器人的樂趣。因此,透過本文將個人研究成果與讀者們分享,也期待有一天能看見大家製作出更多作品。

 

製作過程

一、本體製作

Step1:開鑿相關機構孔位

圖1

 

Step2:組裝伺服馬達及電源開關

圖2

 

二、腿部製作:

Step3:將伺服馬達擺臂固定於L型機構件(需製作二組)

圖3

 

三、腳掌製作:

Step4:將伺服馬達黏著固定於塑膠板上

圖4

 

四、腿部安裝:

請參考圖5

圖5

 

五、腳掌安裝:

請參考圖6

圖6

 

六、完成Arduino程式燒錄及配線

七、素體完成

圖7

 

八、請讀者們發揮豐富的想像力,以泡棉、瓦楞紙等素材,為Otto like自造出獨一無二的外型吧!

 

相關作品

因考量後續作品會參與某些公開展示的活動,考量到強度及保存,故使用3D列印製作外型零件。目前筆者製作了三架以日系妖怪為主題的Otto like:

 

1.化貍-文福茶鍋

圖8

 

2.河童

圖9

 

3.天狗

圖10

 

目前排定參展的活動:

  • 10/19-21 TIRT全能機器人國際邀請賽暨桃園觀光工廠創客嘉年華

  • 11/2-4 Maker Faire Taipei 2018

 

屆時歡迎讀者們蒞臨展攤「機甲人形師的覓星工坊」,也歡迎至我個人的FB粉絲專頁交流:https://www.facebook.com/lyclovetyc/。而因我過去製作機器生物,有使用過ROSA系統,若讀者想更多了解這個系統,請參考:https://4rdp.blogspot.com/2017/09/rosa-38-robot-like-otto.html?m=1,謝謝。

 

備註:根據小編與作者機甲人形師林益成討論後,他表示,因近來比較忙碌,暫時抽不出時間寫給LinkIt 7697的Otto程式,所以先以Arduino測試。但未來不排除寫給LinkIt 7697的Otto程式,請讀者們靜待好消息囉!若想購買相關的開發板,請點這裡

 

相關文章

[介紹文]想認識馬達驅動板Robot Shield?先看這一篇——Wall-E輪型機器人

作者/攝影

Wall-E機器人作者:MiniPlan

文字整理:CAVEDU 宗諭 (感謝作者授權,特此致謝。)

圖片:MiniPlan

文章分類介紹文
時間

成本
難度

Robot Shield是一塊「馬達驅動板」,是由開發MiniPlan與TinyPlan的承田科技所設計開發。當它搭配聯發科技的LinkIt 7697開發板後,使用者不需操心線路如何對接,以及電池⋯⋯等問題,成為一套完備、可直接運用的控制單元,讓使用者輕鬆製作各類應用。

 

Robot Shield的設計延伸自TinyPlan V400的設計,尺寸和螺絲孔位置皆與TinyPlan一樣,所以,硬體部份可直接套用至TinyPlan相關應用的作品上。

圖1 Robot Shield馬達控制板

 

說起應用,其實LinkIt 7697搭配Robot Shield的應用範圍相當廣,例如,動力車、輪型機器人,或是之前曾專文介紹的Codibot蜜蜂機器人,以及機械手臂⋯⋯等等。

圖2 Codibot

 

因此,我們將透過幾篇文章,向讀者介紹LinkIt 7697搭配Robot Shield的一些應用,幫助大家更了解Robot Shield,甚至能開發出屬於自己的應用。那就讓我們開始吧!本文的主角是MiniPlan的Wall-E輪型機器人。

 

首先,請大家先看一下MiniPlan完整的介紹影片:

 

開發理念

Wall-E機器人改裝自TAMIYA Cam-Program Robot,因TAMIYA出品的這款機器人在中間處留有空間,可讓機器人愛好者放置電路板展開二次創作。

圖3 有著一雙大眼睛的Wall-E機器人

 

元件介紹

在此需注意的是:

  1. MiniPlan預備了三顆SG90 Servo,原本SG90 Servo的電線標準長度大約是26cm,但作者先把它們剪短至13cm。
  2. 作為Wall-E機器人雙眼的是HC-SR04P超音波感測器。超音波感測器原本採用杜邦端子頭,但MiniPlan為節省空間,先將電線焊上感測器,並在電線尾端保留杜邦端子。
  3. 控制板部分就是使用LinkIt 7697搭配Robot Shield。
圖4 Wall-E機器人的各式元件

 

元件組裝

Wall-E機器人的身體、兩隻手臂及頭部,都是透過3D列印而成。以下簡單介紹組裝重點:

  1. 底盤:基本上,按照TAMIYA Cam-Program Robot的說明書組裝即可。
  2. 身體:下方會擺放三顆SG90 Servo,分別驅動頭部及兩個肩膀。需注意的是,SG90的方向必須擺放正確,否則電線會被卡住。
  3. 頭部:將頭部組裝好後,可能會發現HC-SR04P超音波感測器會些許晃動。對此,MiniPlan建議可透過上膠將其固定,但這個方式並非必要。
  4. 手臂:手部的螺絲不需鎖太緊,免得支架斷裂。手臂部分的螺絲亦同,讓手臂有伸縮的空間。
  5. 控制板:在控制板組裝上底盤後,可先運用手機上的LinkIt Remote app,測試看看Wall-E機器人是否如我們所預計地活動。
  6. 肩膀:安裝時,記得取45度角的位置。在兩個肩膀安裝完成後,記得透過LinkIt Remote再次進行機電測試,Wall-E機器人各部件運作是否良好。

 

以下是Wall-E機器人頭頸部、身體、肩膀手臂的設計圖:

圖5 頭頸部設計圖

 

圖6 身體設計圖

 

圖7 肩膀手臂設計圖

 

完成組裝後,最後就是用手機上的LinkIt Remote進行測試,可測試部分包括:前進、後退、左轉、右轉、頭部轉動、肩膀手臂轉動及超音波感測器效能。以下是MiniPlan所設計LinkIt Remote的程式檔:https://github.com/GeorgeChiou/Robot-Shield-V1.0/tree/master/Linkit7697_RobotShieldV1_WallE_V100,讀者可以自行下載。

 

但若讀者希望Wall-E機器人產生出更多動作,可自行撰寫更多動作的程式碼。

圖8

 

結語

本文主旨在於介紹Wall-E機器人,若讀者想進一步了解,如何完整組裝並操控Wall-E機器人,請上網:https://www.thingiverse.com/thing:2605324,或至Miniplan-Robotfun臉書粉絲專頁詢問,謝謝。

 

CAVEDU教育團隊將會繼續介紹更多Robot Shield的應用,請讀者持續關注,謝謝。若欲購相關開發板,請點這裡

 

相關文章

[新品開箱]為何非「掌中雷霆QBoat Sunny」不可呢?六大特點、五大原因一次帶您看

  是否有心想嘗試IoT領域,卻又十分擔心費用龐大?

不必擔心,QNAP近期推出的QBoat Sunny是一款極輕量化IoT微型伺服器,

能幫您省下在網路頻寬及雲端運算上相當可觀的費用!

以下這篇開箱文,將帶您深入了解QBoat Sunny在硬體、軟體上的特點,

以及為何非QBoat Sunny不可的五大理由。

作者/攝影

撰寫:宗諭

攝影:怡婷

文章分類開箱文
時間

成本
難度

  QNAP的QBoat Sunny自上市以來,就廣受各方關注,因為這款單板IoT微型伺服器,板身大小僅12公分;同時,QBoat Sunny提供輕量級虛擬化軟體容器Container Station及QIoT Suite Lite 物聯網開發套件服務,協助使用者輕易管理所有的 IoT 應用、裝置和資料,將QBoat Sunny 的高效能引進各種物聯網應用情境。

 

QBoat Sunny六大特點:

  • QBoat Sunny支援2260及2280規格的2 M key SATA SSD,讓您彈性選擇儲存裝置容量,並讓部署QBoat Sunny更簡單。在一般的開發板上,例如Raspberry Pi或Arduino,很少見到這樣的方式進行存儲,這是屬於NAS等級的存儲管理。

圖 1

 

圖2 支援2260及2280規格的 M.2 M key SATA SSD

 

  • QBoat Sunny具備USB 3.1 Gen 1連接埠及M.2 A key插槽,可使用各種 USB Dongle或2230規格的M.2擴充卡,讓使用者新增多種無線連接能力,串接更多物聯網裝置。

圖3 QBoat Sunny具備USB 3.1 Gen 1連接埠及M.2 A key插槽

 

圖4 QBoat Sunny有著相當強的連線能力,一般開發板無法比擬。

 

  • QBoat Sunny採用效能強勁的 AL-314 四核心處理器 (搭載 2GB 記憶體),具備多樣化軟硬體擴充功能,可以讓使用者自由搭配運用各種物聯網裝置及應用程式,適合用作霧運算或邊際運算伺服器。QNAP出品的部分NAS也是採用這顆CPU,其I/O能力算是相當好,足夠進行規則引擎的運算。

圖5 QBoat Sunny採用效能強勁的 AL-314 四核心處理器(搭載 2GB 記憶體)

 

  • QTS Lite作業系統的App Center提供了多種開發者工具,讓使用者可以快速地打造順暢、高效IoT工作環境。

圖6 App Center提供了多種開發者工具

 

  • Container Station 輕量級虛擬化平台能讓使用者以 Docker 輕鬆建構個人專屬的物聯網應用,只需最少時間,就可讓使用者的物聯網系統上線匯流,並集中管理及運用資訊。

圖7 Container Station 輕量級虛擬化平台

 

  • QIoT Suite Lite 是 QNAP 的物聯網開發套件,以熱門的開源套件 Node-RED 及 Freeboard 為基礎,並提供多樣化的實用模組讓使用者立即採用,加速開發與服務流程,讓使用者迅速建構理想的IoT情境。

圖8 QNAP 的物聯網開發套件——QIoT Suite Lite

 

外觀介紹

  打開QBoat Sunny的外箱,裡面很直接明瞭就是這塊單板的IoT微型伺服器。另外,還附有簡易的螺絲、工具及說明書,只要經過簡單組裝,就可以開始使用QBoat Sunny。

圖9 QBoat Sunny外箱

 

圖10 QBoat Sunny

 

  在板子的四角處,以四顆螺絲釘固定在一個銀色、鐵製的基座上,這個基座兩旁還向柵欄一樣豎立起來,主要目的是要保護QBoat Sunny,幫助散熱,並使它在運作上可以更加穩定。

圖11 QBoat Sunny的散熱基座

 

  首先仔細觀察一下這塊開發板,可以看到它採用的Annapurna Labs AL-314處理器,搭載2GB的記憶體,且有兩條M.2 SATA SSD 2260/2280插槽。

 

  QBoat Sunny具備3個Gigabit網路RJ45連接埠。在RJ45旁邊,有兩個USB 3.1 Gen 1 Type A連接埠,還有1條M.2 2230插槽供無線模組擴充使用。而在板子的另外一邊,則有一個紅色與一個綠色的插口,負責Audio in 與 Audio out的功能。

圖12 QBoat Sunny的音效插口

 

QBoat Sunny硬體規格:

  • 處理器——Annapurna Labs AL-314 quad core

    ARM Cortex-15 processor up to 1.7 GHz

  • 系統記憶體——2GB DDR3L

  • 儲存空間——512MB NAND flash, 2x M.2 2260/2280 SATA slots for SSDs (Key M)

  • 聯網設施——3x Gigabit Ethernet

  • USB – 2x USB 3.1 Gen1 ports

  • 音訊輸入/輸出插口——5mm audio out, 3.5mm audio in

  • 擴充設備

  • 1x M.2 Key A 2230 for Wi-Fi/藍芽

  • 40-pin連接器,針對 I2C, UART, SPI, SDIO, GPIO

  • 電源——12V/3A

  • 尺寸——144 x 126 x 33.5公釐 (加上散熱器底座)

  • 重量—— 490公克

  • 適合運作環境——0 to 35˚C, 5 to 95%, 非冷凝, 濕球溫度: 27˚C

圖13 QBoat Sunny硬體效能強悍

 

為何QBoat Sunny廣受市場期待?

  主要是因為,QBoat Sunny可連結多樣化的IoT開發板、裝置及應用,同時,可以作為小型/私有IoT應用的伺服器,以及大型/公共IoT環境進行霧運算(Fog computing)的節點或閘道。總之,這款高效能的IoT微型伺服器可以幫使用者省下可觀的頻寬及雲端運算的費用,同時能夠在多種情境下使用。

圖14 高效能的QBoat Sunny足以幫使用者省下可觀的預算

 

QBoat Sunny應用程式開箱

  按照使用說明書的步驟,將QBoat Sunny接上電源、路由器,同時在您的電腦上下載Qfinder Pro這個程式(適用windows、Mac、Linux),就可以進行登入,然後遠端使用QBoat Sunny。

 

  讓我們一起來看看QBoat Sunny所提供的服務。開發板上預載了QNAP開發的作業系統QTS Lite,這套作業系統匯聚了QNAP多年來在軟體開發上的精華,特別為IoT打造的作業系統。在QTS Lite桌面上有9 個圖標,接下來幫大家簡單介紹:

圖15 QTS Lite桌面

 

1.控制台:

  點入之後,主要可以看到系統的各種狀態,幫助您了解這台QBoat Sunny運作的情形。同時,可以在「權限」部分,設定不同使用者的登入與使用權限。

圖16 控制台內的各種功能

 

2.File Station檔案總管:

  進入後,可以看到主機內所有檔案存放的情形,還可以遠端掛載雲端硬碟。

圖17 透過檔案總管,管理所有檔案。

 

3.myQNAPcloud雲服務:

  可透過這項服務,一步步將QBoat Sunny設定成為一個私有雲,並可以在此頁面上遠端管理多台裝置。若您沒有將IoT裝置連上一些大型的cloud service,便可透過此程式遠端管理。

圖18 可在此設定私有雲服務

 

4.幫助中心:

  顧名思義,就是在使用QBoat Sunny碰到困難時,可以尋得幫助的地方。除了文字說明外,還可以在此搜尋到許多網路上的資源,更有支援平台,讓QNAP支援團隊透過「幫助中心」,解決使用者的問題。

圖19 需要支援嗎?來幫助中心就對了!

 

5.App Center:

  可在這裡下載一些額外功能的程式,或是幫已安裝程式下載更新檔。App Center內已經有一些開發平台程式,例如Node.js、Perl、Python,可以讓IoT Maker大展長才、玩得淋漓盡致!

圖20 這裡有一些可用程式提供下載

 

6.QTS SSL Certificate、CloudLink雲聯通:

  這兩個應用程式主要都是與前面介紹過的「myQNAPcloud雲服務」一起配合,讓私有雲的建構更加完備、完善。

 

7.Container Station:

  是這款QBoat Sunny主打的功能之一,若您已有運作中IoT環境,可以透過這款虛擬容器軟體,很容易就可以將現有軟體套件轉移到QBoat Sunny。

圖21 方便易用的虛擬容器軟體

 

8.QIoT Suite Lite:

  亦是QBoat Sunny主打的應用之一。使用前必須再輸入帳號/密碼登入,登入之後可以看出是一個整合介面,可以用來管理IoT應用、IoT裝置,以及裝置的種類,還有使用者。初步看起來是十分淺顯易上手,好操作、使用。同時還有「快速設定精靈(Quick Setup Wizard)」可以幫助使用者。

圖22 QIoT Suite Lite的介面完整且容易操作

 

結論:必敗QBoat Sunny的5大原因

  1. 機身輕薄靈巧、效能強大。

  2. 軟硬介面容易操作,好上手。

  3. 應用程式功能完整,且可持續擴充。

  4. 雲端應用程式方便使用,輕鬆建立私有雲。

  5. IoT應用程式整合完整,容易建立物聯網裝置;若有現成物聯網裝置,也可透過虛擬容器,輕鬆匯入。

 

  若讀者們想更深入了解QBoat Sunny及QIoT Suite Lite,歡迎收看以下影片:

 

相關文章

[ 教學文 ]你好,我會走路、唱歌跳舞跟偵測障礙物喔!——一起動手做超級卡哇伊的機器人OTTO97(下)

作者/攝影

文圖轉載自MediaTek Lab官方網站 ,感謝聯發科技創意實驗室授權,特此致謝。而OTTO97(OTTO for LinkIt 7697)為衍生自 OTTO DIYOffical Site / Github / Thingiverse)的專案。

文章分類教學技術文
時間

成本
難度
材料表
  • Robot Shield V1*1

  • LinkIt 7697*1

  • MicroUSB x2

  • Tower Pro SG90 伺服馬達(Micro Servo 9gx4(附轉軸支架以及二長一短的螺絲)

  • HC-SR04P超音波感應器,工作電壓範圍3V~5.5Vx1

  • MAX7219 8×8 矩陣式 LED顯示模組 x1(選配)

  • 被動式(有源)蜂鳴器 x1,工作電壓範圍3V~5V(選配)

  • 3D 列印出機器人各部位零件(頭、身體、腿 x2、腳底板 x2

  接續上一篇:[教學文]你好,我會走路、唱歌跳舞跟偵測障礙物喔!——一起動手做超級卡哇伊的機器人OTTO97(上) ,讓我們繼續製作OTTO97機器人,一起來看接下來的步驟。

 

Step8:組裝左腿(連接擴充板 P15

(1)打開 SG90 伺服馬達套件,會看見一顆伺服馬達、三支轉軸支架(旋臂),以及二長一短的螺絲。在此專案中,僅會用到最短的轉軸支架。

圖8-1

 

(2)用兩隻長螺絲將伺服馬達鎖至OTTO身體的左腳位置。

圖8-2

 

(3)將伺服馬達接線至擴充板的P15,並將手機上的LinkIt Remote APP連結至LinkIt 7697。開啟校正測試UI後,點選Stiff按鈕使伺服馬達回到初始位置,亦即OTTO直立的狀態。

圖8-3

 

(4)OTTO兩隻的零件是相同的(但腳底板左右有分),因此可任意選擇進行組裝。

圖8-4

 

(5)將轉軸支架切短以放入左腿的卡榫溝槽(如圖8-5),並確認與伺服馬達的連接面需平整 (如圖8-6)。不平整的馬達接觸面將導致OTTO無法直線行走。

圖8-5

 

圖8-6

 

(6)以面朝正面的方向(如圖8-7),將左腿連接至OTTO的身體。由於齒輪齒紋的關係,腿部不見得能精準對準身體正面,這可於之後的步驟透過校正測試 APP做修正。

圖8-7

 

(7)用短螺絲將腿上的轉軸支架與身體上的伺服馬達鎖緊,若沒有確實鎖緊會導致OTTO無法順利直線行走。

圖8-8

 

Step9:組裝右腿 P16

(1)採用與組裝左腿相同的步驟完成右腿組裝,並將伺服馬達連接至擴充板的P16 接腳

(2)開啟LinkIt Remote的校正介面進行腿部位置調整,使雙腿的初始方向平行於身體的面向 (如圖9-1)。校正完成後,務必按下Save按鈕儲存相關設定值供之後使用。

圖9-1

 

 

圖9-2

 

Step10:組裝左腳底板(P5LF

(1)將伺服馬達的電線穿過左腿及身體的開孔後連接至Robot ShieldP5

圖10-1

 

(2)選擇校正介面中的Stiff ,將伺服馬達轉軸置於初始位置。

圖10-2

 

(3)切割馬達轉軸支架(懸臂),使它能放進左腳底板零件的卡榫溝槽。

圖10-3

 

(4)用短螺絲將伺服馬達鎖緊固定於腳底板上。

圖10-4

 

(5)整理並反折馬達的線,好將馬達放入左腿的機構中。

圖10-5

 

圖10-6

 

(6)用長螺絲鎖緊固定馬達和左腿(注意正反面,下圖為OTTO的背面)。

圖10-7

 

Step11:組裝右腳底板(P11: RF)

(1)依照與組裝左腳底板相同的步驟,完成右腳底板的組裝,並連接伺服馬達至擴充板的P11

(2)使用校正APP調整腳底板的角度,使它們能平穩站在地面上(如圖11)。

(3)矯正完畢後,務必點選Save儲存相關設定值。

圖11

 

Step12:將Robot Shield裝進OTTO身體內

(1)為留下安裝LED模組的空間,將Robot Shield放進OTTO身體時,盡量將腿部相關走線整理至後方(如圖12-1中,綠色箭頭所指方向)。

圖12-1

 

(2)調整Robot Shield位置,使開發板相關接口能對齊OTTO身上預先開好的孔位。

圖12-2

 

(3)使用Robot Shield附贈的螺絲,將板子固定在OTTO身體機構中。

圖12-3

 

Step13:安裝超音波感應器、蜂鳴器及8×8矩陣式LED

(1)接下來的組裝步驟,會依照圖13-1的接線方法,分別將之前測試過的超音波感應器、蜂鳴器及8×8矩陣式LED,連接回Robot Shield。

圖13-1

 

(2)將蜂鳴器面朝下安裝至OTTO身體中預留的蜂鳴器位置,並將接線接回Robot Shield

圖13-2

 

(3)將超音波感應器模組安裝至OTTO的頭部內(可用銼刀修整眼睛開口邊緣,以方便安裝),並將接線接回至Robot Shield(注意Trig/Echo接線的位置)。

圖13-3

 

(4)將8×8矩陣式LED模組接線回Robot Shield,並以膠帶或其它絕緣物包覆LED模組背面,以避免接觸Robot Shield造成短路。

圖13-4

 

(5)放置LED模組於OTTO身體正面位置(如圖13-5箭頭所指)。

圖13-5

 

(6)最後將頭部身體組合起來,就完成了OTTO的組裝。

圖13-6

 

Step14:執行Demo App

(1)在Arduino IDE中開啟OTTO_Demo.ino範例,並上傳至LinkIt 7697執行。

(2)開啟LinkIt Remote APP並連接至OTTO,從LinkIt 7697載入UI後,會看見如圖14-1的控制介面:

圖14-1

 

  接下來就可開始嘗試OTTO各式各樣的動作了!

  閱讀完了全文,讀者們是否很想趕快動手組裝一台OTTO97機器人呢?若讀者們想購買LinkIt7697 + Robot shield等相關開發板,歡迎前往機器人王國挑選,謝謝。

 

相關文章

[ Micro:bit]進擊的BOSON+Micro:bit! 如何用BOSON電子積木,讓Micro:bit與燈條同時閃亮亮??

  之前的文章,我們動手玩創意音樂盒,以及閃亮亮的皇冠。過程中,我們使用了BOSON主控板提供電源。但若我們將主控板換成Micro:bit會怎麼樣呢?會不會使整個作品有更多的變化?就讓我們一起動手玩玩看吧!

作者/攝影

陳怡璇

文章分類教學技術文
時間
成本
難度*(1~10)
材料表

  在之前的文章[Micro:bit] 使用BOSON電子積木控制燈條閃爍,有跟大家分享如何控制燈條閃爍。這一次,我們來增加一些變化,要比較方便地看它測量出來的數值,所以我們要進行以下幾個步驟:

 

Step1:先下載PuTTY這個軟體。請至這裡下載:PuTTY 。下載完之後,打開PuTTY,並按照圖1設定好數值。

圖1

 

  將紅色框框內的數值輸入好後,按下Save,這樣之後要使用時,按下Load便可以了。這邊要注意的是,Serial line的輸入內容,要至電腦控制台內的「裝置管理員」,去查看連接埠是多少。

 

Step2:接下來在Micro:bit的P0引腳接上傾斜感測器。我們在使用一個感測器前,都要先檢測它輸出的數值,藉此判斷它到底是屬於類比或數位訊號。比方說,按鈕的輸出只會有0與1的差別,因此屬於數位訊號;然而,光敏電阻屬於類比訊號,它的輸出則會有0至1023的變化。

 

  接上後,我們將數值讀出。在基本程式櫃裡找到「重複無限次」積木;在序列程式櫃裡找到「寫入文字」積木;在文字程式櫃裡找到「字串組合」積木,在引腳程式櫃裡找到「類比訊號讀取」積木,並將引腳改成P0。讀者們可依自己喜好更改引腳,然後參考圖2把這些程式方塊組合起來。

圖2

 

Step3:接下來,我們要把燈條也接上,請大家參考圖3。

圖3

 

  接好燈條後,我們要設定使傾斜感測器控制燈條的程式。從邏輯程式櫃裡取出「如果-那麼-否則」積木、「0=0」積木;從引腳程式櫃裡取出「數位信號讀取數位信號寫入」積木。更詳細內容可參考前一篇文章[Micro:bit] 使用BOSON電子積木控制燈條閃爍。將積木組合好後會呈現圖4的樣貌。

圖4

 

  至目前為止,都是上一篇文章就有教過的內容。但這次我們要進行一些改變。因為Micro:bit板子上面本身就有LED矩陣,我們是否可在燈條開關時,也同時改變Micro:bit上LED的狀態呢?一起來看看!

 

Step4:從基本積木櫃裡取出「顯示 圖示」積木,詳細的設定方式,可參考圖5。透過這樣子設定,程式就會在燈條開關的同時,於Micro:bit上的LED矩陣顯示圖形。

圖5

 

  最後,我們將寫好的程式下載至Micro:bit,就可以看到程式顯示的成果了,就如圖6的樣子。這裡也可自己多嘗試使用不同的圖形,只要把基本程式櫃裡的「顯示 圖形」積木換成「顯示 LEDs」積木還可不光用程式內建好的圖形,更能自己畫出圖形呢!

圖6

 

  燈條跟Micro:bit一閃一閃會如何呈現?來看看影片:

 

相關文章