Category Archives: Programming Language & IDE

[翻譯] 2018.06.19- 根據MIT Scratch Team,Scratch 3.0的3大重點

原文作者

MIT Scratch Team

紀錄攝影
翻譯宗諭訪問地點
訪問時間

原文刊登日期:2018年6月18日

 

簡單說,不囉唆,Scratch 3.0要上線啦!

 

Beta版預計2018年8月上線,正式版預計2019年1月2日上線。

 

  然而,在Scratch 3.0上線前,有3件事您需要知道:

  1. Scratch 3.0將有更多創作與分享的方式

  • 將可在平板電腦上創作、分享及組合專案。

  • 將有數十個新的角色、背景及聲音可以選擇。

  • 透過新的繪畫與聲音編輯器,將更容易組合並控制角色、音樂及聲音。

  • 伴隨著新的延伸系統,孩童可以替實體裝置(例如Micro:bit)與網路服務(例如Google翻譯)撰寫程式。

圖1 Scratch 3.0將有更多不同角色

2.對於Scratch新手,Scratch 3.0有新的支援服務

  • 對於初次使用者,有新的編輯體驗。

  • 新的教學短片

  • 更新「Scratch活動卡片」與「教育者指引」

  • 透過哈佛大學ScratchEd的朋友們,更新了「創意運算課程(Creative Computing Curriculum)」。

  • 透過「Code Club」與「CS First」的朋友們,更新了教學文件。

圖2 新的教學短片

 

3.然而,Scratch 3.0仍是那個你熟悉且喜愛的Scratch!

  • 所有現存的專案和帳號將可繼續在Scratch 3.0上使用

  • 所有現存的程式積木都還在(而且我們還會增加新的程式積木)!

  • Scratch 3.0將有諸多不同語言的版本

  • Scratch 1.4和0的離線版本仍可繼續使用

  • 對每一位使用者,Scratch仍然免費(萬歲)!

 

  詳情請見原文:https://medium.com/scratchteam-blog/3-things-to-know-about-scratch-3-0-18ee2f564278

 

相關文章

[Scratch]Scratch Day 2018

 

作者/攝影

曾吉弘

文章分類

活動紀錄

時間
成本
難度
材料表

 

  5/12對於全球的Scratch使用者來說是個大日子,今天就是2018的Scratch Day!自2006年發佈以來,已經是第十三年了。來自世界各地的大小朋友齊聚一堂,一齊歡慶Scratch帶給大家的各種樂趣。阿吉老師(就是我)人在MIT當然也不能錯過啦,對於Lifelong Kindergarten(本文後簡稱LK)團隊,把兩個小時規劃得毫無冷場熱鬧非凡,令我非常佩服。

 

  另一方面,許多攤位乍看之下都是一個亂字,但這符合Mitchel Resnick在LCL課程中提到的 tinkering(修補式學習)精神,雖可能在一定程度上看起來亂糟糟,其實所獲得的遠比「完成這件事」來得更多。失敗的經驗也是很可貴的呢。

 

  當天活動從10:00開始至11:40左右結束,雖然不到兩個小時,但感覺得出每個攤位皆精心規畫過,不管年齡、身分皆可找到一個位子同樂喔!平常很安靜很學術的Media Lab,搖身一變成了遊樂場,熱鬧非凡!Media Lab一樓變成報告處,大廳也掛起了超大的Scratch小貓海報:

 

 

  先來回顧一下,在2017年,全世界共舉辦了500場左右的Scratch day(只要你願意,三個人在一起也算喔!)

 

  穿著藍色T-shirt的LK團隊,逐一上台介紹今天各自負責的攤位,也有不少青少年志工。不知道該如何可以擔任志工,被選上應該會很開心吧!

 

  這個背影就是Mitchel Resnick教授。他的身高應該有190公分,在現場是很好認的。此外,他也受邀參加了5月18至20日,在加州 San Mateo舉辦的Maker Faire Bay Area 進行分享。

 

 

  當天的活動使用了Media Lab的六樓及部分的五樓,分成諸多主題,包括音樂、互動、繪畫、機器人、說故事分享、大型裝置(big things)及烤餅乾(Computational cookies & Codeable cupcakes),詳細如下圖:

 

  活動即將展開,布置得很華麗。

 

  整桌的勞作材料,看了就讓人開心!

 

  這個桌子在示範顏色偵測,有注意到畫面右上角的webcam嗎?小朋友使用樂高積木排在紙上,就可以做出牆壁或水溝,讓角色在遊戲裡跳來跳去。

 

  樂高桌一擺出來,小朋友就不想走啦!

 

  你可以把自己的Scartch專案,在這個大螢幕秀出來給眾人看,也可以接大按鈕來玩。

 

  這個就是大按鈕,可以看到裡面是一個開關接到makey makey板子,再以USB線接上電腦,Scratch便可以知道按鈕有沒有被按下。

 

  另一個使用makey makey的作品,既是翹翹板又可以當成飛機的操縱桿來使用,鋁箔接觸到盤子就會觸發,概念十分簡單。

 

Light play:小朋友使用Scratch,搭配簡易的感測器控制馬達、燈光。

 

  登記Share & Tell 的時間表。每人只有三分鐘,一下就額滿囉。

 

  每個人皆有機會與來自世界各地的玩家碰面。

 

Art bot:Scratch + Wedo,在畫布上畫出簡單的樣式。

 

  看到畫成這樣,就知道有多受歡迎啦!

 

 

  這是傳說中的 Computational cookies 和 Codeable cupcake。現場選好Scratch角色後,做出簡單的樣式(當然也是用Scratch),直接用印表機搭配可食用顏料印出來後,放上餅乾就可以吃了,真的很捨不得吃啊!

 

  這是大頭貼機。有許多道具讓大家拍照,並拿貼紙回家。

 

  現場有看到LK團隊自行設計的Scratchbit,預計明年上kickstarter募資。使用藍牙與電腦連線,有光感測器、加速度計(XY軸)、陀螺儀(Z軸)與指示LED,看來是下一代主推的互動體感核心元件。目前外殼皆是用3DP製造。MIT人員表示,是新設計的電路,所以應該與Micro:bit無關。

 

  從影片可看到操作效果相當靈敏,雜訊處理後的效果也很不錯。現場的3D列印配件,讓Scratchbit可以裝在球拍、呼拉圈、鏟子或帽子上,好想趕快入手啊!

ScratchBit影片

 

  裝在呼拉圈或是桌球拍上都是不錯的應用喔!

 

  這是玩具屋,擺滿了各式各樣Scratch結合硬體的應用,樂高的EV3與Wedo都在這邊。

 

現場拍攝的影片集錦:

 

更多照片請看這:

 

相關文章

[新品介紹]MIT App Inventor Codi Bot物聯網教學互動機器人

作者/攝影曾吉弘
文章分類產品介紹
時間
成本
難度*  (1~10)
材料表

對於會寫程式的人來說,Python/C/Java是完全不同的程式語言。但對於沒接觸過的人來說,通通都是一樣的:很可怕。因此程式語言需要一個圖騰來代表,例如,Scratch的那隻小貓、 Linux的企鵝、Java的咖啡,以及Android的小機器人⋯⋯等等,在相關場合中,我們都可以看見這樣的代表符號。

    MIT App Inventor去年發起了一項募資計畫,目標是加速App Inventor 的 iOS版本。贊助$1500美金以上者可以收到一套實體的物聯網教育套件,但這時大家對於內容還不是很清楚應該如何規劃。Hal Abelson教授就問是否可以幫忙?

當然可以啦,不就是為了幫忙才去MIT的嗎?

輪型或多足型機器人設計相關課程算是CAVEDU教育團體的專長,但MIT App Inventor小組盼望能結合它們的新logo,因為之前的logo太Android了,所以他們於去年推出了新的小蜜蜂logo,與Android 3.0 honeycomb 相當神似。

經過一番努力之後,MIT App Inventor Codi Bot 誕生了!

圖1

MIT App Inventor Codi Bot在設計上有幾項重點:

可愛、易用、教育、可擴充

特色:

為了讓使用者更易入手,我們開發了 LinkIt 7697 的 App Inventor extension,(個人覺得比Arduino 101的好用多了)。LinkIt 7697端只要上傳一次程式就可以順利與App Inventor溝通,也就是使用者只要專心寫App Inventor程式即可。如果在辦短期營隊或是體驗活動的時候,可以先把LinkIt 7697準備好,這樣可以省去現場上傳程式的各種麻煩事。

核心使用 LinkIt 7697Robot Shield V2.0,這樣使得整理電線變得很輕鬆,國內也有許多團隊使用兩者開發出許多有趣的專題。

當然,Codi Bot能做的不只是如此,7697 可以結合 MediaTek Cloud Sandbox等雲端服務結合LINE、IFTTT等通訊軟體

 

教學文件:

  • 單機執行:直接執行 (影片)
  • LED:使用按鈕、滑桿來控制翅膀與底座的LED (影片)
  • 翅膀:使用按鈕、滑桿來控制翅膀(伺服機) (影片)
  • 聲音:控制蜂鳴器發出各種音符或自訂義頻率與時間長度 (影片)
  • 完整app:整合上述功能 (影片)

來看實體照片吧,LED亮起的時候真的很漂亮,影片中可以看到翅膀拍動以及發出聲音的效果。

 

圖2

 

圖3 背面

 

圖4側面

    開發過程中,非常感謝聯發科技實驗室MiniPlan,CAVEDU同仁的超強後勤。

7697 extension感謝林祥瑞袁佑緣兩位小超人,以及MIT App Inventor Codi Bot的設計者:游允赫老師。

比較一下 MIT App Inventor的logo 與 Android 3.0 honeycomb:

圖5 App Inventor的logo

 

圖6 Android3.0 honeycomb

 

相關文章:

Mitchel Resnick教授給台灣孩子、家長與教學者的一段話

作者/攝影曾吉弘

 

CAVEDU與Mitchel Resnick教授的淵源相當深,要說是這行的祖師爺也不為過。阿吉老師早在大學時代就與M教授碰面過了,他從1999年的RCX(甚至更早的Cybermaster與Scout,沒聽過了吧~) 就開始與樂高公司在 Mindstorms 系列上有密切合作,所以M教授在2004 Mission Mars 與2006 NXT 發表兩次訪台時都有幸與他見面過。

 

Scratch從2006年誕生以來,介面與風格可說是沒什麼變動。相較於軟體上大家都在追求”還要有什麼?” 我反而佩服的是M教授說過的”我們要保留哪些核心功能?”

人生能有幾個15分鐘能與心目中的大師聊天?2016年來MIT受訓時,好不容易才和他約吃早餐,把我們出版的[Scratch 數位互動我最行]致贈給M教授。更何況這次來美國將近半年,知道他就在斜對角300公尺外的Media lab,心情可是大大不同。

M教授對於即將在今年八月上線的Scratch 3.0非常非常期待(他用了super super excited),期待能幫助所有的孩子們”創意思考 (think cratively) “並成為”創意思考者 (creative thinker)”,這正是LCL課程的核心觀念所在。如果大家想要多了解 Lifelong Kindergarten小組的理念的話,建議一定要看看Learning Creatvie Learning的課程網站,六周課程每周都非常實用且精彩。CAVEDU教育團隊很高興能協助LCL網站與課程內容的繁體中文化,並於2016 17年度與台灣Intel公司協助推廣Computer Clubhouse,M教授認為這某方面來說可視為maker space的源頭。

 

對於Scratch 3.0,他題到了以下幾點功能:

  1. mobile device better
  2. extension
  3. 網路服務 (在此提到一個Scratch結合Spotify的範例)

 

這次抓緊機會請他錄一段影片給台灣的大家,也讓他與團隊同仁知道台灣在使用Scratch教學上非常活躍。期待他有機會能再來台灣。

 

M教授在訪談中提到學習如何創意性思考、系統性推理,還有彼此合作來完成事情,這些技能可說是前所未有地重要。Lifelong Kindergraten小組會變得更開放來堅持Scratch的原初精神。讓大家在運用Scratch來”做什麼”與”怎麼做”等方面有更多可能性。我也非常期待看到台灣的小朋友們運用Scratch 3.0所完成的作品。

當天也感謝謝宗翰(目前在Meida lab Biomechanics小組攻讀博士,領域為機器義肢/腳)協助訪談與拍攝照片喔。這個樂高桌子實在是太搶鏡頭了~

 

更多照片

從Media lab一樓大廳走上去到4樓就是Scratch大本營

大廳中央有用樂高完成的Media lab建築模型,好精緻啊

挑高樓中樓,採光非常好,基本上除非陰天不然白天不太需要開燈。

每個小角落都充滿驚喜呢,可以看到 Scratch結合各種裝置的應用:樂高Wedo, Boost、Microbit、Makey Makey,還有他們自己作的硬體等等。也可以看到歷代樂高的智慧型積木主機,一下子就快20年過去了啊~

 

相關文章:

[情人節快樂,自製屬於自己的Google doodle吧!] 使用Scratch設計Google doodle 互動小動畫

本次Google與Scratch公開教學剛好搭上了二月的情人節節慶,也維持著Google doodle的老傳統(每當節慶時都會有特別的字樣設計或是互動式小動畫),結合了Scratch的圖形化程式後讓人人都可以成為Google doodle設計者,這樣的想法真的是很棒呢!

作者/攝影  曾吉弘
時間  1小時或看您想要花多少時間!
成本
難度 * *
材料表可連網之個人電腦

 

Google與Scratch聯手推出基礎教學課程,告訴您如何自行設計 Google doodle,就是在Google 首頁看到的各種以Google字樣為主的簡易小動畫,還有12堂基礎課程,有興趣的家長老師們可不要錯過喔!

由此進入教學網頁,看完教學影片請點選右邊的 “Starter Project” 就會進入這次主題的 Scratch 樣板,相關的圖檔與效果檔都已經預先載好了。

開啟專案會看到基礎的Google字樣,每一個字母都是一個獨立的角色(sprite)。已經玩過Scratch的朋友到此應該已經一頭栽進去了,馬上就有很多東西可以玩啊~

您可以點選某個字母之後點選造型(costumes),可以看到本專案已經預先提供了非常多可愛的造型。

那沒學過的呢?別擔心,網頁下方一共有12個基礎課程,每一個課程都有影片,邊看邊學很方便 (以下按照原文順序翻譯):

切換角色(Switch Costume)說說話(Say Something)
加入背景(Add Backdrop)改變顏色(Change Color)
編輯、畫畫或加入字母( Edit, Draw or Add Letters)追著滑鼠跑(Chase)
修改舞台(Change Scene)讓字母旋轉(Spin)
字母隨機移動(Jumble Letters)讓字母消失(Disappearing Sprites)
讓字母隨著音樂畫遍(Dance Whirl)字母彈跳球(Bouncing Sprites)

 

這是阿吉老師做到一半的截圖,一起來玩玩看吧!

您當然也可以結合目前很熱門的實體運算概念來與真實世界互動,例如Scratch board、Arduino與樂高Wedo等等都是很不錯的喔!

 

相關文章:

[ App Inventor + Microbit ] RGB LED控制

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

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

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

 

 

硬體清單

本範例所使用的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:bitRGB LED (共陰)
GNDGND (最長腳、灰線)
P0R (紅線)
P1G (綠線)
P2B (藍線)

完成如下圖。

您可使用鱷魚夾或把線彎成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。

 

 

相關文章:

[App Inventor IoT] LinkIt 7697使用BLE(藍牙4.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變數上喔。

 

 

範例影片

 

相關文章:

[ App Inventor IoT ] LinkIt 7697使用 BLE(藍牙4.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] Microbit磁力感測器控制小蜜蜂圖示

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy 來取得 Micro:bit 磁力感測器訊號,讓app上的小圖示飛來飛去。

作者/攝影  曾吉弘
時間  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 做出更多功能吧

 

相關文章:

 

 

完成如下圖:

 

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

 

本文章教各位讀者如何用手機撰寫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燈)

 

相關文章:

 

 

[App Inventor+Microbit小專題 ] LED控制

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

本文要介紹如何讓App Inventor 透過 BLE 來與最近非常熱門的BBC Micro:bit開發板互動。Micro:bit板子上已經具備了BLE藍牙通訊功能,搭配app Inventor寫好的micro:bit extesion,就能有更多互動的效果。本範例修改自 MIT App Inventor IoT網站之 Micro:bit範例

範例 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]代表沒成功,請再試一次

編寫程式來控制Micro:bit LED matrix

匯入BLE 與 micro:bit extension

 

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

  1. 貼入以下兩個 extension link:

 

2. 請加入 Microbit_Led 這個元件,這是一個非可視元件。並把它的 BluetoothDevice 屬性設為 “BluetoothLE1″。這步驟很容易忘記,別漏掉了

  1. 加入四個按鈕放入 horizontalArrangement元件中,分別用於掃描、停止掃描連線與斷線
  2. 加入一個說明訊息用的 label
  3. 加入一個 ListVeiw,當掃描到鄰近的BLE裝置時會顯示在這裡
  4. 新增一個 TextBox,在此輸入我們希望 micro:bit呈現的英文字(中文不行喔)
  5. 新增兩個按鈕,一個是 [Write to LED] 把 Textbox 內容丟給 micro:bit ,一個是[DrawSmiley],讓 Micro:bit 呈現我們所指定的點陣圖案。

Blocks頁面

  1. 掃描與連線

  1. 畫笑臉副程式

在此用一個副程式 DrawSmiley 來代表,我們會用一個 5 x 5 的數字陣列發給 Micro:bit,就能藉此顯示我們想要的圖形。

在此用到的是 Microbit_Led1.WriteLEDMatrixState指令搭配 binary to base 10 指令組合起來的 0101 陣列,1代表 LED亮起,0則是熄滅。仔細看看,這樣就是一個笑臉呢

0 1 0 1 0

0 1 0 1 0

0 0 0 0 0

1 0 0 0 1

0 1 1 1 0

  1. 發送Textbox內容到 Micro:bit

沒錯,就這麼簡單,直接把 Textbox內容透過 Microbit_Led1.WriteLEDText指令發送出去就好,但不能打中文喔

斷線

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

完工了!來試試看吧。請確認您的Micro:bit與Android已經配對好了。按下按鈕應該可以看到您在 Textbox 中輸入的文字(中文不行喔)以跑馬燈的形式出現在micro:bit 的 LED matrix 上。按下 smilley 按鈕應該也能看到笑臉圖案, 試試看用 Micro:bit LED 搭配 App Inventor 做出更多功能吧

 

相關文章:

 

完成如下圖:

[雙A計畫]藍牙模組(HC05、HC06)常見的指令使用教學

在教到藍牙之間的通訊的課時,常常會搞錯藍牙型號,想寫這篇文跟大家分享,市面上常用的HC-05和HC-06外觀幾乎一樣,不知道如何對藍牙鮑率做設定,想深入研究可以來看看喔。

作者/攝影  許鈺莨
時間  30分鐘
成本
  • 600~800
難度  * * *
材料表
  • 藍牙模組HC-05*1
  • 藍牙模組HC-06*1
  • USB TO TTL線*1
  • Arduino UNO*1

在按照本文中步驟操作時,請讀者一定要購買時請先與商家進行確認以下幾點:

  • 藍牙型號是HC-05還是HC-06
  • 若是已經確認藍牙型號後,請再與商家確認出廠預設鮑率是9600、38400…..等。

如果以上兩點都已確認過,在做藍牙相關設定時會比較快上手,但一切以商家給的文件為主。

接下來教大家如何快速辨別我們買的藍牙是型號是HC-05還是HC-06,還有藍牙指令設定,所以針對以下幾個部分,我以Keyes藍牙的 HC-05和HC-06做範例:
(本文參考instructable藍牙文件、Retun的Blog)

 

  1. 藍牙HC-05和用Arduino UNO 板設定AT指令教學
  2. [進階設定]HC-05主動模式和手機藍牙連線
  3. 藍牙HC-06和用Arduino UNO 板設定AT指令教學
  4. 藍牙HC-05 USB轉TTL模組設定AT指令教學
  5. 藍牙HC-06 USB轉TTL模組設定AT指令教學

1.藍牙HC-05和Arduino UNO 板設定AT指令教學(適合課堂上多人使用)

如果看見藍牙有六隻針腳時,就可能是型號HC-05的藍牙,但是還是要依照以下步驟實際接線測試或與商家確認藍牙型號。

 

設定HC-05的AT指令之前,先與Arduino UNO接線,請先將Arduino的RESET和Arduino的GND接在一起,使得Arduino成為重置模式再依照下方依序接線:

藍牙Arduino UNO
KEY(or En)3.3V
VCC5V
GNDGND
TXDTXD
RXDRXD
STATE不用接

接完線後,將Arduino UNO 用USB連接到電腦,選擇該板子的COM Port,按下Serial Monitor,由於這是Keyes藍牙HC-05的鮑率出廠時預設為38400,所以Serial Monitor的鮑率要選38400,另外一個選項要選NL&CR,即可下AT指令,大小寫不拘。
用藍牙HC-05的好處就是如果設成別的鮑率,之後如果忘記了,在Serial Monitor還是可以固定選38400,再用「AT+UART?」指令查詢,或是設定成別的鮑率。

輸入AT指令第一次會出現ERROR:(0),第二次輸入AT出現OK,即可進入AT模式。

因為HC-05為主從一體(Slave & Master)藍牙,指令多達36種,所以接下來會告訴各位常用的指令。

如果你和我一樣是講師在課堂上教學的話,則一開始這裡有兩個步驟非常重要:

  1. 查詢HC-05 address
  2. 知道自己藍牙的address後改名字

因為在上藍牙通訊時,如果只有兩三位同學的話,還可以一個一個連address測試,但是10幾、20幾位同時在課堂上連線時會搞混,會不知道是不是會連到自己的藍牙,所以要先查出自己藍牙的address的指令,再改藍牙名字。

 

  • 查詢HC-05 address: 「AT+ADDR?」

  • 改名字為CAVEDU: 「AT+NAME=CAVEDU」

  • 查名字 :         「AT+NAME?(確認是否改對)」

  • 改鮑率為9600 : 「AT+UART=9600,0,0」

  • 查鮑率: 「AT+UART? 」

如果改完鮑率請把藍牙電源拔掉再重新接上,再把KEY腳位接上3.3V,新的鮑率設定才會生效

 

  • 設定配對密碼為1234: 「AT+ PSWD=1234」

HC-05還有設定主動模式(Master)的功能,指令如下:

 

  • 設定被動模式: 「AT+ROLE=0」

  • 查詢主/從模式:         「AT+ROLE? 」

  • 設定主動模式: 「AT+ROLE=1」

  • 預設出廠模式: 「AT+ORGL」

如上圖所示,設成出廠模式時,可以用前面所知的AT指令可以查到所有的狀態,包括名字、鮑率、密碼皆已回復。如果之前設成主端(Master),後來也會回復設成從端(Slave)。

 

 

 

  1. [進階設定]HC-05主動模式和手機藍牙連線

既然已經知道如何手動下AT指令設定HC-05為主動模式的話,接下來試著跟手機藍牙連線吧!

既然要和手機連線的話,手機裡就必須先安裝有接收藍牙字串的APP,我是用Android系統的手機,Google paly商店可以搜尋名字為「Bluetooth Terminal」的APP,而在IPHONE的App store也可以搜尋得到一樣名稱的APP,這款APP可以和HC-05雙向溝通。

 

而如何知道手機的藍牙位址,可以由 :設定→關於手機→狀態,知道訊息。

再上一個段落已經知道如何設定HC-05的主動模式了,所以這節以主動連到手機藍牙位址為主。

下列敘述完整步驟,從設定主動模式開始:

 

Step1:切換至主動模式。

輸入指令「AT+ROLE=1」,收到回應「OK」,表示藍牙模組已進入主動模式。

 

Step2:確認藍牙模式。

輸入指令「AT+ROLE?」,收到回應「+ROLE:1」、「OK」,表示當前藍牙為主動模式。

 

Step3:指定藍牙連線至手機連接模式。

輸入指令「AT+CMODE=0」,收到回應「OK」,表示藍牙將連線至手機。

 

Step4:重啟藍牙。

輸入指令「AT+RESET」,收到回應「OK」,表示藍牙重置。

 

Step5:初始化SPP 函式庫。

輸入指令「AT+INIT」,收到回應「OK」,表示藍牙SPP函式庫已初始化。

 

Step6:設定詢問模式。

輸入指令「AT+INQM=1,9,48」,收到回應「OK」

1:RSSI信號強度指示。

9:可以搜尋9個藍牙設備。

48:搜尋時間為48*1.28秒=61.44秒內。

 

Step7:開始詢問,將搜尋周遭藍牙裝置。

輸入指令「AT+INQ」,收到回應「+INQ:12:34:567890:1F1F,7FFF」(該參數為藍牙Address,不同模組Address亦不同)、「OK」。

 

Step8:結束詢問。

輸入指令「AT+INQC」,收到回應「OK」,需要再次輸入指令「AT+STATE?」確認藍牙狀態,若藍牙回應為「+STATE:INQUIRING」、「OK」,代表藍牙未結束詢問,必須回Step4重啟藍牙和Step5初始化SPP 函式庫後,輸入指令「AT+STATE?」,回應為「+STATE: INITIALIZED」,才能成功連線手機藍牙。

 

Step9:綁定連線手機藍牙Address。

輸入指令「AT+BIND=1234,56,abcdef」(在此裝置Address以12:34:56:ab:cd:ef為例),收到回應「OK」。

 

Step10:和手機藍牙連線。

輸入指令「AT+LINK=1234,56,abcdef」

連線後,手機會出現輸入配對密碼1234,表示配對成功,之後就都不需要配對。

當配對成功後,接下來開啟Bluetooth Terminal,先按下「send」後,會出現之前配對成功的裝置清單,選擇之後即可雙向溝通。

下列是配對成功,HC-05和手機雙向溝通的畫面:

3.藍牙HC-06和用Arduino UNO 板設定AT指令教學(適合個人使用)

 

目前的HC-06藍牙會有四條針腳居多,分別是VCC、GND、TX、RX,以下是HC-06的正反面:

HC-06正面                                                                                                          HC-06反面

在設AT指令前,也是先與Arduino UNO接線,只需要接四條線。

和前面HC-05方法一樣,要先將Arduino UNO 的RESET和自己的GND接線,再和HC-06接在一起。

藍牙Arduino UNO
VCC5V
GNDGND
TXDTXD
RXDRXD

 

HC-06出廠後多半都已經設定為從端(Slave),而AT指令只有少數的指令如:密碼、鮑率、姓名….等,以下Arduino UNO Serial monitor示範AT指令,所有AT指令皆要大寫:

 

  • AT測試,回應OK

和HC-05不同的是,因為Keyes的HC-06出廠時預設為9600,所以Serial monitor的鮑率選項要選9600,選擇「沒有行結尾」或「No line ending」。

測試成功後,接下來就是設定其他的AT指令:

 

  • 查詢版本: 「AT+VERSION」

  • 設定名字為CAVEDU02: 「AT+NAMECAVEDU02」

  • 設定密碼為1234: 「AT+PIN1234」

  • 設定鮑率為9600: 「AT+BAUD4」
編號鮑率備註
11200設定鮑率為1200
22400設定鮑率為2400
34800設定鮑率為4800
49600設定鮑率為9600(原廠預設)
519200設定鮑率為19200
638400設定鮑率為38400
757600設定鮑率為57600
8115200設定鮑率為115200

與前篇HC-05最大的不同點是,假設你鮑率已經設成9600,若想要改鮑率或改名時,則你的Serial monitor的鮑率選項要選9600才能成功下AT指令;如果你鮑率已經設成38400,則你的Serial monitor的鮑率選項要選38400才能成功。也就是說,當你設定好之後就要記住自己鮑率是設定多少,否則就要每個鮑率去試試看,不像HC-05有固定鮑率為38400可以容易設定,這也是HC-06最大的缺點。

 

那麼問題來了,大家有沒有發現HC-06的AT指令比較少,並沒有像HC-05一樣有查詢address指令,那上課時怎麼辦呢?

個人較好的做法是在上課前先一一設定藍牙名字,上課時學員們才不會連到別人的藍牙。

因此我的建議是,HC-05和HC-06價錢如果差不多的話,可以買HC-05有較多的AT指令設定,上課時學員既可以學習去查address指令,又可以不會搞混連線到別人的藍牙,重點是老師就不用在上課前花時間設定所有學員的藍牙名稱。

 

  1. 藍牙HC-05 USB轉TTL模組設定AT指令教學

如果沒有Arduino UNO板,則用USB 轉TTL模組也是可以設定AT指令,那麼要在哪裡設定AT指令呢?

其實只要能夠讀取COM Port,使用任何一種終端機軟體皆可,如Putty、RealTerm….等等,我是使用AI的 CH430G USB 轉TTL模組,和使用AccessPort這個終端機軟體。

USB 轉TTL模組

 

AcessPort終端機

在使用AcessPort終端機前,HC-05先與USB 轉TTL模組接線:

USB TO TTLHC-05
3.3VKEY(or En)
5VVCC
GNDGND
RXDTXD
TXDRXD

 

接線時要注意是和USB 轉TTL模組連接,USB 轉TTL模組TXD和HC-05的RXD互接;

USB 轉TTL模組RXD和HC-05的TXD互接。

 

再將USB 轉TTL模組插入電腦USB時,會自動安裝驅動程式:

驅動安裝好了之後,需來到裝置管理員查COM Port,這也是和藍牙溝通的COM Port,所以在AcessPort終端機要選同一個 COM Port。

打開AcessPort終端機後按齒輪圖示 ,設定好鮑率9600和COM Port:

再按下電源圖示 ,就可以設定HC-05 AT指令,AT指令請參考「1.分辨藍牙HC-05和Arduino UNO 板設定AT指令教學」。

並在下方發送區輸入AT指令後要先按下鍵盤Enter後再按下「發送數據」即可,以下方圖示表示:

5.藍牙HC-06 USB轉TTL模組設定AT指令教學

USB 轉TTL模組和HC-06接線圖:

要注意的一點是,USB 轉TTL模組的TX要接HC-06的RX;USB 轉TTL模組的RX要接HC-06的TX。

USB TO TTLHC-06
5.0VVCC
GNDGND
RXDTXD
TXDRXD

 

AT指令和前面一致,請參考「2.分辨藍牙HC-06和用Arduino UNO 板設定AT指令教學」

並在下方發送區輸入AT指令後按下「發送數據」即可,以下方圖示表示:

 

相關文章:

 

[Processing匯入OpneCV視覺函式庫] 臉孔追蹤小專題

作者/攝影  曾吉弘
時間  3小時
成本
  • Webcam
難度  * * * *
材料表
  • 個人電腦
  • Webcam 或筆電內建攝影鏡頭
  • Processing IDE

本文要介紹如何在 Processing 中匯入OpenCV視覺函式庫,並做到臉孔追蹤的效果。

 

這比建置完整的OpenCV環境做法簡單多了,但是功能相對也會比完整的openCV環境來得少,就看您個人的需求囉。其實 Processing 的程式碼都很簡潔,也很容易做出漂亮的介面,是阿吉老師上課很喜歡的。Processing結合Arduino也很簡單。

 

硬體

請將#1伺服機的訊號腳位接到Arduino的#9腳位,用於控制PTZ平台的水平方向移動(Pan)

請將#2伺服機的訊號腳位接到Arduino的#11腳位,用於控制PTZ平台的垂直方向移動(Tilt)。其餘分別接電接地完成即可。

View post on imgur.com

示意圖(圖片來源 adafruit 與 sparkfun.com):

View post on imgur.com

View post on imgur.com

您可由 thingiverse這樣的網站找到更多的PTZ平台設計

 

Processing設定

1.下載Processing

2.開啟 Sketch → Import Library…   Add Library:在跳出選單中下載openCV, processing video函式庫

View post on imgur.com

View post on imgur.com

View post on imgur.com

3.下載Arduino函式庫,完成之後可以在 File → Examples 看到相關範例,都可以直接玩玩看喔

 

View post on imgur.com

4.開啟範例程式:LiveCamTest,就可以直接追蹤臉孔囉,以下是我們加入Arduino相關控制碼

import gab.opencv.*;
import processing.video.*;
import java.awt.*;
import processing.serial.*;
import cc.arduino.*;

int center_x, center_y;
Arduino arduino;

Capture video;
OpenCV opencv;

void setup() {
  size(640, 480);  
  video = new Capture(this, 640/2, 480/2);
  opencv = new OpenCV(this, 640/2, 480/2);
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);  
  println(Arduino.list());

  arduino = new Arduino(this, Arduino.list()[0], 57600); 
  //0代表第一個COM裝置,請根據實際狀況修改
  arduino.pinMode(9, Arduino.SERVO);     //#1 servo 水平
  arduino.pinMode(11, Arduino.SERVO);   //#2 servo 垂直
  video.start();
}

void draw() {
  scale(2);
  opencv.loadImage(video);

  image(video, 0, 0 );

  noFill();
  stroke(0, 255, 0);
  strokeWeight(2);
  Rectangle[] faces = opencv.detect();   //偵測是否有臉
  println(faces.length);                            //偵測到幾張臉

  for (int i = 0; i < faces.length; i++) {    //根據臉孔數目來跑迴圈
    println(faces[i].x + "," + faces[i].y);    //顯示臉的座標
    rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height); //畫長方形把臉框出來
    center_x = faces[i].x + (faces[i].width/2);   //起始點x + 0.5*寬
    center_y = faces[i].y + (faces[i].height /2);  //起始點y + 0.5*高
    print(center_x); 
    print(", "); 
    println(center_y);
    ellipse(center_x, center_y, 10, 10);
    arduino.servoWrite(9, int(map(center_x, 100, 270, 0, 180)));  
    //本組數值是center_x 於畫面之左右極值,需依照實際情況調整
    arduino.servoWrite(11, int(map(center_y, 80, 250, 0, 180)));  
    //本組數值是center_y 於畫面的上下極值,需依照實際情況調整
  }
  delay(100);
}

void captureEvent(Capture c) {
  c.read();
}

執行

 

由console的訊息可以看到以下訊息:

 

OpenCV for Processing 0.5.4 by Greg Borenstein http://gregborenstein.com

Using Java OpenCV 2.4.5.0

Load cascade from: C:/Users/user/Documents/Processing/libraries/opencv_processing/library/cascade-files/haarcascade_frontalface_alt.xml

Cascade loaded: haarcascade_frontalface_alt.xml

 

代表在此的臉孔追蹤還是用到了Haar分類演算法,點選連結可以看到關於本分類法的數理基礎。

 

執行畫面如下,可以看到畫面會把偵測到的臉孔標出來,也會在console中顯示偵測到的臉孔張數與座標

View post on imgur.com

View post on imgur.com

相關文章:

 

 

 

 

 

 

[Scratch1.4]從零開始遊戲製作-足球篇

「運動」,一直是遊戲製作中,歷久不衰的主題之一,像是EA SPORTNBA LIVE,還有FIFA,在早期任天堂時代,熱血系列也推出了足球的遊戲。而今天,我們要用Scratch這套軟體,製作出一款足球小遊戲,讓我們先來看一下遊戲的進行畫面吧!

(遊戲圖片來源:

http://www.baike.com/wiki/%E8%B6%B3%E7%90%83%E5%9C%BA%E5%9C%B0

http://www.mathland.idv.tw/fun/football.htm

http://588ku.com/image/sanjiaozhui.html

作者/攝影 郭皇甫
時間  2小時
成本 時間即是成本
難度 * * * *
材料表

<iframe allowtransparency=”true” width=”485″ height=”402″ src=”//scratch.mit.edu/projects/embed/171355158/?autostart=false” frameborder=”0″ allowfullscreen></iframe>

這一款足球小遊戲以人物運球繞過障礙物的同時,吃掉金幣過關,遊戲操作方式相當簡易,使用鍵盤的上、下、左、右鍵操控人物移動。本篇文章會教您製作出這款小遊戲的簡易版,當您上手後就能自行增加關卡的難易度與障礙物的多寡,以下我們針對角色、場景、音樂分別說明如下。

 

角色:

匯入角色

在Scratch中,圖片是相當重要的因素之一,從一開始製作遊戲時,我們就要決定匯入哪些角色?而這裡的角色指的就是圖片,包含人物圖片、物品圖片、介面圖片…等。而在這款遊戲裡,我們需要一位人物圖片,以及三個物品圖片,請先按照以下步驟操作。

Step1在右下角的後台區內,按下「開啟角色檔案」

圖01 開啟角色檔案

 

Step2選擇人物圖片的資料夾,並按下確定後新增。(您可以在網路上搜尋您想要的人物圖片,建議使用png檔,已經去背的圖片會較方便)在後台區與舞台區裡,您就可以看到已新增的人物圖片。

圖02 選擇人物圖片

圖03 新增角色成功

 

以同樣的方式,我們再新增三張物品圖片,分別是足球、三角錐、金幣。

圖04 新增另外三張角色圖片

 

在圖02中,我們可以看到人物有四張類似的圖片,仔細觀察每一張都有些微的不同,這叫作「連續圖片」。在圖片的類型中,有一種GIF的動態圖片,其實就是由一張張連續圖片所組成,您也可以在網路上搜尋關鍵字「.gif」。當您擁有一張動態圖片後,您可以有二種方式將它變成數張靜態圖片。1.匯入至Photoshop後另存圖層為png檔;2.進入網站http://www.zamzar.com/convert/gif-to-jpg/,將圖片轉存成數張png檔。如此一來,我們就能將這些靜態圖片匯入至Scratch中使用。

 

Step3.匯入連續圖片造型。點選腳本區的「造型」,按下「匯入」,將剩餘的人物圖片匯進來。

圖05  在造型中匯入圖片

圖06  匯入其餘三張人物圖片

編寫程式

接下來我們要命令這些角色做一些事情,其實在遊戲製作的過程裡,每位角色要做的事情都各有不同,但都會有一些共同的設定,例如起始位置,這可以讓您的角色在一開始就決定好位置,不管遊戲執行得如何,只要重新開始遊戲,就又會在原本設定的位置上,非常方便,接著請按照以下步驟進行。

 

Step1.設定角色大小。在舞台區最上方有四個圖案,找到並按下最右邊的「縮小角色」,將滑鼠移到舞台區的角色上後,重複點擊滑鼠左鍵,將角色尺寸縮小到適當的比例即可。

圖07  縮小角色尺寸

Step2.設定起始位置。首先在舞台區上,移動滑鼠至人物上並按住滑鼠左鍵,拖曳人物到您想要的位置上後放開,接著點選抽屜區裡的「控制區」與「動作區」,拖曳以下的積木方塊至腳本區。其餘角色的起始位置也是用同樣的方式設定。

圖08  設定起始位置

Step3.按下鍵盤上、下、左、右鍵控制人物移動。在「控制區」中拉進「重複執行」與「如果」,並找到「偵測區」裡的「按下空白鍵」,將其改為鍵盤的上、下、左、右鍵,接著分別在「動作區」與「外觀區」拉進「面向_方向」、「移動10步」、「下一個造型」,並將「移動10步」改為「移動2步」。執行後您會發現移動時圖片翻轉了,這時您只要在腳本區最上面的角色圖片旁邊找到三個按鈕,按下中間的「只允許左右翻轉」,如此一來,圖片就不會再翻轉了。

圖09  設定只允許左右翻轉

圖10  使用上下左右鍵控制人物

Step4.足球造型設定。讓足球在移動的同時能夠有滾動的效果,請先切換至足球的造型區,點選「複製」,在複製出來的足球旁點選「編輯」後,會出現繪圖編輯器,請按下最左邊第四個按鈕「順時針旋轉」,讓足球圖片的角度與前一張不同即可。請再複製二個足球圖片,並按照上述方式旋轉圖片。

圖11  複製出一個足球

圖12  順時針旋轉足球

圖13  作出四個不同角度的足球

Step5.足球動作設定。足球被人物碰到時,會往人物的反方向滾動,所以滾動的條件是「碰到角色一」和「按下方向鍵」,移動方式與人物設定相同。這裡要注意的是,足球被踢到後只會滾動一段距離,並不會一直滾動,所以我們設定固定次數,讓足球可以自己跑一段距離。

圖14  足球移動條件設定

三角錐與金幣

足球設定好之後,接著要設定障礙物與金幣,這二個物品的設置相當簡易,障礙物只要設定成「碰到足球時,讓角色一和足球回到原點」;而金幣只要設定成「碰到足球時,隱藏自己並加分」。

Step1.設定三角錐。除了設定起始位置外,再加入「如果碰到球,則廣播home」,在這裡需要新增一個「廣播」,並命名為home,它的作用是讓角色一和足球接收到廣播後,就會回到起始位置。

Step2.設定廣播home。當角色一與足球接收到廣播home時,便要能夠回到起始位置,所以我們要分別在角色一與足球裡加入以下程式。

圖16  角色一回到起始位置

圖17  足球回到起始位置

 

Step3.設定金幣。我們讓金幣做出「碰到球則隱藏自己,並加10分」的效果。為此,我們在「變數區」裡新增一個變數,並命名為「分數」。接著,加入「重複執行偵測如果碰到足球,則隱藏並加分」。

圖18  新增變數

圖19  將變數命名為分數

圖20  金幣的程式設定

背景:

設定背景

在背景中,除了要匯入圖片外,也要設定計時與計分的功能,同時,開始遊戲與結束遊戲的畫面也會一併在這裡設定。

 

Step1.匯入圖片。點擊後台區的舞台,按下腳本區的「背景」後,按匯入,將背景圖片匯進來。並在繪圖編輯器裡,按下「放大」,將背景圖片覆蓋整個舞台區。另外,我們再使用畫筆在背景的左右二邊,各繪製一條紅色的直線,作為場地的邊界線。

圖21  點擊新增背景的匯入功能

圖22  匯入背景

 

圖23  按下放大背景

圖24  繪製二條紅色邊界線

Step2.背景程式設定。在背景裡我們需要設定「計時器」什麼時候開始計時,什麼時候停止遊戲。在一開始的時候讓計時器歸零,接下來重複偵測「如果計時器大於30秒,則停止遊戲」,分數的設定也可以在這裡加入,即一開始將分數歸零。

圖25  設定時間與分數

Step3.設定開始與結束畫面。在背景裡使用「繪製」或「匯入」來新增二張背景圖,分別代表遊戲開始與結束畫面,在遊戲開始的背景寫上「按下空白鍵開始遊戲」;結束畫面寫上「GAME OVER」,並加入圖26的程式。

圖26  加入遊戲開始與結束的設定

 

Step4.在上一步驟中,我們加入了廣播「遊戲開始」「GAMEOVER」以及「按下空白鍵」的設定,為了讓遊戲執行起來能夠一致,所以在人物與物品裡面,我們也要稍作修改。在一開始按下綠旗與接收到GAMEOVER時,讓人物與物品都隱藏起來,當接收到遊戲開始時,才顯示出來。而在足球裡,也加入「如果碰到紅色,則回到原點」。

圖27  人物設定修改

圖28  足球設定修改

圖29  三角錐設定修改

圖30  金幣設定修改

 

音樂:

最後,我們再匯進背景音樂,讓整個遊戲遊玩起來更有趣。點擊舞台,選擇聲音,點擊匯入,將音樂匯進來後,再切換到程式裡,將「聲音區」裡的「播放聲音」拉進「當接收到遊戲開始」之下即可。(背景音樂您也可以至網路上搜尋可免費分享下載的連結,檔名請使用.wma)

圖31  匯入音效

圖32  加入播放聲音

 

您也可以加入各種變化,例如:使用更多三角錐並排出路線;放置更多金幣或是讓金幣隨機出現;加入不同背景、不同障礙物的關卡增加難度…等,都可以讓您的遊戲表現得更加特別。

 

相關文章:

[Python教學] Facebook圖形API測試工具,取得粉絲頁按讚數

作者/攝影 曾吉弘
時間  2小時
成本
難度 * * * *
材料表
  • 個人電腦
  • Facebook帳號

本文要介紹如何使用Facebook的圖形API測試工具(Graph API explorer) 取得粉絲頁的相關資料,最常見的應用就是讚數。如果喜歡的話,還可以結合Arduino作出有趣的互動裝置,例如以下:

(註:本影片僅為示意,並非使用Python來取得資料)

 

Facebook開發者平台與圖形API測試工具頁面

請到Facebook開發者網站(請用您原本的Facebook帳號登入即可),在網頁最下面找到 圖形API測試工具(Graph API explorer)。您可以在此查詢您個人的所有資料,查詢結果會以 json 格式回傳,下圖是阿吉老師的Facebook Id 與使用者姓名的查詢結果:

(圖形API語法詳細文件請點我)

請點選畫面右上角的下拉式選單,找到您所要查找的粉絲專頁(您得是該專頁的管理員才行),例如本範例的CAVE教育團隊。下圖查詢了四個項目:id、name、fan_count(讚數)與link。您當然可以查詢其他欄位,只要有輸入資料都可以查得到。

以往的做法是比較寬鬆的,不需要AccessToken,且只需要把粉絲頁超連結www改為graph即可,但現在已經都需要從圖形API測試工具取得才行,這也暗示了您需得是該粉絲頁的管理員才可查找。並且AccessToken會在兩小時之內過期。網路上介紹如何取得永久有效的AccessToken,但不在本篇討論範圍之內。

Python程式碼

 

最後請看一下本範例的Python程式碼,

阿吉碎碎念:Facebook相關的API改動非常快,例如2.6之前,fan_count 原本是叫做 likes。其他雲服務也會常常改,但真的Facebook最愛改就是了,可能和創辦人個性有關吧~

 

本範例的關鍵URL由以下四個項目組成:

  1. facebook api 網址:https://graph.facebook.com/v2.10/
  2. 粉絲頁id:148248725246010 (CAVEr教育團隊)
  3. 要查找的欄位:?fields=id,name,fan_count,link&access_token=
  4. Access token:請由Facebook API圖形API測試工具

 

當然,其他程式語言如C#、Node.js 甚至App Inventor等都可以做到本範例的效果,您可以在取得資料之後直接使用瀏覽器來測試,只要看到以下畫面就是ok的:

 

https://graph.facebook.com/v2.10/148248725246010?fields=id,name,fan_count,link&access_token=XXX

 

FB API 2.10

 

#22是您要查詢的Facebook帳號或粉絲專頁ID。#23則是Access Token

#04是自訂的函式來處理Facebook API回傳的JSON格式結果。

#24~26 則是依序顯示出我們所要查詢的欄位,執行畫面如下圖:

import urllib2
import json

def get_page_data(page_id,access_token):
    api_endpoint = "https://graph.facebook.com/v2.10/"
    fb_graph_url = api_endpoint+page_id+"?fields=id,name,fan_count,link&access_token="+access_token
    try:
        api_request = urllib2.Request(fb_graph_url)
        api_response = urllib2.urlopen(api_request)
        
        try:
            return json.loads(api_response.read())
        except (ValueError, KeyError, TypeError):
            return "JSON error"

    except IOError, e:
        if hasattr(e, 'code'):
            return e.code
        elif hasattr(e, 'reason'):
            return e.reason

page_id = "148248725246010" # username or id
token = "XXXXX"  # Access Token
page_data = get_page_data(page_id,token)

print "Page Name:"+ page_data['name']
print "Likes:"+ str(page_data['fan_count'])
print "Link:"+ page_data['link']

 

相關文章: