Author Archives: 袁 佑緣

使用 IBM Bluemix 打造的 Facebook 天氣播報機器人

使用 IBM Bluemix 打造的 Facebook 對話機器人,歡迎和我聊天喔~

Facebook Messager API <—–> Broker <—–> Weather Bot

我們要建立一個與Facebook API綁定的代理人(broker) app,當有人在Facebook粉絲頁發送訊息時,它就能收到,broker會接續處理這個訊息並對 weather bot 發送要求。weather bot 會透過 IBM Bluemix Natural Language Classifier來判斷使用者需要怎樣的資訊。

最後,weather bot會對 IBM Bluemix Weather Insights 發送一個需求來取得指定地區的天氣資料,最後回送到 Facebook messeger。

(Github請點我)


1. 事前準備

您需要安裝以下工具。

Linux使用者,請用套件管理器來安裝所需的套件 (大部分都已經裝好了)

Windows使用者,請分別從以下連結來安裝

  1. git https://git-scm.com/download/win
  2. python https://www.python.org/ftp/python/3.6.0/python-3.6.0a3-amd64.exe
  3. cloudfoundry-cli https://github.com/cloudfoundry/cli/releases

另外,您當然也需要一個 IBM Bluemix 帳號。

2. Broker設定

請在 Windows 命令提示字元輸入以下指令來取得本專案所需程式碼:

git clone https://github.com/YuanYouYuan/Bluemix-tutorial.git

切換到 Bluemix-tutorial/facebook-weather-bot/broker 資料夾,編輯 manifest.yml,將 name 與 host  改成您喜歡的名稱。但這名稱不可重複,否則 server 在 push 上去時會失敗。

applications:
- path: .
  memory: 256M
  instances: 1
  domain: mybluemix.net
  name: yourname-broker
  host: yourname-broker
  disk_quota: 1024M

3. 建立 Facebook 粉絲頁與應用程式

建立一個新的 Facebook 粉絲頁,我使用的名稱為 Circle Chatbot(已可使用,歡迎聊天)

接著請到 Facebook 開發者頁面來建立一個應用程式,名稱任意即可,在此我使用的名稱為 myTemboo。

fb_developer

在您所建立的 app 頁面左側選 ‘Add Product‘ -> ‘Messenger‘ ,代表這個 app 要加入 messenger 功能。

add_product

001

4. 產生粉絲頁Token

請點選[Select a Page]來選擇您的粉絲頁,並複製該粉絲頁的 access token,這時會跳出相關視窗要求您確認這個app可執行的權限,確認完畢之後就會看到 token

002 003

004

回到方才 git 下來的資料夾中, 請編輯app.js並更換 var token 內容。

var token = "pasteYourAccessTokenHere";
var host = (process.env.VCAP_APP_HOST || 'localhost');
var port = (process.env.VCAP_APP_PORT || 3000);
app.listen(port, host);

請用下 python 檔來設定 access token,完成如下

python set_fb_access_token.py  "pasteYourAccessTokenHere" (對,就是一大串直接貼了)

如果出現找不到 request 這個python 相關模組的錯誤訊息,請執行以下指令來安裝:

pip install requests

003

使用 cloudfoundry-cli 來發布這個 app

cf login -a https://api.ng.bluemix.net
cf push

如果無法透過 cf 來登入,請確認您的 organization 與 space 都設定正確,請注意地區(locale) 要設為美國南部(US South). API point 要設為 https://api.ng.bluemix.net

如果 Bluemix UI 在您首次登入沒有自動導引您去設定以上步驟的話,請在 Bluemix 網站下建立一個新的 CloudFoundry,並選擇任一種 SDK (沒有用到也可以),這樣做會自動呼叫設定精靈。

5. 設定Webhooks

broker app成功在雲端執行之後,請回到Facebook 開發者頁面來設定 webhook。

webhook

  • Callback URL:填入 broker url (e.g. https://yourname-broker.mybluemix.net/webhook )
  • Verification Token:fb_weather_bot_verify_token   (就是這串字,不是您的粉絲頁 token)
  • Subscription Field:
    • message_deliveries
    • message_reads
    • messaging_optins
    • messaging_postbacks
    • message_reads 都要勾選

005

請回到您的粉絲頁,將 webhook 與粉絲頁事件( page events ) 掛起來。

6. 設定Weather Bot

建立所需的 Bluemix 服務:.

cf create-service natural_language_classifier standard yourname-weather-bot-NLC 
cf create-service weatherinsights Free-v2 yourname-weather-bot-WI

編輯 Bluemix/facebook-weather-bot/weather-bot/manifest.yml,填入您的名稱:

applications:
- path: .
  memory: 256M
  instances: 1
  domain: mybluemix.net
  name: yourname-weather-bot
  host: yourname-weather-bot
  disk_quota: 1024M
  services:
  - yourname-weather-bot-NLC
  - yourname-weather-bot-WI

使用 cf 來發布,它會在您的 Bluemix 下建立一個 weather-bot app,並綁定方才您所建立的服務。

cf push

現在您可以觀察 app 的狀態,請看看是否正確運作。

cf apps
cf logs yourname-weather-bot --recent
cf logs yourname-borker --recent

7. 訓練Natural Language Classifier

首先要取得本服務的 credential key。請輸入以下指令來檢視weather-bot app 的環境變數(environment variable):

cf env yourname-weather-bot

請將 natural language service 的 credential 複製起來,並另存新檔於 Bluemix-tutorial/facebook-weather-bot/weather-bot/NLC 路徑下,檔名為 credential.json。其內容看起來如下:

{
 "password": "PLX7Ua3YeZaK",
 "url": "https://gateway.watsonplatform.net/natural-language-classifier/api",
 "username": "c918a7f7-6f5e-4f7a-8426-4c2080645cca"
}

請將訓練檔 weather_data_train.csv 上傳到 Bluemix 並建立一個分類器(classifier)。訓練過程可能需要一點時間 (我有碰過 10分鐘的…)

python NLC_create.py

請執行 NLC_status.py 來檢查狀態

python NLC_status.py

訓練完成之後,可用 NLC_test.py 來檢查 NLC 是否正常運作:

python NLC_test.py

將新的 app 推上 Bluemix 吧

cf push

8. 操作

登入 Facebook 來與您的 weather-bot 聊天吧!輸入 weather 可以回報台北的天氣,hot/ cold 則會回報溫度喔!

fb_chatbot

9. 問題排除

如果您碰到 404 error,可能是 weather-bot app 故障或意外中止,重開一次就好:

cf restart yourtname-weather-bot

10. 設為公開

到目前為止,這個 weather bot 都是非公開的,應該說粉絲頁本身是公開的,但不是所有人都可以操作。請回到該 Facebook app 頁面完成 Messenger 相關的設定之後提交,約2~5天之後就可以開放給所有人使用了。

14037464_1117281198351639_567371543_o

[IBM Bluemix教學系列] 第一章 Node.js與Node-RED介紹

Node.js與Node-RED介紹

請先閱讀:[IBM Bluemix教學系列] 第零章 IBM Bluemix 介紹

Node.js

因為接下來的Bluemix系列教學將會使用到Node.js作為主要語言, 所以我們就來談談Node.js這個程式語言吧!

首先是一些入門教學網站: http://www.nodebeginner.org/index-zh-tw.html http://www.tutorialspoint.com/nodejs/

相比起其他語言,Node.js算是年紀相對輕的, 最早於2009年首次釋出在Linux作業系統上, 一直到發展到現在在各大平台皆適用, 並與瀏覽器的引擎發展息息相關。

Node.js基於javascript可以用來做伺服器端或者網路相關的應用, 並且還可以搭配許多模組快速開發及進行各種實做, 與Python類似的,Node.js有一個專屬的套件管理,叫做NPM(Node Package Manager), 讓使用者可以輕鬆的通過一行指令就下載並安裝相對應的套件, 同時也能將自己的套件打包好上傳到雲端, 將來我們要使用IBM Bluemix的套件時將會用到同樣的原理。

整體來說,在接下來的IBM Bluemix開發都會在雲端上進行, 所以您的電腦上並不需要安裝Node.js, 但是為了進行本章範例的操作, 請您從官方網站下載Node.js並安裝。

https://nodejs.org/en/download/

安裝完成後,請打開Terminal(終端機)輸入”node”, 您將會看到一個跟python shell十分相似的互動式命令列, (正式名稱叫做REPL, Read-Eval-Print-Loop) 您可以直接在上面輸入一些指令並得到回應。

http://www.tutorialspoint.com/nodejs/nodejs_repl_terminal.htm

有了Node.js之後,我們先不急著開始寫我們的程式, 關於Node.js語法的特性不是本章著重的目標, 因為我們將介紹一種圖像化的開發界面—Node-RED。

Node-RED

Node-RED 是由IBM Emerging Technology所製作, 一款基於Node.js並門用在物連網的視覺化套件, 裡面整合了許多的服務,甚至能擴充IBM Bluemix的雲端服務API。

Node-RED GitHub https://github.com/node-red/node-red

如果要安裝Node-RED的話其實只要在Terminal(終端機)上輸入”npm install -g node-red”, 就可以從npm上下載套件並自動安裝了,另外請注意這像指令可能需要賦予超級使用者的權限, 如果是OS X/linux的使用者請在指令前面加上sudo, Windows的使用者則是用管理者權限去執行命令提示字元(Windows下的命令列)。

安裝完成後,請在Terminal上輸入”node-red”, 您應該可以看程式會自動在http://127.0.0.1:1880/ 下生成一個server, 請您用瀏覽器打開此網址,成功進入Node-RED的樣子如下:

Node-RED 一下

最後我們就來試試一些簡單的範例,並藉此了解Node-RED的操作模式與特性吧! 請先在左邊Input的欄位拉出一個inject元件, 您會發現在拖曳完成後它會變成了timestamp, 這是代表了一個時間戳記(對應到每一次的輸入),

您可以用滑鼠雙擊timestamp的元件看到裡面的inject設定,

點擊payload您可以看到裡面有許多種資料類型可以去設定, 在個範例中我們先試著輸出文字,所以請點選string那一欄, 並輸入”Hello”,並把下方的Repeat設定成interval, 預設會每1秒送出一次訊息。

接下來再從output那一欄拉出debug這個元件, 您一樣會發現在完成拖曳後它會變成msg.payload, 意思是它會輸出msg的payload性質到右邊那欄的debug並顯示出來。

將兩個元件用線連起來之後,就完成了我們程式的佈置了, 接下來請您按下右上角的Deploy, 就能看到程式正常的運作了!

最後我們來介紹一個Node-RED相當不錯的功能, 就是可以直接將Node-RED的圖形化程式打包成json的形式, 再以複製貼上的方式將程式碼轉回圖像化的Node。

讓我們來試試官方提供的範例程式碼, 請將以下的json碼複製起來,

[{"id":"11b032a3.ee4fcd","type":"inject","name":"Tick","topic":"","payload":"","repeat":"","crontab":"*/5 * * * *","once":false,"x":161,"y":828,"z":"6480e14.f9b7f2","wires":[["a2b3542e.5d4ca8"]]},{"id":"a2b3542e.5d4ca8","type":"http request","name":"UK Power","method":"GET","url":"http://realtimeweb-prod.nationalgrid.com/SystemData.aspx","x":301,"y":828,"z":"6480e14.f9b7f2","wires":[["2631e2da.d9ce1e"]]},{"id":"2631e2da.d9ce1e","type":"function","name":"UK Power Demand","func":"// does a simple text extract parse of the http output to provide an\n// object containing the uk power demand, frequency and time\n\nif (~msg.payload.indexOf('<span')) {\n    var dem = msg.payload.split('Demand:')[1].split(\"MW\")[0];\n    var fre = msg.payload.split('Frequency:')[1].split(\"Hz\")[0];\n\n    msg.payload = {};\n    msg.payload.demand = parseInt(dem.split(\">\")[1].split(\"<\")[0]);\n    msg.payload.frequency = parseFloat(fre.split(\">\")[1].split(\"<\")[0]);\n    \n    msg2 = {};\n    msg2.payload = (msg.payload.frequency >= 50) ? true : false;\n\n    return [msg,msg2];\n}\n\nreturn null;","outputs":"2","valid":true,"x":478,"y":828,"z":"6480e14.f9b7f2","wires":[["8e56f4d3.71a908"],["cd84371b.327bc8"]]},{"id":"8e56f4d3.71a908","type":"debug","name":"","active":true,"complete":false,"x":678,"y":798,"z":"6480e14.f9b7f2","wires":[]},{"id":"cd84371b.327bc8","type":"debug","name":"","active":true,"complete":false,"x":679,"y":869,"z":"6480e14.f9b7f2","wires":[]}]

並在Node-RED的操作界面中按下ctrl + i, 便會跳出一個視窗,請將剛剛複製的json碼貼在上面, 這時候您就會看已經完成的程式碼已經變成圖像化的node了!

這隻程式會每隔五分鐘自動上網爬資料, 將過去時段英國的電力消耗資料下來, 並輸出demand(需求)與frequency(頻率)。

經過本章的介紹希望各位都能對Node.js與Node-RED有個認識,最後預告下週我們將會延續本章的Node-RED,在時下熱門的控制平台:Arduino以及Raspberry Pi上使用Node-RED來部屬各種應用程式,敬請期待!

[IBM Bluemix教學系列] 第零章 IBM Bluemix 介紹

IBM Bluemix 介紹

Bluemix 網站  https://console.ng.bluemix.net/

bluemix website

 

 

IBM Bluemix是一由IBM所開發的開放雲端平台, 目的是希望提供開發者一個方便、快速設計的平台, 同時也讓企業可以更好的整合各種不同的平台服務, Bluemix有提供各式各樣的雲服務與API, 也包含各種虛擬機器以及資料庫。

 

 

Bluemix 服務型錄

bluemix_service

Bluemix上有許多方便又好用的API可以取用, 例如:物連網、Watson認知運算、行動式開發、Web開發、資料分析…等,

 

watson

mobile

web

DevOps

data

 

有些是IBM自己研發的, 也有一些是跟其他協力廠商合作, 另外Bluemix也允許使用者自己製作自己的API, 也就是說使用者可以在同一個平台上一次整合不同API的功能, 真的是相當方便。
同時Bluemix對於語言的支援度也是相當用心, 基本上大部分主流的語言都有支援, 其背後也有相當的社群及文件。

 

lang

開始使用

使用者必須註冊Bluemix帳號才能取用Bluemix上的服務, 每一個帳號都能免費試用30天, 並能存取2GB的記憶體及儲存器,

 

registration

對於每一個不同的服務Bluemix也有不同的收費規定, 好比說取用前幾萬比資料免費這樣。 倘若使用時間過了試用30天則需要填信用卡, 但是不用擔心,只要沒有到達收費的標準, 仍舊是可以免費使用。
以下我們就來簡單試一下IBM Bluemix的IoT應用吧! 請進到以下的網址:http://discover-iot.eu-gb.mybluemix.net/#/play 並選擇Smartphone,

 

iot_demo

 

 

接下來請填上裝置的名稱, 也就是您希望智慧型手機的ID, 並在下方填上一個信箱。

 

iot_demo_2

 

 

這時候Bluemix就會自動生成一個能夠紀錄智慧型手機上資料的網站, 請用手機掃描QR code並登入這個網址。

 

iot_demo_3

 

 

來看看是否從網站上即時知道手機上的三軸加速度呢? 左邊畫面是手機的模擬圖, 右邊則是三軸加速度資料的紀錄, 另外也可以試著快速搖晃您的手機, 您可以發現在下方有個條件可以設定, 當加速度超過10m/s*s時就會跳出提醒, 快來玩玩看!

 

iot_demo_4

 

 

以上就是本篇關於IBM Bluemix的簡短介紹, 也透過一個簡單的官方範例讓您了解到, 原本需要相當多不同技術才能實現的IoT資料整合及互動, 能夠在同一個平台上以及簡單的幾個步驟下就能有不錯的效果, 接下來本團隊將會有一系列的IBM Bluemix的教學文章, 帶領您一窺Bluemix雲端平台的厲害之處, 以及使用圖形化的界面完成各種應用程式的開發, 敬請期待!

[Intel Edison X MCS X MeArm] MCS Gamepad 元件應用,智慧型手機操控機械手臂

本篇文章將介紹綜合性的應用,透過智慧型手機上的MediaTek Cloud Sandbox (聯發科的免費雲端資料平台,簡稱MCS)app,經由WiFi傳送訊息到我們的控制器Intel Edison,並控制我們的機械手臂MeArm

事前準備:

  1. Intel Edison 要先準備好linux的系統,本範例使用的是ubilinux,並且完成最基本的GPIO設定
  2. 本範例會需要用到python requests函式庫來跟MCS溝通,所以也請先安裝
  3. 在MCS上新增一個Prototype及test device,記下device id , device key
  4. MCS的Prototype加入本範例需要用的gamepad元件,並將ID命名為gamepad,如圖:

 

Screen Shot 2016-01-02 at 11.54.44 PM

 

 

硬體部分:準備好MeArm機械手臂,連接好我們的控制器Intel Edison,如圖:

 

 

IMG_0951

 

 

程式部分:

import mraa
import time
import requests

device_id = "輸入device_id"
device_key = "輸入device_key"

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

def game_pad():
    r = requests.get(url, headers = {"deviceKey" : device_key})
    data = r.content.split(',')[2:]
    print data
    #time.sleep(0.01)
    return (data[0][0], data[0][-1])


pin = [3, 5, 6, 9]
servo = []
servo_degree = [90, 90, 90, 180]
for p in pin:
    servo.append(mraa.Pwm(p))
    
for s in servo:
    s.period_us(20000) #50Hz
    s.enable(False)

max_duty = 2300.0 #us
min_duty = 500.0

def servo_rotate(servo_number, degree): #servo_number (0, 1, 2, 3) = (3, 5, 6, 9)
    duty_cycle = ((max_duty - min_duty) * degree / 180.0 + min_duty) / 20000.0
    servo[servo_number].enable(True)
    servo[servo_number].write(duty_cycle)
    print "duty_cycle = ", duty_cycle, "\n"

dt = 0.01

for s in servo:
    s.enable(False)

unit_degree = 30
while True:
    command = game_pad()
    if command[1] == "1":
        if command[0] == "l":
            print "left"
            if servo_degree[0] > unit_degree:
                servo_degree[0] -= unit_degree
                servo_rotate(0, servo_degree[0])
        elif command[0] == "r":
            print "right"
            if servo_degree[0] < 180 - unit_degree:
                servo_degree[0] += unit_degree
                servo_rotate(0, servo_degree[0])
        elif command[0] == "d":
            print "down"
            if servo_degree[2] < 180 - unit_degree: 
                servo_degree[2] += unit_degree servo_rotate(2, servo_degree[2]) 
        elif command[0] == "u": 
            print "up" 
            if servo_degree[2] > unit_degree:
                servo_degree[2] -= unit_degree
                servo_rotate(2, servo_degree[2])
        elif command[0] == "A":
            print "A"
            servo_rotate(3, 0)
        elif command[0] == "B":
            print "B"
            servo_rotate(3, 180)

最後就是影片展示啦!

 

 

[LinkIt 7688]Duo板介紹與Arduino 設置教學

最近聯發科推出了強打:LinkIt 7688官網介紹請點我,大致上就是一款價錢平易近人(不到台幣五百),軟體開發上又支援多種程式語言的新板子,並且採用OpenWrt的Linux系統,使用上可以直接從電腦連到7688發出的WiFi,再用SSH登入,對於資深玩家而言,許多細部的網路設定都可以在OpenWrt上著墨(OpenWrt官網介紹)

Screen Shot 2015-12-14 at 9.42.03 PM

 

 

同時有別於之前LinkIt One的地方,7688本身就可以當作是一個AP來使用,甚至當你想要在7688上寫程式或傳輸檔案時,只要透過無線網路連到板子即可,好比說影像串流範例(影片中有詳細介紹喔),https://www.youtube.com/watch?v=iDvKmrPzqrM,雖然7688板子本身又小又薄,但還是可以透過上面的micro usb接出攝影機,然後再將自己當作是AP發送到電腦端,一個簡單的區網影像傳輸就可以輕鬆完成了,過程中完全不需要經由網際網路!

a03

 

此外,聯發科還有跟SeeedStduio合作,推出各種的Grove套件組,無論是使用或教學應用都相當方便,搭配上Grove的各種感測器以及7688強大的連網功能,還有聯發科自家開發的免費雲端平台MediaTek Cloud Sandbox,https://mcs.mediatek.com/,詳細應用可以參考這篇教學範例,想入門物聯網實作的朋友們,不妨可以來試試看這片板子!

a02

 

雖然說linux的系統以及支援多種語言(例如:C, node.js, python),造福了許多已經習慣程式語言的工程師,但對於大多數剛入門不久的maker,主要會關心的還是我可以在7688上面寫時下熱門的Arduino嗎?

答案是當然是可以的!7688有分為兩種版本,一種是單純只有聯發科自家的晶片(Linux核心),另外一種則是Duo板,他就有額外多一個晶片,沒錯,就是Arduino系列常用的ATmega,同時也是可以直接透過micro usb傳輸線直接接到電腦上,然後用Arduino IDE來寫或燒錄程式,使用方法幾乎跟一般的Arduino以及LinkIt ONE是一模一樣的,而對於有沒有支援Arduino,兩者價錢只差不到兩百塊台幣。

Screen Shot 2015-12-15 at 3.04.14 AM

 

而Arduino  IDE要安裝7688的SDK(也就是7688會用到的一些函式庫)步驟相當簡單,只要IDE中打開preferences(偏好設定),把以下的網址貼在Boards Manager URLs那一欄,(http://download.labs.mediatek.com/package_mtk_linkit_smart_7688_test_index.json)

Screen Shot 2015-12-15 at 2.49.01 AM

再到Tools -> Board Manager那邊找到7688並下載就行了!

Screen Shot 2015-12-15 at 2.52.16 AM

Screen Shot 2015-12-15 at 2.51.29 AM

 

如果一切順利的話,就可以看到我們的IDE上面成功地抓到我們的7688了,接下來就請各位動手玩一玩它裡面的各種範例吧!敬請期待我們接下來對於7688的介紹與教學吧!

Screen Shot 2015-12-14 at 9.33.02 PM

 

 

[開箱文BrickPi+] Raspberry Pi結合LEGO的好幫手

本次文章來介紹一下Dexter Industries推出的BrickPi+,這是一塊可以給Raspberry Pi外接的板子,主要功能就是能夠結合LEGO的各種感測器跟馬達囉,如果想用用看LEGO原廠以外的控制器的話,不妨可以試試看用時下流行的單板電腦Raspberry Pi來玩玩看LEGO的零組件

首先,先來介紹一下BrickPi +這塊板子

官方介紹網址

http://www.dexterindustries.com/introducing-the-brickpi/

  1. 為什麼最後面有一個”+”呢?因為他是之前推出過的BrickPi的新版本,舊版本的介紹請點我,記得之前的版本的BrickPi還無法完全支援LEGO EV3的感應器,甚至還需要使用者自己更新板子的韌體才行,而這次新版的BrickPi+已經都幫你搞定囉,此外他還多了一些功能:加強馬達使用上的保護、電池電力監控等等
  2. 那他能支援幾個輸入/輸出端呢?想知道的話不妨可以先來看看這次新設計的外殼吧,BrickPi+的塑膠外殼只需要幾根螺絲螺帽就能固定,而且上頭還有特別切出的圓形小洞,專門用來連接LEGO的插銷,讓使用者相當容易固定在LEGO的零組件上,而且上頭還有標示輸入/輸出端的編號,一共有四個輸入與四個輸出,跟LEGO最新一代的控制器EV3是一樣的喔!

IMG_0929 IMG_0931 IMG_0930 IMG_0928

 

而收悉Raspberry Pi的朋友們可以知道,他是一塊可以在上面運作Linux作業系統的微電腦,有別於主要功能是控制機器人動作與感測的LEGO EV3,在Raspberry Pi上面你可以做更多電腦能做的事情,比如接上以太有線網路、外接USB裝置來擴充功能,或者是接上相機做影像串流,同時也具有足夠運算能力做影像辨識跟追蹤,相比LEGO的世界,好像又多跨了一步啊!

 

官網上也有相當多不錯的專案可以供使用者參考,並且其函式庫也支援相當多常用的語言,例如:C、Python等等,所以對於習慣使用文字式程式語言的人,也是入門控制機器人的不錯方案喔!

 

以下是函式庫裡的範例之一:從電腦的瀏覽器頁面來遠端操作連著WiFi的機器人

http://www.dexterindustries.com/BrickPi/projects/browserbot/

 

[Raspberry Pi x MeArm] Raspberry pi 使用觸控螢幕控制MeArm

本篇文章來跟各位分享如何使用樹莓派搭配觸控螢幕來控制機械手臂MeArm

1.硬體準備

a.樹莓派單板電腦,本範例使用的是 Raspberry Pi 2

b.MeArm機械手臂

c.樹莓派7吋觸控螢幕

d.行動電源,用來供電給螢幕跟主機

e.I2C servo控制板PCA9685,讓樹莓派可以透過I2C來控制,而不需要使用到樹莓派的GPIO腳位

腳位接法(控制板 – Rpi ):VCC接5V,V+也接5V,SDA接SDA,SCL接SCL,GND當然接GND

Jpeg

完成圖:

Jpeg

Jpeg

2.軟體準備

a.先在樹莓派上安裝系統,本範例使用的是官方提供的Raspbian

b.在樹莓派上設定I2C,只要在終端機中打上以下指令就可以了:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

並且要讓樹莓派一開機就會載入I2C,請以 root 權限編輯/etc/modules,加入以下兩行:

i2c-dev

i2c – bcm2708

接著請進入 raspi-config 的 Advanced options 去啟動 I2C,並重新開機即可

c.下載Adafruit的Raspberry Pi函式庫(官方參考文件),在樹莓派的終端機中輸入:

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

d.下載本範例的程式碼,並把它移到Adafruit-Raspberry-Pi-Python-Code/Adafruit_PWM_Servo_Driver的資料夾當中,在終端機中輸入:

wget https://raw.githubusercontent.com/YuanYouYuan/rpi-robotic-arm/master/wxpython_mearm/main.py

cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_PWM_Servo_Driver

mv ../../main.py .

e. 在終端機中輸入sudo python main.py 就可以順利執行了!

3.實際運作情形

Jpeg

軟體運作截圖,途中有四個拉桿可以控制

055

Jpeg
4.操作影片

9月19日 CAVEDU Day有什麼?@(三) 東京Maker Fairer 交換物品介紹:Arduino外殼與遊戲擴充板

下禮拜六就是我們CAVEDU 2015年下半年的發表會,地點在華山1914文創園區中4B演講廳,詳細資訊請看看下面的連結!

150919 CAVEDU Day @華山1914文創園區中4B演講廳

CAVEDU Day除了會有展品的展出之外,還會分享本團隊八月初到東京Maker Faire的所見所聞,有興趣的朋友可以參考一下我們之前的介紹文章。

2015 CAVEDU 於東京 Maker Faire 展出品項

[2015 Maker Faire Tokyo 報導#1] Intel Edison

[Maker Faire Tokyo F區 ]kuralab&シカクガング&PantoGraph

[Maker Faire Tokyo LED燈光創作] きらきライト 、 Suns & Moon Laboratory

[2015 Maker Faire Tokyo Craft區] Part1 木の歯車工房

 

本篇文章來介紹一下我們在東京Maker Faire交換的物品!

  1. Emerge+ 的Arduino 外殼

Jpeg

 

組裝起來的樣子!

Jpeg

看起來非常酷的外殼啊!

 

 

2.ikkei Electronics 的Arduino 遊戲擴充板:ikkeiplexing shield

另外一個令小編印象深刻的就是這個自己焊接的擴充板了,這是由ikkei Electronics設計的板子,值得注意的是這塊板子的設計是最早是在2011年開始的,當時候用的Arduino IDE還是1.0的版本呢,可見日本那邊也有不少人在Arduino剛推出的時候就已經有在研究了

以下附上ikkeiplexing shield的官方網站

http://ikkei.akiba.coocan.jp/ikkei_Electronics/ikkeiplexing_shield.html

 

 

正面

Jpeg

背面

Jpeg

搭配上Arduino UNO板

Jpeg

官網上的範例有許多的遊戲比如說彈力球,重力球,俄羅斯方塊…等

以下示範在上面完俄羅斯方塊遊戲

Jpeg

遊戲影片

 

[Maker Faire Tokyo LED燈光創作] きらきライト 、 Suns & Moon Laboratory

這次去東京Maker Faire展看到了許多LED彩色燈光秀的創作,搭配上動態揮動LED燈條產生視覺殘像,便可以有許多意想不到的應用!

 

[Suns & Moon Laboratory] 腳踏車車輪+LED燈條

11224253_898487150231046_1714116111844614050_n

Suns & Moon Laboratory的攤位就位在我們的隔壁,剛進場的時候就被他們創作的酷炫感所吸引,看到高速迴轉的車輪上面印有七彩炫目的文字,而且還會隨謢時間作動態的變化,簡直把腳踏車輪當作是行動看板啊!

 

20354949951_d6ae8c06a8_h

其實可以發現到它就是把幾個LED燈條加在腳踏車的輪輻上,再搭配上控制器偵測轉動並控制LED的亮暗點來達到選轉顯示字幕或動畫,在實務上,控制器可以做到很小,LED燈條的加裝也不會影響到原本的腳踏車輪太多,甚至也可以改裝到汽機車的車輪上,應用層面非常的廣啊!

想瞭解更多資訊可以參考一下他們的網站:  http://www.s-m-l.org/

 

另外一個讓小編非常印象深刻的作品就是這個啦,感覺好像是去演唱會的那種七彩加油棒啊!

[きらきライト]

11817088_898486996897728_8676974538907423326_n

這是きらきライト新推出的產品,這個小小的棒子非常的不簡單啊,它主要的功能跟剛剛介紹的腳踏車輪搭配LED燈條很類似,但是它是主打方便攜帶,而且還有搭載許多的感應器來做更多不同的應用,像是聲音感應器,可以根據音樂來作燈光變化;內藏的加速度感測器可以偵測棒子揮動的速度來顯示字幕,所以今天不管使用者臂長大小或者是揮動速度,控制器都會自動去調整,現場有需多的示範,基本上只要手腕揮一揮就能夠顯示出非常漂亮的圖形,中間還有一顆旋鈕可以調整模式,比如說要顯示的字數,不過要顯示越多的字數就必須越大的的範圍就是了。

 

產品特色說明DM

11873438_903456726400755_775985391250994405_n

 

 

此外,它還能外插SD card來增加要顯示的動畫,棒子的上面有一個旋鈕可以調整要顯示的各種模式,甚至還支援紅外線通訊、BLE(Bluetooth Low Energy),甚至還有App的SDK跟Android與iPhone手機做連結,也就是說有非常大的空間可以供使用者自行設計、應用,實在是非常令人期待得產品啊,只可惜它目前價錢還未定,不然實在是很想買一個回來玩玩!

想瞭解更多資訊可以參考一下他們的網站:  https://creww.me/ja/startup/kirakilight

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

雙A計畫第八篇來了!這次我們將告訴您如何在 Android 手機端與Arduino端藉由藍牙來互傳資料,本範例可同時控制 Arduino D13 腳位的高低電位 (有個板載LED,也可以自己接一顆 LED),並在手機畫面上看到 D13 腳位的狀態(High / Low)代表資料收發都完成了。

另外,想了解雙A計畫所有內容的朋友,請參考下面的連結

[雙A計畫] 常見問題整理

       [雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫] Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

!!!注意!!!

如果Arduino端太頻繁去傳送LED燈的亮暗狀態給手機的話,可能會造成藍牙通訊塞車。以本範例來說,Arduino端是每100毫秒會傳送一次訊息,但是筆者有試過如果幾乎不等待,就讓Arduino端一直傳送的話,那麼在接收Android手機端的命令時就會出現0與1以外奇怪的數值喔!

程式下載請點我  (aia檔是App Inventor的專案檔,apk檔是手機端的安裝檔,直接丟到手機安裝就可以使用了, ino檔則是給Arduino執行的)


手機端程式說明,使用 App Inventor:

Designer 頁面

Screen Shot 2015-07-23 at 4.47.24 PM

請注意,本範例中的Clock1 元件的 TimeInterval 設定為10毫秒,也就是每10毫秒手機端就會去啟動藍牙接收程式,查看Arduino端的D13腳位的電位高低狀態。

這個參數您可以自由修改,如果想要做到最即時反應那就可以把時間間隔改低一點,但是在這邊提醒一下,藍牙的傳輸資料還是多多少少會有些時間延遲喔!

Blocks 頁面

Screen Shot 2015-07-23 at 4.33.18 PM

區塊元件名稱功能
藍牙列表的設定when ListPicker1.BeforePicking在藍牙連線到裝置前,先將之前配對好的藍芽裝置匯入到準備連接的列表中
藍牙連線到裝置when ListPicker1.AfterPicking選好要連接的藍牙裝置後,將藍牙列表關閉、啟動計時器開始每隔一段時間讀值,並把斷線的按鈕設定為可執行
斷線按鈕的設定when Button3.Click按下斷線後就會斷開藍牙通訊,並把按鈕配置回到一開始的狀態

按鈕發送藍牙訊號來控制 Arduino 以及定期接收 Arduino 的回傳值來改變按鈕 (Button2) 的背景顏色

Screen Shot 2015-07-23 at 4.33.55 PM

區塊元件名稱功能
藍牙遙控LED燈when Button1.Click當按下ON之後就會透過藍牙傳送”1″的訊息給Arduino,如果Arduino成功接收到的話,就會亮燈當按下OFF之後就會透過藍牙傳送”0″的訊息給Arduino,如果Arduino成功接收到的話,就會熄燈每次按下手機螢幕上的開關時,按鈕上的文字都會在”ON”、”OFF”之間做切換

 

藍牙接收LED燈狀態when Clock1.Timer每隔一段時間(本次範例使用的是10ms),就會去接收Arduino透過藍牙傳送過來的LED燈狀態如果是”1″的話,就將旁邊按鈕2的背景顏色設為亮色,代表此時燈是亮的如果是”0″的話,就將旁邊按鈕2的背景顏色設為暗色,代表此時燈是暗的

 

 

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

雙A計畫不知不覺就來到第七篇了呢!這次我們將告訴您如何在 Android 手機端接收 Arduino端數位感測元件的數值,本範例使用的是超音波感測器讀取的距離數值。

[雙A計畫] 常見問題整理

       [雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

       [雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫] Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

本次範例App Inventor .aia範例檔下載請點我 

先來看看示範的影片吧!

 

 

Continue reading