顯示具有 arduino Notes 標籤的文章。 顯示所有文章
顯示具有 arduino Notes 標籤的文章。 顯示所有文章

2014-07-18

EV3與Arduino之間的I2C通訊(測試Dexter的EV3_I2C Block) - (I) 功能摘要

五月底,由The NXT得知:DI在他們官網部落格中分享了以自行開發的EV3程式區塊(EV3_I2C)能夠透過I2C連接Arduino的方式,除了有How-To教學之外,也提供EV3 block與Arduino sample code的下載。
這確實是一個好消息,因為EV3除了官方軟體外,不像NXT還有功能彈性高而且簡單容易上手的NXC可以使用,雖然陸續有其他開發工具發展中,終究有些技術門檻,所以目前EV3若要連接外部裝置,唯有依賴第三方開發的程式區塊,而終於Dexter造福Arduino users,提供了可以Import的EV3_I2C block。

下載與匯入

可以到這個網頁的右側找到Download ZIP這個按鍵下載壓縮檔,解壓縮之後再使用EV3軟體匯入Dexter.ev3b這個檔案,就可以在Sensor Blocks裏找到Dexter所有提供的感應器區塊包含EV3_I2C Block。

2012-09-18

MaKey Makey(Make Anything Into A Key)

MaKey MaKey是今年在KickStarter中非常有話題性的專案,連台灣的媒體都曾報導過,而最後也以超過22倍的高人氣成功達成募款目標。
MaKey指的就是〝Make Anything Into A Key〞,原理是利用任何稍具導電性的物質,透過MaKey MaKey就可以取代鍵盤與滑鼠作為電腦的輸入裝置。
由示範影片,比較能夠清楚它的創意在於豐富了人與電腦之間的互動體驗,不再侷限於原來的鍵盤、滑鼠或搖桿,而融入生活周遭中大部分信手可得的素材,無論大人、小孩或藝術表演者,都可藉以創造出本身獨特的操作方式,確實是非常的有趣與好玩。
(Video-From MaKey MaKey.com)


2012-09-02

Arduino WiFi Shield 簡單測試及功能初灠

Arduino官方版的WiFi擴充板自八月中在Arduino Store上市後,
直到下旬(8/23)終於Sparkfun也開始販售,價格為$84.95,比定價便宜了將近$19。雖然還是有人質疑價格太貴,據Sparkfun的回覆,這個板子的零件成本並不便宜。
不過Sparkfun上架的25組,大約兩天就全部賣光了,下次就還得再等4~6週之後。
而在上週收到之後,利用周末進行了一些簡單的功能測試,結果算是符合預期。
(圖1:Arduino WiFi Shield)

2012-08-15

Arduino official WiFi shield發佈產品說明與程式庫(8/16已公佈價格)

《2012.8.16補充》
ArduinoStore的價格出來了,

這是所知所有Arduino Wifi shield中最貴的一個
※※※※※※※※※※※※※※※※※※※※※
Arduino官方版本的WiFi Shield終於出現在Arduino.cc的Official Arduino Shields的清單中,同步也提供了:Gettingstarted with the WiFi Shield以及專屬程式庫WiFi Library的說明與<WiFi.h>下載,看來上市日期已經指日可待。

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開發環境,也不需要XCode或Visual Studio,簡單又容易。
(All Devices)




2012-03-07

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

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

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

依據書中的說明,WiFi.h同樣定義有Server、Client等class,而在Arduino 1.0新增的DHCP、DNS、UDP等功能也都可以使用。
在網路初始化程序,在Ethernet.h,至少須提供MAC address作為網路設定:
Ethernet.begin(mac);其餘的IP、Gateway、subnet等可以由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-02-13

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

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

2011-12-17

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

Arduino 1.0在2011/11/30正式釋出:Arduino 1.0下載。
新版的Arduino 1.0 sketch附加檔名已由原來的.pde更改為.ino,以避免與Processing的Sketch混淆。同時無論在IDE或Libraries都有相當程度的更新: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的裝置,如Hitechnic、Dexter的產品,特別是I2C裝置,也可以透過以下兩種方式來建立使用的功能:
(1)  在Arduino sketch中使用NXShieldI2C class的通用I2C access methods,對於該裝置的registers進行存取或寫入指令,以實現所需要的控制功能。
(2)  製作該裝置的Device class加入NXShield _AVR程式庫中,後續就可以比照預設Device class的用法,在Arduino sketch中使用相關methods或properties。
以下以Hitechnic的IRReceiver sensor為範例,整理以上兩種運用方式。


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

2011-12-03

NXShield arduino API 摘要整理

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

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

2011-11-12

Mindsensors NXShield for Arduino裝置介面摘要

在2011.11.11收到了NXShield,有了實際的產品,就可以先就硬體的外觀與介面進行觀察,後續再對於控制功能進行測試。
外觀與介面
NXT RJ12 Ports

由NXShield正面的配置方式,左右各有一組四個Ports的NXT RJ12接口,右邊為BANK-A(I2C
address
:0x06),左邊為BANK-B(I2C address:0x08)。
 
Arduino pins中間左右的兩排接腳,即是用來連結Arduino UNO作為擴充板,但是因為NXShield在背面沒有配置堆疊用的接腳,所以,若需要堆疊其它Shield時,NXShield會是在最上層。




2011-11-06

Mindsensors Arduino NXShield功能初探

Mindsensors的NXShield在這個月初上市,
這是一個可以提供Arduino UNO連接NXT週邊的硬體實作裝置,規格上就是具備NXT RJ12 IO 界面的Arduino擴充板,雖然還沒有實際的產品可以測試,不過由已經公佈的使用手冊、API程式庫以及範例程式,先就它的功能與特性做初步的探討,同時也預先規劃一下收到產品時需要測試的重點。

NXShield硬體外觀
由使用手冊來看,NXShield規劃了兩組各4個RJ12的Ports,這兩組各有其I2C位址:Bank-A: 0x06與Bank-B: 0x08,而每一組分別具有兩個Motor Ports與兩個Sensor Ports,也就是說一個NXShield最多可以接4個NXT馬達以及4個感應器。

對於Sensor Port,無論類比或數位感應器都可以使用,也可以透過Mindsensors的Port Splitter連接更多的I2C數位感應器(I2C位址需不一樣)。同時,若再串接另一個NXShield,就可以多增加幾乎一倍的Ports可以使用,不過需要變更NXShield Bank的預設I2C位址,以維持惟一性。

至於Motor Port,參考NXShield Advanced Development Guide的說明,會發現其實它的功能就是移植自NXTMMX,無論Register Layout或I2C Command都是一模一樣,用法可以參考之前所整理的文章:〝 Mindsensors NXTMMX的功能特性〞。


此外,NXShield側邊還有4個按鍵開關,分別為Reset/Go/Left/Right,依據User Guide說明,後三個鍵是可以程式化控制的,不過似乎目前只有Mega版有列出對應的Digital IO pins,UNO版還是TBD,有待確認。
而在產品頁面有提到可以連接6個RC Servo,同樣在說明文件中也沒有,所以應該就是直接使用Servo.h的功能。

NXShield所使用的Arduino腳位(IO Pins)
為了讓4個Sensor Ports都可以連接I2C數位裝置,Mindsensors在NXShield的程式庫實作了SoftI2cMaster的功能,以突破Arduino只能有一個Hardware I2C界面的限制,因此UNO版共使用了A0,A1,A2,A4,A5,D2,D4,D7這些Pin以及Hardware Timer 2 (D3,D11),詳細在NXShield Advanced Development Guide中有說明或直接參考API中的常數定義檔(SHDefines.h)。


NXShield的程式開發
Mindsensors替NXShield發展了功能相當齊全的程式庫:NXShield_AVR,以及整理完善的說明文件與範例程式,這些也都包含在下載的程式庫檔案中,事實上這個版本的API也就是以原來的NXTI2CDevice Library為基礎所發展出來,以下為Class的架構圖:


以後如果想要自行擴充標準API的功能或製作新的Device Class,都可以運用以這個程式庫的功能為基礎來開發,比較能事半功倍,因為到底NXShield還算是一個有相當複雜程度的裝置。


結論摘要
Arduino的系統資源比起NXT可以說是差了一大截,不過NXShield卻幾乎移植了NXT主要的 IO裝置功能到Arduino來,而且尚有餘裕的空間可以再擴充NXT所缺的功能,例如TCP/IP的網路通訊。
我想最主要的原因有兩個,首先,
NXShield本身無論在Motor Control或類比式感應器等這些處理功能的齊全,分擔了Arduino相當多的工作,事實上,一個NXShield相當於結合兩個NXTMMX再加上許多額外的功能。

其次,API程式庫的功能規劃的相當完善且很容易上手使用,這是個人覺得最值得讚賞的部份。

等到收到產品之後,接下來要測試的重點會是:
(1)
有沒有可能成為NXT的有力助手。
(2)
附加其他擴充版的應用。




  • 留言者: robotman
  • Email: tslinb@hotmail.com
  • 網址:
  • 日期: 2011-11-14 10:30:22
看到這篇文章..理論上看起來應該可以串接!!





  • 留言者: Yean
  • Email: drlego.tw@yahoo.com.tw
  • 網址:
  • 日期: 2011-11-08 00:17:44
可以借分享嗎,我們訂購的NXshield也快要到貨了,若您有意的話,到貨後我們送上一片給您測試。
[版主回覆11/08/2011 07:49:44]

沒有問題, 也歡迎一起研究與分享心得
我自己也訂了兩片, 所以已經有了, 感謝您的好意 : )


2011-09-18

Arduino announce new products at Maker Faire in NYC.


消息來源:arduino.cc blog

Arduino 1.0,
we finally froze the Arduino API, the IDE and the layout of the boards. We’ve made some minor additions to the Arduino connectors to make them more flexible. Tomorrow you will be able to download the release candidate and in 1 month of frantic testing with the community, the platform will be ready and stable.


Arduino Leonardo,
a low cost Arduino board with the Atmega32u4. It has the same shape and connectors as the UNO but it has a simpler circuit. On the software side it has a nifty USB driver able to simulate a mouse , a keyboard, a serial port (with more drivers coming later). As usual for Arduino, everything will be released as open source (Core, Bootloader, Hardware).
UNO的升級版?


Arduino Due,
a major breakthrough for Arduino because we’re launching an Arduino board with a 32bit Cortex-M3 ARM processor on it. We’re using the SAM3U processor from ATMEL running at 96MHz with 256Kb of Flash, 50Kb of Sram, 5 SPI buses, 2 I2C interfaces, 5 UARTS, 16 Analog Inputs at 12Bit resolution and much more.


Instead of just releasing the finished platform we are opening the process to the community early on. We’re going to be demoing the board and giving away some boards to a selected group of developers who will be invited to shape the platform while it’s been created. After Maker Faire, we will begin selling a small batch of Developer Edition boards on the Arduino store (store.arduino,cc) for members of the community who want to be join the development effort. We plan a final and tested release by the end of 2011


Arduino Wifi Shield. It adds Wi-Fi communication capabilities to any Arduino. Instead of using any of the classic WiFi modules on the market we wanted to have something that will provide the maximum level of hackability to the user. The shield is based on a wifi micro module made by H&D Wireless coupled with a powerful AVR32 processor that carries the full TCP-IP stack leaving room to add your own protocols and customisations. We’ve also worked hard to make sure that you will be able to migrate your code from the Ethernet Shield with minor changes.
最期待的是這個Shield,終於有機會能夠讓 NXT 使用無線網路 :-)




2011-09-06

Arduino I2C Wire.h Multi-Masters功能實作(I2C Slave Device)



Gravitech的Arduino
7SEG Shield
為具有三個I2C裝置的Arduino擴充板,包含:


(1) 以SAA1064晶片驅動的4位數7段LED (I2C address: 0x38)、

(2) TMP75數位溫度感應器 (I2C address:0x49)、

(3) 24LC128 EEPROM (I2C address:0x50)。


關於各I2C裝置的用法,可參考原廠Datasheet,同時也可以參照Gravitech所提供的Sample
Code
,示範由TMP75讀取溫度值然後顯示在LED的作法。




Arduino多功能I2C裝置實作




在前篇” NXT與Arduino多重I2C Master之實作測試”對於Arduino Wire.h Library I2C Multi-Master功能的實作,這裡再以相同的應用方式改以Arduino UNO加上這個Shield組合而成為一個”多功能I2C裝置”作為實作範例,

並規劃
UNO兼具以下之I2C Slave與Master雙角色功能:




※由UNO擔任Slave角色,負責接收與回應來自其他外部裝置對於”多功能I2C裝置”的I2C操作需求。

※當UNO處理外部I2C訊息時,若需要控制擴充板裝置(SAA1064、TMP75)的運作, 則UNO轉換成為Master角色,傳送I2C指令操作指定裝置。



因此就”多功能I2C裝置”而言,UNO就如同擔任代理人(Delegate) 角色,負責處理外部使用需求的介面。

依據這樣的應用,規劃”多功能I2C裝置”的功能如下:

 

(1)
於UNO Sketch setup()先進行TMP75及SAA1064的初始化設定(Master角色),

完成之後以0x31
address
加入I2C bus, 在loop()即進入接收外部I2C通訊的待命狀態(Slave角色)。




(2)
於receiveEvent ()處理外部裝置使用LED顯示數字(Register
address: 0x42
)
與 字串(Register
address: 0x43
)
的功能,包含:數字、字母的LED字型轉換,以及字串以跑馬燈方式顯示。




(3)
於requestEvent()處理回復裝置資訊的需求(Register
address: 0x00
)
。




(4)
對於TMP75數位溫度計考慮讀取效率,由外部裝置直接以Slave address(0x49)進行讀取(回復2個Bytes),不間接透過UNO處理。




Arduino I2C
Slave Device
處理Master request須知




以Arduino UNO作為Slave device,對於處理與回應外部I2C request的Sketch程式碼,需要留意以下注意事項:



(1)
在loop()中,應該專職於Slave的角色,除非是要處理來自Master的要求,不要主動去啟始對其他Slave Device的I2C通訊,否則會造成外部裝置(Master)無法通訊的狀況。



(2)
在receiveEvent ()中,只進行資料的接收,後續的需求處理,應該在接收完成後回到loop()再進行,以免干擾整體的通訊過程。



(3)
在requestEvent()中,只處理資料的回復,必須維持以Slave角色完成通訊過程的完整性,如果要求回復的資料需要去向另一個Slave Device request,就必須拆分成兩次通訊過程來完成。




以NANO作為外部裝置測試







(1)
要求UNO Slave (0x31)
回傳它的裝置資訊 (Register address: 0x00) ,會觸發requestEvent() 回傳”UNO-Ox31”的字串。




(2)
要求TMP75 (0x49)
回傳所測量的溫度值。




(3)
要求UNO Slave (0x31)
在LED顯示數值資料(Register
address: 0x42
)
,會觸發receiveEvent() 接收顯示指令及數值,先判斷設定status flag (isDisplayNumber=true) 之後,回到loop () 即依據status flag啟始對SAA1064的數字顯示要求。




(4)
要求UNO Slave (0x31)
在LED以跑馬燈方式顯示字串(Register
address: 0x43
)
,會觸發receiveEvent () 接收顯示指令及字串,先判斷設定status flag (isDisplayText=true) 之後,回到loop () 即啟始對SAA1064的字串顯示要求。




Sketch程式:

(1)  Arduino I2C Slave Device -
Arduino_I2C_Device.pde

(2)  NANO
外部裝置 - NANO_CTRL_4SEG7.pde