2012-05-21

使用Mindsensors NXT觸控面板(Touch Panel)製作筆勢控制機器人

Mindsensors NXTTouch Panel會記錄觸控筆在面板上移動過程的連續座標資料,使用NXT讀取之後,藉由分析筆勢(Gesture)軌跡,可以辨識出觸控筆的移動方式,如:由上往下、由左往右或從左下往右上滑動等動作,接下來將這些所解析出來的各式動作轉換成為指令,這樣就可以運用NXT Touch Panel來作為以筆勢控制機器人的輸入裝置。
根據這個構想,本次實作會以兩部NXT透過藍芽來進行遙控。
(Fig-1)
在上圖中接上Touch Panel的為遙控端NXT,會將偵測到觸控筆在面板上的動作,製作成資料字串經由藍芽傳送給被控端的NXT機器人,而被控端NXT在接收到資料之後,會進行解析並轉換為馬達控制指令來執行。
運作的程序參考下圖
(Fig_2)
(video-1)
(video-2)

2012-04-22

Mindsensors NXT觸控面板(Touch Panel)簡單測試

MindsensorsTouch PanelNumeric Pad同樣都是作為NXT的輸入裝置,但功能與特性還是有相當的差異。
對於Touch Panel,應用的定位是成為NXT螢幕的觸控介面,所以,建議的用法即是套疊在NXT螢幕的上方,同時也附了一枝觸控筆。
(Fig-1)

Touch Panel的面板介面分成兩個區域,分別是:兩側各四個共八個的按鍵區,以及中間對應NXT螢幕座標的觸控區,由提供下載的面板範本,就可以瞭解這兩種介面的配置方式。
(Fig-2)

2012-04-04

以瀏覽器控制HiTechnic自主平衡機器人HTWay

HTWay除了最初以IRReceiver接收PF IR遙控方式之外,在HiTechnic Blog中,相繼也介紹了Android APP以及NXT等兩種控制版本,事實上這兩者都同樣是以藍芽無線方式控制,只是採用不同的使用者介面(UI)
這裡將再運用前一篇“以瀏覽器控制Mindstorms NXT”的方式,以瀏覽器為操作介面,經由Arduino Web Server透過XBee無線方式傳送指令來對HTWay進行控制。
也因此會以NXTBee取代原來的IRReceiver作為接收遙控指令。
(Controlling HTWay via Browser)

(Video )

2012-03-21

以瀏覽器控制Mindstorms NXT

若要以瀏覽器來控制NXT,會需要透過Web Server處理來自Client端的HTTP Request,主要是解析HTTP Header中對NXT的控制資訊。 而能使用瀏覽器的最大優點在於不限裝置,只要能支援TCP/IP,則無論是電腦蘋果(iOS)還是芒果(Windows Mobile7.5),都能用來控制NXT,而且只需要Arduino開發環境,也不需要XCodeVisual Studio,簡單又容易。
(All Devices)




2012-03-07

還未上市的新版Arduino WiFi Shield初灠

Arduino2011.9Maker Fair中,曾發佈了即將要推出的Arduino WiFi Shield,不過,直到現在都還沒有任何上市的訊息。
最近由Making Things Talk (2nd Edition)這本書Chapter 6. Wireless Communication的章節中,發現了以這個Shield作為WiFi通訊功能的說明,內容附有照片與程式庫運用範例,應該是由Arduino原廠所提供的測試板,剛好可以初灠一下這個即將上市的官版無線網路介面擴充板的功能。

根據書中的內容, WiFi ShieldEthernet Shield有相同的Network Stack,程式庫也一樣具備了Server
ClientClass定義。因此,就如同當初在Maker Fair中對Arduino WiFi Shield描述的一樣,對於原來在Ethernet環境所開發的程式碼,只需稍微修改一下,就可以移轉至WiFi無線網路環境中運作。
WiFi shield連接Arduino也與Ethernet Shield一樣使用SPI介面,並提供有:WEP(含:40-bit128-bit兩種)WPAWPA2等加密方式。
以上這些都是由書中所提到的,並非Arduino正式釋出的最終規格。
API功能
書中的程式範例,說明了部份的API功能在程式庫方面,Arduino sketch與使用Ethernet
Shield
時一樣,也需要Include SPI.h>,同時新增了一個WiFi Shield使用的程式庫<WiFi.h>。

依據書中的說明,WiFi.h同樣定義有ServerClientclass,而在Arduino 1.0新增的DHCPDNSUDP等功能也都可以使用。
在網路初始化程序,在Ethernet.h,至少須提供MAC address作為網路設定:
Ethernet.begin(mac);其餘的IPGatewaysubnet等可以由dhcp取得。
至於WiFi.h則至少須提供SSID以及加密資訊作為初始化設定:
WiFi.begin(ssid, key);
而同樣也可以由dhcp來取得IP
無線網路診斷
在使用電腦或手持裝置的無線網路介面時,都會有提供查詢網路狀態的功能,而WiFi.h也具有診斷網路狀態的工具,以下是書中的範例程式。
l   掃瞄並列示鄰近無線網路的SSIDbyte numSSID = WiFi.scanNetwork(); // Scan nearby networks
for (int cnt=0; cnt<numSSID; cnt++) {
   Serial.print(cnt);
   Serial.print(“. Network: “);
   Serial.println(WiFi.SSID(cnt)); // Print network name
}

l   顯示信號強度
long rssi = WiFi.RSSI();
Serial.print(“RSSI: “);
Serial.println(rssi);

2012-03-04

使用Mindsensors的Magic Wand來呈現LED特效

MindsensorsMagic Wand是依據Extreme NXT這本書中的I2C專題所製作的套件,原設計是藉由連接在一個搖擺機構以及控制8LED的輸出作出能夠顯示圖案的視覺暫留”(POV)效果。
兩年多以前,曾經由Mr. Deepak提供了一組作測試
(
加油)

(Lego)
 
控制方式
控制Magic Wand 8LED開與關的方式是透過I2C寫入8 bits(1Byte)的資料到裝置位址 (0x70) 中。
每個bit(b0 ~ b7)分別對應一顆LED(D0 ~ D7),當bit值為0時會ON該顆LED1則為OFF。所以,若寫入byte值為0時,8LED全亮,而0xFF時則全部OFF
視覺化應用
按照前面的控制方式,就可以運用Magic Wand來作為NXT的視覺化輸出,例如,當使用超音波感應器偵測障礙物時,以顯示的LED數目來表示接近物體的程度,愈近LED亮的愈多,非常的直覺與有提醒效果。
LED特效
另外,還可以用來製作一些有趣的特效,以下影片共展示了三種效果:
霹靂車(Knight Rider)
煙火(Firework)
心跳(Heart Beats)
((Video))

2012-02-13

Arduino與Mindstorms NXT之間的XBee無線通訊(802.15.4)

對於ArduinoMindstorms NXT之間的有線通訊,之前共測試了RS485(連接NXTArduinoRS485通訊)以及I2C(Mindstorms NXTArduino之間的I2C通訊)兩種方式,接下來的則是要建構兩者之間的無線通訊。
NXT目前可以選擇的無線應用,除了內建的藍芽功能之外,透過周邊廠商所提供的裝置,也可以使用IRWi-FiXBee等。
其中XBee具有操作簡單、低耗電的優點,實務上也常被應用在無線感應器方面。
所以在本次測試中將會用來建立與Arduino之間的無線通訊,使用的模組是通稱為Series 1XBee 802.15.4,只需透過簡單的設定,雙方就可以進行非同步序列通訊。
(
Arduino wirelessComm with NXT-01)

2011-12-17

NXShield_AVR程式庫相容Arduino 1.0更新版(0.0.95)已釋出

Arduino 1.02011/11/30正式釋出:Arduino 1.0下載
新版的Arduino 1.0 sketch附加檔名已由原來的.pde更改為.ino,以避免與ProcessingSketch混淆。同時無論在IDELibraries都有相當程度的更新:Arduino Software Release Note
(Arduino IDE 0.0.22
0.1.00比較)


NXShield_AVR程式庫也在2011/12/14更新了相容版本(0.0.95)
下載點:NXShield_AVR-0.0.95經過測試功能正常。

2011-12-10

NXShield API的功能擴充-加入Hitechnic IRReceiver裝置

NXShield API中提供了多款NXT類比式與I2C數位感應器的Device Class,幾乎涵蓋了Mindsensors所有上市中的產品,而如果要運用其他沒有預先提供Device Class的裝置,如HitechnicDexter的產品,特別是I2C裝置,也可以透過以下兩種方式來建立使用的功能:
(1)  Arduino sketch中使用NXShieldI2C class的通用I2C access methods,對於該裝置的registers進行存取或寫入指令,以實現所需要的控制功能。
(2)  製作該裝置的Device class加入NXShield _AVR程式庫中,後續就可以比照預設Device class的用法,在Arduino sketch中使用相關methodsproperties
以下以HitechnicIRReceiver sensor為範例,整理以上兩種運用方式。


(
NXShield API架構參考:NXShield Arduino API摘要整理)

2011-12-03

NXShield arduino API 摘要整理

NXShieldAPI(下載點)是以它的硬體配置以及Firmware功能作為發展基礎,使用的是C++語言,整體架構具結構化與彈性,運用時非常直覺,同時也很容易增加新的Device Class或擴充功能,對於NXT users不會覺得陌生且很容易上手。
NXShield的硬體配置分成兩種介面
(1)
使用Arduino IO pins:含ButtonsRGB LED63-pinRC Servo接腳.
(2)
使用I2C界面:含兩個Port Banks(BANK-ABANK-B各有兩個NXT motor
ports
sensor ports) ,以及一對4-pinI2C接腳.
NXShield firmware內建對於兩個port banks的控制功能兩個Port banks各有預設的I2C位址(0x060x08)以及一組registers,作為控制Motor ports (M1M2)動作與讀取Sensor ports (S1S2)類比式感應器Raw Value(10 bits)I2C操作界面.Registers相關資料:Advance Development Guide.Motor ports的控制功能與NXTMMX一樣,參考資料:Mindsensors NXTMMX的功能特性.ArduinoI2C bus腳位只有一組A5A4 pin (SCLSDA)NXShield串接在I2C bus的界面有:BANK-ABAN-B4-pinI2C接腳以及BANK-AS1 port(BAS1).所以,BAS1 port是可以接NXT的數位感應器.

NXT也可以使用BAS1 port來控制
NXShield.
因為這4個介面串接在同一個I2C bus上,所以彼此的I2C address必須唯一
.而其他的三個sensor ports就只能接類比式感應器.