2016年10月24日月曜日

Arduino Web Server

Ethernet に接続してみましょう。有線による接続ならば Ethernet Sheld があります。Aruduino UNOの上に(子亀として)接続します。Arduino には照度センサーを接続し、ブラザーからの呼び出しがあると照度を測定してその結果を返します。ブラウザーには現在の照度が表示されます。

Arduino UNO は R2 を利用しています。

サンプルはメニューのファイル → スケッチの例 → Ethernet → WebServer とたどれまば見つかります。照度センサーTSL2561 はメーカーよりライブラリが提供されていますので利用します。
 Arduino IDE へのライブラリの追加は(メーカーのホームページ)より、左の Using the TSL2561 sensor をクリックし、Download Adafruit_TSL2561 V2 Library と Download Adafruit_Sensor Library
をクリックしてダウンロードします。ウンロードした *.zip ファイルをそれぞれ展開し、Arduino IDE を展開した下にlibraries がありますのでその配下にコピーしてください。
 MAC アドレスは Ethernet Sheld の裏にアドレスを書いた貼り紙がありますのでプログラムに登録してください。IP アドレスは環境に合わせて設定してください。DHCP クライアントの機能はありません。固定アドレスを設定してください。今回は自宅の環境に合わせて 192.168.100.77 としています。クライアント(ウエブブラウザー)は5秒ごとにリフレッシュする様になっています。サーバーは呼び出しがある都度、照度を測定するルーチンを呼び出し結果を送り返します。
 多数のクライアントから同時にアクセスするとオーバーフローとなります。今回はサーバーとしての応答の確認のためのスケッチです。

サーバーで計測した照度がウエブブラウザーで表示しているところ(Microsoft Edge)。

ソースコード
01: /*
02:   Web Server
03: 
04:  A simple web server that shows the value of the analog input pins.
05:  using an Arduino Wiznet Ethernet shield.
06: 
07:  Circuit:
08:  * Ethernet shield attached to pins 10, 11, 12, 13
09:  * Analog inputs attached to pins A0 through A5 (optional)
10: 
11:  created 18 Dec 2009
12:  by David A. Mellis
13:  modified 9 Apr 2012
14:  by Tom Igoe
15:  modified 02 Sept 2015
16:  by Arturo Guadalupi
17: 
18:  */
19: 
20: #include <SPI.h>
21: #include <Ethernet.h>
22: #include <Wire.h>
23: #include <Adafruit_Sensor.h>
24: #include <Adafruit_TSL2561_U.h>
25: 
26: // Enter a MAC address and IP address for your controller below.
27: // The IP address will be dependent on your local network:
28:  byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0xEB };   // 1.MAC Address
29: IPAddress ip(192, 168, 100, 77);                      // 2.IP  Address
30: 
31: // Initialize the Ethernet server library
32: // with the IP address and port you want to use
33: // (port 80 is default for HTTP):
34: EthernetServer server(80);                            // 3.Port 指定
35: 
36: Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
37: 
38: void GetLux( float &weblight ) ;
39: 
40: /**************************************************************************/
41: /*
42:     Displays some basic information on this sensor from the unified
43:     sensor API sensor_t type (see Adafruit_Sensor for more information)
44: */
45: /**************************************************************************/
46: void displaySensorDetails(void)
47: {
48:   sensor_t sensor;
49:   tsl.getSensor(&sensor);
50:   Serial.println("------------------------------------");
51:   Serial.print  ("Sensor:       "); Serial.println(sensor.name);
52:   Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
53:   Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
54:   Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" lux");
55:   Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" lux");
56:   Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" lux");  
57:   Serial.println("------------------------------------");
58:   Serial.println("");
59:   delay(500);
60: }
61: 
62: /**************************************************************************/
63: /*
64:     Configures the gain and integration time for the TSL2561
65: */
66: /**************************************************************************/
67: void configureSensor(void)
68: {
69:   /* You can also manually set the gain or enable auto-gain support */
70:   // tsl.setGain(TSL2561_GAIN_1X);      /* No gain ... use in bright light to avoid sensor saturation */
71:   // tsl.setGain(TSL2561_GAIN_16X);     /* 16x gain ... use in low light to boost sensitivity */
72:   tsl.enableAutoRange(true);            /* Auto-gain ... switches automatically between 1x and 16x */
73:   
74:   /* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */
75:   tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);      /* fast but low resolution */
76:   // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS);  /* medium resolution and speed   */
77:   // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS);  /* 16-bit data but slowest conversions */
78: 
79:   /* Update these values depending on what you've set above! */  
80:   Serial.println("------------------------------------");
81:   Serial.print  ("Gain:         "); Serial.println("Auto");
82:   Serial.print  ("Timing:       "); Serial.println("13 ms");
83:   Serial.println("------------------------------------");
84: }
85: 
86: void setup() {
87:   // Open serial communications and wait for port to open:
88:   Serial.begin(9600);
89:   while (!Serial) {
90:     ; // wait for serial port to connect. Needed for native USB port only
91:   }
92:   /* Initialise the sensor */
93:   if(!tsl.begin())
94:   {
95:     /* There was a problem detecting the TSL2561 ... check your connections */
96:     Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!");
97:     while(1);
98:   }
99:   
100:   /* Display some basic information on this sensor */
101:   displaySensorDetails();
102:   
103:   /* Setup the sensor gain and integration time */
104:   configureSensor();
105:   
106:   /* We're ready to go! */
107:   Serial.println("");
108: 
109:   // start the Ethernet connection and the server:
110:   Ethernet.begin(mac, ip);                            // 4.Ethernet 開始
111:   server.begin();                                     // 5.サーバー開始
112:   Serial.print("server is at ");
113:   Serial.println(Ethernet.localIP());
114: }
115: 
116: 
117: void loop() {
118:   float weblight ;
119: 
120:   // listen for incoming clients
121:   EthernetClient client = server.available();
122:   if (client) {
123:     Serial.println("new client");
124:     // an http request ends with a blank line
125:     boolean currentLineIsBlank = true;
126:     while (client.connected()) {                // 接続要求があったか?
127:       if (client.available()) {
128:         char c = client.read();
129:         Serial.write(c);
130:         // if you've gotten to the end of the line (received a newline
131:         // character) and the line is blank, the http request has ended,
132:         // so you can send a reply
133:         if (c == '\n' && currentLineIsBlank) {
134:           // send a standard http response header
135:           client.println("HTTP/1.1 200 OK");
136:           client.println("Content-Type: text/html");
137:           client.println("Connection: close");  // the connection will be closed after completion of the response
138:           client.println("Refresh: 5");  // refresh the page automatically every 5 sec
139:           client.println();
140:           client.println("<!DOCTYPE HTML>");
141:           client.println("<html>");
142:           client.println("<head>");
143:           client.println("<title>Lux</title>");
144:           client.println("</head>");
145:         
146:           GetLux( &weblight ) ;       // 照度測定を呼び出す。
147:           client.println("Light :");          
148:           client.println(weblight);          
149:           client.println(" lx");          
150: 
151:           client.println("<br />");
152:           
153:           client.println("</html>");
154:           break;
155:         }
156:         if (c == '\n') {
157:           // you're starting a new line
158:           currentLineIsBlank = true;
159:         } else if (c != '\r') {
160:           // you've gotten a character on the current line
161:           currentLineIsBlank = false;
162:         }
163:       }
164:     }
165:     // give the web browser time to receive the data
166:     delay(2);
167:     // close the connection:
168:     client.stop();
169:     Serial.println("client disconnected");
170:   }
171: }
172: 
173: void GetLux( float* weblight )
174: {
175:   sensors_event_t event;
176:   tsl.getEvent(&event);
177:  
178:   // Display the results (light is measured in lux)
179:   if (event.light)
180:   {
181:     Serial.print(event.light); Serial.println(" lux");
182:     *weblight = event.light ;
183:   }
184:   else
185:   {
186:     // If event.light = 0 lux the sensor is probably saturated
187:     //   and no reliable data could be generated!
188:     Serial.println("Sensor overload");
189:   }
190: }

2016年10月22日土曜日

Atmel Xplained

 Atmel  Xplained シリーズでは 主に ARM の Cortex-M0 から M3, M4 CPUを使用した評価キットが販売されています。ソフト開発では仕様作成、 CPU 選定、基板作成、開発環境の構築(コンパイラーの用意、デバッガーの手配)となりますが、評価キットを用意すれば、CPU 選定後に直ちにロジックの確認ができる。(いきなり、コーディングでは無いよ!)仕様検討は十分に行ってください。

 昔、トップダウンでソフトを作っていた時、下層のコーディングは後回しになっており下層のプログラムはスタブを使ってテストしていたのですが、
いざ、下層のコーディングをしてみると、アっと実現出ないことが判明し、慌てて上位を作り直したことがありました。それ以来、私はトップダウンでのコーデイングは辞めています。設計はトップダウンですよ!

昔話(失敗談)が出てしまい申し訳けない(老人のボヤキと聞き流してください。)

ARM での開発は Framework や CMSIS 等で確実に動くかもしれないが、その使い方に慣れないと余分な回り道をしてしまいます。これから、すべて特定の会社の ARM 系で固定となればよいのですが、CPU の価格次第では簡単に CPU が変更となってしまいます。特に生産台数が多い場合は覆すのは難しい。上層部がトータル(コンパイラー、デバッガー、それらの習熟時間等)で開発費を考えてくれればよいが、しわ寄せはいつも下っ端に来る。

まあ、ここで文句を言っても始まらないので、ソフト開発は習うより慣れとおもっています。
SAM L22 Xplained Pro ならコンパイラーは Atmel Studio で無料、デバッガー付き、JTAG-ICE は ON Board で評価キットに含まれている。

紹介するサンプルプログラムは

これはUSARTに文字列を出力しながら、スイッチの監視を行い、スイッチが押されればLEDを点灯する。
通信仕様は 8bit 1stop No Parity 38400bps No Flow

シリアル通信を受信するプログラム(TeraTerm)を起動すると以下の様に表示されます。

-- Getting Started Example --
-- SAML22_XPLAINED_PRO --
-- Compiled: Oct 21 2016 22:50:43 --
-- Pressing and release button SW0 should make LED0 on and off --
The output is triggered by TC counter
The output is triggered by TC counter
The output is triggered by TC counter
The output is triggered by TC counter
The output is triggered by TC counter
The output is triggered by TC counter
The output is triggered by TC counter
The output is triggered by TC counter

基板を眺めていて気になったのはシルク印刷が Arduino と同じ(黄色枠)???

2016年10月21日金曜日

Atmel Studio (Arduino Due)

Arduino で32 bit CPUを搭載したボードを見かけるようになりましたが、最初に出たのは Arduino Due でした。Atmel Studio でソフトを開発すれば色々な事が出来そうなので挑戦です。

まず、準備です。
  1. Arduino Due 本体
  2. SAM-ICE
  3. 変換コネクタ
  4. マイクロUSBケーブル
  5. 電源(7-12V) USB 給電する場合は不要


このCPU(SAM3X8E) の内部には温度センサーが入っていますのでプログラムから呼び出して
温度測定を行ってみたいと思います。CPU 内なので起動後、徐々に温度は上がるハズです。

  1. Atmel Studio の起動
  2. Start ページより New Example Project... を選択する。
  3. Device Family 欄には SAM3X を選ぶ
  4. 左枠の種別は Kit を選択します。
  5. サンプルには ADC Temperature Sensor Example - Arduino Due/X を指定します。

以上で OK をクリックすると、ライセンス条項(英語)が表示されますので
□ I accept the license agreement にチェックを入れ Finish ボタンをクリックします。
するとプロジェクトが生成されます。
(少し時間がかかります。)

測定結果を表示させるためシリアル通信プログラムを用意します。(今回は TeraTerm )
温度データはUSB-Serial (Programing Port)に出力されます。
(通信条件:8bit Non Parity 1Stop 速度は115200bps)

Windows の場合 コントロールパネル → システムとセキュリティ → システム とたどり デバイスマネジャーをクリックし、ポート(COMとLPT) をクリックすれば COM ポート番号がわかります。番号は PC により変化します。

準備が揃ったところで Start Debugging and Break (Alt+F5) を実行します。
プログラムの main で一旦、停止します。続いて Continue (F5) でプログラムが続行されます。

TeraTerm で表示されたデータ

-- ADC Temperature Sensor Example --
-- Arduino Due/X --
-- Compiled: Oct 20 2016 12:43:25 --
ADC clock frequency = 7000000 Hz
Startup time too small: 280, programmed: 64
Temp:14.9 
Temp:15.7 
Temp:16.1 
Temp:16.1 
Temp:16.4 
Temp:16.4 
Temp:16.4 
Temp:16.4 
Temp:16.4 
Temp:16.8 
Temp:16.8 
Temp:16.8 
Temp:16.8 

 Atmel社の場合、自社のCPU群でソフトを共通化するため ASF (Atmel Software Framework)が採用されており、他の CPU とソフトの開発を共有化するため冗長部分があります。
 また、ハードウエアのアクセスには ARM社の規定したライブラリ群(CMSIS)を使用しますので直接ペリフェラルにアクセスしません。ARM コアを使用しているCPUではほぼ共通で使えそうですが、CMSIS を理解する必要があります。


2016年10月19日水曜日

2つの Arduino

 Arduino.cc と Arduino.org が2016/10/1に和解したようです。(ニュース) Arduino IDEが1本化されれば混乱もなくなりユーザーにとってはありがたいことです。

 これからもArduino は進化するだろうし。色んなタイプがでてくるのを期待したい。Arduino.orgからは既に下記のボードがアナウンスされている。(参照元
Atmel 社以外の CPU が採用されている。
Atmel Studio でのデバッグは無理かも!?

 WiFi や Bluetooth を搭載したボードの日本国内販売は技適マークを取得する必要があるので費用と時間がかかりそう。

 ソフトでの最大の要望はソース・デバッグできればありがたい。現在は Serial.print で変数を表示するだけ。一旦、停止して確認できればありがたい。トレース出来ればもっと有難いんだけど

特に32bit(ARM Cortex-MO, M3, M4 ) あたりが出て、デバッグにAtmel Studio を利用できれば

Arduino Due では SAM-ICE をつないでAtmel Studio でデバッグできるのを確認しています。

2016年10月18日火曜日

Atmel Studio 7 の導入

  Atmel社のCPU はAVR と呼ばれています。設計者2人の名前 Alf Egil Bogen と Vegard Wollan
 と RISC (Reduced Instruction Set Computer)の略です。 以前の開発ツールは AVR Studio と呼ばれていました。(その前は WinAVR )

 現在は Atmel Studio と社名がついています。Atmel 社のホームページでユーザー登録すれば
Atmel Studio 一式がダウンロード可能となります。登録後  Atmel Studioのホームページ より Atmel Studio 7.0 (build 1118) offline installer をクリックすればリンク先が書かれたメールが来ますのでクリックすればダウンロードできます。offline installer は容量が大きく 863 MB ありますので時間の余裕がある時に行ってください。web installer は2.46 MB と少ないですがダウンロードしながらのインストールとなります。
 いずれにしても時間の余裕のある時に行ってください。Atmel Studio 7 は Visual Studio を元にコンパイラ、デバッガを GCC に変更してあります。当然ながら VC++, C# などは動きません。

 インストールはダウンロードした as-installer-7.0.1188-full.exe を実行させるだけです。
問い合わせに対して答えて行く形式です。USB ドライバーもインストールされます。

 USBドライバーは JTAG-ICE を接続してデバッグする時に必要となります。
 8bit, Cortex-M0 用の JTAGICE3, ATMEL-ICE, Cortex-M3, M4 用SAM-ICE を使用するときに必要となります。8 bit(ATmegaシリーズ) から 32 bit(Cortex-M0 から M4)までの開発とデバッグが出来ます。

 デバッガー(ATMEL-ICE:約 7,000円) 関連は少し費用が発生します、個人でもがんばれば購入できます。統合開発環境はダウンロードだけの費用で済みます。

2016年10月17日月曜日

Energia で Arduino のライブラリを動かす

 TSL2561とLaunchPadを接続して動かしてみる。CPU(MSP430F5529) は Arduino(ATmega328) と全く異なるが library はC++ で作成されているので、多分、動くハズ。ライブラリがバイナリで提供されたり、ASM で記述されていると動かない可能性が高いが、まずはトライ
 ライブラリは Arduino と同じ用に Energia の下にある libraries に配置する。

 サンプルは Adafruit_TSL2561-master の下に examples フォルダーがありその中にsensorapi があります。適当なフォルダーにコピーして使用します。
 配線は以下(参照)のように行います。
   Connect SCL to P4.2
   Connect SDA to P4.1
   Connect VDD to 3.3V DC
   Connect GROUND to common ground


USBを接続するとCOMポートが2つ現れます。 MSP Application UART1 (COMxx ) 側を指定します。



ボードは基板に合わせて選択します。

書き込みを実行します。

 モニターを表示していると計測結果が表示されます。
 
 Eneragia の特徴として、ツールにシリアルプロッタがあります。


 クリックして動かしてみると計測結果がグラフとして表示されます。




2016年10月16日日曜日

MSP430 LaunchPad

 Arduino によく似たボードとして TI社から出ている LanuchPad があります。CPU は 16bit の MSP430シリーズが使われており、IDE の色は赤が基調ですが、見た目はそっくりです。
 基板の大きさも Arduino とほぼ同じ大きさです。

MSP430F5529LP                               Arduino UNO / R2

( 赤備え !?


 Energia は以下からダウンロードして展開するだけです。
 Energia より downloads page へ移動し、お使いの OS に適したバージョンをダウンロードしてください。


Mac, Windows, Linux(Ubuntu) 用があります。

 基板上のLEDを点滅させてみます。基板上には 赤LED と 緑LED の2つが搭載されているので交互に点滅させます。
左は 赤 LED     右は 緑 LED


スケッチはサンプルを元に少し改造します。
サンプルはメニューのファイル → スケッチの例 → 01.Basics → Blink とたどりクリックすれば読み込まれます。


サンプルを橙色の枠ないのように変更します。

赤LED 点滅させ、続いて緑 LED を点滅しています。

2016年10月15日土曜日

照度センサー ( TSL2561 )

 照度センサー ( TSL2561 ) を入手したので、部屋の明るさを測定してみます。
 照度センサーは I2C により Arduino と通信します。Arduino には I2C ライブラリが付属しているのでセンサーとの通信をシコシコ作ったり、通信手順の確認のためにI2Cモニターを使って確認することもなく簡単にデータを取得できます。
 メーカーからもライブラリーが提供されていますので使ってみます、照度の計算もライブラリーが行ってくれるのでマニュアルとにらめっこして計算式を作ることもありません。

TLS 2561 は 5V, 3.3V いずれでも動作可能です。配線は以下の通りです。






 I2C ライブラリはスケッチの先頭で <Wire.h> と指定するだけです。TSL2561 はメーカーのホームページ( Adafruit )よりダウンロードします。
 左の Using the TSL2561 sensor をクリックするとライブラリのダウンロード画面になります。赤枠の2つともダウンロードしてください。

 
使い方は Arduino IDE をインストールしたフォルダの下にに libraries フォルダがあるのでその下に解凍して展開します。

 スケッチはAdafruit_TSL2561-master の下に examples フォルダーがありその中にsensorapi があります。Arduino ではスケッチの拡張子は .ino ですが、フォルダーが作られその下にスケッチの本体ファイルが保存されます。なお、フォルダー名とスケッチ名は同じです。

 Arduino IDE を起動し、ツールのボードとポートを確認します。( Arduino M0 Pro(Programming Port 、ポートは COM3 ( Arduino M0 Pro( Programming Port) ) COMx のポート番号はPC依存し、システムにより異なります。


 
スケッチを読み込みます。(アイコンの↑(開く)をクリックしても可能です)
sensorapi フォルダーの中のsensorapi.inoをクリックします。スケッチを読みんだらコンパイルして書き込んで見ましょう。


シリアルモニター(メニューのツールにあります。)を起動して動作確認できます。

PCに TeraTerm がインストールされていれば TeraTerm でも確認できます。但し、シリアルモニターとTeraTerm は同時に動作はできません。(シリアルポートを奪い合うためです。別のポートだと問題ありません。)


TeraTerm を使う利点は TeraTerm でログを保存できることです。上記のような場合、Excel で CSV ファイルを読み込むようにして取り込み、Excel 側でグラフ化できます。


2016年10月12日水曜日

Arduino [ Zero (M0) Pro ]

Arduino は 32bit ARM ( ATSAMD21G18A ) を採用した Zero Pro (後継機は M0 Pro に名称変更になっています。)を使用してみます。

外部にLEDを配置して点滅させます。USBより給電しますが、外部電源の場合Vの電源を使用します。(注、5V です。UNOでは7V~12Vですが、高電圧をかけると壊れる可能性あり、まだ試したことが無いのでわかりませんが?)
 各ピンは3.3V動作です。

Arduino IDE はArduino.org より配布されている最新版 1.7.11 を使用しました。
サンプルを利用します。下記の通りメニューよりBlink を選択します。

サンプル・スケッチを選択し、スケッチに少し手を加えます。
① #define GREEN_LED 8 の定義を追加します。
② LED を接続したピンを出力に設定します。
③ LED 点灯時間を 300 ミリ秒とします。
④ LED 消灯時間を 500 ミリ秒をします。


書き込む前にボードの設定と、ポートの設定を確認して下さい。
       ボード

     ポート



  PROGRAMMING と書かれたUSB に接続し、左上の「マイコンボードに書き込む」アイコンをクリックして書き込んで下さい。もし、うまくいかない場合は配線とプログラムを見直してください。
 Arduino UNO と比べると LED の輝度が低い(暗い)と思います。これはPIN 8 の出力が5V から 3.3V に低くなっているためです。


2016年10月10日月曜日

Arduino Lチカ

まずは、下記の通りに接続して Lチカ (組込みでの Hello world)を行ってみたいと思います。
サンプルを参考にして一部改造してみます。



サンプルの選択ですが、その前にダウンロードしたプログラム (Arduino IDE)は下記のように展開してください。

そして arduino.exe をダブルクリックすれば Arduino IDE が起動します。
メニューのファイル → スケッチの例 → 01.Basics → Blink と選択します。

別画面が現れ、サンプルスケッチが表示されます。

ボードの設定をおこないます。今回、使用するボードは Arduino UNO を使用しますのでメニューのツール→ボードより Arduino UNO (赤枠)を選択します。

続いUSBケーブルをArduino 本体に接続します。(Arduino 側には USB-Serial IC が組み込まれて おり Serial により ATmega328 (あるいはATmega168)につながります。
そのためシリアルポートの番号を指定します。番号はパソコンにより異なります。

サンプルに少し手を加えます。
①今回、点滅させるLEDは8番に接続しますので #define GREEN_LED 8 を追加します。
②点灯時間を 200ミリ秒とし、
③消灯時間を 500ミリ秒とします。
変更が済むと(⇒) をクリックするとコンパイルが開始され、成功するとArduino への書き込みが行われます。(いよいよ LED 点滅の開始です。) エラーが出た場合はもう一度配線やプログラムを見直して見てください。



2016年10月7日金曜日

Arduino IDE

まず、Arduino 用プログラム(Arduino ではスケッチと言います)作って、Arduino 基板へ書き込む必要があります。
スケッチを作ったり、変更するにはArduino IDE と言うプログラムで行います。Windows 用、Mac用、Linux用がありますので使用しているPCのOSに対応するものをダウンロードします。今回はWindows 用をダウンロードします。
注意:Arduino IDE を配布しているサイトは2つあります。今回使用する Arduino UNO ではどちらでもOKですが、購入された
基板の種類によっては対応が異なります。
1. https://www.arduino.cc/
赤枠内をクリックしてダウンロードします。

2. http://www.arduino.org/

赤枠内をクリックしてダウンロードします。

の2つがあります。
基板の裏(部品が無い方)に ARDUINO.CC / ARDUINO.ORG のどちらかが書かれているので確認できます。


それぞれダウンロード(Download)を選択すると OS の選択とタイプ(Windows 版ではZIP file形式と Windows Installer形式)がありますが、ZIP file を推奨します。(ZIP 形式だとバージョンごとに管理できます。また、CC と ORG 版を同じパソコンに入れても、解凍先を別にすれば区別して使用できるようになります。)
 IDE を展開したあと、USBドライバーは自動でインストールされるのですが、もし上手く行かない場合はIDE を展開した場所にありますのでドライバーの位置を展開したトップフォルダーを指定すれば探してインストールしてくれます。

Arduino の 本家、元祖 争いは和解したようです。

http://www.itmedia.co.jp/news/articles/1610/03/news055.html