Category Archives: Arduino嵌入式開發板

物聯網裝置連線社群網站_使用Temboo取得Google的OAuth認證

今天要跟大家分享一個TemBoo取得google認證的功能,取得認證能做什麼呢?這意味著你的裝置可以取得平常google服務的權限,這個Temboo的網站可以將物聯網裝置取得認證這件事變得比較容易。

1、首先要到Temboo的官方網站申請帳號

2、取得Temboo帳號之後,接著登入Google的開發者網站,有申請Google帳號的使用者,用原本的帳號就可以登入了

3、接著建立一個新的專案。

01

4. 接著點畫面左邊的「API和驗證→API」找到Google Drive API並且啟用API,(畫面顯示停用,代表API已經啟用了)

02

03

 

5.點畫面左欄「API和驗證→憑證」在OAuth選向下點「建立新的用戶端ID」,應用程式類型選「網路應用程式」後,點「設定同意畫面」,並且在「同意畫面」中寫上Email和產品名稱(其他為選填)

 

04

6.畫面跳出「建立用戶端ID」,在下面的「授權的重新導向URL」填寫Google要連線的Temboo網址

https://ACCOUNT_NAME.temboolive.com/callback/google

ACCOUNT_NAME 需要填寫自己的Temboo的帳號

05

 

7、設定結束後,我們會得到「用戶端ID」、「用戶端密碼」,這兩個資訊我們在接下來會一直使用

06

 

8、接著到Temboo網站,設定Temboo與GoogleAPI間的認證OAuth,進行 Initialize OAuth  ,

在「Client ID 」填上上一步得到的「用戶端ID」

在「Scope」 填上 https://spreadsheets.google.com/feeds/ (適用於使用GoogleDoc的服務)

填寫完成後點「Run」

07

 

8.點選到 AuthorizationURL下方的網址,Google會詢問你是否給予權限,同意後出現空白畫面就代表成功了。

9、接著記下「Callback  ID 」的內容。

08

 

 

09

9.下一步則是到Temboo的 FinalizeOAuth進行最後的設定

分別填寫 「用戶端ID」、「用戶端密碼」、及上一步得到的「CallbackID」

點選「RUN」

10、取得最後產生的RefreshToken。

10

11、只要有「Client ID」、「Client Secret」、「Client ID」、「Refresh Token」,便可以透過Temboo的網站,對Google的內容進行編輯,下方分享的圖案是針對GoogleDoc服務的試算表,填寫試算表的內容。

20

 

12、也可以透過Temboo生成的程式碼,將這個功能加入到可以上網的裝置arduinoYun當中。

21

執行Arduino Yun之後,在序列監視器看到上傳成功的畫面,就把裝置上傳資料的時間、環境溫度、環境濕度填寫在GoogleDoc的試算表當中。

22

23

 

今天分享到這裡,有興趣可以再看看相關的物聯網文章~

[雙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

Temboo – Arduino yun 發佈 Facebook 個人動態

Temboo 是一個好用的超級線上函式庫,有免費也有付費的帳號。在本團隊翻譯的[實戰物聯網開發:使用Arduino Yun] 這本書中,就讓 Arduino Yun 利用 Temboo 的各種函式庫來上傳資料到 Google spreadsheet、發送 Gmail 以及上傳 webcam 照片到 Dropbox 等功能。

本篇要來介紹如何透過Temboo 讓您的 Arduino Yun 可以發布 Facebook 動態,分成兩部分:Facebook 端與 Temboo 端,話說回來,要申請一個 Facebook app 是愈來愈難了。有興趣的讀者們請耐心完成喔!

成功的話就可以在您的 Facebook 上看到這樣的畫面,我是把 DHT11 溫濕度感測器上傳到我個人的 Facebook 動態牆。您可以看到有一個 caveyun,代表我們是透過一個名為 caveyun 的 Facebook app 來發佈動態,如果您是透過Facebook 網頁或是手機端的 app 的話,就不會看到這類東西。換言之,instagram, iphoto 等也是同樣的做法。

螢幕快照 2014-12-11 下午10.38.22

 

Temboo 首頁(需建立帳號)也可以看到您最近執行哪些操作。

螢幕快照 2015-05-20 上午1.09.48

參考:

ArduinoYun使用Temboo上傳照片至Dropbox


 

第一部分:Facebook 端

1. 請到 Facebook 開發者網站,登入您的個人帳號之後在 My Apps 標籤下,選擇 Add a New App 來建立一個 App,之後就需要用這個 App (我是用 caveyun)來讓您的 Arduino Yun 與 Facebook 互動。這邊的認證一定會比較嚴格,不然阿貓阿狗也可以發動態到您的個人動態牆就不妙了。另一方面,如果您的 Facebook 帳號比較不活躍(例如沒有通過電話簡訊認證)的話,這一步很有可能無法完成,Facebook 可能會認為這是洗板的機器人帳號。

建立時,請選擇最右邊的 www 網站,接下來就依序填入相關的資料就好。

 

螢幕快照 2015-05-21 上午12.29.38      螢幕快照 2015-05-21 上午12.34.42

建好之後,就會看到以下的 App 設定,其中重要的就是 App IDApp Secret,這兩筆資料在第二階段 Temboo 申請 OAuth token會用到。

螢幕快照 2015-05-20 上午1.16.40

 


 

第二階段:Temboo 端

1. 在 Temboo網站註冊一個帳號後,請先點選右上角的 ACCOUNT 標籤,接著點選左側的 Applications,在此要建立一個 temboo application,一樣會看到一個 Application name (arduinoyun) 與 application key,這些資料要填在 Temboo.h 中喔!

螢幕快照 2015-05-21 上午12.46.03

2. 把畫面右上角的 IoT Mode 打開,並選擇開發板為 Arduino Yun

螢幕快照 2015-05-20 上午1.49.28

 

3. 選擇 Temboo 頁面左側,您會看到很多知名的網路服務(Google, Dropbox, duckduckgo… 還有 Uber,真想都玩玩看!)請找到 Facebook 下的 Publishing -> SetStatus

螢幕快照 2015-05-20 上午1.10.11

4. 請點選 Get OAuth tokens,Temboo會帶您一步步操作,成功的話就可以取得 AccessToken,一起來吧!下方的 Message 選項則是您要發佈到 Facebook 個人動態牆的內容。

螢幕快照 2015-05-20 上午1.10.22

5. OAuth 第一步是要請您建立一個 Facebook app,這已經完成了吧。

螢幕快照 2015-05-20 上午1.21.21

6. 第二步是要在 Facebook app 頁面填入一個 Callback URL,請把 [https://temboo.com/oauth_helpers/confirm_facebook/] 這個連結填入您的 App Website 區中的 Site URL 欄位,完成後點選 Save Changes。
螢幕快照 2015-05-20 上午1.21.39

螢幕快照 2015-05-20 上午1.16.40

 

 

7. 在此填入您的 Facebook App ID 與 App Secret

螢幕快照 2015-05-20 上午1.22.33

8. 啟動認證,這時會跳轉到一個 Facebook 畫面,詢問您是否同意這個 app 可以發布訊息到您的動態牆,您在此可以決定發布的訊息是公開、只限朋友還是只限個人。很多 Facebook 小程式或是遊戲都會有這個步驟。

螢幕快照 2015-05-20 上午1.22.44

 

9. 終於完成了,其實 Temboo 也幫您把程式碼都弄好了,就是要取得這個 Access token嘛。請把這份程式燒錄到您的 Arduino Yun,確認網路連線都正常之後。過一會應該就可以看到您的 Facebook 帳號出現新的貼文囉!

螢幕快照 2015-05-20 上午1.49.49

別忘了在 Temboo.h 中要填入三筆資料,您的 Temboo 帳戶名稱、Application name 與 Application key,別把 Facebook 的 App ID / App Secret 搞混啦!螢幕快照 2015-05-21 上午1.02.42

 

Scratch X.org Arduino 相關指令介紹

請先參考本文來聯通您的 Arduino 與 Scratch X.org 網站:

Scratch Extension for Arduino – Scratch + Arduino 的新方案

簡單來說這個解決方案看起來是比較完整且容易做到的 Scratch 網頁結合 Arduino 控制,也支援部份 Seeed Studio 的 Grove 設備,目前支援的 Grove  裝置有以下六種,除了溫度感應器之外其實不太需要買啦,就是圖個方便囉。

螢幕快照 2015-05-16 上午1.20.54

以下是在 Arduino extension 中可用的 Scratch 指令

當電腦與 Arduino 連線成功時,,執行本事件下的指令。


將 LED、按鈕或伺服機連接到指定的數位腳位 (D2, D3, D4, D5, D6, D7, D8).


將電位計、光感測器或溫度感測器連接到指定的類比腳位 (A0, A1, A2, A3).


點亮或熄滅LED


指定 LED 的亮度,範圍為0 – 100%.


以指定 % 來改變 LED 的亮度。


讓伺服機轉動到指定位置,一般來說都是 0 – 180 度。


以指定角度來控制伺服機的位置。


當指定按鈕被壓下時,執行本事件下的指令。


檢查某個按鈕是否被壓下。


當旋轉式電位計、光感測器或溫度感測器的值滿足指定條件時(<, = , >),觸發本事件下的指令。


讀取旋轉式電位計、光感測器或溫度感測器的值,回傳值為0 – 100。


將指定的數位腳位(D2, D3, D4, D5, D6, D7, D8) 打開或關閉。


設定支援 PWM 的數位腳位的值 (D3, D5, D6) 為 0~ 100,單位為 %。


當指定數位腳位(D2, D3, D4, D5, D6, D7, D8) 為開(on)或關(off)時,執行本事件下的指令。


檢查指定數位腳位(D2, D3, D4, D5, D6, D7, D8) 的狀態為開(on)或關(off)。


當指定類比腳位的數值 (A0, A1, A2, A3) 滿足指定條件時(<, = , >),觸發本事件下的指令。


取得指定類比腳位的數值(A0, A1, A2, A3).


將輸入值對應(map)到所指定的兩個數值之間,例如可以將某個類比感測器的值(0 ~ 100) 對應到動畫角色的 x 座標 (-240 ~ 240).

Scratch Extension for Arduino – Scratch + Arduino 的新方案

Arduino.cc 的 blog 有個有趣的消息: Scratch Extension for Arduino。之前的作法大多是使用本機執行的 S4A 小軟體。這一版的亮點是支援 Grove 系列感測器, 搭配 Grove Base shield 之後就能控制 Grove 的數種感測器 與 servo,另外也可以使用 picoboard 與 wedo。

英文教學: http://khanning.github.io/scratch-arduino-extension/

操作方式如下:

1. Arduino 端一樣要安裝一個小程式 : Standard Firmata,負責回應來自 Scratch 的所有呼叫。如果要使用 Processing  來控制 Arduino 也需要它喔。請確認這隻程式已經上傳到您的 Arduino 並執行。

2. 安裝瀏覽器 plugin 檔名為 ScratchDevicePlugin.msi 或 ScratchDevicePlugin.dmg, (目前有 Windows 與 MAC)。安裝完成之後開啟  http://scratchx.org/?url=http://khanning.github.io/scratch-arduino-extension/arduino_extension.js 瀏覽器會詢問是否要起動外掛, 在此要同意才能使用.

  • Firefox:

 fox1

fox2

npapi

3. 順利完成的話, 會看到畫面中間的 Arduino 字樣旁邊的小圓圈變成綠色, 代表連線成功.

005

指令來看是差不多的, 在[更多積木] 之下有Arduino 相關的指令, 之後會專文介紹

 

005

這就是讓 #D13 LED 亮滅的小程式, 您完成了嗎?

006

 

Microsoft 與 Arduino.cc 的進一步合作關係

今天看到的消息:Microsoft 與 Arduino.cc 的進一步合作關係 (本文為翻譯消息)

windowsarduino

另一方面,Windows  也發布了它們的 IoT solution。支援 Raspberry Pi、Arduino Yun, Intel Galileo (一定要的啊)與 MinnowBoard Max (沒用過)

Arduino.cc 創辦人之一 Massimo Banzi 近日宣佈了Arduino.cc 與 Microsoft 進一步合作關係:Windows 10 is in fact the world’s first Arduino certified operating system!

Arduino Certified’  的 Windows 10 讓 maker 能結合 Arduino  的硬體驅動能力以及 Windows  的各種好用軟體來開發各種有趣的智慧物件。

想像一台監控攝影機,用Arduino來驅動馬達來控制鏡頭轉動,並使用 Universal Windows Platform (UWP) 來完成使用者介面,連接攝影機到雲端來處理動態偵測甚至可加入臉孔 / 語音辨識。另外也推出了 Windows Remote Arduino 與 Windows Virtual Shields ,當然是 open source啦

remotew02

使用Windows Remote Arduino,開發者就能控制(無線) 可執行 Windows 10 的裝置,就好像真的接上一片 Arduino 擴充板一樣,直接讓 Arduino 與 Universal Windows Application 接軌。

Microsoft 希望以這樣的方式讓使用者能用熟悉的 Arduino 指令 (執行在一台無線連接的 Arduino  裝置上) )就能延伸到 Universal Windows Platform Application。有那些好處呢?包括影像處理、語音辨識、網頁解析、攝影機與 Advanced Audio pipelines,並藉由 Arduino  整合了與真實世界的互動性,創造各種嶄新的應用。專案請參考:Basic Windows Remote Arduino project。.

另一方面還有 Windows Virtual Shields,使用者可以透過無線通訊協定來強化他們的 Windows 10 裝置。例如 Nokia 的 Lumia 530 手機就具備了許多 Arduino Shield (當然是虛擬的概念不能真的插啦) 的功能,玩家可藉此來連接各種元件,例如手機上的 GPS、網路連線/解析、觸碰螢幕、語音科技等等。例如 Picture the Weather project。期待能看到更多有趣的應用喔

「用Arduino Yún自造智慧家電」工作坊

20150425_163934
這次的智慧家電研習工作坊,這次上課對象是對有Aruduino使用基礎的Maker及Pre-Startup,這次來的同學有好多是在台灣擔任工程師的前輩阿,這次的上課內容是一天使用ArduinoYun上網到物聯網應用。

20150425_155253

本次上課內容有:

認識 Arduino Yún 開發板

–       安裝 Arduino 程式編輯介面

–       Arduino Yún  使用環境建置:透過網路將程式上傳到Arduino Yun。

–       Arduino  無線網路介面設定

–     使用ArduinoYun偵測周圍環境的溫度濕度

端家電監控(1)

–       認識Restful API

–       量測家電能源消耗狀況

–       遠端啟動以及關閉繼電器

Temboo 網路服務

–       自動上傳能源消耗資料到 Google Doc

–       運用雲端資源,整合紀錄並分析數據

–       發送警告電子郵件

 

 

大家開始組裝溫溼度感應器。恩恩,今天室內溫度大約是26度,濕度是46%

20150425_155103

 

這是很好用的Temboo網站,可以讓我們跟Google Gmail、雲端試算表進行連線

20150425_155210

 

開始製作家電控制器囉,大家很認真地在剝延長線,通電的那瞬間大家都好緊張啊。

20150425_154527

我們的鄭經理也上台跟我們分享一些有關電路設計、3D列印設計的相關軟體套件

20150425_152509

 

今天也是圓滿的結束囉,謝謝大家~~~

20150425_163934

 

今天的講義都在這裡,招待不周~

1_ArduinoYun物聯網

2_ArduinoYun物聯網

3_ArduinoYun物聯網

 

 

 

Ardublock 圖形化Arduino – 電位計 PWM 控制LED

使用 ArduBlock 來寫一寫個簡單的小程式,這是一個需要另外安裝(.jar)於 Arduino IDE 的圖形化程式,拉拉方塊就可以寫好 Arduino 程式,還可以回到 Arduino IDE 微調,非常方便喔。

.jar 請由 ArduBlock 網站下載。接線很簡單,請將電位計接到 A0腳位,LED 接到 D9腳位(PWM)。執行程式之後,轉動電位計就可以控制LED漸明漸暗。如下圖:

螢幕快照 2015-04-21 上午12.11.18

安裝環境請參考:Ardublock : Arduino中的圖形化環境

點選 ArduBlock 的 上傳(Upload)按鈕後,會先轉成 Arduino code 之後再準備上傳,您可以在此微調之後再上傳。

螢幕快照 2015-04-21 上午12.00.43

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

大家久等了, 本篇文章告訴您如何在 Android 手機端接收兩筆 Arduino 的資料,這次是以 A0, A1 兩隻腳位來處理。本範例感謝嘉義高工張老師提供。

如果您要換成其他元件,例如數位感測器的話,做法是一樣的。請先看一下這個元件的資料範圍是多少。對於本範例的架構來說,最後就是透過藍牙傳一個陣列出去,因此重點在於您是否可先在 Serial Monitor 中看到正確的資料範圍。不過一般來說都會有讀值得範例程式,所以不用太擔心啦!

您可以擴充這個架構到 N 筆,但是筆數愈多,掉資料的機會也愈高。請自行斟酌喔!

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

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

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

[雙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手機

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

English version

Arduino LED Blink

Arduino LED PWM

Arduino LED Blink (Arduino 101 with BLE)

Arduino LED PWM (Arduino 101 with BLE)


在撰寫程式前我們先準備以下材料:範例程式請點我下載(App Inventor中文學習網檔案庫)

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板

3.藍牙收發接收器 (本系列使用JY-MCU04 or JY-MCU05)

4. 電位計

5. 光敏電阻

6. 1k~10k 歐姆電阻,用於光敏電阻

請按照電路圖將電路接上,接了一個電位器(A0)與光敏電阻(A1)。當然啦,您也可以兩個腳位都用相同的元件,方便就好。為了不讓大家眼花,藍牙發射器另外獨立出來表示 (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位):

未命名
A0:電位計。A1:光敏電阻
螢幕快照-2014-10-30-上午12.41.36
TX: Arduino D11, RX: Arduino D10

 


App Inventor 端程式:

由於連線斷線的做法都是差不多的,在此把連線相關指令整理如下圖。請注意Clock timer 一開始是關閉的,我們會在連線成功之後才會將其啟動來發送藍牙指令,否則會一直跳出錯誤訊息(因為還沒連線啊!)
在 Clock.timer 事件中,首先發送一個數字49給Arduino,代表”我要發資料囉!” Arduino 則是先用 BluetoothClient.ReceiveText 指令,如果讀到’a’,就接續讀取後面兩筆資料,這就是 A0 腳位的數值。請注意在此之所以要判斷 text 變數之否小於0再加上 256,是由於Arduino 的 8 bit 整數範圍是 -127 ~ 128 的緣故。
反之如果App 收到字元 ‘b‘ 就是 A1 腳位。作法同上。
接著在Clock.timer 事件最後將這兩筆數值(value_A0value_A1) 顯示於 Textbox,並且用這兩筆數值來控制 Canvas 上面的小飛機移動,快點來玩雷電遊戲吧!
螢幕快照 2015-04-05 上午1.11.29
因為資料傳輸過程中難免會遺漏,因此我們都是先抓到火車頭(就是’a’ 與 ‘b’),確定這是一筆新的資料開頭之後,再去讀取數值,否則可能會發生數值亂跳的情形。另一方面,App Inventor 在藍牙傳輸的延遲狀況較明顯,請注意喔

Arduino 端程式如下,我們把 A0 腳位的資料用 ‘a‘ 作為標頭,由於資料長度大於 1 byte ( 2的8次方),因此需要用到 2 bytes 才能把 A0 的數值範圍 (0~1023) 涵蓋進去,因此 Data[1]~Data[2] 就代表A0 腳位的資料,Data[4]~Data[5] 就是A1 腳位的資料:(Data [0] = ‘a’, Data[3] = ‘b’ 這兩個火車頭別忘記囉~)
#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial I2CBT(10,11); // TX:10, RX:11
byte serialA;

void setup(){ 
  Serial.begin(9600);
  I2CBT.begin(9600);
}
 
void loop (){
    byte Data[6];
    byte cmmd[20];
    int insize;
    int x=analogRead(A0);//read sensor value
    int y=analogRead(A1);//read sensor value
    serialA=I2CBT.read();
    Data[0]='a';
    Data[1]=x/256;
    Data[2]=x%256;
    Data[3]='b';
    Data[4]=y/256;
    Data[5]=y%256;
     Serial.print(x);
     Serial.print(" , ");
     Serial.println(y);
 
     if (serialA == 49){
         for(int j=0;j<5;j++)
         I2CBT.write(Data[j]);
         serialA=0;
      }
  delay(100);
}

150321 自己的Arduino自己做

3/21 星期六是自製 Arduino 的工作坊,來賓會自行焊接必要的元件到雷射切割的木板(可以客製化簽名!) 來做出一片 XXduino。這片 DIY 板子麻雀雖小,可是五臟俱全,不但有 PWM  腳位,也可以接藍牙來遙控喔!

詳細製作說明請按我,您也可以在家自己做

10313058_564941250275462_3981001481030917287_n

來看看影片吧

藍牙也沒問題!

七段顯示器

控制伺服馬達

 

150316 臺大黑客松 IoT 課程 with LinkIt ONE #1

3/16 是2015 台大黑客松的第一天,與30位台大各系所的學生與外校的同學一起進行為期十周的 IoT 物聯網課程. 本期課程的開發板使用 LinkIt ONE, 感謝 MediaTek Labs 熱情支持

第一天的內容就是測通電腦與 LinkIt ONE, 只要 LED 可以亮滅就ok囉. (最簡單的日子也就只有今天啦~)

之後每周的課程內容都會與大家分享, 也請大家多多關注相關消息. 3/29 CAVEDU Day 當天也會有 LinkIt ONE demo, 總之就是歡迎參加啦!

20150316_193427 2015-03-16 19.07.11 2015-03-16 19.17.59 2015-03-16 19.06.40 2015-03-16 20.09.25

 

[123D Circuit] 丟骰子遊戲 – 海大機械作業

上週阿吉老師在海洋大學 Arduino 微處理機課程的作業,用丟骰子遊戲來教隨機數與 if / else 判斷式。按下Arduino 的按鈕之後,會根據莊家與玩家各自的三顆骰子點數合來亮起兩顆 LED 其中之一。本範例感謝海洋大學機械系劉哲甫同學分享。

[iframe width=”725″ height=”448″ src=”http://123d.circuits.io/circuits/652275-hw_0317_throwthedice/embed#breadboard” frameborder=”0″ marginwidth=”0″ marginheight=”0″ scrolling=”no”]

程式碼:

int player1 = 4;
int player2 = 5;
int bsensor = 0;
int bswitch = 7;
int randomMax = 6;
int randommin = 1;
int Point = 0;
int a=0;
int b=0;

void setup() {
  Serial.begin(9600);
  Serial.println("Ready......");
  pinMode(player1, OUTPUT);
  pinMode(player2, OUTPUT);
  pinMode(bswitch, INPUT);
  delay(500);
}

void loop() {
  digitalWrite(player1,HIGH);
  delay(100);
  digitalWrite(player2,HIGH);
  delay(100);
  Serial.println("Player1 throw the dice");
  bsensor=digitalRead(bswitch);
  while(!bsensor){bsensor=digitalRead(bswitch);}
  for(int i=1;i<=3;i++){
    Point=random(randommin,randomMax);
    Serial.print("Dice");
    Serial.print(i);
    Serial.print("=");
    Serial.println(Point);
    a=a+Point;
    delay(100);
  }
  delay(500);
  Serial.println("Player2 throw the dice");
  bsensor=digitalRead(bswitch);
  while(!bsensor){bsensor=digitalRead(bswitch);}
  for(int i=1;i<=3;i++){
    Point=random(randommin,randomMax);
    Serial.print("Dice");
    Serial.print(i);
    Serial.print("=");
    Serial.println(Point);
    b=b+Point;
    delay(100);
  }
  Serial.println("Counting......");
  delay(1000);
  Serial.print("Player1 point=");
  Serial.println(a);
  Serial.print("Player2 point=");
  Serial.println(b);
  Serial.println("Push button to restart......");
  if(a<b){
    digitalWrite(player2,LOW);
    delay(100);
  }
  else{
    digitalWrite(player1,LOW);
    delay(100);
  }
  bsensor=digitalRead(bswitch);
  while(!bsensor){bsensor=digitalRead(bswitch);}
  a=0;
  b=0;
  digitalWrite(player1,HIGH);
  delay(100);
  digitalWrite(player2,HIGH);
  delay(500);           
}

[3/29_C-Day有什麼?]系列之四:台北市校際盃機器人選拔賽(三)- 使用Arduino uno與NXShield

本篇內容是由  CAVEDU 的實習生-袁佑緣提供的使用心得

這次採用Arduino UNO搭配mindsensors公司所生產的NXShied來控制我們的機器人(本次使用的是NXShield-D),Arduino相比Raspberry Pi功能雖然比較簡單,但是卻相對容易操作而且穩定,而NXShield則是讓我們可以透過這塊板子來控制LEGO的電子零件,以下是以「機器人駕訓班」中的一個任務:將指定物件(例如:乒乓球)推開或取得,取得有額外加分。

首先我們先來看看機器人的核心:左邊是Arduino UNO控制板,右邊則是NXShield,NXShield主要可以接四個馬達與四個感應器,其他的特殊的針腳則可以用來接servo或I2C用

08注意到NXShield對感應器的支援上僅有NXT,如果想要支援EV3的話,則需另外購買轉接線,而馬達的部分則是NXT與EV3皆可使用,而mindsensors公司不愧是專門出產LEGO機器人相關的配備,對於支援的函式庫與感應器種類相當多,對於新手算是相當友善的選擇。

緊接著是機器人手部的設計,這次改用EV3的大馬達來取代先前的EV3中馬達,大馬達的扭力大概是中馬達的2~3倍,所以這次就直接裝在馬達上,而不用再另外裝齒輪組來加大扭力。

09

 

而電源供應的部分,筆者實際測試過的情況是必須要將兩塊板子各自都接上電源才行正常運作,只有接其中一塊板子的話,有可能會發生”插著USB線的時候可以正常運作,可是拔掉USB線(也就是只有吃電池的電源時)會發生運作不正常的現象,常常跑幾個步驟後就arduino就突然重新啟動了”。因為LEGO馬達的運作電壓是9V,所以筆者的作法是為兩個板子各自接上9V的電源,跑起來就是相當的有力啊

11_2 11

 

再來就是軟體的部分啦,開發環境的設定相當容易,先下載官方提供的函式庫(附上連結http://sourceforge.net/projects/nxshield/files/ ),然後打開電腦中的Arduino IDE->點選上方的草稿碼->點選匯入程式庫->匯入程式庫,然後選擇你剛剛下載的檔案就行大功告成了!

那麼我們就來看看實際跑起來的樣子,以下是簡單的範例程式:

#include <Wire.h>
#include <NXShield.h>

NXShield nxshield;
//引入必要函式庫與新增NXShield變數
void setup() {
 
  delay(500);
  nxshield.init(SH_HardwareI2C);//初始化I2C
  nxshield.bank_a.motorReset();//初始化馬達
  nxshield.bank_a.motorReset();
  nxshield.waitForButtonPress(BTN_LEFT);//等待按下左鍵才開始(NXShield板子上有四個按鍵分別是RIGHT,LEFT,RESET,GO)
 
}

void loop() {
  
  delay(5000);
  nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 20);//Bank B 的Motor-1以馬力20正轉,機器人將手臂往下壓
  delay(2000);
  nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 20);//Bank A 的Motor-1,Motor-2以馬力20反轉,向前進
  delay(2000); 
  nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 30);//Bank A 的Motor-1,Motor-2以馬力20反轉,碰到蓋子後向後退
  delay(500); 
  nxshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_BrakeHold);//Bank A 的Motor-1,Motor-2停止鎖死
  nxshield.bank_b.motorRunDegrees(SH_Motor_1, 
                     SH_Direction_Reverse, 
                     60,
                     70, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);//Bank B 的Motor-1以馬力60反轉70度,機器人手臂向上抬一個角度
                     
   nxshield.bank_a.motorRunDegrees(SH_Motor_Both, 
                     SH_Direction_Reverse, 
                     30,
                     230, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);
                     //Bank A 的Motor-1,Motor-2以馬力30反轉230度,機器人向前進一小段距離,只要改變這段距離就可以解決正方形或者是三角形的題型
                     
   nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 100);//Bank B 的Motor-1以馬力100正轉,機器人將手臂全力往下壓
   for(int i = 0; i < 5; i++)
   {
     nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 30);
     delay(130);
     nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 30);
     delay(100);
   }//前後來回壓球,使得進球率變高
   nxshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_BrakeHold);//Bank A 的Motor-1,Motor-2停止鎖死
   
   nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Reverse, 100);//Bank B 的Motor-1以馬力100轉,機器人將手臂全力往下上舉,把球收今去
   delay(300);
   nxshield.bank_b.motorStop(SH_Motor_1, SH_Next_Action_BrakeHold);//Bank B 的Motor-1停止鎖死

   nxshield.bank_a.motorRunDegrees(SH_Motor_Both, 
                     SH_Direction_Forward, 
                     30,
                     210, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);//機器人退回原位
   while(true){;}//無限迴圈當作程式的終點,方便觀察
   
}

 

實際運作的情形:

一、收取正方形區塊的物件

注意到影片中的機器人雖然一開始放得很歪,但是卻可以靠前面的導角來修正回來,是個可以參考的設計喔!

12

 

二、收取三角形區塊的物件

同樣的程式架構,也使用同樣的網子,只是改變了舉起手後機器人前進的角度,也是可以輕鬆入袋!

 

三、那如果網子裡面有上次的取得物件呢?

也是可以滿載而歸喔!

 

四、當然最安全的還是分開一次一次的收好啦

以上,希望透過這次一系列簡單的範例測試來吸引更多人一起來使用各種控制器來比這種開放是硬體的比賽,也預祝即將參賽的各位選手們比賽順利!

零件提供來源在這裡

[123D Circuit] 一元二次方程式公式解

這是本周海洋大學與元智大學的課堂作業,示範各種算術運算子以及副程式傳值練習。ax^2 + bx +c = 0 的一元二次方程式公式解是 (QQ, 為什麼還要算這種東西…):

用程式語法來表示就是這樣:

(-b + sqrt(pow(b,2)-4*a*c))/(2*a)  (-b  sqrt(pow(b,2)-4*a*c))/(2*a)

未命名

code 如下,直接上傳到 Arduino 就可以在 Serial Monitor 看到結果,或是用 123D Circuit 來線上模擬也可以喔。 x^2 -2x + 1 的兩個根都是 1 ,您算對了嗎?

void setup() {
  Serial.begin(9600);  
}

void loop() {
  formula(1,-6,8);
  delay(2000);
}

void formula(int a, int b, int c){
   float result1 = (-b + sqrt(pow(b,2)-4*a*c))/(2*a);
   Serial.print(result1);
   Serial.print(", ");
   float result2 = (-b - sqrt(pow(b,2)-4*a*c))/(2*a);
   Serial.println(result2);    
}

 

MindSensors 推出的 Grove Sensor Adapter,可用於樂高 EV3 與 NXT 機器人主機

Grove 感測器系列是 Seeed Studio 推出的感測器套件包,搭配自家的擴充板,讓複雜的接線變得簡潔許多。現在 MindSensors 推出了 Grove Sensors 轉接頭,可將各種Grove 感測器轉接到樂高 EV3 與 NXT 主機上使用。

 

GSAwithsensorsw1024

 

當然,也提供了 EV3 的指令,請在本頁面下載後匯入 EV3 環境即可使用。但由下圖可知,提供的是底層的讀寫指令,並未針對特定的感測器提供專屬的讀寫指令。分別有 I2C Read, I2C Write, Analog 與 Digital 等四大類指令。

螢幕快照 2015-02-28 下午11.53.39 螢幕快照 2015-02-28 下午11.53.50