2018-06-20

以 PFx Brick 運用 Under-actuation 建構具有三個自由度的 LEGO 搬運設備

即使 PFx Brick  比起 SBrick 少了兩個 Power Functions Ports, 不過它所具有的多樣化周邊, 包含: 音效 與 燈光, 對 LEGO 的創作者而言, 更增添了創作的空間與樂趣.

以下的 Demo 影片示範以 PFx Brick 的兩個 Motor Ports 驅動一個具有: 抓取' 抬起' 旋轉等三個動作(自由度)的搬運設備, 包含了兩個主要功能:
  1. 抓取機構: 將貨物 抓取後抬起 或 放下後釋放 的功能.
  2. 旋轉機構: 以 順時針 或 逆時針方向 旋轉抓取機構的功能.
同時配合機構的運作, 再加上音效與燈光等警示效果, 一方面可凸顯不同作業時的特性, 亦能夠模擬真實世界的作業實況, 這些都是 PFx Brick 團隊推出這項產品的企圖心.


PFx Brick的控制界面設定


PFx Brick 具有兩個 LEGO Power Functions Ports, 一個 8 Channels 的 Lighting Dock 以及一個外接喇叭, 其中 Lighting Dock 目前可以接兩種介面板, 分別是傳統 LED 與 Brickstuff 的高亮度 Pico LED, 前面影片中的警示燈即是使用此種微型 LED 燈.

PFx Brick 內建 Flash memory 用來儲存 設定資料(Profile) 與 音效檔, 不同於 SBrick 是將 Profile 存放在手機端, 會這樣設計的原因是為了要能夠同時提供 手機(BLE) 與 LEGO IR 遙控器兩種無線控制方式.

因此, 在手機上所使用的 PFx Mobile App 控制界面也是模擬目前 LEGO 兩種不同類型的 IR 遙控器, 分別如下圖左側的 8879(Speed Remote Control) 與右側的 8885 或 EV3 IR Beacon.
這兩種控制界面都具有對應 LEGO IR 遙控器相同的控制項, 所以當完成了所有控制項的設定並將 Profile 下載至 PFx Brick 之後, 則無論是使用手機 或 IR 遙控器, 操控的方式都將會是一樣.



PFx Brick 的 Profile 透過電腦端的 PFx Desktop APP 進行設定, 在示範影片中採用如下圖的 Dual Joystick 控制界面, 共有 7 個控制項, 分別對應遙控器左' 右兩邊搖桿的前推' 後拉與置中 以及 EV3 Beacon 按鍵等 7 個動作:



每個控制項包含三種設定項目: Motor Action' Light Action 以及 Audio , 以下就示範影片中兩個主要功能的設定方式進行說明:

(1) 抓取機構設定:

如下圖, 以控制界面右側的上' 下鍵分別設定為操控: 將貨物抓取後抬起 以及 放下貨物後釋放 等兩個 Actions, 這是運用單一馬達完成兩個自由度的動作(也稱為 Underactuated Mechanism), 其中向上鍵的設定內容如下圖右邊 [Edit Action - Right Joystick Forward] 畫面所示:


設定的內容如下:
  • Motor Action: 當持續按著向上鍵時, 接在 Port B 的馬達會以 50% 的 Speed 運轉, 此時抓取機構會開始夾住貨物, 一旦夾緊之後隨即將貨物抬起.
    至於向下鍵的 放下後釋放 反向動作設定, 則只需於 [Right Joystick Forward] 控制項中將 Motor Speed 改成 -50% 即可.
  • Light Action: 當 Motor Action 啟動時, 8 個 Channels 的 Pico LED 會依單' 雙數順序, 以間隔 1 秒的週期交替輪流顯示, 作為抓取動作時的警示燈號.
  • Audio: 當 Motor Action 啟動時, 會以外接喇叭播放 Servo2.wav 音效檔, 作為抓取機構的運轉音效.

當放開按鍵時, 會中止馬達的運轉以及關閉警示燈顯示與音效的播放, 這些動作設定於 [Right Joystick Center] 控制項中: (如下圖)


(2) 旋轉機構設定:

如下圖, 以控制界面左側的上' 下鍵分別設定為: 將機構順時針與 逆時針旋轉 等兩個 Actions, 其中向上鍵的設定內容如下圖左邊 [Edit Action - Left Joystick Forward] 畫面所示:

設定的內容如下:
  • Motor Action: 當持續按著向上鍵時, 接在 Port A 的馬達會以 67% 的 Speed 運轉, 此時機構會 往右以順時針方向旋轉.
    至於向下鍵的逆時針旋轉動作設定, 則需於 [Left Joystick Forward] 控制項中將 Motor Speed 改成 -67% 即可.
  • Light Action: 當 Motor Action 啟動時, 右側的前方向燈(編號: 6' 7' 8) 與 後方向燈(編號 4) 等 4 個 Pico LED 會閃爍顯示, 作為旋轉動作時的方向指示燈號.
    而向下鍵的逆時針旋轉動作, 則改為使用編號 1' 2' 3 與 5 等 4 個位於左側的 Pico LED.
  • Audio: 當 Motor Action 啟動時, 會以外接喇叭播放 ReverseBeep1.wav 音效檔, 作為旋轉動作時的警示音效.

當放開按鍵時, 會中止馬達的運轉以及關閉警示燈顯示與音效的播放, 這些動作設定於 [Left Joystick Center] 控制項中: (如下圖)


透過 Underactuation 增加機構自由度(DOF)的方式


PFx Brick 只有兩個 Motor Ports, 通常以兩個馬達驅動的機構至多僅能有兩個動作 (DOF 自由度), 不過由示範影片中可以看出整個機構實際上共有三個動作: 抓取' 抬起(或 放下' 釋放)與 旋轉, 這是因為在抓取機構中使用了 Under-actuation 的設計: 以一顆馬達來完成兩個動作. 運作的方式參考下圖說明:


上圖的抓取機構中, 輸入齒輪(1) 的動力來源為馬達, 再透過 惰齒輪(2) 將動力傳遞給 輸出齒輪(3), 當馬達開始運轉時, 輸出齒輪(3) 會驅動夾具機構夾緊物品, 而一旦物品被夾緊而造成 輸出齒輪 停滯(halted)時, 原 惰齒輪 的角色將會轉變成 輸出齒輪 將被夾緊的物品舉起, 因此而完成了兩個自由度的動作, 這是克服 PFx Brick 只有兩個 Motor Ports 而增加機構自由度比較簡易的方式.

另外, 也可以在同一個 Motor Port 上接兩個馬達同時運轉, 不過這樣必須考量運作的協調性, 機構設計上較複雜也更耗費電力. 



2018-06-05

PFx Brick - 兼具聲光效果的 LEGO PF 馬達 BLE 控制器

雖然目前以藍芽遙控傳統 LEGO Power Functions 馬達的控制器, 最熱門的至少還有 SBrickBuWizz 兩種, 不過位於加拿大的 Fx Bricks 在 2017 年透過 Kickstarters 籌資, 也成功推出了另一款能以 BLE 遙控 PF 馬達的控制器: PFx Brick, 以下的 Demo 影片, 大致就可以看出 Fx Bricks 團隊何以在已經有強大競爭者的情況下仍然推出這項產品的企圖心.



如上面影片所展示的效果, 相較於 SBrick 或 BuWizz , 最大的差異在於 PFx Brick 多了 音效 與 燈光 功能, 此外還具有許多獨有的特性, 以下這些就是它的主要亮點:

  • 內建 Flash Memory 儲存音效檔 , 可以透過外接喇叭直接撥放歌曲或音效.
  • 外接 Lighting 介面, 具備 8 組可獨立控制的 channels 顯示燈光效果, 除了可接傳統的 LED 之外, 也支援 Brickstuff 的高亮度 Pico LED.
  • 具備 Lego IR 接收器, 所以, 也可以使用 Lego 8879' 8885 或 EV3 的 IR Becon 遙控器進行控制 ( ** EV3 或 NXT 就可以使用 Mindsensors 或 Hitechnic 的 IR 發射器控制 PFx Brick ^^)
  • 具備 Micro USB 接口, 除了作為連接電腦進行設定之外, 還可以外接行動電源供電, 大大的支援 LEGO 創作的長時間操作.



2018-05-13

SBrick 筆記 - 三種進階功能測試 (Clinometer' Sequence' Circuit)

SBrick 的 Profile Designer 提供了 6 種控制項 (Controls) 作為遙控 LEGO PF 裝置的操作介面 :
  • Slider: 以移動滑條方式控制單 Channel 的動作. 
  • Joystick: 以雙向搖桿方式控制雙 Channels 的動作. 
  • Button: 以按鈕的 On/Off 開關方式控制單 Channel 的動作.
  • Clinometer: 測斜儀, 藉由偵測作為遙控裝置(手機 或 平板)的三種運動方式 - Pitch(俯仰)' Yaw(偏擺) 與 Roll(翻滾), 控制三 Channels 的動作.
  • Sequence: 同時控制多個 Channels 依據時間序列執行指定的動作.
  • Circuit: 藉由讀取指定 Channel 或 感應器的值(Input), 比對設定的條件(Logic), 觸發符合條件的控制指令(Target).
其中後三種屬於較進階的控制項, 即使 SBrick 原廠也一直延到產品上市幾個月之後才提供正常的運作功能, 尤其 SequenceCircuit 兩個控制項具備可程式化的特性, 能夠運用 PF 周邊建構如同 EV3 與 NXT 一樣彈性的自動化應用, 對於 Lego Technic 玩家具有相當的吸引力.

功能測試


為了測試這三種進階控制項, 將製作一台以 PF 馬達驅動的四輪車(如下圖), 主要功能包含:
  1. 以 PF Servo motor 控制車輛的轉向以及以 PF L motor 驅動車輛的行進, 另以三個 PF LED 燈分別作為車頭燈 與 左右轉向指示燈.
  2. 以 Clinometer 控制項偵測手機的 俯仰 與 偏擺 動作, 遙控車輛的 進退 與 轉向, 
  3. 以兩個 Sequence 控制項顯示左' 右轉向指示燈的閃爍效果.
  4. 以一個 Circuit 控制項偵測車輛是否處於前進狀態, 以自動點亮 或 關閉 車頭燈.
  5. 以兩個 Circuit 控制項偵測車輛是否處於左' 右轉向狀態, 以自動啟動 或 關閉左' 右轉向指示燈的閃爍顯示, 模擬真實車輛的運作.


上述功能的實作, 可以參考以下影片:



2018-04-10

以 LEGO Boost 與 Scratch 2 製作互動遊戲

LEGO Boost 除了使用行動裝置上官方所提供的 app 編寫程式外, 也可以在電腦上透過 S2Bot 以 Scratch 2 控制,  這樣正好能夠運用 Scratch 的遊戲編程功能 以及 Boost 的馬達與感應器, 製作出生動有趣的互動遊戲.
下面的影片就是一個結合兩者所製作的「顏色輪盤遊戲」, 玩法如下: 
  1. 先由 Scratch 2 顯示讓玩遊戲的人可以挑選所要下注顏色的畫面.
  2. 下注之後啟動Boost 的顏色輪盤隨機旋轉至某一個顏色, 再藉由 Boost 的顏色感應器讀取比對輸贏狀態.
  3. Scratch 會因應本局的輸贏, 變更舞台背景並計算剩餘的籌碼, 而且當贏局時 Boost 還會表演一小段歡呼動作作為獎勵.
  4. 一旦輸光所有籌碼, 本次的遊戲就隨之結束.


LEGO Boost 「顏色輪盤遊戲機」構造

遊戲機的構造全部都是使用 LEGO Boost 17101 的零件組合而成, 包含兩個內建馬達與一個外接馬達以及顏色感應器全部都用上, 各部分的功能如以下圖片說明:


使用 S2Bot app 連接 Boost 與 Scratch 2


S2Bot app 的功能是提供 Scratch 2 能夠以藍芽方式無線遙控 LEGO Boost, 包含: 馬達控制讀取感應器, 而執行 Scratch 的電腦, 無論是 Windows 或 Mac,  都必須使用 BLED112 藍芽配接器, 才能連接 Boost. 
  1. 此處 下載安裝 S2Bot app .
  2. 執行 S2Bot app, 由左上方下拉選單中挑選 LEGO Boost , 接著點按 Scan for Devices 開啟對話框連接 Boost.
  3. 若是首次連接 Boost, 再點按右上方的下拉選單按鈕, 選擇 New Scratch template 產生 Boost 的 Scratch 程式積木範本: boost_template.sb2 並存檔於電腦中.
  4. 在 Scratch 2 中透過 File->Open 開啟 boost_template.sb2, 即可於腳本區的 More Blocks 中使用 Boost 的程式積木.

以 Scratch2 製作劇場版的機器人控制體驗:結合 S2Bot 遙控 SBRick

PICAXE 這家公司的教育部門,推出了 S2BotScratch Helper Apps,提供了透過 Scratch 2 可以用來控制多種機器人系統,包含 LEGO 的 Wedo、Wedo 2.0、NXT、EV3以及 SBrick PF 馬達藍芽控制器

由於 Scratch 2 擅長於製作遊戲動畫,因此結合 S2Bot 就可以將對實體機器人的控制,融入到 Scratch 2 設計的劇情中,這會是相當有趣的體驗,也是其他程式語言很難做到的情境。
以下的影片,就是對上述的構想所做的嘗試。

影片首先開始的武器測試 (Weapon System Test) ,是展示以 Scratch 2 + S2Bot 遙控 SBrick PF 馬達控制器的功能,由 Pico 角色執行,包含:順/逆時針方向旋轉雷射槍座、改變瞄準方向以及發射雷射槍等動作。
而雷射槍
燈光閃爍特效是使用 Brickstuff 的照明系統 ( 參考本文 )。

接著是一個射擊遊戲,太空船 (Spaceship 角色) 會以隨機的高度與方向出現並飛越螢幕畫面,而 Pico 角色則一方面發射雷射槍 (Shoot laser gun 角色) 同時遙控 SBrick 射擊動作。

當 Spaceship 角色偵測到已碰觸到 Shoot laser gun 角色時,表示太空船被雷射槍擊中,這時候 Spaceship 角色以及舞台背景都會切換成為爆炸的造型,而 Pico 角色也呈現為歡呼的造型。

而配合劇情進行的各種音效,也更加凸顯出每個情境所強調的效果。

2016-04-28

以藍芽遙控 LEGO PF 馬達的四軸機械手臂:使用 SBrick

SBrick 是 2014 年在 Kickstarter 所推出的可連接 4 個˙LEGO PF 馬達的藍芽接收器,同時也提供了 iOS、Android、Windows Phone 等三種行動平台的遙控 App,而 App 的操作介面還可以透過 SBrick 的 Profile Designer 網頁依據操控需求,自行客製化設計後下載到行動裝置中。
當實際以 iPad 操作時,回應的速度幾乎與 Lego 的 IR 遙控器一樣靈敏,而採用藍芽相較於紅外線的優勢在於較長的遙控距離以及沒有方向性的限制,這對於玩 Lego Technic 的愛好者而言,無疑又多了一樣可選擇的好幫手。
以下影片就是以 SBrick 控制的四軸機械手臂,其中 iPad App 的操作介面正是依據控制需求的客製化設計。

2016-04-11

以 Brickstuff Lego 照明系統製作的 星際戰士

過去在欣賞 Sariel 的 Technic 創作時, 有時會很好奇如何在那麼緊湊的機構中加上照明功能, 特別是 LED 亮度與配線彈性, 很明顯都是 Lego PF Light 所無法做到的, 後來也是從他所公開的影片中得知, 原來有一部分是使用 Brickstuff 的 Lego 照明系統 。
最近有機會取得了一組  Brickstuff 的 Starter kit 以及 DIY Connecting cables, 因此, 就試著以樂高零件製作了一支雷射槍, 同時也使用 Arduino 控制器加上一些特效, 包含: 發射時兩支槍管的交互快速閃爍, 以及呈現出槍枝本身能源消耗與充電時的狀態, 這些都是使用 Brickstuff 的組件所製作出來的, 以下就是完成後的示範影片:

Brickstuff 特別為樂高所製作的照明裝置, 無論 LED 燈' 線纜 或接頭, 真的非常地小, 像影片中的雷射槍以及能源指示燈, 線材都能夠完全收納在樂高的管狀零件中, 組裝過程不用太花心思去考量機構如何去配合線材的問題, 相信無論應用在車輛或建築物的燈具上, 會比使用樂高原廠的 LED 燈還更事半功倍, 唯一的缺點是太貴了 XD

2016-04-05

實作 EV3 以 Temboo 連接 Google 雲端服務的方式

Temboo 平台雲端服務的 Choreos, 提供了多種程式語言的程式庫, 以簡化開發工作, 其中的 Python 不僅方便好用同時也支援多種作業系統, 包含: Windows' OSX 與 Linux 等, 而 EV3 官方版本的作業系統雖然也是以 Linux 為核心, 但並不太容易安裝像 Python 這樣的程式語言.

不過, 幸好可以使用專門為 EV3Raspberry-Pi + Brick Pi 開發的 ev3dev,  讓 EV3 可以充分運用 Linux 的強大功能, 包含為數眾多的免費軟體與 USB 周邊, 如: Web Cam' RJ45 轉接器' 音效卡' 隨身碟等, 同時若需要的話, 還可以使用 USB Hub, 同時連接多個 USB 裝置,
讓 EV3 成為具體而微的 Linux 電腦.


ev3dev 的功能特性


※ 安裝 ev3dev 並不會刷掉原有的 EV3 Kernel, 只需將 ev3dev 的 Image 檔案寫入至另一片 Micro SD 卡中, 插入 EV3 後重新開機就可以使用, 並隨時可以換回原有的 Micro SD 卡, 恢復原有官方版本的作業環境.


※ ev3dev 提供了 4 種網路連接方式, 可以參考: Getting Started with ev3dev 網頁 Step 4: Setup a network connection 說明.

※ ev3dev 目前提供: C++' Node.js 與 Python 等三種程式語言支援開發 EV3 的專案. 並以統一介面方式建立程式庫.


 此外, ev3dev 的 Python 程式庫雖然可同時支援 2.x 與 3.x 版, 不過, 目前只預裝於 2.x 版,



使用 Temboo 支援的 Google 雲端服務


關於 Temboo Choreo 的使用方式, 可以參考前一篇 "Arduino Yun 筆記:測試呼叫 Temboo 的 Gmailv2 與 Spreadsheets choreos 功能" 的說明.

至於 Temboo Choreo 的 Python 程式庫, 可以由 此連結 下載.

而本次將會以 EV3 的 Color Sensor 讀取環境光源的亮度值 (Ambient Light Intensity), 並每間隔 10 秒透過 Temboo 的 Google - Spreadsheets - AppendRow Choreo 將包含: ( 讀取時間 與 感應器值 ) 的一筆資料寫入至 Google 試算表中.



Pyhton 程式說明:

A.  匯入程式庫

# 匯入 ev3dev 程式庫
from ev3dev.auto import *

# 匯入 Temboo 程式庫
from temboo.Library.Google.Spreadsheets import AppendRow
from temboo.core.session import TembooSession

# 匯入 讀取系統日期功能
from datetime import datetime

# 匯入 sleep() 功能
from time import sleep

B.  連接 EV3 Color Sensor 及設定測量環境光源亮度模式
cs = ColorSensor(); assert cs.connected
cs.mode = "COL-AMBIENT"

C. 登入 Temboo 並建立 Session
session = TembooSession("Temboo-Acct", "Temboo-APP", "Temboo-AppKey")

D. 傳送資料至 Google 試算表的函式
def sendDataToGoogle(nowTime, sensorVal):
    # 建立 Choreo 實例
    appendRowChoreo = AppendRow(session)

    # 取得 Choreo 的 InputSet 物件
    appendRowInputs = appendRowChoreo.new_input_set()

    # 設定 Choreo 所需要的輸入資訊
    rowData = ','.join([nowTime, str(sensorVal)])
    appendRowInputs.set_RowData(rowData)
    appendRowInputs.set_SpreadsheetTitle("ev3_lightIntensityValue")
    appendRowInputs.set_RefreshToken("RefreshToken-of-Google-Spreadsheets")
    appendRowInputs.set_ClientSecret("Your-Google-Client-Secret")
    appendRowInputs.set_ClientID("Your-Google-Client-ID")

    # 執行 Choreo 呼叫 Google 雲端服務
    appendRowResults = \
    appendRowChoreo.execute_with_results(appendRowInputs)

    # 顯示執行 Choreo 後的回傳訊息
    print("NewAccessToken: " + appendRowResults.get_NewAccessToken())
    print("Response: " + appendRowResults.get_Response())


E. 讀取 EV3 Color Sensor 測量值
# 進行 10 次的測試
for rec_cnt in range(10):
    # 取得目前的系統時間字串
    nowTime = datetime.strftime(datetime.now(), '%m-%d-%Y %H:%M:%S')

    # 讀取 Color Sensor 的測量值
    sensorVal = cs.value(0)
    print("Light Intensity: ", sensorVal)

    # 呼叫執行 AppendRow choreo 函式
    sendDataToGoogle(nowTime, sensorVal)

    # 等候 10 秒之後再繼續執行
    sleep(10)

執行結果

下圖右側為程式執行過程所顯示的回傳訊息,
       左側為新增資料至 Google Spreadsheets 的執行結果.


2016-03-26

Arduino Yun 筆記:測試呼叫 Temboo 的 Gmailv2 與 Spreadsheets choreos 功能

Arduino Yún 名稱中的 "Yún" 正是中文的 "" ,也就是特別強調在雲端應用的整合能力,所以除了 Yun 本身已具備的連網功能之外,更透過與 Temboo 的合作,很方便的就能夠連接許多目前相當普遍的雲端服務,如:Google、Facebook、Twitter、Yahoo Weather、Dropbox ... 等。

Temboo 平台提供了數十種連接雲端服務的 Choreos
Choreo 是指呼叫每個特定雲端服務的可重複使用程式碼,用以簡化程式開發工作。同時在最新版本的 Arduino IDE 中,也已經預載了 Temboo 程式庫,結合 Choreo 很容易的就能夠實現 Arduino Yun 在雲端的整合應用。

(圖片來源:arduino.cc)

在 Temboo  網站中提供有 12 個 Arduino Yun 連接雲端服務的範例,同時在 Arduino IDE 的  File - Examples - Temboo - Arduino Yun 中也有相對應的範例程式,這些都是相當好的參考資源。
(圖片來源:Temboo.com)

本次的測試是以 Arduino Yun 在 Sketch 中使用 Bridge 以及 Temboo 程式庫 呼叫 Temboo 的 Gmailv2Google Spreadsheets 兩個 Choreos 功能,將 Arduino 端的資訊透過 Gmail 傳送至指定信箱 以及 存放到 Google 試算表中。

以下是過程的相關記錄:

2016-02-27

Arduino Yun 筆記:以Arduino Yun 製作的 MP3 播放器

Arduino Yun 比較傳統的 Arduino 主板,最大優勢在於同時兼具兩個開發環境:
  1. Atmega32u4 處理器:
     Arduino Leonardo ,具有 20 個數位、類比、PWM 腳位以及 3 種序列通訊功能(Serial、I2C 、SPI),並可堆疊相容的 Shields 擴充板。 
  2. Atheros AR9331 處理器:
    使用 OpenWRT Linux 作業系統並內建 USB Host、Ethernet、WiFi 、Micro SD slot等周邊,另提供有 Python 2.7 作為 Linux 端的
    程式開發。
兩者間以 Hardware Serial port 相連,並以 Arduino 的 Bridge 程式庫,作為相互利用彼此資源的軟體介面,尤其 Linux 系統功能強大,雖是輕量版的 OpenWRT,但可運用的範圍與彈性已遠超過傳統的 Arduino 主板。

這次以 Arduino Yun 製作的 MP3 播放器,即運用 Linux 對 USB 裝置的支援能力,使用 USB 音效卡播放 Micro SD 卡內的 MP3 檔,並透過 I2C 外接 Arduino Uno + LCD Keypad shield 作為控制面板,可以顯示 MP3 檔 ID3 tag 的曲目與演出者資訊,以及透過操作按鍵逐一瀏覽及選擇歌曲播放,功能如同一般的 MP3 播放器。



系統架構

2015-07-30

EVShield筆記(4 - 2) : EVShield WiFi Web Server Arduino 軟體功能

在前篇 " (4-1) 結合 Arduino WiFi Shield 的 EVShield Web Server " 中,主要探討的是硬體介面相關,包含: SPI介面Shields 推疊 以及 Arduino 腳位配置 

本篇將以軟體功能為主,包含:建立 WiFi 連結啟動 Web server 以及 處理瀏覽器的 HTTP request

【參考資訊】

(1) Arduino WiFi.h 程式庫 
(2) HTTP Headers for Dummies 
(3) EVShield筆記(2):UI Module使用者介面擴展板程式摘要 

【1. 建立WiFi連結】


  • 連接無線網路,需要確認 SSID 與 加密方式 ,再以 WiFi.begin() 進行加密認證。
  • 通過加密認證之後,會由 DHCP 配置動態 IP,也可以先以WiFi.config() 設定靜態 IP後再進行加密認證。
  • IP 位址可以由 WiFi.localIP() 取得資料型態為IPAddress,實際上為四個元素陣列的IPV4 格式

2015-07-23

EVShield筆記(4 - 1) : 結合 Arduino WiFi Shield 的 EVShield Web Server(硬體介面)

以EVShield 結合 Arduino WiFi Shield,就可以實現透過無線網路控制 EV3/NXT 的馬達與感應器。
而最簡單便利的人機控制介面就是在 Arduino UNO建置 Web server,這樣任何平台的裝置,即只需以瀏覽器開啟網頁方式遙控機器人的操作,而不需要開發專屬的 App。

下圖為本次所計畫建置的 EVShield WiFi Web server,將會以瀏覽器控制 EVShield 上兩組 RGB LED 的顏色顯現,並同時在 UI Module 的 LCD 螢幕上顯示目前所執行的顏色設定指令。 

【示範影片】


【擴展板推疊方式】
EVShield WiFi Web server 的所有組件如下圖:除Arduino UNO之外,另還包含 UI Module shield、EVShield 以及 WiFi Shield 等三個擴展板。
  

2015-07-06

EVShield筆記(3):測試 EV3 以 I2C 連線控制 EVShield

EVShield 是作為Arduino連接 Mindstorms NXT/EV3 馬達與感應器擴展板
EVShield具備的功能中,除了 Servo pins 之外,都是透過 I2C 方式進行控制,包含:三個按鍵、兩個 RGB LED、四個 Motor ports 以及 四個 Sensor ports
而對於同樣具有 I2C 通訊
介面的 EV3主機 Sensor ports,應該也可以取代 Arduino 直接連接及運用 EVShield 的功能,以下即是對於這個需求所進行的測試記錄。


【EV3 接線方式】:
如下圖,將 EVShield 背面正下方的 4 pins I2C 接腳轉接成 RJ12 cable 之後
連接 EV3 的 Sensor Port。

【EV3 使用軟體】:
EV3 程式使用 RobotC 4.32 版。
至於 EV3 軟體,目前已知 Mindsensors 與 DI 的 EV3-I2C Programming Blocks,在功能方面並不適用。
 

EVShield I2C 架構

如下圖,EVShield 由兩個 I2C Slave 裝置所組成,分別為 Bank A ( 位址:0x34 ) 與 Bank B 0x36 ),其中 LED 與 按鍵 的控制功能都建立在 Bank A,詳細的 I2C 暫存器資訊需參考 "EVShield Advanced Development Guide文件

2015-06-28

EVShield筆記(2):UI Module使用者介面擴展板程式摘要

EVShield 雖然可以透過 Arduino IDE 的 Serial Console來顯示訊息或輸入資料,不過必須是與電腦連線的狀態,而 mindsensors 則推出了一個 UI Module For EVShield or Arduino 擴展板,具備 320x240 解析度的 2.2" 彩色 TFT 螢幕 以及 一個五向搖桿,提供更方便與彈性的使用介面。




UI Module Arduino程式庫

UI Module本身是Arduino擴展版,並不需要與 EVShield搭配才能使用。
其中TFT LED 是 SPI介面的 Adafruit ILI9340,五向搖桿則是使用 Arduino的 A1(Up)、A2(Down)、A0(Right)、A3(Left)、D2(Center) 五個Digital pins。

在mindsensors官網中共提供了三個下載的Arduino程式庫:

  • Adafruit_GFX這是 Adafruit 原廠 LCD/OLED 顯示器的通用繪圖及文字顯示功能程式庫,須搭配特定顯示器的程式庫一起使用,如:Adafruit ILI9340。
    詳細使用方式可以參考手冊
    : "Adafruit GFX Graphics Library"。

  • EVs_UIModule這是 mindsensors 提供的 UI Module程式庫,除繼承前面兩個程式庫的顯示控制功能之外,另定義讀取五向搖桿狀態以及簡化的螢幕控制與文字功能。
在Arduino sketch中需要按照以下順序 include程式庫,才能夠使用定義的功能:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9340.h>
#include <EVs_UIModule.h>

void  setup()
{
  Serial.begin(115200);  
  delay(1000); 
  
  uim.begin();
}
  

UI Module使用者介面實作

UI Module雖然具有比 EV3 更生動的彩色螢幕,不過受限於 Arduino 硬體資源,需要妥善規劃運用方式,才能夠充分發揮效果,因此,就先以預計要移植到 EVShield 的 "樂高積木顏色分類機" 的需求,實作一個顯示積木顏色的 UI 畫面。

在下圖中,將螢幕UI畫面區分成三個功能區:


2015-06-27

EVShield 筆記(1):Mindsensors EVShield 特性摘要

EVShieldmindsensors 為Arduino平台連接使用 Mindstorms NXT/EV3周邊所開發的擴展板。
 

比較前一代的NXShield,增加支援了使用 UART介面的 EV3感應器,包含:Color、Gyro、IR、Touch與Ultrasonic等,不過由於取消了 Software I2C Master功能,所以無法使用 NXT的Ultrasonic sensor。
至於 NXT 的其他類比式感應器與 mindsensors 的數位感應器/控制器等,在 EVShield 程式庫 中都有提供對應的 API  ( 下載連結 ) 。

 

  

EVShield介面
 

2015-06-18

Arduino筆記:移植『EV3樂高積木顏色分類機』至Arduino平台(NXShield or EVShield) - ( II )

※ 本文接續自:
『EV3樂高積木顏色分類機』移植Arduino平台計畫 Part I 

◎ 本文 Brick Feeder、Brick Loader及 Robot Arm等三個功能單元測試影片


  1. Brick Feeder
      

    【控制功能】
     
    Brick Feeder的功能是將已經完成顏色辨識的積木透過以下動作傳送給Brick Loader機構:
    (1) 驅動 EV3 M-Motor(Reverse)抓取積木,當抓緊積木之後,經由Under-Actuation 機制會轉動爪取手臂將積木開始往Brick Loader傳送,同時透過另一組齒輪系抬起托盤。

    (2) 當積木已經傳送到托盤所抬起的目標位置時,會因齒輪的作用造成EV3 馬達停滯無法繼續運轉,而這個狀態需要透過程式判斷,在RobotC可以使用偵測馬達的 RPM值達成,至於 NXShield的 API則需以讀取EV3馬達 Encoder值的變化來判斷。

    (3) 再以反向驅動 EV3 M-Motor(Forward)釋放積木至托盤,同樣經由Under-Actuation 機制,除了會將爪取手臂轉回EV3顏色感應器所在的位置之外,同時也會放下托盤將積木滑至Brick Loader。

     【Arduino程式】
     

    對於Brick Feeder,程式最重要的功能就是判斷 EV3 馬達的停滯狀態(stalled),原廠的說明文件中曾提到,每一個Motor port會有一個Status Byte,其中 bit7可以檢測 "Motor is stalled"狀態,實際上測試似乎沒有作用,因此,改成以讀取馬達的 Encoder value作為判斷,以下為Arduino程式碼:
    
    ////////////////////////////////////////////////////////////////////////////////
    // Control the Brick Feeder(EV3 M-Motor)
    ////////////////////////////////////////////////////////////////////////////////
    void controlBrickFeeder(bool isFeeding) {
      int32_t curr_encoder, prev_encoder;
      
      nxshield.bank_b.motorStop(SH_Motor_2, SH_Next_Action_Brake);
      delay(300);
      nxshield.bank_b.motorResetEncoder(SH_Motor_2);
      curr_encoder = nxshield.bank_b.motorGetEncoderPosition(SH_Motor_2);
      prev_encoder = curr_encoder;
      if (isFeeding)
        nxshield.bank_b.motorRunUnlimited(SH_Motor_2, SH_Direction_Reverse, 30);
      else
        nxshield.bank_b.motorRunUnlimited(SH_Motor_2, SH_Direction_Forward, 50);
      delay(1000);
      while(true) {
        curr_encoder = nxshield.bank_b.motorGetEncoderPosition(SH_Motor_2);
        if(abs(curr_encoder - prev_encoder) < 10) break;
        prev_encoder = curr_encoder;
        delay(500);
      }
      nxshield.bank_b.motorStop(SH_Motor_2, SH_Next_Action_Float);
      delay(500);  
    }
        

Arduino筆記:移轉『EV3樂高積木顏色分類機』至Arduino平台(NXShield or EVShield) - ( I )

在五月底曾答應 Mindsensors 的 Mr. Deepak要將『樂高Technic Beam積木顏色分類機』由 EV3 + RobotC 移轉至 Arduino + EVShield 平台,而在等候 EVShield寄達之前,先行以 NXShield測試各個組成機構轉換成Arduino的功能,接下來在移轉至EVShield時,就可以直接整合,省掉單元測試的工作。

EV3 to Arduino 轉換計畫


EV3版的『樂高Technic Beam積木顏色分類機』共由五個主要機構所組成,包含:
  • 托盤 及 輸送帶:使用 PFMate+PF IR接收器 控制 PF L-Motor 以及 EV3觸控感應器
  • 顏色辨識:使用 EV3顏色感應器
  • Brick feeder:使用 EV3 中型馬達
  • Brick loader:使用 PFMate + PF IR Receiver 控制 PF Servo Motor。 
  • Robot Arm:使用 NXTServo 控制四顆 RC Servo
EV3 版 的五個組成機構
在計畫先以 Arduino + NXShield 平台進行單元測試前,需因應 NXShield 與 EV3 感應器的相容問題調整以下的配備:

以下圖示為單元測試之所有機構:

NXShield版測試機構

以下圖示為單元測試之功能架構圖:


2015-06-05

Arduino筆記:以Sparkfun LED Strip(LED燈條)裝飾樂高聖誕樹

去年底應景做了『讓EV3播放聖誕音樂』,同時也以樂高零件搭配LED燈條組合成聖誕樹,展現的燈光效果確實很有年節的氛圍

樂高 LED燈飾聖誕樹
而其中LED燈條使用的是『Sparkfun RGB LED Strip』,共串接了32顆的 RGB LED,每一個LED各自由一顆 WS2801 驅動IC控制,因此可以獨立控制每一顆LED的顏色顯現(addressable),透過程式即可以展現出如下面影片中的特殊效果。


重要技術資訊

Sparkfun官網中的範例程式部分資訊有誤,以下則是經測試後確認功能確實可以正常運作:
  1. 燈條首尾分別為四芯的公與母接頭,可繼續延伸串接,四芯線與Arduino的接線方式為:
    ● 紅色 - 5V
    ● 藍色 - CKI (Data Clock Input)
    ● 綠色 - SDI (Serial Gray Scale data input)
    ● 黃色 - GND
     
  2. 每一顆LED以 24-bit 顏色值資料控制顏色的顯示:

2015-06-02

Arduino筆記: Sparkfun 8X16 RGB LED矩陣顯示控制

Sparkfun的8X8 LED矩陣使用SPI介面控制顯示64個LED,同時背板也具備Daisy Chain功能,可串接多個同型的LED矩陣,透過Arduino(SPI Master)傳送資料給第一個控制板,會依序傳遞給所有鏈結的LED矩陣,控制所有LED的顏色顯示。
SparkFun 8x8 LED 矩陣控制板
過去曾經使用過以單一LED矩陣製作『NXT顯示裝置(NXT RGB LED訊息看板)』,由於8X8 LED數量的限制,因此只適用於水平捲動顯示英數字型的訊息。對於筆劃較複雜的中文字型,則至少需要有16X16的解析度,所以這次將會以Daisy chain串接兩個8X8 LED矩陣成為8X16的顯示面板用來顯示中文訊息。
在以下的影片中,會展示以水平捲動方式顯示8X8英文字型以及垂直捲動顯示16X16中文字型等兩種效果。

『EV3 8x16 LED顯示看板』示範影片:


2015-05-12

RobotC 4.X實作:樂高Technic Beam積木顏色分類機(LEGO BRICKS SORTER)

RobotC 4.X版原來對於EV3的I2C功能一直不是很穩定,常出現Bus error的錯誤,不過從4.27版之後就已經能夠正常支援了,所以這次以mindsensors的PFMateNXTServo(V1.0)兩個I2C數位控制器,再搭配EV3中型馬達以及觸控' 顏色兩種感應器實作一個『樂高Technic Beam的積木顏色分類機(LEGO BRICKS SORTER)』,用來測試RobotC相關的EV3功能,包含:馬達、感應器、I2C通訊以及EV3的多工作業等。

示範影片:


機構總覽:

Bricks Sorter整體機構