Quantcast
Channel: CAVEDU教育團隊技術部落格
Viewing all 678 articles
Browse latest View live

[ Micro:bit開箱文] 手勢辨識Grove也有Micro:bit的擴充板套件了Grove Inventor Kit

$
0
0

Micro:bit 為英國廣播公司(BBC) 為推廣學齡兒童程式邏輯教育給所推出的簡潔版卡式開發硬體;外形小巧便於攜帶,在程式教學上的特點有著簡單好上手的介面,硬體上有內含幾款感測器可供單獨使用,以及其可擴充性接腳的設計可將其教育應用的觸角更加延伸。

作者/攝影   林德昀
時間   拆開包裝紙的時間
成本  約NT:1,900
難度   * * *
材料表
  • Grove Inventor Kit

本套件由創客界知名的 Seeed 為 Micro:bit 所推出符合 Grove 標準的模組化套件,一般在物聯網的學習上通常使用的麵包板及杜邦線會有較多接線上的出錯機會,而對於硬體較不熟悉的軟體初學者若使用此套件學習可事先排除很多上述的問題而可更直接專注於程式學習上。

本套件包含:

  1. 擴充母板
  2. 迷你喇叭模組
  3. 角度感測模組
  4. 超音波感測器模組
  5. 光感測器模組
  6. 防水三色發光二極體條
  7. 手勢感應器模組 (筆者認為最有可玩性的模組)
  8. 4 位數字顯示器
  9. 紅光 LED 模組
  10. micro USB 線
  11. 五色鱷魚夾線各2條 (黑、白、紅、綠、黃)
  12. 使用手冊

 

手勢辨識

Micro:bit 上 5×5 LEDs 顯示手勢方向

 

以手勢控制彩虹燈走向

(程式實作部分請期待另篇應用教學文)

 

1.擴充母板

將Micro:bit 的擴充腳位拉出,有給 Grove 4-pin 接頭×4, 以及可供鱷魚夾或香焦棒使用的接點:P0,P1,P2,P8,P12,P13,及3.3V和GND,左方還有PWR的電源指示LED,及僅使用於供電使用的Micro USB接頭 (無法寫入程式);右方中間有廷伸用的接頭目前尚未有其資料,待有新資訊後補充。

 

下圖為Micro:bit 放入後週邊使用其他配線的示意圖

  1. 迷你喇叭模組

可由此喇叭發出汽車,門鈴⋯⋯等,經由不同的頻率的輪入訊號,可得出多樣變化的聲音;此模組中有可供調整輪出音量的可變電阻。

 

  1. 角度感測模組

由10k 歐姆可變電阻組成的角度感測模組,變化角度可由0~300度。可在學習專案中控制音量或馬達轉速⋯⋯等。

 

4.超音波感測器模組

可由此模組以非接觸的方式測量距離,可學習依據不同的距離變化將變量經由Micro:bit轉化為光或聲音的不同變化。

 

5.光感測器模組

可檢測出光度的變化而輸出相對應的訊號,可學習依照訊號強弱的不同而控制LED閃爍⋯⋯等應用。

 

  1. 防水三色發光二極體條

由30顆3色LED 所組成1公尺長的LED 條,每一LED 可由程式獨立控制顯示不同色彩,其封裝具有防水性,可使用於戶外而無需擔心下雨淋溼的影響。

 

7.手勢感應器模組

具有識別 上、下、左、右、前、後、順時鐘、反時鐘及揮手共9種手勢的感測模組。其感測範圍於前方5~15公分,視角60度內的區域內。由於未有詳細資料,筆者猜其工作原理可能為以紅外光加上脈波調變及都卜勒效應所作的感測器。可由本模組實作手勢操作各項目應用,如切換音樂,調整音量,開關燈⋯⋯等。

 

脈波調變:以脈波的形態將訊號改變為所需要的波形,創客界常用的PWM即為一種工作時間寬度上的脈波調變;在實際生活中,各遙控器不相互干擾也是一種脈波調變的應用。

 

都卜勒效應:當接近或遠離時,會對觀察者造成測量頻率的變化;如火車接近時的鳴笛聲會較尖銳,而遠離時會較低沉。

 

  1. 四位數字顯示器

可於學習專案中用作顯示時間或實驗數值。

 

  1. 紅光 LED 模組

需注意LED腳位,若不亮時請檢查是否接反。

  1. 使用手冊

內含12種對於以上模組的基礎程式應用

 

相關文章:


[App Inventor+Microbit小專題 ] 按鈕控制畫面小球

$
0
0

作者/攝影   曾吉弘
時間   3小時
成本
難度   * * * *
材料表
  • 個人電腦
  • App Inventor開發環境
  • 支援BLE的Android手機
  • BBC Micro:bit開發板

本文要介紹如何透過BBC Micro:bit開發板上的按鈕來控制App Inventor畫面上的小球左右移動,碰到畫面邊緣還會在Micro:bit LED matrix 上顯示對應的字樣。

 

範例 aia檔下載請按我

 

藍牙配對

 

Micro:bit端設定:

  1. 同時按住Microbit 正面A、B按鍵,不要放掉
  2. 按住A、B鍵時,把背面的Reset 鍵按下後再放開。
  3. 這時應該可以看到 “PAIRING MODE!” 以跑馬燈方式出現在Microbit LED 螢幕上,若看到這訊息,便可以放開A、B鍵。
  4. PAIRING MODE! 結束後,會看到一個圖形出現在Microbit LED 螢幕上,不同的Microbit 出現的圖案也不同,這是Microbit 不同裝置獨特的”簽名” (Signature) 。

  1. 這時候的Microbit 已經準備好跟其他裝置配對,請看以下影片教學

 

 

 

Android手機端設定:

  1. 進入Android手機的設定–>藍牙
  2. 確認Micro:bit 已進入配對模式
  3. 當Micro:bit上的‘PAIRING MODE!’ 顯示完,搜尋(每隻Android手機這個選項的文字不一定相同,但意思差不多),應該會看到類似 micro:bit [XXXXX]的選項,其中XXXXX 會根據每片micro:bit而不同。點選該裝置來配對。

4.micro:bit 會出現向左的箭頭,然後Android裝置上會跳出畫面要求輸入配對PIN碼的視窗。

5.按住Micro:bit 的按鍵A ,這時microbit 會連續出現六個數字,這就是配對碼。

6.回到Android裝置上,輸入這六個數字。如果Microbit 出現[V],代表配對成功。如果是[X]代表沒成功,請再試一次

 

編寫程式

匯入BLE 與 micro:bit extension

 

請登入MIT App Inventor官方網站,建立新專案,在Designer頁面中點選Palette左下角的Extension,再點選”Import extension“與”URL:

  1. 貼入以下兩個 extension link:

 

2. 請加入 Microbit_LedMicrobit_Button這兩個Microbit元件。兩者的BluetoothDevice 屬性設為 “BluetoothLE1″。這步驟很容易忘記,別漏掉了

  1. 加入四個按鈕放入 horizontalArrangement元件中,分別用於掃描、停止掃描連線與斷線

 

  1. 新增Canvas畫布元件(寬高各為320像素,底色隨意),再放入一個Ball元件。完成後Designer頁面如下圖(可以不用一模一樣)

Blocks頁面

 

本範例的基本概念是按下Micro:bit板子上的兩個按鈕可以控制小球左右移動,碰到Canvas邊緣會在LED矩陣上顯示對應的文字。開始吧:

STEP1: BLE連線成功後啟動Clockl元件

在BluetoothLE1.Connected事件中,首先啟動Clock.Timer(timer Interval 設為100),並顯示相關訊息,最後要求Micro:bit開始更新兩個按鈕的狀態。

STEP2:按下Micro:bit左側A按鈕

Microbit_Button1.ButtonAStateReceived事件中:

○如果按下了左側的A按鈕(Button_State_Value為true),則讓ball_X 變數值累減10。

○讓Ball1元件移動到(ball_X, 100),也就是左移10像素。

STEP3:按下Micro:bit右側B按鈕

現在看到右側的B按鈕,所做的事情幾乎一模一樣但是Ball1元件的移動方向是相反的。

Microbit_Button1.ButtonBStateReceived事件:

○如果按下了右側的B按鈕(Button_State_Value為true),則讓ball_X 變數值累加10。

○讓Ball1元件移動到(ball_X, 100),也就是右移10像素。

STEP4 Ball reached canvas’ edge

當小球碰到Canvas畫面四邊時,我們希望在Micro:bit的LED矩陣上顯示對應的文字。

Ball1.EdgeReached事件中,使用 if / else if 來檢查到底碰到了哪一邊,根據App Inventor的文件,1是北方,所以要透過Microbit_Led1.WriteLEDText指令來顯示’N’。其餘類推,請看下圖:

完工了!來試試看吧。請確認您的Micro:bit與Android已經配對好了。按下Microbit板子上的按鈕應該讓畫面上的小球左右移動,試試看讓小球去撞牆吧,看看有沒有顯示對應的文字。試試看用 Micro:bit LED 搭配 App Inventor 做出更多功能吧

 

 

相關文章:

[ 電路設計軟體Multisim Blue ] 花朵、小雞、金魚造型LED燈設計

$
0
0

最近我的同事對摺紙產生興趣,於是拿了些手邊的電子零件與水銀電池,洗成一塊電路板做成小吊飾。希望對設計電路板有興趣,但又覺得很難不敢靠近的同學們,可以參考這篇文章看看喔

作者/攝影   豐智/偉伶
時間   2Hr
成本  100元以內
難度   * * *
材料表
  • 水銀電池扣*1
  • 1/4W 220歐姆電阻*1
  • RGB七彩LED燈*1
  • 滑動開關*1

閱讀本篇文章如果有什麼不清楚的地方可以參考看看這幾篇文章

 

今天跟大家分享的是造型LED燈,透過摺紙寶典,我們希望能讓基本的LED燈可以添增更多的趣味,這次搭配摺紙金魚、花朵、小雞,希望能帶來更多變化。

摺紙的部分,我們參考下列的摺紙連結,各位也可以設計各式各樣的摺紙造型做裝飾喔。

 

1、摺紙世界-禮盒裝飾花連結

2、ORIGAMI-折り紙 摺紙教學 –Fish連結

3、超簡単折り紙 雄鶏です連結

 

 

希望能設計出搭配各種勞作的小電路是這次的設計目標,設計一個電路作品,總共分為下列幾個步驟。

  • 繪製電路圖、確定使用各項電子元件的材料、數量、元件的大小
  • 將電路圖的資料轉換成電路板
  • 進行電路板布局
  • 進行電路板布線

我們來看看吧

1、繪製電路圖

Step1:我們首先要確認預想的電路圖,以及使用到的電子元件,下圖是作品的電路。

造型燈電路圖.jpg

 

我們這次使用的電子元件有:LED燈、220歐姆電阻、滑動開關(三隻腳)

 

 

Step2、確認過電路圖與材料後,接著開啟Multisim Blue繪製電路圖,今天我們快速的找到這些元件,如果想要複習軟體操作的人可以看這篇:[電路設計軟體Multisim Blue]電路繪製-基本LED電路篇

搜尋電子元件:在軟體上方的選項[Place]à[Component]

選擇電子元件[component]

1、選擇三個腳位的開關,這裡使用排針做取代,排針腳位之間的距離為2.54mm

開啟[Component]之後選擇:[Mouser Database]à[Connectors]à [HEADER_PIN_Single_Row_Molex]

選擇3pin 2.54mm排針

 

2.選擇電阻

開啟[Component]之後選擇:[Master Database]à[All groups]à[RESISTOR]à[220]

選擇220歐姆電阻

 

3.選擇LED燈

開啟[Component]之後選擇:[Master Database]à[Diodes]à[LED]à[LED_red]

選擇方法與法一法二相同

 

4.選擇GND、VCC

開啟[Component]之後選擇:[Master Database]à[Sources]à[POWER_SOURCES]à[Ground]、[VCC]

 

所有的電路符號

 

Step3 比照電路圖進行繪製

1、LED燈是否能亮起來,取決於開讓下列哪一條電路導通,當開關往下拉時,LED燈、電阻、電池形成一個迴路。 開關往上拉時,電池的正電沒有接到任何一個迴路,形成斷路。

導通的迴路

2、按照電路圖在Multisim Blue上將電子元件連接起來,將滑鼠移至電子元件其中一個端點,點擊滑鼠左鍵,接著將線拖曳至另一個電子元件的端點,再點擊一次左鍵,你可以拖曳看看電子元件,剛剛的線不會斷掉,會隨著電子元件延伸,代表線是成功連起來。

元件端點的連接

 

3、接線完成後的圖

電路完成圖

 

4、這次使用的電池是焊接比較容易使用的電池扣,這是分享使用Header的一些心得,只要確定好兩個焊接端點的距離,便可以畫出電路圖

 

開啟[Component]之後選擇:[Mouser Database]à[Connectors]à [HEADER_PIN_Single_Row_TE_Connectivity]à[10297-1]

新增單一腳位的排針

分別在GND、VCC接線

電路完成圖

2、將電路圖的資料轉換成電路板

 

在MultisimBlue上繪製完電路圖之後,我們將電路圖轉換成PCB繪圖軟體檔案。

點選[Transfer]à [Transfer to Ultiboard]à[Transfer to Ultiboard Component Evaluator14.0]

電路圖轉電路板

轉換完成後,MultisimBlue會幫助我們開啟PCB軟體:[Ultibaord Component Evaluator Mouser Electronic Edition],電路圖電子元件間的接線,在PCB軟體會將轉換成預拉線,如下圖。

電路板與元件預拉線

電路板與元件預拉線

3、進行電路板布局

這次目標用電路板雕刻機切出一個直徑3cm圓形的電路板

 

Step1將電子元件移至左下角

各位在電路圖上可以看到一個黃色的方框,我們稱為[Board Outline],左下角有一個圓形十字架的圖示,PCB設計板完成後,如果使用電路板雕刻機,我們發現這圖示是電路板雕刻機停下來的原點,為了之後的檔案可以方便使用,請將電子元件全部移到左下角,靠近原點。

你在左邊與上面看到刻度表,只要將滑鼠移至刻度表點擊左鍵,刻度表會出現箭頭與虛線,告訴你箭頭與板框之間的距離,記得把距離單位選成mm喔。

使用刻度表與丈量

 

Step2在左邊與上面的刻度表各拉兩個,標示出3cmX3cm的範圍

元件布局:標示3cmx3cm

 

Step3、編輯Board Outline

1、將滑鼠移至左方的[Design Toolbox]工具列對[Board Outline]點擊兩次,可以對黃色線的板框刪除、縮小放大。

 

Board Outline

 

2、在軟體上方的點選[Edit]à[Selection filter]à[Enable selecting other objects],可以編輯電子元件以外的物件

編輯電子元件以外的物件

 

Step4、畫出一個圓形的Board Outline

  • 點選原本的板框並刪除

點選板框

刪除板框

2. 在黑色的區域點擊右鍵選擇[Graphics]à[Circle]

畫出圓形

 

3、畫出一個圓形Board Outline

畫出圓形

 

Step5、更改電子元件的位置

1、安排完電子元件後,可以點選[View 3D],觀看電子元件的3D顯示圖

View3D

2、安排電子元件時,可以把電子元件更換到另外一面,我們稱電路板正面為[Copper Top]、背面為[Copper Bottom] ,你也可以選擇每一面代表的顏色。(Top預設為綠色、Bottom預設為紅色)

選擇Copper Top

 

3.更換電子元件的板面位置時,首先點選要更換的電子元件,這裡使用LED燈,再點選右上角的[Swap layer],更換的LED顏色便會更改為紅色,代表LED燈更換到背面了

更換電子元件板面位置

電路板布局3DA

電路板布局3DB

 

Step6、丈量水銀電池扣的位置

  • 下圖是水銀電池扣,經過測量長度為24mm、寬度22mm,針腳之間的距離為20mm。再電路板的規劃中,我們可以使用上方與左方的刻度表劃出24x22mm的電池扣空間,在空間之外放置其他的元件。

水銀電池扣尺寸

 

4、進行電路板布線

Step1、使用自動布線

元件與元件之間的預拉線,可以用自動布線規畫最佳的走線路徑,是相當便利的功能,如果你的作品有數百條預拉線,讓軟體幫你布線可以節省更多時間。

選擇右上方的[Start/resume autorouter]或使用快捷鍵(Ctrl + Shift + 8)

自動布線

 

 

Step2、整理布線

這次的作品比較容易,整理布線時首先注意兩點,可以避免走線路徑產生一些不必要的電池輻射(1)線需要轉彎時,轉彎角度應該大於90度(2)轉彎需要再轉彎時,應多走一些距離再轉彎

整理布線

 

Step3 設定Dril與PAD

1、Dril常被稱為鑽孔,顧名思義是使用鑽頭貫穿電路放置需要貫穿固定的電子元件,PAD常被稱為焊盤,是預留作為焊接點的地方。下圖藍色的部份便是PAD,滑鼠左鍵點擊兩次後可以直接設定。

點選PAD

 

2、點選[PAD],左上方選項可以選擇PAD的形狀,為了焊接方便,我們要把PAD的面積變大,但不能碰到相鄰的PAD的或走線。

A、選擇形狀Shape:

選擇[Rectangle]à設定長度[Length]為2mm。

B、選擇大小Size:

選擇[Pad diameter]à設定直徑為2mm。

C、選擇鑽孔大小Hole:

選擇[Dril diameter]à設定直徑為1.2mm。鑽孔大小請依照使用者的鑽刀大小做設定。

設定DrilPAD

 

3、PAD與Dril設定後的參考圖片

設定合適的DrilPAD

 

Step4 設定走線的路徑

設計電路板時,線徑的大小與電磁干擾成反比,線的長度與電磁干擾成正比為了降低不必要的電磁干擾,將線徑加寬。

A、選擇想加寬的走線後滑鼠右鍵,點選[Properties],出現下圖的[Trace Properties]。

B、選擇[General]à到[Measurements]將寬度[Width]調整為2mm。

設定走線路徑寬度

 

線徑加寬設定畫面

路徑加寬度

 

5、完成畫面

這是完成畫面,走線也可以使用[SWAP Switch],將指定的走線換到另外一面

走線於Top板面上

走線於Bottom板面上A

Bottom板面上B

 

完成之後大家可以搭配各種造型的摺紙

 

相關文章:

 

 

 

[App Inventor IoT] 使用BLE控制LinkIt 7697 LED燈

$
0
0

 

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的的LED燈。

作者/攝影   袁佑緣
時間   1小時
成本
難度   * *
材料表
  • LinkIt 7697
  • micro usb線
  • 電腦
  • Android手機

 

App Inventor Extension 安裝

請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。

並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。

如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。

 

本範例的aia檔請到此處下載(https://drive.google.com/open?id=0B0HNqd_8V0OlNjJDTGx0dVNKOTg)。

(建議先下載後重新上傳到app inventor tw的檔案庫上)

 

App Ineventor 程式設計

首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。

接下來請看到Desginer的部份,connect按鈕主要是用來連線到7697的,而下面有兩個按鈕,分別用來控制LED燈的ON跟OFF。

接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的mac address,至於這個mac address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。

再來當按鈕connect按下去之後,就會嘗試連上指定mac address的控制板,如果成功的話就,按鈕就會切換到Disconnect,以等待下一次使用者按下時,就會斷線。

至於定義連線時與斷線時的功能有哪些,則是用下面的when block來決定,只有成功連線時,才能夠控制控制LED的開關。

接下來是本範例的重點部份,當按下ON/OFF開關時,會透過BLE元件的WriteIntValue來傳送訊息給7697,並且是已經指定好service跟characteristic的uuid了,而這個uuid其實是跟Arduino端裡面寫的UUID是一致的,詳情請看下面的範例程式碼。

 

而我們送出的整數數值1或者是0則分別代表LED是要亮或者是暗。

 

LinkIt 7697 程式設計

本範例程式可以在Arduino IDE的範例code上找到,請先確定您的控制板在編輯器中切換成7697,再點選Files->Examlpes->LBLE->SimplePeripheral。

/*
  This example configures LinkIt 7697 to act as a simple GATT server with 1 characteristic.

  To use it, open AppInventor project:

    * 

  Build & install it on Android id

  created Mar 2017
*/
#include <LBLE.h>
#include <LBLEPeriphral.h>

// Define a simple GATT service with only 1 characteristic
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup() {

  // Initialize LED pin
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  //Initialize serial and wait for port to open:
  Serial.begin(9600);

  // to check if USR button is pressed
  pinMode(6, INPUT);

  // Initialize BLE subsystem
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  Serial.print("Device Address = [");
  Serial.print(LBLE.getDeviceAddress());
  Serial.println("]");

  // configure our advertisement data.
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE LED");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE LED");

  // Add characteristics into ledService
  ledService.addAttribute(switchCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(ledService);

  // start the GATT server - it is now 
  // available to connect
  LBLEPeripheral.begin();

  // start advertisment
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(1000);

  Serial.print("conected=");
  Serial.println(LBLEPeripheral.connected());

  if (digitalRead(6))
  {
    Serial.println("disconnect all!");
    LBLEPeripheral.disconnectAll();
  }

  if (switchCharacteristic.isWritten()) {
    const char value = switchCharacteristic.getValue();
    switch (value) {
      case 1:
        digitalWrite(LED_BUILTIN, HIGH);
        break;
      case 0:
        digitalWrite(LED_BUILTIN, LOW);
        break;
      default:
        Serial.println("Unknown value written");
        break;
    }
  }


}

成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。

範例影片

([Appinventor ]使用手機BLE控制7697 LED燈)

 

相關文章:

 

 

【臺北市職能發展學院 X CAVEDU教育團隊】人工智能服務與Opendata大數據專題實作​-學員錄取名單

$
0
0

 

主辦單位:臺北市職能發展學院

培訓單位:翰尼斯企業有限公司

學員錄取名單:

正取

陳O銓 李O漢 粘O詠
沈O財 李O熹 周O和
紀O如 黃O乖 楊O誌
蔡O志 陳O奇 翁O堂
林O源 穆O澤 O豪
郭O龍 陳O桐 黃O逸
蘇O聖 陳O謙 許O斌
丁O濠 孫O文 李O殷
胡O瑞 林O緯 周O杰
平O鈞 陳O峰

上課地點:台北市中山區長安東路一段18號6F (長安東路 / 林森北路交叉口附近)


注意事項:

1.第一次上課請遞交學員資料卡、職能進修契約書,1吋大頭照(2張)、身份證正反面影本。

2.受訓期間膳宿自理,受訓期滿全期訓練成績合格者,由本單位發給結訓證書。於進修課程期間,除公假、病假、喪假外,其餘請假事由一律以事假認定。未依規定辦理請假時,均以曠課論。扣除公假及喪假外,請假時數累積達全期課程總時數1/5(含)以上者、曠課時數達全期課程時數1/10(含)以上者或參訓期間行為不檢,情節重大者,勒令退訓。

3.已報名繳費學員因故無法參訓,得於開訓前申請退還所繳費用,未於開訓前申辦者,已繳交之訓練費用,除該班次停辦外,一概不予退還。

 

更多課程詳情,請參閱CAVEDU教育團隊首頁(http://www.cavedu.com)。

[Micro:bit ] I/O腳位控制

$
0
0

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的的LED燈。

作者/攝影   曾吉弘
時間   3小時
成本
難度   * *
材料表
  • 個人電腦
  • BBC Micro:bit開發板
  • LED x1
  • 麵包板 x1
  • 跳線 x2

 

本文要介紹BBC Micro:bit上的I/O腳位,讀取類比輸入腳位的變化之後來控制開發板上的LED matrix。

 

Micro:bit I/O腳位介紹

Microbit除了明顯的五個腳位(原廠稱為pad)之外,另外還有十多隻腳位,功能定義如下圖。在使用上就如同Arduino或其他的開發板一樣,數位I/O,類比I/O(PWM)、I2C與SPI功能,該有的都有。

在使用上,我們可以用鱷魚夾去夾住pad (0, 1 ,2, 3V GND這五個大的pad),但比較小的腳位在操作上就不是很方便,因為Microbit端建議使用DFRobot BOSON kit for Micro:bit,或是Seeed StudioGrove Inventor kit for micro:bit。如下圖是DFRobot BOSON kit for Micro:bit,您可以看到常用的腳位都做好防呆接頭,其他的腳位也有母座,直接接杜邦線就可以使用了。如果想要用Micro:bit來輸出音效的朋友,左下角的音源接頭,您一定會喜歡的啦。

硬體接線

請將可變電阻先插上麵包板,接著將中間腳位接到Micro:bit0號腳位(#0 pad),接著一側接地(GND)一側接電。

 

請注意Miro:bitGND腳位相當多,但在此使用比較好接的GND pad

Micro:bit程式

寫一個簡單的程式,按下A按鈕之後,會不斷讀取P0類比腳位的狀態(0~1023),如果P0<300的話,亮起 LED matrx 第一列,反之亮起1~4列。您可以自由修改這個判斷值與呈現的效果。

Javascript code

 

有興趣的朋友也可以轉成JavaScript來比較看看,慢慢就會進步喔

input.onButtonPressed(Button.A, () => {
   while (true) {
       if (pins.analogReadPin(AnalogPin.P0) < 300) {
           basic.showLeds(`
               . . . . .
               . . . . .
               . . . . .
               . . . . .
               # # # # #
               `)
       } else {
           basic.showLeds(`
               . . . . .
               # # # # #
               # # # # #
               # # # # #
               # # # # #
               `)
       }
       basic.pause(100)
   }
})

完工了!來試試看吧。確認腳位都沒接錯之後,請慢慢轉動可變電阻,看看LED matrix有沒有變化吧。

 

相關文章:

 

[LinkIt 7697] WiFi 控制RGB三色LED

$
0
0

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Wi-Fi 來控制LinkIt 7697開發板上所接的 RGB 三色LED燈。在此會把7697作為 web server,App Inventor則是透過 IP 搭配指定字元來與它互動。

作者/攝影   曾吉弘
時間   3小時
成本
難度   * * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板
  • RGB LED (共陰)
  • 或三顆不同顏色的LED

 

本文要介紹如何將LinkIt 7697 作為一個簡易的web server (修改自MTK原廠範例),可透過網頁與App Inventor 來控制它。CAVEDU 2017年已經執行了超過30場的 LinkIt 7697研習,請參考我們的教學投影片,也歡迎找我們去上課啦~

 

LinkIt 7697超詳細教學投影片請按我

硬體組裝

請將LinkIt 7697與共陰RGB LED接上麵包板後,按照以下對應來接線:

RGB LED LinkIt 7697
R P11 (D11)
G P9
B P7 (也是板載的USR LED)
GND 任一GND即可

 

完成如下圖

App Inventor

請登入MIT App Inventor之後,建立一個新專案。或直接App Inventor中文學習網匯入本專案原始檔,唯一要修改的地方就是LinkIt 7697於您所指定網路所取得的IP位址。

Designer

  1. 新增一個HorizontalArrangement,其中放入一個按鈕與Label,按鈕是用於設定IP,label則是用於顯示各種訊息。
  2. 新增一個Textbox,Text設為空,Hint則設為”check 7697 ip in serial monitor”,用於輸入7697的實際IP
  3. 新增一個TableArrangement,寬度設為Fill parent,高度為200像素。Row=2。Column=3。接著放入五個按鈕,寬度各為33%,高度則為100像素。這些分別用於讓RGB LED亮紅色(R)、綠色(G)、藍色(B)、白色(W)與熄滅。
  4. 新增一個

 

完成後如下圖:

STEP1 IP變數與設定IP按鈕

 

在此宣告一個變數,內容為”http://192.168.1.73”,這是LinkIt 7697於您所指定網路中所取得的IP。後續會把這個變數值用於Web元件的Url屬性。如果您只有一片LinkIt 7697或已經確定其IP的話,可以在此把它寫死不用修改。

不過為了方便起見,我們可以透過Textbox來設定新的IP,這在您現場有多片LinkIt 7697要控制時很方便。按下Button_setIP按鈕,會先檢查Textbox是為空,如果已輸入內容就將設定結果顯示於Label,否則將顯示錯誤訊息於Label。

STEP2   副程式用於設定URL與顯示訊息

在此宣告一個副程式來管理每次按下按鈕時所發送的字元與顯示訊息。請新增一個procedure,並點選藍色方塊來新增參數,點選副程式與參數名稱即可修改名稱。在此副程式名稱改為sendData,參數名稱為message / command

在sendData副程式中,我們會把送進來的參數分別用於7697的網址(組合結果:http://192.168.1.73/R,不同字元對應不同動作)與要顯示的訊息。最後再呼叫Web.Get來呼叫LinkIt 7697所產生的網址即可。

STEP3   各顏色燈光按鈕

這樣做程式是否變的很清爽呢?每個按鈕的差別只在於參數不同而已,當然如果我們要發送/W出去的話,LinkIt 7697也要有對應的程式才行。簡列如下:

Button_R(紅燈):Red 與 /R

Button_G(綠燈):Green 與 /G

Button_B(藍燈):Blue 與 /B

Button_W(白燈):white 與 /R

Button_off(紅燈):Red 與 /o   (小寫的o~)

LinkIt 7697Wifi範例:

本範例修改自LinkIt 7697的SimpleWebServerWifi範例(就是多加幾個字元而已),重點段落

1.連上指定網路

while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status

2.於7697簡易網頁中網頁顯示訊息,您可在7697所產生的網頁上編寫簡易的html。在此使用超連結可以直接點選。當然目標是透過App Inventor來發送囉。

client.print("Click <a href=\"/R\">here</a> to light red<br>");
client.print("Click <a href=\"/G\">here</a> to light green<br>");
client.print("Click <a href=\"/B\">here</a> to light blue<br>");
client.print("Click <a href=\"/W\">here</a> to light white<br>");
client.print("Click <a href=\"/o\">here</a> to light off<br>");

3.檢查網址並呼叫自定義函式來控制LED。如果我們檢查到某次client request(手機或透過網頁點選)的結尾等於我們所指定的字元,就呼叫led()函式,並透過參數來決定哪一個顏色亮起。1,0,0就是紅色,0,0,1是藍色等。

 

在此我們並沒有調整每一種顏色的亮度,所以只有亮暗兩種狀態,您可以思考一下如何透過這樣的架構把參數送進來給analogWrite()函式來調整RGB LED的亮度,例如(128, 130, 255),這樣顏色的變化會更繽紛喔!

// Check client request
        if (currentLine.startsWith("GET /R")) {  // GET /R to light red
          led(1,0,0);     
        }
//其餘省略

void led(int R, int G, int B) {
  digitalWrite(11, R);
  digitalWrite(9, G);
  digitalWrite(7, B);
}

操作

請先確認7697端程式已經執行,並開啟Serial Monitor來看7697的IP為何。將App Inventor中的ip變數值改好之後執行(由於本範例並非使用藍牙,所以模擬器也可執行)。

確認好IP之後,先開啟瀏覽器,您所使用的裝置需與7697位於同一個網段之下才行喔,如以下的192.168.1.73。

開啟app吧,設定IP成功畫面如下圖左,點選各個按鈕可以看到畫面右上角的label會顯示對應的訊息,您的RGB LED順利亮起來了嗎?

 

Simple:13

/*
  WiFi 7697 LED control
  If the IP address of your shield is yourAddress:
  http://yourAddress/R to light red
  http://yourAddress/G to light green
  http://yourAddress/B to light blue
  http://yourAddress/W to light white
  http://yourAddress/o to turn off LED

  Circuit:
    LinkIt 7697 HDK
    RGB LED (common cathode) 
    R - LinkIt D11
    G - LinkIt D9
    B - LinkIt D7

  created 25 Nov 2012
  by Tom Igoe
  modified 3 Nov 2017
  by CAVEDU
*/
#include <LWiFi.h>

char ssid[] = "ssid";      //  your network SSID (name)
char pass[] = "pass";   // your network password
int keyIndex = 0;                 // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
WiFiServer server(80);

void setup() {
  Serial.begin(9600);      // initialize serial communication
  pinMode(LED_BUILTIN, OUTPUT);      // set the LED pin mode
  pinMode(11, OUTPUT);  //R
  pinMode(9, OUTPUT);   //G
  pinMode(7, OUTPUT);   //B

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status
}


void loop() {
  WiFiClient client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println("new client");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // the content of the HTTP response follows the header:
            client.print("Click <a href=\"/R\">here</a> to light red<br>");
            client.print("Click <a href=\"/G\">here</a> to light green<br>");
            client.print("Click <a href=\"/B\">here</a> to light blue<br>");
            client.print("Click <a href=\"/W\">here</a> to light white<br>");
            client.print("Click <a href=\"/o\">here</a> to light off<br>");

            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          } else {    // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check client request
        if (currentLine.startsWith("GET /R")) {  // GET /F to light red
          led(1,0,0);     
        }
        if (currentLine.startsWith("GET /G")) {  // GET /G to light green
          led(0,1,0); 
        }
        if (currentLine.startsWith("GET /B")) {  // GET /B to light blue
          led(0,0,1);
        }
        if (currentLine.startsWith("GET /W")) {  // GET /W to light white
          led(1,1,1);
        }
        if (currentLine.startsWith("GET /O")) {  // GET /O to light off
          led(0,0,0);
        }
      }
    }
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
}

void led(int R, int G, int B) {
  digitalWrite(11, R);
  digitalWrite(9, G);
  digitalWrite(7, B);
}

 

相關文章:

[ 3D繪圖 ] 自行繪製超實用的水管連接器

$
0
0

 

生活中,有時候我們會需要某些量身訂做的東西,但商店或網路又買不到,或者是單價太高,這個時候就需要自己動手做,而今天要來教大家做的東西是「水管連接器」,相信這個東西在水電行應該都可以買得到,但若是想要特殊形狀的連接器,而水電行沒有賣時,就一定要來動手畫一個囉

作者/攝影  郭皇甫
時間 3D繪圖:30分鐘

3D列印:1小時又17分鐘

成本  3D列印件54元(4.5元/分鐘)
難度   * * *
材料表
  • 3D印表機:印匠Enjoy
  • 層高設定:0.2mm
  • 支撐:開啟
  • 列印速度:100
  • 列印溫度:200

首先,我們需要先測量實物的大小,主要測量的東西是水管的口徑,口徑的大小會決定連接器的大小,在這邊測量的口徑有外徑跟內徑,外徑為18.1mm;內徑為14.3mm。得到這二個數據後,我們就可以開始畫圖囉!請跟著以下的步驟一起做。

 

STEP1.繪製80mm實心圓柱。

您可以使用不同的方法來完成此步驟,不一定要遵循小編的方式來做。在此步驟裡,我們會使用到「鏡射線」與「掃掠」。

 

A.在草圖上使用建構直線功能,繪製一條直線,在直線上按右鍵,選擇「設為鏡像線條」,如此一來,在線條左邊畫圓的同時,右邊也會出現同樣大小的圓,是不是很方便呢?

圖01 繪製鏡像線條

 

B.選擇線條功能,以建構直線為中心,往左邊畫出一直線,線段長為40mm。(若您有將建構直線先設為鏡像線條時,您會看到右邊同時會出現一樣長的直線)

圖02 繪製40mm直線

 

C.選圓形功能,在格線空白處畫出一個同心圓,內圓直徑為14.5mm;外圓直徑為18.4mm。(在這裡的內圓直徑已測量過可以剛好合進水管的內壁,外圓的直徑可以自行更改,請根據3D印表機的狀況,調整這二個數值,例如原本畫的尺寸為14.5mm,但印完後會稍微內縮一點,可能就會變成14.3mm,剛好可以塞進水管內。)

圖03 繪製一個同心圓

 

D.選擇拉動功能,這時會轉換到3D模式,將同心圓選取起來後,點選移動功能,在左方的功能中,選擇「至」,點擊直線的端點後,同心圓的圓心就能與端點重疊。(「至」的功能是用在需要將線段、面或物體對齊的時候,在拉動裡也有「至」的功能)

圖04 移動同心圓至直線的一端點

 

E.點擊同心圓面,選擇移動功能,這時在圓心會出現三軸,按住並拖動直線的箭頭可以向著不同的方向移動;按住並拖動圓弧箭頭可以旋轉不同方向的角度,而在這裡,我們需要按住圓弧箭頭,並旋轉90度,讓圓面可以和直線呈現垂直。

圖05 將同心圓面旋轉90度

 

F.由於我們的圓柱是呈現桿麵棍的形狀,外粗內細,所以在這裡我們要形成二種不同長短粗細的圓柱。點擊內圓面,選擇拉動功能,在左方找到「掃掠」後,點擊直線,按下ENTER即完成了內圓柱。(掃掠是拉動裡的特有功能,它能讓面按照繪製的路徑,形成該有的形狀,在繪製不規則或是特殊形狀的物體時,相當方便)

圖06 使用掃掠功能,形成內圓柱

 

G.選擇移動功能,點擊剩下的外圓面,將其往前移動20mm。

圖07 將外框圓面往前移動20mm

 

H.選擇拉動功能,將外框圓往前拉動40mm。如此一來,左右兩邊會各凸出一段能夠塞入水管內壁。

圖08 將外壁圓往前拉動40mm

 

 

STEP2.繪製80mm空心圓柱。

A.回到草圖模式,利用直線與圓形,畫出線段長80mm的直線,並以直線的一端點為圓心,畫出同心圓,內圓直徑為18.4mm;外圓直徑為22.9mm。(此處外圓直徑您可以任意調整,建議厚度不要小於3mm,以免容易折斷)

圖09 繪製直線與同心圓

 

B.點選3D模式,同樣的,我們要先將同心圓面旋轉90度與直線垂直,此步驟與STEP1的E相同。

圖10 將同心圓面旋轉90度

 

C.點選外框圓面,選擇拉動功能,往下拉動80mm形成圓柱。如此一來,空心圓柱就完成囉!

圖11 拉動形成空心圓柱

 

STEP3.組合兩個圓柱體。

全選空心圓柱體後,利用移動功能中的「至」,點選實心圓柱體的中心點,即可將二者的中心重疊在一起。

圖12 移動空心圓柱至實心圓柱的中心

 

STEP4.挖空圓柱。

雖然空心圓柱裡面已經被挖空,但現在交叉的區域內會有實心圓柱的一部份,而我們想要將這部份拿掉。

A.以空心圓面當作草圖的平面,將草圖稍微拉離圓面一段距離,接著以空心圓面為中心,畫一圓,圓直徑為18.4。選擇拉動,點擊圓面,輸入拉動長度110mm,穿過空心圓柱(如圖13、14、15)。

圖13 將草圖平面拉離圓面

圖14 畫一直徑為18.4mm的圓

圖15 拉動長度為110mm的圓柱

B.再次點擊圓面,選擇拉動,以相同的方式,再拉動一次。這時,您會發現,原本的圓柱體會隨著您拉動的距離增加而減少,達到了我們要讓它變成空心的目的。

圖16 以同方向拉動,形成空心

 

STEP5.形成溝槽。

接下來我們要在空心圓柱內部形成一段20mm的溝槽,主要是為了讓水管進入連接器時,能卡在某一段上,而不會穿過整根連接器,這樣的製作方式也是為了可以讓連接器的兩端,能夠同時連接二根水管。

A.以空心圓面為草圖平面,在中心畫一同心圓,內圓直徑為15.5mm;外圓直徑為18.4mm。(在這裡的內圓直徑您可以自行設定,主要是讓水管可以卡住即可)

圖17 畫一同心圓,內圓直徑為15.5mm

 

B.點擊同心圓面,選擇移動,點選「至」,點選空心柱圓面,將同心圓貼住空心柱圓面後,再往內部移動30mm。

圖18 將同心圓面往內部移動30mm

 

C.選擇拉動功能,將同心圓面往上拉動20mm,如此一來,即形成了溝槽。圖20的剖面圖可以清楚的看到,中間形成溝槽的地方。

圖19 拉動同心圓面形成溝槽

圖20 空心圓柱剖面圖

 

STEP6.圓角修飾。

最後,我們在實心圓柱的二邊,與空心圓柱內圓邊上,進行圓角修飾。點擊拉動,選擇要修飾的邊,輸入要進行圓角的大小即可。(在這裡的實心圓柱二邊圓角為2mm;空心圓柱內圓角為1mm,您也可以根據您的需求進行調整)

圖21 進行圓角修飾

 

完成後,趕快使用3D印表機印出來試裝一下吧!是不是也可以拿來作各種有趣的組合呢?

圖22 水管組合連接器

 

您也可以依照自己的需求,製作各式各樣的連接器,當作教具也很好用喔!如果您想嘗試列印檔案,可以在Thingiverse裡找到喔。今天的教學就到這邊,下次又將會帶給大家什麼樣的驚喜呢?敬請期待喔!

 

相關文章:


[App Inventor ] Microbit 磁力感測器

$
0
0

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的的LED燈。

作者/攝影   曾吉弘
時間   1小時
成本
難度   * * * *
材料表
  • 個人電腦
  • App Inventor開發環境
  • 支援BLE的Android手機
  • BBC Micro:bit開發板

 

本文要介紹如何藉由最近非常熱門的BBC Micro:bit開發板上的磁力感測器來控制App畫面上的小圖示轉動。Micro:bit板子上已經具備了BLE藍牙通訊功能,搭配app Inventor寫好的micro:bit extesion,就能有更多互動的效果。

 

範例 aia檔下載請按我

 

藍牙配對

 

Micro:bit端設定:

  1. 同時按住Microbit 正面A、B按鍵,不要放掉
  2. 按住A、B鍵時,把背面的Reset 鍵按下後再放開。
  3. 這時應該可以看到 “PAIRING MODE!” 以跑馬燈方式出現在Microbit LED 螢幕上,若看到這訊息,便可以放開A、B鍵。
  4. PAIRING MODE! 結束後,會看到一個圖形出現在Microbit LED 螢幕上,不同的Microbit 出現的圖案也不同,這是Microbit 不同裝置獨特的”簽名” (Signature) 。

5.這時候的Microbit 已經準備好跟其他裝置配對,請看以下影片教學

 

 

 

Android手機端設定:

  1. 進入Android手機的設定–>藍牙
  2. 確認Micro:bit 已進入配對模式
  3. 當Micro:bit上的‘PAIRING MODE!’ 顯示完,搜尋(每隻Android手機這個選項的文字不一定相同,但意思差不多),應該會看到類似 micro:bit [XXXXX]的選項,其中XXXXX 會根據每片micro:bit而不同。點選該裝置來配對。

4.micro:bit 會出現向左的箭頭,然後Android裝置上會跳出畫面要求輸入配對PIN碼的視窗。

5.按住Micro:bit 的按鍵A ,這時microbit 會連續出現六個數字,這就是配對碼。

6.回到Android裝置上,輸入這六個數字。如果Microbit 出現[V],代表配對成功。如果是[X]代表沒成功,請再試一次。

 

編寫程式來取得Micro:bit磁力感測器

匯入BLE 與 micro:bit extension

 

請登入MIT App Inventor官方網站,建立新專案,在Designer葉面中點選Palette左下角的Extension,再點選”Import extension“與”URL:

  1. 貼入以下兩個 extension link:
  2. 請加入 Microbit_Magnetometer這個元件,這是一個非可視元件。並把它的 BluetoothDevice 屬性設為 “BluetoothLE1″。這步驟很容易忘記,別漏掉了
  3. 加入四個按鈕放入 horizontalArrangement元件中,分別用於掃描、停止掃描連線與斷線
  4. 加入1個顯示訊息用的label,用於顯示連線狀態
  5. 加入一個 ListVeiw,當掃描到鄰近的BLE裝置時會顯示在這裡 (到此與MIT所提供的基礎連線測試程式相同)
  6. 加入一個Canvas,寬高皆為320像素
  7. 在Canvas中加入一個ImageSprite,使用任何您喜歡的圖案都可以,在此使用MIT App Inventor新的小蜜蜂logo。
  8. 最後加入4個顯示訊息用的label,用於顯示連線狀態、X、Y、Z軸與方位角(bearing)

Blocks頁面

  1. 掃描與連線

在此的做法都差不多,先點選ScanButton來掃描鄰近可用的BLE裝置(以本專案來說目標是micro:bit,但當然也會出現其他裝置例如手機筆電之類的)。找到裝置之後就會出現在畫面中的ListView中,選取micro:bit後點選ConnectButton就可以連線(BluetoothLE.Connect指令)。

  1. 連線成功後開始更新磁力感測器值

在此設定更新速度(reporting period) 為20ms,並要求micro:bit開始回報方位角與各軸磁力資料更新。

  1. 顯示磁力偵測值並控制ImageSprite

Microbit_Magnetometer1.MagnetometerBearingReceivedMagnetometerDataReceived事件中,我們取出各參數並顯示於對應的Label。並用X、Z軸數值來控制ImageSprite的X. Y座標,您可以改為其他的軸向資料或用於控制其他的效果,很多效果都可以嘗試。

斷線

斷線時會呼叫 bluetoothLE元件來中斷藍牙連線,確認斷線之後則顯示相關訊息。

完工了!來試試看吧。請確認您的Micro:bit與Android已經配對好了。按下按鈕應該可以看到畫面上有一些數字不斷跳動,試著拿個小磁鐵在Micro:bit附近晃晃(別拿太強的,弄壞我不負責喔),看看數字與小圖案的變化。試試看用 Micro:bit搭配 App Inventor 做出更多功能吧

 

相關文章:

 

 

完成如下圖:

 

[MIT App Inventor募資計畫] iOS平台即將推出!

$
0
0
撰寫/攝影 曾吉弘

阿吉老師來MIT擔任交換學者已經一個月了,看到這邊真的有一群非常優秀的人很努力地在傳達對於教育上的堅持,提供好的開發平台也是一種堅持。俗話說的好,錢非萬能,沒錢卻萬萬不能。很高興一來美國就參與到MIT App Inventor的募資計畫,目標是十萬美金,本文編寫時是12000美金左右,12%。

 

愈簡單使用的東西,下面要做的東西就愈多。

 

由Hal Abelson教授帶領的App Inventor團隊從2011年開始著手把App Inventor從Google搬過來並重新開發App Inventor 2,舊版的/zip code還能轉成新版.aia檔。後續又把底層整個抽掉改用Blockly來實作,這些都是上層看不到的東西,力求讓大家使用起來的感覺都保持一致。

上層元件包含測試中的背景服務、map與machine learning、開發板整合(我主要就是做這個),到2018 Q1即將推出的iOS平台,沒有一個是簡單的東西。有在寫行動裝置app的人就知道要出一個跨平台的開發工具真的不好搞,更何況,Android / iOS 年年都推新的作業系統,對於開發者來說真是喜樂參半。

無形的成本很容易被低估。例如App Inventor 中文學習網,幾乎都是用夜深人靜的時候在寫的,有時候突然想到一個點子我就會先記在手機或是記事本中,後續趕快找時間做出來變成一篇文章放上去。

App Inventor 中文學習網每週的流量都很高,期中期末考之前會達到高峰。我接過罵人的信(真的用罵的,很不客氣)說文章很多錯,code不會動(其實大概只有不到10% 是真的寫錯)或說太深奧看不懂之類的;也接過國小學生的感謝信:”謝謝阿吉叔叔,我媽媽說這個網站很棒”,雖然不太懂這個小朋友到底要講什麼,但還是很感動啦。

 

如果我今天也來募資一下,不知道多少朋友會支持。

教育談錢傷感情,誰說的?開發板一片都知道拿500塊出來買,那為什麼要期待別人”免費”幫忙看code?

有時候想想,自己半夜在寫這些東西不知為何?我寫這些技術文章,不等於我要24小時回答問題哩(書中錯誤不在此列,CAVEDU對於出版品一向是勇於負責,認錯到底) 好像還是因為覺得App Inventor 很好,CAVEDU再怎樣也是有EDU三個字,教育的初衷我們會堅持下去。

碎碎念完畢,來看看這次MIT募資案的等級吧。金額不限,只要有贊助就可以列名 donor wall (我有看到有人捐 0.01美金…   應該是按錯吧),在此列出$100美金以上的項目:

 

  • $100   Digital Poster (特製數位海報檔,捐獻者列名於海報與感謝頁)
  • $250   Beta Test (可提早使用/測試 App Inventor iOS,感謝頁外加數位獎章、Bee app與列名數位海報檔)
  • $500   Signed Book (Structure and Interpretation of Computer Programs實體簽名書一本(Hal Abelson and Gerald Jay Sussman, MIT Press, 1996)、App Inventor馬克杯與上述項目
  • $1,500 Education Kit (實體App Inventor蜜蜂機器人一隻,適用於物聯網教學。App Inventor馬克杯與上述項目
  • $10,000   Meet the Team 與開發小組共進晚餐,App Inventor全員實體簽名海報與所有上述項目(旅費要自己出啦~)

 

以下是App Inventor Bee robot示意圖,是不是很可愛呢?

[ LattePanda] 結合雲端服務-MCS與ThingSpeak

$
0
0

這次向各位介紹常用的雲端服務,分別是台灣聯發科技公司搭配旗下LinkIt系列開發板之MCS與ThingSpeak,我們透過LattePanda實作。你可以從遠端來控制板子的腳位狀態或是檢視板子狀態與感測器的數值變化。類似的雲服務近年來如雨後春筍般冒出來,對於想找尋免費方案的使用者或教學單位來說是相當好的事呢。

作者/攝影   阿吉/豐智
時間   1小時
成本
  • 光感測器約NT200
  • 溫溼度感測器約NT160
難度   * * *
材料表

第一個範例是上傳LattePanda之Arduino的A0類比輸入腳位狀態到MCS雲服務,可以根據我們所設定的條件來觸發手機推播訊息。這裡使用DFRobot套件包中的環境光感測器(或可以改用一般常見的光敏電阻)。

 

一、認識MCS雲服務

MediaTek Cloud SandBox(MCS)是聯發科技創意實驗室為旗下LinkIt系列開發板所提供的專屬網頁介面雲端平台,具有物聯網裝置最需要的資料儲存及裝置管理服務。MCS可以很快速地建立雲端應用程式,對於有意將裝置原型快速商品化的人來說,是一套相當便利的系統。它可以讓使用者專注在取得最重要的實體運算資料,不需要處理網路協定。而在MCS所提供的各種資料通道(Data channel)中,你可以輕易的為物聯網裝置建立一個控制面板,還能夠使用專屬的Android手機應用程式來檢視喔!

 

二、MCS操作說明

接下來會依序介紹如何在MCS上建立原型(prototype)建立資料通道(Data channel),以及透過REST API進行溝通。完成後就可以從網頁或手機應用程式來觀看我們所上傳到MCS的資料啦!

請先到MCS網站(https://mcs.mediatek.com)註冊一個帳號,登入後的首頁如圖10-1。

01-MCS主畫面

 

MCS專有名詞介紹

在開始進入專案之前,介紹一下常見的MCS的專有名詞:

  • 原型(Prototype):裝置原型,具備各種資料通道。
  • 資料通道(Data channel):帶有時間資訊的資料串,分為控制器與顯示器,並根據不同的資料型態有不同的外觀。
  • 資料點(Datapoint):每筆上傳的資料。
  • 測試裝置(Test Device):某一時間點的原型,具備自動產生的DeviceId與DeivceKey。
  • DeviceId、DeviceKey:這組資訊無法修改,用於鎖定測試裝置,需要寫在程式碼中。

圖10-2 MCS雲服務架構(圖片來源:https://github.com/Mediatek-Cloud/MCS)

 

MCS選單功能介紹

  • 開發(Development):
    • 原型(Prototype):新增修改原型、資料通道與測試裝置
    • 測試裝置(Test Devices):已建立之測試裝置清單,可以與開發板互動
  • 管理(Management)
  • 資源(Resources):教學文件、API參考資料、手機端程式下載與更新日誌等。
  • 幫助(Help):常見問題、論壇、回饋
  • 個人檔案:設定使用者大頭照、系統語系以及開啟用於接收App推播訊息的手機(須先安裝MCS Android程式)。

資料通道(Data channel)

資料通道根據其動作分成兩種:用來發送訊息給開發板的控制器(Controller)跟接收開發板回傳的資料的顯示器(Display)。本範例將使用一個整數資料型態的顯示介面來接收來自LattePanda的資料。

表說:資料通道內容比較

三、MCS設定

接下來要帶各位在MCS上建立一個整數資料型態的顯示介面來接收來自LattePanda的資料。

  1. 登入MCS之後,請點選畫面左上角的「開發」,選擇「原型」
  2. 在畫面中點選「Create prototype」來建立新的原型。請按照以下設定完成原型設定:
    • 產品原型名稱:LattePanda
    • 產品原型版本:0
    • 硬體平台:Others
    • 產業:其他
    • 應用程式:其他

View post on imgur.com

創建原型

 

3.進入這個原型之後,請點選建立資料頻道,先選擇顯示器。並按照以下設定完成原型設定:

請注意實際上要填入程式的是資料通道Id,但由於實際上課時多數學員容易搞混,為求簡潔,建議資料通道名稱與Id可以使用相同名稱。

  • 資料通道名稱:sensor
  • 資料通道Id:sensor
  • 描述:隨意填入
  • 資料型態:在此請選整數

單位:在此請選「其他」,後續您可根據所使用的感測器來選擇正確的單位

View post on imgur.com

新增整數型顯示器資料通道

 

4.這樣具有一個顯示器資料通道的原型就建立完成了,請回到原型頁面可以看到方才所建立的原型,由於在此尚未建立測試裝置與裝置,因此兩個數字都是0。請點選其右上角的「…」,可以編輯、複製、匯出以及刪除。其中匯出之後的JSON檔可以讓別人直接匯入來建立原型,這個做法在原型已經很複雜時非常好用。

編輯原型

5.接著是要建立測試裝置(test device)。請點選畫面右上角「創建測試裝置」,在此請輸入裝置名稱即可。

建立測試裝置

 

6.建立測試裝置之後,請進入測試裝置頁面。與原型頁面有點像,但是您可以在頁面右上方看到DeviceId與DeviceKey兩筆參數。這兩筆資料也要填入程式中。

建立測試裝置完成

7.測試裝置設定完成後,就能將建好的測試裝置透過DeviceIdDeviceKey與別人分享,也可以自行設定觸發條件,讓MCS寄信給你。接著在原型頁面下點選「Trigger&Action」標籤,再點選「+ Add trigger & action」來加入新的觸發條件與動作。在此需要三個步驟:

  • 觸發條件名稱請隨意輸入,這會成為手機推播訊息標題或是電子郵件標題。

 

編輯觸發條件

  • 這時會根據既有資料通到來建立觸發條件,請選擇方才建立的資料通道:sensor,條件請設定為大於800

  • 最後一步是選擇觸發動作。動作類型請選擇「手機推播」(另外還有電子郵件與觸發其他網路服務的Webhook選項)。內容請輸入:

LattePanda’s A0 value exceeded: ${deviceName} / ${value}」,其中${deviceName}與${value}可以自動代出裝置名稱與觸發條件時的數值。

選擇觸發動作

8.請注意如果要使用手機推播功能,先到個人檔案中(MCS畫面右上角)打開所要接收推播訊息的手機,如下圖。手機需要先安裝MCS app(目前只有Android版)。

在個人檔案頁面打開要接收推播訊息的手機

 

View post on imgur.com

在測試裝置的「觸發條件與動作」標籤中檢查

在Google Play安裝「 MediaTek Cloud Sandbox」手機程式

程式說明

先安裝Python2.7(https://www.python.org/download/releases/2.7/),建立一個mcs.py檔之後貼入下方的程式碼,修改對應資訊之後使用以下指令執行:

   python mcs.py

執行順序1、先上傳Arduino端的程式之後,2、再執行Python或Node.js任一程式即可。Python或Node.js會透過我們在程式中所設定的序列埠號向Arduino要資料,即類比腳位A0的資料。

之所以使用這樣的架構,雖然使用了兩種程式語言,但是可以發現程式的總行數簡化很多。如果後續改用Raspberry Pi搭配Arduino或是7688 Duo的話,也可以看到這樣的混搭應用。

Python

#1~#3匯入了本程式所需的Python函式庫,其中serial是用來與序列裝置通訊,也就是Arduino。

#05是指定LattePanda上的Arduino晶片所取得的COM埠號,例如「COM4」。

#07 08 則是您先前辛辛苦苦在MCS上取得的測試裝置DeviceId / Key

#10   MCS所設定的資料通道ID

#22   無窮迴圈

#23   抓到來自Arduino丟來的第一筆資料’a’,這等於是標頭檔,以避免封包遺失對於通訊品質的影響。

#24 使用ser.read()取得來自Arduino的資料

#30 上傳資料到MCS

 

mcs.py範例

import serial
import time
import requests

ser = serial.Serial('COMX',9600) 

device_id = "Your device ID"
device_key = "Your device Key"

data_channel = "sensor"
data_channel +=",,"
url = "http://api.mediatek.com/mcs/v2/devices/" + device_id
url += "/datapoints.csv"

def MCS_upload(value,length):
        data = data_channel+str(value)
        r = requests.post(url,headers = {"deviceKey" : device_key,'Content-Type':'text/csv'},data=data)
        print r.text

print "Start"
while True:
        if ser.read()=='a':
                IncommingNum = ser.read()
                sensor = int(ser.read(int(IncommingNum)))
                a = 8
                a += int(IncommingNum)
                MCS_upload(sensor,a)

Node.js

Node.js也是相同的概念,我們可以比較一下與Python的異同,然後選一個喜歡的程式語言來開發。記得先安裝Node.js(https://nodejs.org/en/)。

請建立一個mcs.js檔之後貼入下列內容,修改對應資訊之後使用以下指令執行:

   node mcs.py

mcs.js範例:

var mcs = require('mcsjs');
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("COMX",
{baudrate: 9600
});

var myApp = mcs.register({
        deviceId: 'your device ID',
        deviceKey: 'your device Key',
});

serialPort.on("open", function () {
        receivedData ="";
        serialPort.on('data',function(data)
        {
                receivedData =data.toString();
                a = receivedData.length;
                myApp.emit('sensor','', receivedData.substring(2,a));
                //從字串的2號位置取長度a,即可取得資料本身
        });
});

 

Arduino

Arduino端程式很單純,主要是多開了一個序列連線(#5的Serial1,代表LattePanda對Arduino的序列通訊)。進入loop()函式之後,#11~#13為搭配標頭a、資料長度與資料本體結合成一個封包之後發送給LattePanda端的Python、Node.js或其他程式。

Arduino端程式

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

#define sensorPin A0

 

void setup() {

Serial.begin(9600);   //Serial monitor

Serial1.begin(9600); //LattePanda對Arduino的序列通訊

}

 

void loop() {

int Sensor = analogRead(sensorPin);

Serial.println(Sensor);   //顯示A0腳位狀態

Serial1.print(‘a’);

Serial1.print(String(Sensor).length());

Serial1.print(Sensor);

//#11~#13為搭配標頭a、資料長度與資料本體

//結合成一個封包之後發送給LattePanda

delay(1000);

}

實際執行

請先將Arduino端程式上傳到LattePanda的Arduino上,接著開啟Windows的命令提示字元來執行Node.js或Python(兩者任一)即可透過序列埠取得來自Arduino端的資料之後上傳到MCS雲服務,我們可以看到數值變化,並點選該資料通道的右上角即可看到歷史數值變化,如下圖。

也可由MCS手機端App檢視資料。

當數值超過我們所設定的上限時, Android手機會收到來自MCS手機端程式的推播訊息,如下圖。

View post on imgur.com

上傳溫溼度感測器資料到ThingSpeak雲服務

這次使用的是DFrobot之DHT11溫濕度感測器-連結

ThingSpeak雲服務與設定

ThingSpeak是另一個好用的雲服務,可以接收來自各種開發板或單一程式傳上去的資料,在網站上可以找到很多熱門開發板的現成範例,包含Arduino、ESP8266與Raspberry Pi等。請開啟ThingSpeak網站(https://thingspeak.com/)註冊一個帳號之後登入,登入之後主畫面如下圖:

ThingSpeak端設定

登入ThingSpeak網站之後點選「Channels」來建立新的Channel,並如下圖填入相關資訊,我們要把DHT11溫濕度感測器的溫度與濕度執分別傳上去,因此請將Field1填入temperature,Field 2則填入humidity

建立Channel之後,點選API Keys 標籤,請把上圖中的Channel ID與Write API Key記下來,後續要把這兩筆資料填入Visual Studio程式中。

於Visual Studio中讀取溫濕度感測器資料

糗確認在LattePanda上是否安裝Microsoft Visual Studio 2015(或以上)。

Arduino

  1. 在Arduino IDE中匯入Adafruit DHT11函式庫,請由函式庫管理員中搜尋「DHT11」後點選Install按鈕即可。

  1. 接著下載Arduino程式碼-連結,找到ino後上傳到LattePanda Arduino上即可。

本範例主要是如何透過Visual Studio取得Arduino的資料之上傳到ThingSpeak雲服務。架構與上一個範例使用Python是一樣的,看各位在PC端喜歡用什麼樣的程式語言。當然在ThingSpeak網站上也可以找到Python結合Arduino的範例,這樣做法就與上一個專題差不多了。

請開啟一個新的Visual Studio C#專案,並於Program.cs中貼入以下程式碼:

program.cs範例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using LattePanda.Firmata;

namespace DHT
{
    class Program
    {
        const string WRITEKEY = "THINGSPEAK_KEY_HERE"; //ThingSpeak Key
        const int DELAY = 20;          //Delay time for send packet to ThingSpeak
        const int GET_TEMPERATURE = 0x47;
        const int GET_FAHRENHEIT = 0x48;
        const int GET_HUMIDITY = 0x49;
        static void Main(string[] args)
        {
            Arduino arduino = new Arduino();
            while (true)
            {
                Console.WriteLine("Receiving sensor data...");
                arduino.DHT(GET_TEMPERATURE); 
//For Fahrenheit : GET_FAHRENHEIT
                Thread.Sleep(2000);
                string temp = arduino.STRING_DHT;
                //
                arduino.DHT(GET_HUMIDITY);
                Thread.Sleep(2000);
                string hum = arduino.STRING_DHT;
                try
                {
                    string rec = "";
                    string strUpdateBase = "http://api.ThingSpeak.com/update";
                    string strUpdateURI = strUpdateBase + "?key=" + WRITEKEY;

                    strUpdateURI += "&field1=" + temp;
                    strUpdateURI += "&field2=" + hum;

                    HttpWebRequest request = WebRequest.Create(strUpdateURI) as HttpWebRequest;
                    request.Timeout = 5000;
                    request.Proxy = null;
                    //request.Accept = "application/xrds+xml";  
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    WebHeaderCollection header = response.Headers;
                    var encoding = ASCIIEncoding.ASCII;
                    using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
                    {
                        rec = reader.ReadToEnd();
                        Console.WriteLine("The data was successfully sent. Node Number: " + rec);
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy - HH:mm:ss") + "      Temperature: " + temp + " °C" + "       Humidity: " + hum+" %");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                }
                Thread.Sleep(1000);
                for (int i = 0; i <= DELAY; i++)
                {                 
                    Console.Write(".");
                    Thread.Sleep(1000);
                }
                Console.WriteLine();
            }
        }
    }
}

實際執行

存檔之後點選 Start 按鈕,會看到Visual Studio執行畫面:

這時請開啟ThingSpeak網站,進入剛剛設定好的Channel,應該會看到類似下方的畫面,試著對感測器呵氣來改變溫度與溼度吧!

於ThingSpeak網站檢視溫度與濕度資料變化

這次介紹兩種雲服務:MCS與ThingSpeak,雖然功能上比Microsoft Azure來得少多了,但使用流程也因此簡化許多,功能上大致上還是可以滿足我們從雲端控制板子腳位或顯示板子資料等兩大訴求。請根據大家的使用需求來選用合適的雲服務。

 

相關文章:

[ App Inventor IoT ] LinkIt 7697使用 BLE(藍牙4.0)控制伺服馬達

$
0
0

這次向各位介紹常用的雲端服務,分別是台灣聯發科技公司搭配旗下LinkIt系列開發板之MCS與ThingSpeak,我們透過LattePanda實作。你可以從遠端來控制板子的腳位狀態或是檢視板子狀態與感測器的數值變化。類似的雲服務近年來如雨後春筍般冒出來,對於想找尋免費方案的使用者或教學單位來說是相當好的事呢。

作者/攝影   袁佑緣
時間   1小時
成本
  • 約800元
難度   * *
材料表
  • LinkIt 7697*1
  • micro usb線*1
  • 伺服馬達*1
  • 電腦*1
  • Android手機*1

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的伺服馬達。

App Inventor Extension 安裝 

請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。

並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。

如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。

 

本範例的aia檔請到此處下載-連結

 

App Ineventor 程式設計 

首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。

接下來請看到Desginer的部份,首先在第一行有TextBox元件,用來顯示現在控制的伺服馬達角度,接下來有兩個按鈕,左邊的connect按鈕主要是用來連線到7697,右邊的Disconnect則是斷線,最後,在最下面有一個滑桿,可以用拖曳來控制馬達的角度(注意因為這邊控制的伺服馬達可控角度為0~180度,所以在Slider元件上要設定最大值為180最小值為0)。

接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的mac address,至於這個mac address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。

再來當按鈕connect按下去之後,就會嘗試連上指定mac address的控制板,如果成功的話,滑桿跟計時器就會被啟動。

而斷線的部份則跟連線差不多,只是Enabled跟Disabled的元件會相反。

接下來是本範例的重點部份,Clock元件每隔一段時間就會啟動一次傳送BLE訊息的服務,而這個服務會將滑桿上此刻的數值先轉成整數後透過指定的Service跟Characteristic送出,而在這邊的UUID務必確認跟Arduino程式碼端的設定一樣,7697才能成功接收到數值喔!

LinkIt 7697 程式設計

 請打開Arduino IDE,並確定您的控制板在編輯器中切換成7697,再上傳以下的程式碼到7697上。 本範例的ino檔請到此處下載-連結

 

#include <LBLE.h>
#include <LBLEPeriphral.h>
#include <Servo.h>

Servo my_servo;
int servo_position = 90;

// Define a simple GATT service with only 1 characteristic
LBLEService servoService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt positionCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);


void setup() {


  //Initialize serial and wait for port to open:
  Serial.begin(9600);

  // to check if USR button is pressed
  pinMode(6, INPUT);

  my_servo.attach(10);
  my_servo.write(servo_position);

  // Initialize BLE subsystem
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  Serial.print("Device Address = [");
  Serial.print(LBLE.getDeviceAddress());
  Serial.println("]");

  // configure our advertisement data.
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE Servo");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE Servo");

  // Add characteristics into servoService
  servoService.addAttribute(positionCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(servoService);

  // start the GATT server - it is now 
  // available to connect
  LBLEPeripheral.begin();

  // start advertisment
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(300);

  Serial.print("conected=");
  Serial.println(LBLEPeripheral.connected());

  if (digitalRead(6))
  {
    Serial.println("disconnect all!");
    LBLEPeripheral.disconnectAll();
  }

  if (positionCharacteristic.isWritten()) {
    servo_position = positionCharacteristic.getValue();
    Serial.println(servo_position);
    my_servo.write(servo_position);
  }


}

成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。

範例影片:

 

相關文章:

[App Inventor IoT] LinkIt 7697使用BLE(藍牙4.0)傳送光感測器數值

$
0
0
作者/攝影   袁佑緣
時間   1小時
成本
  • 約900元
難度   * *
材料表
  • LinkIt 7697
  • LinkIt 7697擴充板
  • Grove光感測器
  • micro usb線
  • 電腦

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來得到遠端LinkIt 7697的光感測器讀值。

 

App Inventor Extension 安裝

請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。

並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。

如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。

 

本範例的aia檔請到此處下載-連結

 

 

App Ineventor 程式設計 

首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。

接下來請看到Desginer的部份,Connect按鈕是用來連接到指定藍牙MAC位址的7697,連上之後就會變成Disconnect按鈕,可以用來斷掉連接的藍牙。而最底下的有一個label元件用來顯示感應器的數值。

接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的MAC address,至於這個MAC address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。

再來當按鈕connect按下去之後,就會嘗試連上指定MAC address的控制板,如果成功的話,按鈕就會切換到Disconnect,以等待下一次使用者按下時就會斷線。

 

如果連接成功的話,應用程式的標題就會切換成Connected,反之則顯示Unconnected。

接下來是本範例的重點部份,如果此刻的狀態是正確連接的話(也就是按鈕是顯示用來Disconnect的狀態),Clock元件每隔一段時間就會啟動一次接收BLE訊息的服務,而這個服務會透過指定的Service跟Characteristic讀到7697上的光感測器數值(提醒讀者這邊的UUID務必確認跟Arduino程式碼端的設定一樣喔),最後當App讀到BLE的Int值時(when BluetoothLE1.IntValueRead),就會將數值顯示在Label元件上,讓使用者可以在手機螢幕上看到光感值!

 

LinkIt 7697 程式設計

請打開Arduino IDE,並確定您的控制板在編輯器中切換成7697,再上傳以下的程式碼到7697上。

本範例的ino檔請到此處下載-連結

#include <LBLE.h>
#include <LBLEPeriphral.h>

int item;

LBLEService AService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt ARead("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup()
{
  Serial.begin(9600);
  LBLE.begin();
  while (!LBLE.ready()) { delay(100); }
  Serial.println("BLE ready");

  Serial.print("Device Address = [");
  Serial.print(LBLE.getDeviceAddress());
  Serial.println("]");

  AService.addAttribute(ARead);

  LBLEPeripheral.addService(AService);
  LBLEPeripheral.begin();
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE Ana");
  LBLEPeripheral.advertise(advertisement);


}


void loop()
{
  item = analogRead(A0);
  Serial.println(item);
  ARead.setValue(item);
  delay(1000);
}

成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。

 

 

範例影片

 

相關文章:

[ 電路設計軟體Multisim Blue ] 設計一個簡易電源供應器

$
0
0

我們購買小電壓、電流的電子產品時,電子產品的電源線常常使用USB線,累積下來有好多的USB線,希望將這些USB線常常使用USB線,作為我們電子小專題的可插拔式電源。

作者/攝影   豐智
時間   2-3小時
成本 約200元
難度   * * *
材料表
  • 保險絲*1 (連結
  • 保險絲座*1(連結
  • 端子台*1(連結
  • USB-Type B接頭*1(連結
  • 100uF電容*1

今天跟大家分享的作品,電源供應器,平常實驗的時候、或者做電子作品的時候需要外接電源,我們來分享這個模組,大家做各式各樣的作品時,也可以這篇文章了解電源基本要用的功能

我們購買小電壓電流的電子產品時,常常使用USB線作為電子產品的電源線,累積下來有好多好多的USB線,希望夠再次利用這些USB線作為我們電子小專題的電源

 

我們常常拿到的USB線有這機種。USB-TypeA、USB-TypeB、USB-TypeC、MiniUSB線、MicroUSB。各位可以依照家裡多餘的線買對應的接頭。

 

我們設計電源供應器希望能夠

  • 做電子實驗時可以在麵包板上外接電源
  • 作各種小專題把這個模組加上去,用USB線供電

 

這次設計的簡易型電源供應器有幾個注意事項

  • 限制最高電流
  • 超過最高的電壓電流保險
  • 避免忽然插上USB線時,瞬間電壓電流過高
  • 避免忽然拔掉電源,瞬間無供應電
  • 輸入輸出電源的接頭

 

1、限制最高電流

為什麼要限制最高電流?一般電子產品使用的電子元件、晶片,在說明文件裡會告知電子元件/晶片可以使用的電壓電流範圍。一般的電子商城,販賣電子元件時會提供數據手冊(Datasheet)或使用規範,如果你是直接到電子零件店購買,也可以詢問電子零件的廠牌型號,在網路上尋找資料手冊。

以下圖為例,我在網路商城(連結)購買一個MicroUSB接頭,這個接頭的販賣時有相關使用規範,額定電流值為1.8A,如果使用平板電腦的電源供應器(2A~3A),超過該電子元件的額定電流,使用時極有可能發生電子元件燒壞等狀況。

1、 網路購買電子元件,使用規範

2、點擊Datasheet檢查資料手冊的使用規範

2、超過最高的電流保險

Step1:選擇保險絲

設計的人會注意自己做品使用時的注意事項,但天有不測風雲,自己也會有忘記、或者其他人使用時不小心接上超過額定電流的電源供應器,這時候可以使用保險絲,超過電流值的時候,保險絲會先燒斷,讓電路變成一個斷掉的迴路,避免波及其他的電子元件。最近很流行的Arduino開發板,相關的感測器模組、電子晶片大多額定電流在1A,故我們這裡選用1A的保險絲。

為了可以依照不同使用狀況,限定最高電流,我們這裡使用可拆拔的玻璃管保險絲。

3、 1A的玻璃管保險絲-資料連結

 

Step2:接著在MultiSIM BLUE選擇1A保險絲

1、首先選擇[Place]→[Component]

接著選[Mouser Database]→[Power]→[FUSE_Cylindrical_Littelfuse_Cartridge_213]→[1A]

2、這裡使用[Mouser Database]資料庫,它的特徵可以透過右下角的[Hyperlink]點選網址,觀看實際對應的電子零件資料手冊、使用規範、價格、庫存等資訊,這個保險絲的實際長度是20mm。

4、 在軟體中選擇1A保險絲

5、 對應的實體保險絲

 

Step3:選擇保險絲座兩個

選擇[Place]→[Component]

接著選[Mouser Database]→[Power]→[FUSE_Holder_Littelfuse_Clip]→[01110512Z]

6、 在軟體中選擇保險絲座

7、對應的實體保險絲座

3、4、避免忽然插上USB線時,瞬間電壓電流過高,忽然拔掉電源,瞬間無供應電

各位可以嘗試使用:RC充放電路,RC指的是電阻(Resistor)與電容(Capacitor)。

 

充電:

如下圖,當電源供應器另一方接上馬達,接上5V1A的USB線(VCC1)的瞬間,不僅會供電給馬達,同時會分散電流到電阻與電容,當電容充飽電之後,電容會相當於無限大的電阻值,所有的電壓電流都會使用在馬達上。

充電的時間會是多長呢?這次選擇的電阻是1K歐姆=1000歐姆,電解電容16V,100uF(微法拉)=0.0001F(法拉),充電時間的公式T=RC,充電所需時間為0.1秒,想降低充電時間可以降低電阻或降低電容容量喔。

8、 充電電路

 

放電:

我們拔開5V1A的USB線之後,電容儲存的電荷會供給馬達轉動,直到電容儲存的電用完。

9、放電電路

 

Step1:選擇電容

選擇[Place]→[Component]

接著選[Master Database]→[CAP_ELECTROLIT]→[100uF]→[IPC-2221A/2222/CAPPR200-500X1100]

 

10、選擇100uF電容

 

Step2:選擇電阻

選擇[Place]→[Component]

接著選[Master Database]→[RESISTOR]→[1K]→[IPC-2221A/2222/RES900-300X200]

11、選擇1K電阻

 

5、輸入輸出電源的接頭

這次輸入電源的USB線選用最近很流行的ArduinoUNO USB接頭,USB Type-B接頭。

12、實體USB Type-B接頭

 

這次輸出電源選用端子台,這種端子台底部有2個針腳(Pin),圖片上方有螺絲孔,使用螺絲起子鬆開螺絲後,中間的固定座便會鬆開,鎖緊螺絲中間的固定座則會鎖緊。

13、實體端子台

14、使用螺絲鎖緊/放開端子台

 

Step1:尋找替代的USB針腳

在軟體USB Type-B接頭目前沒有Component,我們以2X2的排針替代USB Type-B腳位

選擇[Place]→[Component]

接著選[Mouser Database]→[Connectors]→[HEADER_PIN_Double_Row_TE_Connectivity]→[102973-2]

15、 取代USB Type-B選擇2X2接頭

 

Step2:更改USB針腳名稱

1、為了方便識別USB Type-B的5V與GND,點擊剛剛的2X2接頭,點選右鍵選擇[Properties]→[Label]→更改[RefDes]名稱為USB Type B。

2、接著更改[RefDes]名稱為1 is GND 2 is 5V

16、 更改標籤名稱

17、取代USB Type-B的5V、GND

 

3、接著顯示每隻腳位的編號,選擇[Display]→[Use component specific visibility settings]→勾選[Show footprint pin names]

18、 顯示腳位號碼

19、 完成圖示

 

Step3:新增端子台並修改端子台名稱

選擇[Place]→[Component]

接著選[Mouser Database]→[Connectors]→[CONN_SCREW_TERM_Phoenix_Contact]→[1715721]

20、新增兩個針腳的端子台

點擊剛剛的端子台,點選右鍵選擇[Properties]→[Label]→更改[RefDes]名稱為Terminal Block。

21、 更改端子台名稱

 

Step4:新增VCC、GND

1、選擇[Place]→[Component]

接著選[MasterDatabase]→[All families]→搜尋[VCC]

2、接著選[MasterDatabase]→[All families]→搜尋[Ground]

3、完成後所有的電子元件如下圖:

22、 總共使用的電子零件

 

Step5:接出RC 充放電路

根據剛剛說明的RC充放電路,將思路轉換成USB電源供應器,下圖左方代表USB 接頭,可依個人喜好更換USB接頭的類型。左方則是端子台,你可以透過端子台為各種電子小專題供應電源。

23、 電源供應器充放電電路圖

 

在MultiSIM BLUE完成的電路圖如下,請大家檢查看看是否一致

24、電源供應器充放電電路圖2

6、使用電路模擬軟體測量端子台電壓

1、在MultiSIM BLUE中有模擬電路的功能,可以對電路測量電壓、電流、訊號波形等測量,這次要模擬端子台(Terminal Block)是否有5V電壓輸出。

2、選擇[Simulate]→[Instruments]→[Multimeter]。

小提醒:在MultiSIM BLUE右方的工具列,也可以電選這些測量工具。

25、 開啟MultiSIM BLUE 模擬功能

3、[Multimeter]相當於電子專題不可或許的小幫手-三用電表,可以測量電流、直流電、交流電、電阻值等數值。

26、 使用Multimeter測量

 

4、測量電壓方法與三用電表相同,量測待測物電壓需要與待測物並聯,請從[XMM1]拉線與端子台進行並聯。

27 將Multimeter與端子台接線並聯

5、選擇[Simulate]→[Run](或點擊F5,或點擊軟體上方工具列快捷鍵)即可執行模擬,對[XMM1]點擊兩次後,畫面會顯示量測到的電壓值,若沒有量測到5V電壓,請檢查電路是否問題。

28 量測端子台電壓

 

將電路圖的資料轉換成電路板

在MultisimBlue上繪製完電路圖之後,我們將電路圖轉換成PCB繪圖軟體檔案。

點選[Transfer]→ [Transfer to Ultiboard]→[Transfer to Ultiboard Component Evaluator14.0]

29、電路圖轉電路板

轉換完成後,MultisimBlue會幫助我們開啟PCB軟體:[Ultibaord Component Evaluator Mouser Electronic Edition],電路圖電子元件間的接線,在PCB軟體會將轉換成預拉線,如下圖。

30電路板與預拉線

 

進行電路板布局

Step1將電子元件移至左下角,整理線路

請將電子元件全部移到左下角,靠近左下角的原點,我們可以使用[Ctrl+R]對電子元件旋轉,盡量建少每條線之間互相交叉,重疊。USB Type B線的接頭、負責輸出電壓電流的端子台,盡量靠近邊界,沒有其他電子元件阻擋。

31 移至左下角的原點並整理元件

 

Step2設定玻璃管保險絲距離

下圖是玻璃管保險絲加上兩個保險絲座,本次選用的玻璃管保險絲長度為20mm,可以使用軟體上方、左方的刻度表量測,保持兩個保險絲座的距離為20mm,也留17~20mm給USB接頭。

33、保險絲座與USB接頭距離

 

Step3使用資料手冊設定USB Type B距離

參考我們購買的接頭廠商與型號下載資料手冊-連結,下圖是USB Type B的資料手冊,我們可以透過手冊了解USB接頭的尺寸資料

34、 下載資料手冊

 

根據下圖的USB接頭俯視、側視圖片,我們得知USB接頭總長為16.5mm,有四隻針腳與左右兩個大腳座,你可以決定如何移動腳座,腳座左側有10.28mm的空間,也可以讓USB接頭超過一半的空間暴露在電路板之外。(以下資料圖片源自貿澤電子商城)

35、 USB接頭俯視尺寸

36、 USB接頭側視尺寸

37、 USB接頭前視尺寸

38、 USB接頭底座針腳尺寸

這裡設計USB接頭前後長度留18mm,左右寬度留下20mm。如有興趣,也可以為左右兩方的大腳座設定焊接的孔位,做為固定USB腳座的支點喔。

39、 USB接頭長寬設定

 

Step4、編輯Board Outline

1、將滑鼠移至左方的[Design Toolbox]工具列對[Board Outline]點擊兩次,可以對黃色線的板框刪除、縮小放大。

40、Board Outline

2、在軟體上方的點選[Edit]→[Selection filter]→[Enable selecting other objects],可以編輯電子元件以外的物件

41、編輯電子元件以外的物件

 

Step5、更改電子元件的位置

1、安排完電子元件後,可以點選[View 3D],觀看電子元件的3D顯示圖。

42、View3D

2、安排電子元件時,可以把電子元件更換到另外一面,我們稱電路板正面為[Copper Top]、背面為[Copper Bottom] ,你也可以選擇每一面代表的顏色。(Top預設為綠色、Bottom預設為紅色),請將所有的線路、焊接孔位在一面、電子元件在另一面。

43、選擇Copper Top

44、更換電子元件板面位置

45、電路板布局3D圖

 

進行電路板布線

Step1、使用自動布線

選擇右上方的[Start/resume autorouter]或使用快捷鍵(Ctrl + Shift + 8)進行自動布線

46、自動布線

 

Step2、整理布線

這次的作品比較容易,整理布線時首先注意兩點,可以避免走線路徑產生一些不必要的電池輻射(1)線需要轉彎時,轉彎角度應該大於90度(2)轉彎需要再轉彎時,應多走一些距離再轉彎。

47、整理布線

 

Step3 設定走線的路徑

電源供應的電流越高,走線的線寬需要越寬,一般在攝氏35度的狀況下,1A的電流線寬至少要大於0.2mm、2A至少大於0.3mm、3A至少大於1mm。

A、選擇想加寬的走線後滑鼠右鍵,點選[Properties],出現下圖的[Trace Properties]。

B、選擇[General]→到[Measurements]將寬度[Width]調整為2mm。

48、設定走線路徑寬度

49、5V路徑加寬度

 

Step4 設定Dril與PAD

為了使焊接更容易,鑽頭的鑽孔點正確,請依照下列步驟。

1、點選[PAD],左上方選項可以選擇PAD的形狀,為了焊接方便,我們要把PAD的面積變大,但不能碰到相鄰的PAD的或走線。

A、選擇形狀Shape:

選擇[Rectangle]→設定長度[Length]為1.5mm或2mm。

B、選擇大小Size:

選擇[Pad diameter]→設定直徑為2mm或4mm。

C、選擇鑽孔大小Hole:

選擇[Dril diameter]→設定直徑為1.2mm。鑽孔大小請依照使用者的鑽刀大小做設定。

50、設定Dril與PAD

 

3、PAD與Dril設定後的參考圖片

51、設定合適的Dril與PAD

Step4 Power plane

Power plane可以選擇一種線路,大範圍留下銅箔,一般會留給接地面(Ground),與Ground連接的接點會變成與一大片銅箔相連。

選擇[Place]→[Power plane]→Net選項選擇[0]

52、對Ground線路進行Power plane

53、Top板面上的電路

54、Bottom板面上的電路

 

相關文章:

[LattePanda] 使用LattePanda打造Line機器人

$
0
0

本文章將來介紹一下如何在LattePanda上面部署一個LINE智慧對話機器人,並拿它來控制LattePanda上的Arduino IO。

作者/攝影   袁佑緣
時間   3小時
成本  時間就是成本
難度   * * *
材料表
  • LattePanda
  • 手機

STEP1. LINE開發者帳號與取用LINE Message API

首先, 我們需要先在 LINE 的開發者官方網站 (https://developers.line.me/en/) 註冊一個LINE開發者帳號。

請點選右邊的 Start using Message API, 接下來系統將會提示使用者完成三個設定步驟以完成新增一個通道。

首先,你必須先選取一個提供者,也就是告訴系統是誰提供這個APP的服務。

接下來,請填上關於取用Messaging API 的必要資訊。

最後一步,確認玩設定都沒錯後,按下confirm,你將會看到一個新增的通道出現在一開始的console頁面。

STEP2. 安裝Node.js與下載 line-bot-sdk-nodejs library

在我們繼續完成 LINE Bot細部設定之前,我們必須先安裝一下LINE Bot的軟體開發環境。 我們開發LINE Bot所使用的程式語言是 node.js,所以請點選以下網址(https://nodejs.org/en/download/) 將Windows版本的node.js下載下來並安裝在LattePanda上面。

安裝完後,我們還需要用到LINE Bot SDK ,請到以下的github 網址(https://github.com/line/line-bot-sdk-nodejs) 下載並解壓縮官方的node.js 版 LINE Bot SDK。

如果有讀者想要查這個LINE Bot SDK的詳細使用資訊的話,可以點選此網址 (https://line.github.io/line-bot-sdk-nodejs/) 到官方的gitbook上看進一步的API使用說明,以及如何去用javascript來撰寫機器人的對話功能。

最後請打開命令提示字元(按下快捷鍵 <Win+R> 並輸入”cmd”叫出command prompt), 並輸入以下的命令將工作目錄移動到方才解壓縮的LINE Bot SDK資料夾下的echo-bot範例(line-bot-sdk-nodejs/examples/echo-bot)。

cd THE_ECHO-BOT_EXAPMLE_FOLDER(ex: C:\Users\lattepanda\line-bot-sdk-nodejs\examples\echo-bot)

接下來請輸入以下的指令來安裝需要用到的node.js套件,在這個範例中,我們會需要安裝兩個額外的套件,一個是用來開啟伺服器的express套件,另外一個則是LINE Bot的SDK函式庫。

npm install

 

STEP3. 用ngrok來將本地伺服器開放到網路上

在前面的步驟中,我們雖然可以開啟一個本地的伺服器,但是為了要能夠取用網路上的 LINE Messaging API,我們必須使用一些工具來將LattePanda上的服務開放到雲端上。

 

請點選此網址(https://ngrok.com/download)來下載ngrok,這套軟體可以讓使用者在本地伺服器與網際網路建立一個加密的網路通道。

下載完成後,請將壓縮檔解壓縮,並點選ngrok.exe,呼叫出一個命令提示字元。

請在上面輸入以下的指令在localhostport 3000開啟一個http的通道。

ngrok http 3000

成功開啟後,將會看到如以下的畫面。你將會得到兩個開放的網址,一個是走HTTP,另外一個則是走有加密的HTTPS,請記住這個連結,待會我們將要把這個連接填到LINE Bot上的回呼位址上。

STEP4. 設定Channel Secret/Webhook/Token

請點選剛剛在 STEP2 新增的APP,我們將要完成LINE Bot上最後三個主要的溝通憑證。

第一個是設定頻道的金鑰,請按下issue並複製這段的金鑰到echo-bot的範例資料夾中的index.js檔中。

接下來,同樣地也請點選issue並把channelaccess token貼到index.jsconfig中。

// create LINE SDK config from env variables
const config = {
  channelSecret: 'PASTE_YOUR_CHANNEL_SECRET',
  channelAccessToken: 'PASTE_YOUR_ACCESS_TOKEN',
};
index.js

最後,我們的APP需要設定一個webhook網址,請填上你在STEP3 中開啟的ngrok所得到的網址,並在最後面加上 “/callback” 。例如: “20c21167.ngrok.io/callback”.

STEP5. LineBot 測試

請用智慧型手機打開LINE APP並掃描這個機器人的QR code來加好友。

接下來回到LattePanda上輸入以下的指令執行echo-bot程式並確認ngrok通道已經正確開啟了且webhook的網址也有設定在LINE Bot console 頁面了。

node .

請在上面手機上用LINE打上一些文字看看LINE Bot會有什麼反應吧!

 

STEP6. 使用 serial來與Arduino做溝通

請下載以下的Arduino程式碼到 LattePanda上的 Arduino Leonardo核心。

這個程式中,我們時做了一個簡單的serial控制的LED開關,如果使用者在序列埠監控視窗中輸入一個大寫的T,LED燈就會被打開,如果輸入大寫的F,LED燈則會被關閉。

void setup()
{
    Serial.begin(9600);
    pinMode(LED_BUILTIN, OUTPUT);
    
}

void loop()
{
    if(Serial.available())
    {
        char cmd = Serial.read();
        if(cmd == 'T')
            digitalWrite(LED_BUILTIN, HIGH);
        else if(cmd == 'F')
            digitalWrite(LED_BUILTIN, LOW);
        else
            Serial.println("Enter T/F to turn ON/OFF LED");
    }
}

STEP7. 在LattePanda上使用LineBot 來控制LED

我們想在LattePanda上使用node.js取用serial來控制LED燈,所以我們必須再新增一個新的node.js函式庫。請在範例echo-bot中的資料夾中打開 package.json ,並如以下的範例加上 serialport 這個套件來讓node.js可以使用Serial來與Arduino做溝通。

package.json

{
  "name": "echo-bot",
  "version": "0.0.0",
  "description": "An example LINE bot just to echo messages",
  "main": "index.js",
  "scripts": {
    "start": "node ."
  },
  "dependencies": {
    "@line/bot-sdk": "^5.0.0",
    "express": "^4.15.2",
    "serialport": "^6.0.4"
  }
}

改完之後別忘了輸入以下的指令來更新node.js的套件。

npm install

現在我們要在原本的 echo-bot 中的index.js 程式中加入Serial的溝通功能。

首先,請如以下的範例加入serialport的設定,並注意設定好指定的COM Port,也就是在LattePanda上的Arduino Leonardo連接到的COM Port,例如:COM2。

 

index.js

'use strict';

const line = require('@line/bot-sdk');
const express = require('express');
const SerialPort = require('serialport');
const serialPort = new SerialPort('COM2', {
    baudRate: 9600
});

最後請修改echo-bot預設的handler函式中的功能,加入以下的程式碼好讓node.js根據不同的情形透過Serial送出大寫的T跟F到Arduino 。

 

 

index.js

// event handler
function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    // ignore non-text-message event
    return Promise.resolve(null);
  }

  if(event.message.text == 'ON') {
      serialPort.write('T');
      const echo = {type: 'text', text: 'Turn ON LED'};
      return client.replyMessage(event.replyToken, echo);
  } else if(event.message.text == 'OFF'){
      serialPort.write('F');
      const echo = {type: 'text', text: 'Turn OFF LED'};
      return client.replyMessage(event.replyToken, echo);
  } else {
      // create a echoing text message
      const echo = {type: 'text', text: event.message.text};
      return client.replyMessage(event.replyToken, echo);
  }
}

現在請重新執行index.js並確認ngrok有正確打開(STEP3),接下來就可以在手機上測試看看是否在LINE上輸入ON/OFF,LINE Bot就會去自動開關LattePanda上的LED燈囉!

以下是本文章的範例LINE Bot範例影片。

 

相關文章:


[Micro:bit] 使用Boson套件設計智慧小屋

$
0
0

在本篇文章中,我們將介紹如何用micro:bit和boson kit打造一個樂高的智慧屋。

我們將實做三個特別的功能,第一個是能夠根據環境光源自動調整亮度的LED燈,第二是設計一個可以按鈕控制吊扇,第三則是做出一個地震警報器。

作者/攝影   袁佑緣
時間   3小時
成本  放課後的製作時間便是我的成本
難度   * * *
材料表
  • Micro:bit
  • 樂高積木
  • Micro:bit Boson 擴充板

準備工作

Microbit and Boson Kit

 

在這篇文章中,我們將使用BBC推出的Micro:bit開發板來當作是我們智慧屋的控制器。

為了要能夠控制智慧屋中的電子元件,也就是上面的感測器與制動器,除了原本的Micro:bit之外,我們還要額外裝上一塊DFRobot推出的Boson擴充板來控制Boson Kit中的電子模組。

如果讀者想獲得關於 Boson Kit更進一步的資訊的話,不妨去以下的網站觀看詳細的介紹喔。 (https://www.dfrobot.com/boson).

以下是我們在本篇文章中,我們將會用到的Boson電子積木有LED、按鈕、傾斜、風扇、聲音、光感應。

1.Light Sensor Module
2.LED Module
3.Button Module
4.Fan Module
5.Tilt Sensor Module
6.Buzzer Module

Mu editor

接下來,為了要撰寫micro:bit的micro python 程式碼,我們需要去下載以下的編輯器:Mu Editor(https://github.com/mu-editor/mu/releases).

此外,我們也建議讀者可以去官方的文件查看Micro Python API for Micro:bit (https://microbit-micropython.readthedocs.io/en/0.9/)的詳細使用說明,裡面還有許多的範例教學可以參考喔!

硬體

以下的圖片是本文所使用的雙層樂高屋以及樂高屋內部的構造。

注意到除了一般水平放置的Boson元件可以接在樂高的平板上,一些懸掛的Boson元件可以用其他的方式固定在樂高小屋上面,例如下圖中使用BOSON的中間積木,我們使用金屬螺絲與螺絲帽固定,底座固定之後,Boson電子元件就可以用磁力吸附在上面。

範例教學

 

接下來我們就來在 Mu Editor中撰寫 Micro Python吧!

 

1. 小夜燈

在第一個範例中,我們將原本的LED燈擴充成可以自動調整亮度的LED燈,更進一步它能根據環境光的亮度適當地調整LED燈亮度。

於是我們要在LED燈上再加上一個光源感測器,如下圖。

首先,我們必須先用以下的程式碼來去偵測光源感測器的最大最小值,而為了要讓數值更精確一點,我們讓程式在一段時間內的對光感值進行取樣,將光感值加總後再依取樣的次數做平均,經過計算就能得我們想要的平均值。

 

night-light-measure.py

from microbit import *

light_sensor = pin1.read_analog()
counter = 0
timer = running_time()

while (running_time() - timer) <= 3 * 1000:
    light_sensor += pin1.read_analog()
    counter += 1

light_sensor /= counter
print("mean light sensor value: ", light_sensor)

打開Mu Editor的REPL視窗,並在有環境光跟沒有環境光的情況下執行程式,你將會得到如下圖的光源平均值,當環境光很亮時的平均亮值是900多,環境光很暗時的平均暗值10多。

接下來,我們將前面求出的平均亮值跟平均暗值,帶入到變數ligjt跟dark中,將這兩個數值作為最大值與最小值,是按照比例換算成Micro:bit的類比角為數值,控制LED燈的亮度。

 

算式:

((light – light_sensor)/(light – dark)*1023)

比如:light=966、dark=14,數值範圍為952。現在讀到一個光感數值為500,帶入算式((966-500)/(952))*1023 = 500,最後micro:bit的類比輸出值為500。

 

night-light.py

from microbit import *

light_sensor = pin1.read_analog()
counter = 0
timer = running_time()

light = 966.4033
dark = 14.81614

while True:
    light_sensor = pin1.read_analog()
    LED = int((light - light_sensor)/(light - dark)*1023)

    if LED > 1023:
        LED = 1023
    elif LED < 0:
        LED = 0

    print("LED lightness: ", LED)

    pin2.set_analog_period(1)
    pin2.write_analog(LED)
    sleep(0.5)

 

範例影片:

 

2. 吊扇設計

在第二個範例中,我們用以下簡單的程式碼來打造一個可以用按鈕控制的電風扇。

在程式中,我們用一個switch的布林變數紀錄開關的狀態,我們希望使用開關時,每次按下開關再放開,switch的狀態就會切換成相反的狀態。

注意到我們在以下的程式碼中會多加一些延遲,例如sleep(0.5),這是為了要確保可以正確的判斷到一次的開關按壓。

ceiling-fan.py

 

from microbit import *

switch = False

while True:
    if pin12.read_digital() is 1:
        while pin12.read_digital() is 1:
            sleep(0.5)
        switch = not switch
        if switch:
            pin16.write_digital(1)
            print("Turn ON")
        else:
            pin16.write_digital(0)
            print("Turn OFF")

 

3.地震警報器

 

在第三個範例中我們將實做一個安裝在小屋的地震警報器。

為了要偵測到小屋的晃動,我們使用一個傾斜感測器,並在每一次的迴圈中,觀察一小斷時間中的傾斜變化。

如果說屋子靜止不動的話,隨著時間的傾斜變化量應該是完全是零,所以我們只要去計算一段時間的變化是否為零的話,就能推出此時是否有地震的發生。

 

而如果偵測到有地震發生的話,程式會播放一段音樂作為地震的警報,播放音樂的方式直接使用Micro Python內建的music函式庫,music函式庫預設輸出聲音為0號腳位,驅動蜂鳴器發出聲音。

 

如果想自己設計音樂的話,不妨去以下網址查看micro python的範例(https://microbit-micropython.readthedocs.io/en/0.9/music.html),裡面有介紹如何用指定的音符做特定的旋律。

alarm.py

from microbit import *
import music

status = pin8.read_digital()

def detect_shake():
    old_tilt_status = pin8.read_digital()
    sleep(0.1)
    new_tilt_status = pin8.read_digital()
    return abs(new_tilt_status - old_tilt_status)

while True:
    counter = 0
    timer = running_time()
    shake = detect_shake()
    while (running_time() - timer) <= 500:
        shake += detect_shake()
        counter += 1

    status = shake/counter
    print(status)

    if status is not 0.0:
        print("Alarm!!!")
        music.play(music.DADADADUM)

 

範例影片:

 

相關文章:

 

 

[私下問公開答]如何提升LattePanda拿鐵熊貓的能力,從更新BIOS下手

$
0
0

感謝汐止的陳先生,他在使用LattePanda時,覺得裝置跑不出USB3.0應該有的速度,問我們有沒有解,這次解法我們從更新BIOS方面解決問題。

感謝鄭鴻旗先生的[私下問公開答]的梗,鄭老師表示不會付版稅給你XD

作者/攝影   豐智
時間   30分鐘
成本 需要上網下載的費用
難度   * *
材料表

LattePanda是一個信用卡大小的Win10小電腦,內建一個Arduino晶片,各位可以看到LattePanda左邊偏中間的地方有一個USB3.0的接頭,如何提升它的速度呢?

LattePanda相關的Arduino、驅動程式、BIOS更新都在GitHub上-連結

這次實驗成果,是透過更新BIOS,提升USB3.0的功能。

首先點選[Star]→[ LattePandaTeam / LattePanda-Win10-Software]-連結

點選進[Bios]的資料夾之後有好幾個版本的Bios:

  • [LattePanda V1.2 for CR200 Z8350 only]
  • [LattePanda v1.0 for Z8300 only]
  • [LattePanda v1.1 for CR110 Z8350 only]

 

應該要裝哪一個呢?初學者會有一個迷思,裝越高版本的越好,首先請各位確認手上的LattePanda的出廠型號,型號裡有幾個關鍵字可供參考。

  • 首先是型號的最後方有Z8300、Z8350、兩個版本。
  • Z8350在型號的前面有R100、R110兩種不同型號。
  • Z8350在型號的前面有R110、R200兩種不同型號。

 

型號對應的Bios版本如下:

S70CR110/S70CR100 Z8300 -> V1.0

S70CR110 Z8350 -> V1.1

S70CR200 Z8350 -> V1.2

 

我使用的LattePanda是R110xxxxxx/Z8350的型號,直接對應資料夾[LattePanda v1.1 for CR110 Z8350 only]

 

接著請各位確認手上LattePanda的硬體/記憶體的規格是哪一個版本?目前有32GB/2GB、64GB/4GB兩個版本。

我使用的是64GB/4GB的版本,將/default BIOS/4G version/路徑下的資料夾內容下載下來。

 

請各位準備一個FAT32格式的隨身碟,將剛剛下載的資料複製到隨身碟的跟目錄並解壓縮LattePanda v1.1 4G default bios-J.zip

 

LattePanda更新Bios的的方法,是趁LattePanda重開機時,優先讀取隨身碟的資料,更新Bios,請把隨身碟接至LattePanda的USB接頭。

  • LattePanda剛開機時尚未開始讀取Win10系統之前,按著鍵盤上的[Esc]或[Del]即可進入
  • 還沒更新Bios之前螢幕上方的版本應該是2016年的版本[Aptio Setup Utility – copyright (c) 2016 American Megatrend, Inc]
  • 更新之後是2017年[Aptio Setup Utility – copyright (c) 2017 American Megatrend, Inc]

 

更新Bios之前需要調整兩個選項,以R110xxxxxx/Z8350的型號為例:

  • 首先到Boot選項,將Machine Status AC/Battery In從[Power off]-→[Power on]
  • 接著將Boot Option #1的選項[Windows Boot Manager]→[你的隨身碟]

 

 

最後儲存設定並重開機即可。到Save & Exit選擇[Save changes and Reset]

 

重新開機後,LattePanda首先讀取隨身碟資料,出現下圖的畫面就成功了,成功之後在鍵盤按下Ctrl+Alt+Del進行重開機,並且把隨身碟拔出來,進入到Bios看到更新年限為2017年即為成功。

 

感謝Scanace的工程師提供建議的USB測試軟體[USB Device Tree Viewer],大家可以下載來試試看,你的隨身碟是否在電腦上被認知為真的USB3.0的傳輸介面。

 

將LattePanda的USB3.0接頭,接上USB3.0的隨身碟

 

將LattePanda的USB3.0接頭,接上USB2.0的隨身碟

 

希望能帶給大家幫助,小智到此一遊。

 

相關文章:

[2017年度大回顧] 看看我們做了哪些計畫吧!

$
0
0

2017年團隊們挑戰了大大小小的嘗試,包含開立新課程、新書籌備、物聯網專案計畫、企業夥伴們的合作、參與世界各地Maker Faire、籌辦華山展覽以及年度合作活動等等(開創活動新品牌-放課後Fun School),2018我們也會持續提供優質服務內容給大家,還請多多支持哦。

作者/攝影  曾吉弘/Cavedu教育團隊各同仁
時間  2017整年度

2017年做了很多好玩的事情也有新嘗試,首先要說的是我們提供的服務內容:

  • 教師研習及學習課程(CAVEDU)
  • 專題設計製作(CAVEDU,可委託外包)
  • 物聯網空間/功能規劃(CAVEDU,可委託外包)
  • IoT雲服務應用(CAVEDU)
  • 書籍撰寫/出版(CAVEDU、翰吉,可委託出版)
  • 工作坊活動及合作策展(放課後)
  • 開發板與周邊商品販售(機器人王國)

新課程研發

教學場域一直在變化,但初衷不變。我們從小學、國中高中及大學相關課系(資訊、機械及電子與數位互動藝術等)到成人學習都有對應的科技動手做課程。也在T客邦創客基地與 Fablab Taipei 開設晚間的帶狀課程。主題從簡易程式概念培養、基礎電子電路設計、手機app、機器人控制與雲端應用開發等等,相當豐富喔!

課程分類請按我

 

新合作夥伴

1+1 > 2,很高興能與DFRobot、Intel、Mouser與RS Components 推廣相關產品服務,也密切與MTK、QNAP、Zyxel 針對物聯網教室提供規劃方案,老師們不用再為了新程式、新開發板傷腦筋,問我們就對了!(公司名稱按字母順序排列)

 

全產品研發計畫

 

針對108課綱,我們推出了[物聯網教學箱]與[RK物聯網擴充板],兩者都是針對教室情境使用,元件管理非常方便。

另外RK物聯網擴充板則可同時支援LinkIt Smart 7688 Duo與 LinkIt 7697這兩套我們這兩年開課最熱門的物聯網開發板,接腳可外接麵包板、Seeed Studio Grove接頭的感測器(擴充板中央區域),以及3 pin接頭(擴充板右側)。

 

新書出版

今年完成了五本書:出版一本書:[實戰物聯網:LinkIt Smart 7688 Duo],另外翻譯了四本書籍。明年預計出版的書籍主題有物聯網(使用LinkIt 7697)、基礎電路設計(使用Mouser MultiSIM BLUE)以及AI等主題。

 

翻譯書籍列表:

CAVEDU書籍列表

 

創辦活動品牌「放課後」

2017年5/27, 28我們在華山文創園區舉辦放課後,邀您重拾下班下課後的快樂。攤位總覽影片請點我

也參加了香港、新加坡、西安與東京等Maker Faire,並受邀分享與辦理許多工作坊向很多人見證台灣的能量。

 

阿吉老師赴MIT擔任訪問學者

CAVEDU與 MIT App Inventor小組(屬於CSAIL(電腦科學與人工智慧實驗室)下)一直有密切的合作。阿吉老師於今年十月受邀擔任訪問學者,協助整合物聯網開發板至App Inventor中、元件測試與教材編寫等等。大家可以關注阿吉老師的MIT生活日誌以及12/17 FabLab Taipei的分享影片

 

阿吉老師@MIT App Inventor team list

 

新成員招募中

為擴大各式計畫2018年度團隊將招募開發工程師及課程講師等新血,如果您想為台灣的教育出一份力並喜歡我們的風格,歡迎加入我們!

請備妥履歷寄到 service@cavedu.com

2017 活動紀錄請按我

 

相關文章:

使用 Intel® Movidius™ Neural Compute Stick搭配Raspberry Pi 3執行MobileNets

$
0
0

作者/攝影   曾吉弘
時間   2小時
成本 需要上網下載的費用
難度  * * * * *
材料表
  • Raspberry Pi 3單板電腦
  • Intel Movidius神經計算棒

引言

深度學習之於邊緣運算讓世界各地的創新開發者得以建立各種架構與裝置來解決問題,並提出像是內建了Intel Movidius VPU 的 Google Clips Camera 這樣的創新方案。邊緣裝置應該便於攜帶、低功耗但同時又能為深度學習神經網路提供一定彈性的架構。本文將說明如何使用使用 Intel® Movidius™ Neural Compute Stick (神經運算棒) 搭配Raspberry Pi 3 做為深度學習邊緣運算的解決方案。

應用多個現成的分類網路,有許多具備一定擴充性的網路都提供了一定的客製化程度,針對使用者不同的功耗、運算與精確度需求來提供合適的方案。Google MobileNets就是這類網路其中之一,提供兩個可修改的變數讓您自訂網路來解決問題,並可在這類型低功耗裝置上實現高運算效能與高精確度。

 

* 資料來源:https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html

第一個變數為輸入影像的大小。如上圖,複雜度與精確度會隨著輸入大小而改變。Google 已針對不同影像尺寸提供了預先訓練好的ImageNet分類檢查點。

第二個變數則稱為depth multiplier。雖然網路架構維持不變,調整這個depth multiplier 會影響每一層的頻道(channel) 數量,進而影響網路複雜度並精確度與 frame rate。一般來說,網路的 frame rate 愈高,精確度就愈低。

接下來會介紹如何安裝並執行NCSDK、下載NCAppZoo,以及在 Intel Movidius 神經運算棒上執行MobileNet。最後要使用NCAppZoo 來示範benchmarkncs app 的用途,它可收集一或多個接在電腦 (例如 Pi ) 上的Intel Movidius 神經運算棒之執行效能。

 

所需硬體

Raspberry Pi 3、電源與記憶卡 (外殼建議有,但非必須)
  1. Raspberry Pi 3 外殼
  2. Raspberry PI 3 Model B
  3. micro SD記憶卡 (建議16g以上)
  4. 支援 HDMI 接頭螢幕 (或其他規格的轉接線)
  5. 鍵盤滑鼠
  6. Intel Movidius Neural Compute Stick

 

Procedure

Step 1:安裝最新的Raspberry Pi 3 Raspbian OS

樹莓派基金會取得最新的作業系統 Stretch img 檔之後,燒錄開機用的 sd卡。確認Raspberry Pi 開機並連上網路之後,使用以下指令更新系統:

注意:需使用 Raspbian Stretch,上一版 Jessie 確認不支援。

 

$ sudo apt-get update

Step 2:將 Intel Movidius神經運算棒插上Raspberry Pi 3 的 USB接頭

Step 3:安裝Intel Movidius Neural Compute SDK (NCSDK):

請用以下指令來下載並安裝NCSDK

$ git clone https://github.com/movidius/ncsdk
$ cd ncsdk
$ make install
$ cd ..

 

Step 4:取得NCAppZoo github

$ git clone https://github.com/movidius/ncsdk
$ cd ncappzoo

 

Step 5:執行benchmarkncs.py來收集MobileNets執行效能

$ cd apps/benchmarkncs
$ ./mobilenets_benchmark.sh | grep FPS

 

結果

在這些選項中,您一定可以根據自身的精確度與效能需求找到最適合的網路。下圖 (來源:Google’s blog) 可看出使用ImageNet分類時,精確度與效能的消長關係。圖中也可看到 Intel Movidius神經運算棒的效能(單位FPS,數據未經Intel原廠確認)。

* Network Accuracy Data from Google’s Blog https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html

如上圖,Raspberry Pi 3 搭配 Intel Movidius神經運算棒(橘色線)與單單使用Raspberry Pi 3 相比,前者執行 MobileNets 的FPS速度為後者的9倍 (參數皆為DepthMultiplier=1.0 / 輸入影像大小 = 224×224 / Top5 accuracy of 89.5%)。

Raspberry Pi 是一個相當不錯的開發平台。雖然單單使用Raspberry Pi 3 在推論上已能達到相當不錯的frame rate,NCS 卻硬是把效能提升一個量級,並讓這個平台在執行CNN-based的神經網路時的效能更好。如上表,Intel Movidius神經運算棒搭配Raspberry Pi 3 來使用 MobileNets進行推論運算的效能成長了 718% 到 1254%。

 

原文經Intel授權翻譯自:https://movidius.github.io/blog/ncs-rpi3-mobilenets/

 

[ App Inventor + Microbit ] RGB LED控制

$
0
0

作者/攝影   曾吉弘
時間   2小時
成本
難度  * * *
材料表
  • 個人電腦
  • App Inventor開發環境
  • 支援BLE的Android手機
  • BBC Micro:bit開發板
  • RGB LED燈

 

本文要介紹如何使用App Inventor來控制 micro:bit的 I/O腳位,以 RGB LED作為輸出應用。(原始碼下載請按我)

 

請務必先讓您的手機與Micro:bit進行藍牙配對,否則無法正確執行本範例。

 

硬體清單

本範例所使用的RGB LED實際上是把紅綠藍三色的LED整合到同一個元件中,並且有陰極共用與陽極共用兩種規格。本範例使用的是共陰 RGB LED。以下是本專題的硬體清單:

  • BBC micro:bit 微控制板, 1
  • 麵包板, 1
  • 跳線, 4
  • RGB LED (共陰), 1

 

注意:如果您使用共陽RGB LED的話,最長腳要接到 micro:bit 的 3.3V腳位,並且 App Inventor 端給 1 會讓腳位變成低電位,這與共陰的行為剛好相反

 

 

範例影片

 

請根據以下資訊來連接Micro:bit RGB LED:

Micro:bit RGB LED (共陰)
GND GND (最長腳、灰線)
P0 R (紅線)
P1 G (綠線)
P2 B (藍線)

完成如下圖。

您可使用鱷魚夾或把線彎成U形來勾住Micro:bit腳位上的圓孔,當然後者比較容易鬆脫囉。

App Inventor

本範例要示範使用 app 來控制接在 micro:bit 腳位上的 RGB LED 發出四種不同的顏色。首先請登入 MIT App Inventor 並建立一個空白專案。.

 

以下步驟是根據App Inventor IoT分站上的基本範例開始一步步加入本專題所需的元件,當然也可以直接下載完整的 .aia。

 

首先要加入本專案所需的擴充檔。

  • 左側Palette區中,找到最下方的Extension,點選”Import extension” → “URL
    • 貼上micro:bit extension的網址: http://iot.appinventor.mit.edu/assets/com.bbc.micro:bit.profile.aix
  • 新增一個Microbit_IOpin元件,設定其BluetoothDevice屬性為”BluetoothLE1” (別忘啦!)

接著加入本範例所需的元件:

  • 新增一個TableArrangement元件
    • 設定寬度為”Fill parent“、高度為”200 pixels“,row(列數)為2,最後設定column(行數)為3
    • 設定其Visible屬性為false,我們會在與micro:bit建立連線之後讓它顯示出來,才能點選按鈕來發送藍牙指令。
  • 新增五個按鈕到tablearrangement元件,將其文字分別改為”Red“, “Green“, “Blue“, “White“與”Off“對應不同的LED動作。

調整之後,您的畫面應該會類似下圖。有一點點不同沒關係,背景顏色、位置與顏色都可以修改,喜歡就好!

 

Blocks

 

STEP 1:連線後要求更新腳位狀態

BluetoothLE1.Connected事件中,我們顯示連線確認訊息,並設定micro:bit腳位為”digital output“,這是因為我們要控制RGB LED所以得這麼作。在此會用到三個Microbit_Io_Pin.ConfigurePin指令,分別設定pinNumber為0, 1, 2 (代表micro:bit的P0, P1與P2腳位),analog欄位設為false,input欄位設為false

仔細來看看Microbit_Io_Pin.ConfigurePin指令,它有三個參數:pinNumber (腳位編號), analog (true代表類比模式,false代表數位模式),input (true代表輸入,false為輸出)。

所以下圖是把micro:bit P0腳位設定為”數位輸出(digital output)“,可連接像是LED、繼電器這種數位輸出元件。更多micro:bit I/O腳位的詳細設定請參考:http://microbit.org/guide/hardware/pins/

下圖則是設定micro:bit P2腳位為”類比輸入(analog input)“。可連接旋鈕電位計、光敏電阻等元件。o this pin.

STEP2: 更新LED狀態的副程式

為了讓程式意讀易懂,我們使用副程式來管理控制micro:bit腳位狀態的多個指令。新增一個副程式(procedure),改名為”ledControl”。

 

接著點選藍色小齒輪來新增三個參數,分別改名為”r”, “g”, “b”。顯然這三個參數是用來代表micro:bit用來控制RGB LED的腳位狀態。

在副程式中加入三個Microbit_Io_Pin.WriteOutputPinData指令,每一個分別控制micro:bit一隻腳位的狀態。因此第一個指令請設定pinNumber為0,pinValue為 r 參數值。後兩者以此類推,完成如下圖:

STEP2: Button to light up red

按下Button_R按鈕會讓RGB LED亮起紅燈,作法是呼叫ledControl副程式並設定參數為(1, 0, 0),代表P0為高電位(1),P1 / P2 為低電位(0)。

STEP3: other buttons for different colors

另外四個按鈕的差別只在於參數差異,這樣您應該可以感受到使用副程式的號處了吧:

  • Button_G: (0, 1, 0) 亮起綠色
  • Button_B: (0, 0, 1) 亮起藍色
  • Button_W: (1, 1, 1) 亮起白色
  • Button_Off: (0, 0, 0) 熄滅.

STEP4: 中斷藍牙連線

點選ButtonDisconnect按鈕會中斷藍牙連線,會讓app回到初始狀態並等候下次連線。

操作

完成啦!請確認您的Android裝置與 micro:bit 已經藍牙配對好了。接著從App端去連線到 micro:bit,連線成功後會出現五個按鈕,點選不同按鈕就可以看到RGB LED亮起紅綠藍白四種顏色與熄滅,如果亮起的顏色不對或是無法亮起請再次檢查接線是否鬆脫與腳位順序是否正確。

 

小挑戰

  1. 試著讓RGB LED更繽紛,例如紅色與藍色腳位同時點亮,就是紫色的光芒喔。
  2. 加入SpeechRecognizer元件,用語音來控制RGB LED。

 

 

相關文章:

Viewing all 678 articles
Browse latest View live