別讓小朋友沈溺於電動,教你動手做 IoT 互動式遊戲

評論
評論

6299510110_32789616bb_o(photo by  Artotem)

多數人對 Intel® Edison 模組的第一印象都是安裝在 Arduino 擴充板上,而 Arduino 擴充板的尺寸看起來實在大到不適合行動裝置使用。因此許多開發者會認為 Edison 對於小型設備或穿戴式裝置並不實用。

不過如照片所示,Intel® Edison 模組其實不佔空間,但使用上並不容易,因為用來連接週邊設備的針腳太小了:Intel Edison 開發板上的 Hirose 接頭有 70 個針腳,而長度僅約 1 公分。解決此問題的辦法之一便是使用 Seeed 出品的 Xadow 穿戴式套件 Intel® Edison 版。此套件所囊括的配接器和小型感應器,可滿足小型穿戴式裝置的所有必備需求。

green-box-ab

套件內含不同功能的小型擴充板,所有的擴充板均是由柔性扁平排線 (FCC) 連接。可用菊輪鍊方式來連接擴充板,為裝置提供必要的功能。

以下為套件的內容物:

what-kit-includes

本文將在<穿戴式套件組件>一節介紹各項組件。

o 電池
o Xadow – Edison:插入 Intel® Edison 開發板的主要接頭。
o Xadow – Edison Programmer::用 USB 將 Intel® Edison 開發板與電腦連接的模組。
o Xadow – Edison SD:用來連接 SD 記憶卡的模組。
o Xadow – OLED:128 x 64 黑白 OLED 顯示器。
o Xadow – Buzzer
o Xadow – Vibration Motor
o Xadow – Q Touch Sensor:觸控按鈕
o Xadow – NFC:NFC 讀取器。
o NFC Tags – 三個 NFC 標籤 (照片內有一個)。
o Xadow – 3Axis Accelerometer
o Xadow – Barometer BMP 180:氣壓計與溫度計。
o Digital RGB LED Flexi-Strip:此款燈條配備五個可控制的 RGB LED 燈。
o FFC 線材套件
o 電源線 (沒拍照)

說明事項

在開始說明流程之前,我想先談談進行專案時所發現的特點和問題,以及相應的解決方法。首先,我強烈建議更新開發板韌體。
如需確認當前版本,可使用以下指令:

在撰寫本文時,開發板最新的韌體版本為 159。
同樣也建議更新所有已安裝的程式庫。更新作業需要網際網路連線。

2016-06-07 19.08.24

本文中所有的程式碼範例都適用於 Arduino* IDE。Seeed 套件的開發人員並未提供其他 IDE 範本。

我試過以 IoT 版本的 Intel® XDK 和 С++ 來使用開發版,不過無法運作。一項可能的原因是開發板電路不同於標準 Arduino 擴充版的電路。I2C 介面也有相同問題,加速度計的運作有時不穩定。不過在遊戲設置中,加速度計在 OLED 顯示器之後連接,此時運作一切正常。我無法啟動氣壓計和溫度計擴充板。

有時候開發板無法連線到 Arduino* IDE;編譯和 sketch 之間的傳輸也可能失敗。若發生這種情況,請終止開發板上執行的 sketch。

2016-06-07 19.13.51

之後請清空 /sketch 資料夾,並關閉所有在電腦上執行的 Arduino* IDE。關閉 Intel® Edison 開發板的電源 (使用 shutdown now),再按住 PWR 按鈕直到 LED 亮起,將電源重新打開。

若需要在供電狀態下用 Edison 開發板執行 sketch,則可建立一個檔案來執行開機:建立資料夾 /etc/init.d。在資料夾中建立一個名為「automateSketch.sh」的檔案,其中需包含:

2016-06-07 19.14.56

建立並儲存好 automateSketch.sh 之後,使檔案成為可執行:

2016-06-07 19.15.49

然後在啟動清單內加入 automateSketch.sh:

2016-06-07 19.21.24

入門介紹

應先在電腦上安裝所有 Intel Edison 驅動程式。此套件與模組的一切互動都透過 Arduino Sketch 進行,如果還沒安裝 Arduino IDE,請務必安裝。可至 www.arduino.cc 下載。

必須連接 Xadow-Edison Programmer 模組,才能使用開發板開始作業。請注意,兩個 USB 連接埠都必須插入:一個負責供電,一個負責連接 Arduino IDE。開發板的開關應設定在「Device (裝置)」的位置。請在 Arduino IDE 中使用 Boards Manager (電路板管理員) 來選取 Intel Edison 開發板。

Edison OS 作業系統開機完畢 (約 30 秒) 後,請在電腦上的 Device Manager (裝置管理員) 內找出虛擬連接埠的編號。

getting-started

請在 Arduino IDE 內選取 Intel® Edison 虛擬 Com 埠 (COM25)。可使用 USB 序列埠 (COM29) 連至控制台,例如透過 Putty。

Arduino 程式庫

若要與模組互動,就少不了程式庫。可至 github.com/Seeed-Studio/Xadow_Edison_Demos 將程式庫下載為一個 ZIP 檔。很可能無法立刻安裝完成整個套件,所以必須將含有必要程式庫的資料夾加到 IDE 選單內。

連接模組

插入任何模組之前,請先切斷 Intel Edison 開發板的電源,藉以降低組件損傷的風險。若使用熱插拔模組,Sketch 將無法正確載入。

所有模組均是以柔性扁平排線 (FFC) 連接。線材的長度和寬度各不相同,傳輸線的寬度應與接頭相符。所有線材插入時都是藍側向上,針腳向下。開發板上的接頭有兩種類型。第一種須向上開啟,如同掀蓋一般。請打開接頭,輕輕將傳輸線完全置入 (大約 3 mm),然後關上接頭。

connecting-modules

第二種接頭類型是滑動式的夾蓋,使用上較不方便。必須先從側邊撬開,然後拉出約 1 mm 的距離,一定要小心,我曾經不慎弄斷一根針腳。接著稍微用點力,將傳輸線盡可能往裡推 (大約 3 mm)。然後再用點力,將接頭推進去。傳輸線應該會牢牢固定在接頭裡。

modules-with-connectors

所有模組在相對的兩端都有接頭。所有模組和主板在某一側均有切角。連接所有電路板時,應讓切角側朝同一方向。在下圖中可看到切角側全部朝左。

connecting-modules-connected

穿戴式套件組件

如本文開端所述,套件每一部份都可用來創造不同類型的穿戴式技術,端看結合和編程的方式。

電池

此系統的電池是標準 3.7 V 的 500 mAh 鋰離子電池。

battery

Xadow -- Edison

xadow-edison

這是用來連接 Edison 模組的主板,較模組本身稍大一些。若將 Edison 模組插進主板的插槽,應該能夠牢牢固定,但為了保障安全,可以拿 Arduino* 模組的螺絲來安裝。

主板配備電池用接頭,側邊還有四個接頭可供擴充板使用。上方的接頭是 Edison Programmer 擴充板專用,側面接頭供感應器和致動器使用,底端接頭則是給 SD 卡模組。

其上有兩個按鈕:PWR 與 FW_RCVR。長按 PWR 可以開/關裝置 ─ 長按 9 秒關閉電源,2 秒開啟電源。

電池接頭旁的小 LED 燈會顯示電源狀態。LED 燈閃爍時,表示是經由 USB 供電。LED 燈恆亮時,即代表電池充電中。LED 燈熄滅,則表示電池已充電完畢。

只需要主板和電池,即可讓 Edison 開發板開始運作。

battery-and-board-all-you-need

Xadow -- Edison Programmer

pc-connection-board

此擴充板是用來與電腦連線,用途包括從電腦供電以及除錯功能,且配備兩個 Micro USB 接頭。
• UART 接頭可透過 COM 埠連接電腦並供電。
• 裝置/主機接頭則能從 Arduino IDE 操作擴充板。有個開關可選擇「Device (裝置)」或「Host (主機)」模式。使用 Arduino 請選擇「Device (裝置)」。

Xadow -- Edison SD

xadow-edison-sd

此擴充卡有一個可插入 SD 記憶卡的接頭,是以最寬的傳輸線連接到主板底端的插槽。

在裝置目錄的 /dev/mmcblk1 可找到 SD 卡。

安裝時請按照標準的 Linux 步驟。先建立一個空資料夾,如:

2016-06-07 19.43.33 再將記憶卡安裝到此資料夾:

2016-06-07 19.44.24 若想要在 Linux 開機時自動安裝記憶卡,請將下列字串加到 /etc/fstab 檔案中:

2016-06-07 19.44.59

Xadow -- OLED 12864

此為套件隨附的 128×64 OLED 顯示器。

xadow-oled-12864

規格請參見 Seeed 網站。
此顯示器是經由 I2C 介面連接,裝置位址為 0x3C。
以下程式碼為畫面顯示用的範本:

2016-06-07 19.46.08

畫面有 8 列,一列 16 個字元,幀率可每秒多個畫格。

我們使用了下列功能:
• init():初始化 Seeed OLED 的畫格,並將顯示器設為正常模式。
• clearDisplay():清空整個畫面。在全新開始之前,或是滾動停用之後,都應該使用此功能,游標也將設定在左上角。
• setBrightness(unsigned char Brightness):設定 OLED 顯示器的對比率。亮度可為 0~255 之間的任何數字。
• setNormalDisplay():將顯示器設定為正常 (非反轉) 模式。
• setPageMode():將顯示器設定為頁面定址模式。
• setTextXY(0,0):將文字的位置 (游標) 設定至第 X 頁,第 Y 列。X 可為 0~7 之間的任何數字。Y 可為 0~127 之間的任何數字。
• putString(cont char *string):將字串發佈到 OLED 顯示器上,從目前 setTextXY(X,Y) 所設定的位址指標開始。
• sendData(unsigned char Data):將一個位元組送到畫面上。
其他功能和更多資訊可參照 www.seeedstudio.com/wiki/OLED_Frame and in SeeedOLED.h 檔案。

Xadow -- Buzzer

xadow-buzzer

蜂鳴器需連接到針腳 11 和 13,必須同時開啟或關閉。將 0 或 1 傳送到這兩個針腳上便會發出聲音。

依我個人經驗,最簡單的方法是將其中一個針腳預設為 1,然後改變另一個針腳的狀態,藉以發出聲音。

以下程式碼為聲音輸出的範本:

 

2016-06-07 19.47.53

由於是依據軟體播放,所以聲音無法十分清楚。最好使用脈衝寬度調變。值得一提的是,我為 Intel® XDK IoT 版和 С++所製作的這個 Sketch 複製版無法運作 ─ 沒有聲音輸出。

Xadow -- Vibration Motor

xadow-vibration-motor

可以用和蜂鳴器相同的方式來控制震動馬達:將針腳 10 和 11 設定為相同的數值,藉此開啟或關閉。方法可參考下列範例碼:

 

2016-06-07 19.49.37

就和蜂鳴器一樣,預先將其中一個針腳設定為 1 後,再控制另一個針腳即可。

Xadow -- Q Touch Sensor

xadow-q-touch-sensor

此擴充板的背面有三個觸控按鈕,由 I2C 連接,位址為 0x1B。

按鈕的靈敏度很高,就算隔著幾層紙或膠片也感應得到,所以可用圖片遮蔽這些按鈕。

以下的範例碼會傳回按下的按鈕編號:

2016-06-07 19.50.57

Xadow -- NFC

xadow-nfc

NFC 讀取器可支援 I2C、SPI 以及 UART 連線,作業頻率為 13.56 MHz。其可支援讀寫操作、ISO14443 Type A 與 Type B 協定、以及 P2P,且配備一條隨附連接線的天線。更多資訊請見 http://www.seeedstudio.com/wiki/Xadow--NFC

套件隨附三個可寫入的空白 NFC 標籤。

three-empty-tags

此模組需要用到 NDEF、PN532、PN532_HSU、PN532_I2C 以及 PN532_SPI 程式庫。請從一般的 Seeed 範本程式庫下載上述程式庫。

如需測試標籤和讀取器,可使用 NDEF 程式庫裡的範例程序 readTag。它會讀取標籤內的資料並將之顯示在控制台上。

套件中的標籤有序號,因為尚未格式化,若經查詢將傳回下列輸出結果:

2016-06-07 19.55.14

要先以 NDEF 程式庫的 FormatTag 範本將標籤格式化,才能寫入資料。

如需將資料寫進標籤中,可使用 NDED 程式庫的 WriteTag 範本。

以下是從某個標籤讀取資料的結果:

 

2016-06-07 19.55.59

Xadow -- 3Axis Accelerometer

xadow-axis-accelerometer

此為三軸加速度感應器。所能測量到的範圍為 ±16 G,透過 I2C 連線,位址為 0x53。感應器安裝在 ADXL345 晶片上。要使用的話需從套件安裝 DigitalAccelerometer_ADXL345 程式庫。
共有四種測量範圍,精確度和轉換率各不相同:±2 g、±4 g、±8 g、±16 g。

晶片的規格表可查看此處:pdf1.alldatasheet.com/datasheet-pdf/view/254714/AD/ADXL345.html

資料會以 16 位數字的形式回傳。程式庫回傳的數字是 int 變數,因此需如下進行修改:

2016-06-07 19.57.20

若使用的範圍是 ±2 g,則各規格表的傳回數值均需除以 256。之前提過,我在加速度計這邊遇到了一些麻煩。有時候會無法偵測到加速度計,而 Linux 控制台會傳回 I2C 錯誤。不過當把螢幕連接到主模組,再將加速度計連接到螢幕時,運作就相當穩定。也許這個感應器沒有終端電組。

Xadow -- Barometer BMP 180

xadow-barometer-bmp-180

此擴充板上有氣壓計和溫度計。壓力測量範圍為 300~1100 hPa (即海平面上 -500 m~+9000 m)。其是以 0x77 位址連接 I2C。

不幸的是,我無法讓這個擴充板運作起來,可能是因為 I2C 介面有些錯誤。也許跟加速度計的問題是一樣的。我曾拿另一組 Xadow 套件測試過,同樣無法運作。

Xadow -- Breakout

xadow-breakout

這個擴充板是用來連接標準的感應器,有以下針腳:3.3 V、SCL、SDA、TX0、GND、SCK、MOS1、MOS0、A5。上面也有兩個接頭墊,可插入標準的「Seeed」模組。一個標為「Serial」,一個標為「I2C」。可拿來連接 LED 燈條。

Digital RGB LED Flexi-Strip

digital-rgb-led-flexi-strip

這是一條配有 5 個 RGB WS2812B LED 燈的燈條。透過一條線來控制 LED 燈。

必須要正確連接才能運作,如下圖所示。使用 Xadow-Breakout 擴充板

led-strip-diagram

flexi-strip-connected資料是由軟體送出,因此有時候會發生資料傳輸錯誤的情形,LED 燈可能會紊亂閃爍。

以下為「Running light」程式:

2016-06-07 20.01.12

製作遊戲

我想用這個套件來做些什麼,然後就冒出了做個遊戲的想法。

在這個遊戲裡,LED 燈帶會安裝在遊戲盒的外側。當 LED 燈亮起或熄滅時,玩家要依據 LED 燈光的顏色將盒子 45 度朝某個方向傾斜。若中間的 LED 燈是綠色,就要將盒子向外傾斜 (遠離自己)。若中間的 LED 燈亮紅色,就往自己這一側傾斜。所最右邊的 LED 燈轉綠,則將盒子朝右傾,但若是亮紅燈,就要朝左斜。

這個遊戲不但能測試反應能力,還能讓玩家在動作前先動動腦。

creating-a-game

要作出這個遊戲需要下列組件:
• 陀螺儀
• OLED 顯示器
• LED 燈條
• 連接燈條的擴充模組
• 按鈕板
• 電池

首先我在電池接頭的那側連接分線板,然後是感應器按鈕。另一端連接螢幕,再連接陀螺儀。這個盒子是用幾張彩色厚紙板黏成的。接下來開一個口讓螢幕露出來。我將按鈕板裝在螢幕下,如你所知,按鈕的感應度很高。我在正面給按鈕位置畫了幾個符號。
所有的擴充板蓋了一張紙,再用透明膠帶黏好,以防損壞。

attached-with-clear-tape

Sketch 會自動在 Linux 中啟動。

要開始遊戲時,就長按主模組的 PWR 按鈕 9 秒左右。要結束遊戲,就將同一按鈕按 3 秒即可。

遊戲開始後會出現選單,在選單中可以選擇開始遊戲 (按下 A 鈕) 或顯示遊戲說明 (按下 B 鈕) 若要關閉說明畫面,就按下箭頭鈕。

five-rounds-game

遊戲共有五回合。每一回合會有一個 LED 燈隨機亮,玩家就得朝相對應的方向傾斜盒子。若動作正確,畫面上會顯示「You Win!」。若失敗或是時間到,畫面上顯示的就是「You Lose!」。

You may see example video

所有的遊戲程式碼都在一個檔案內。我盡可能寫得簡潔清楚,所以相當好分析。

Sketch 遊戲程式碼

2016-06-07 20.09.122016-06-07 20.11.252016-06-07 20.12.282016-06-07 20.13.362016-06-07 20.14.352016-06-07 20.15.352016-06-07 20.16.242016-06-07 20.21.45

關於作者

Valery Mosyagin 是 Intel 官方的軟體創新者。目前定居在俄羅斯的下諾夫哥羅德。擁有數學與電腦科學的碩士學位。在 Intel 的 OpenCV 團隊中有 6 年工作經歷,後來到日本為 Brain Research Institute 開發生物實驗用的軟體.─. 網路流量分析軟體以及無線訊號涵蓋和傳播軟體。有很長一段時間在教導小朋友編寫程式。Valery Mosyagin 的興趣相當廣泛,包括虛擬實境、遊戲開發、微控制器和 IoT 等。

更多精選文章.....

相關文章

評論