▼Arduinoメモ▼
Arduino


Arduino
パソコンからセンサやアクチュエーターを制御するためのI/Oモジュール。
Gainerとの違いはスタンドアロンで利用できる点。
XBEE Shildで無線I/Oモジュールとしても利用可能。
メカロボショップで購入できる。


※左がGainer、右がArduino


情報源


リンク
Arduino ブログ/ショップ
Arduino メカロボショップ
Arduino日本語リファレンス スイッチサイエンス
Funnel Arduinoの最初の一歩
- hatayanlog
- shunp.com


ハードウェアの準備


Arduino
ArduinoのI/Oモジュール。

USBケーブル
一般的なプリンターUSBケーブル。


ソフトウェアの準備


Arduino IDE
Arduinoの開発キット。USBドライバも含まれている。
  1. Arduinoのサイトの「Arduino News」からダウンロード。最新版は「Arduino 0011」。
  2. 解凍して任意のフォルダに配置。
USBドライバ
Gainerでドライバインストールした人は必要ない模様。
  1. パソコンとArduinoをUSBケーブルで接続。
  2. 「ソフトウェア検索のため、Windows Updateに接続しますか」ダイアログでは「いいえ」を選択。
  3. 「インストール方法を選んでください」ダイアログでは「一覧または特定の場所からインストールする(詳細)」を選択。
  4. 「次の場所で最適のドライバを検索する」ダイアログでは「次の場所を含める」をチェックし、「arduino-0011/drivers/FTDI USB Drivers」を指定。
  5. 3〜4と同様の操作を再び要求されるので行う。


はじめてのArduinoプログラミング


ArduinoのLEDを点滅させるプログラムを作成する。




Arduino IDEの起動
  1. 「arduino.exe」をダブルクリックで実行。
  2. メニュー「Tools→Serial Port」でUSBケーブルを接続したシリアルポートを指定。
  3. メニュー「Tools→Board」で「Arduino Diecimila」を指定。


ソースコードの作成
テキストエディタに以下のソースコードを記述。
int ledPin=13;

void setup()
{
    pinMode(ledPin,OUTPUT);
}

void loop()
{
    digitalWrite(ledPin,HIGH);
    delay(1000);
    digitalWrite(ledPin,LOW);
    delay(1000);
}


実行
  1. 「プログラムの確認(Verify)」ボタンでプログラムの正当性の確認。
    「Done Comiling」と表示されたら成功。
  2. ArduinoのI/Oモジュールのリセットボタンを押してから、「I/Oボードへのアップロード(Upload to I/O Board)」ボタンでArduinoにプログラムをアップロード。



アップロード中は2つのオレンジLED(TXとTR)が点灯。
完了すると画面に「Done uploading.」と表示される。
成功時にはArduinoのLEDが1秒毎に点滅する


Arduino XBEE Shield


Arduino XBEE Shield
ArduinoからZigBeeによる近距離通信を行うための拡張ボード。
メカロボショップで購入可能。


ZigBee
ZigBee」とは、低コスト、低消費電力でワイヤレスセンサーネットワーク構築に適した無線通信規格。
特徴は次の通り。

はじめてのArduino XBEE Shieldプログラミング


2組の「Arduino+Arduino XBEE Shield」を用意して、ZigBee経由で無線通信を行うプログラムを作成する。片方の「Arduino+Arduino XBEE Shield」からもう片方へ「H」と「L」という文字を1秒毎に無線送信する。受信した方は「H」なら13番ピンのLEDの点灯、「L」なら消灯する。



「Arduino+Arduino XBEE Shields」1組み目の設定
  1. 「Arduino XBEE Shields」の2つのジャンパーピンを「USB」と印字してる方に付ける。
  2. USBケーブルを接続。
  3. Arduino IDE付属のサンプルプログラム「arduino-0011/examples/Communication/PhysicalPixel/PhysicalPixel.pde」を1つ目の「Arduino+Arduino XBEE Shields」にアップロード。
    プログラム内容はシリアル通信で「H」を受信した時に13ピンのLEDを点灯させ、「L」を受信した時に消灯させるというもの。
  4. Arduino IDEのシリアルモニタを起動し、「H」をタイプすることでLEDが点灯、「L」をタイプすることでLEDが消灯することを確認。
  5. USBケーブルを抜く。
  6. 「Arduino XBEE Shields」の2つのジャンパーピンを「XBEE」と印字してる方に付ける。

「Arduino+Arduino XBEE Shields」2組み目の設定
  1. 「Arduino XBEE Shields」の2つのジャンパーピンを「USB」と印字してる方に付ける。
  2. USBケーブルを接続。
  3. 以下のプログラムをアップロード。
    void setup()
    {
      Serial.begin(9600);
    }
    
    void loop()
    {
      Serial.print('H');
      delay(1000);
      Serial.print('L');
      delay(1000);
    }
  4. Arduino IDEのシリアルモニタを起動し、1秒毎に「H」と「L」が表示されることを確認。
  5. USBケーブルを抜く。
  6. 「Arduino XBEE Shields」の2つのジャンパーピンを「XBEE」と印字してる方に付ける。

動作テスト
  1. 2組の「Arduino+Arduino XBEE Shield」にUSBケーブルを接続し、任意のパソコンに接続。このケーブルは電源供給のみ行う。
  2. 成功時には受信側の「Arduino+Arduino XBEE Shield」の13番ピンが1秒毎に点滅。


Arduino公式サンプルプログラム


「Arduino IDE」のexampleフォルダにサンプルプログラムが用意されている。本家はこちら


デジタルI/O アナログI/O 通信 タイミングと時間 その他 センサ サウンド ハードウェア接続 チュートリアル

Funnel


Funnel
パソコンからセンサやアクチュエーターを制御するための言語拡張ライブラリ。
Ganerのライブラリをより汎用化させて、様々なI/Oモジュールに対応できるようにしたもの。
複数のI/Oモジュールの利用および切り替えが容易になる。
無線のI/Oモジュールを利用したい時は、GainerでなくFunnel+FIOを利用することとなりそう。 名前の由来はオールレンジ攻撃の「ファンネル」。


Funnelのクラス一覧


IOシステム
クラス 説明
IOSystem 複数のI/Oモジュールから構成されるシステムを表現。
Arduino、Fio、Gainer、MatrixLED、XBeeがサブクラス。
IOModule I/Oモジュールを抽象化して共通の方法で制御。
Configuration コンフィギュレーションの設定。
Port ポートの設定。
Arduino Arduinoを制御。
Fio Fioを制御。
Gainer Gainerを制御。
MatrixLED GainerのマトリクスLEDを制御。
XBee XBeeを制御。

イベント
クラス 説明
FunnelEvent イベント。
FunnelErrorEvent エラーイベント。
GeneratorEvent ジェネレータイベント。
PortEvent ポートイベント。

フィルタ
クラス 説明
IFilter フィルタのインタフェース。
Convolution、Scaler、Setpointが実装。
Convolution 入力に対して畳み込み演算を行うフィルタ。
Scaler 入力に対してスケーリングを行うフィルタ。
SetPoint アナログ入力に対して段階化を行うフィルタ。

ジェネレータ
クラス 説明
IGenerator ジェネレータのインタフェース。
Oscが実装。
Osc LEDのふわふわ点滅などに利用。


Funnelによる開発環境の準備


Arduinoの開発環境に加えて以下のソフトウェアが必要となる。

JDK 1.4.2以降
Javaの実行環境。Flex 3 SDKとFunnelサーバの実行に必要。
  1. サイトからJDK 1.4.2をダウンロードしてインストール。
Flex 3 SDK
コマンドラインベースのFlashコンテンツ作成ツール。
  1. Adobeの体験版ダウンロードより「Free Flex 3 SDK」をダウンロード。
  2. ダウンロードした圧縮ファイルを解凍し、任意のフォルダに配置。
  3. 環境変数のPATHにFlex 3 SDKのbinフォルダ(C:\flex_sdk_3\bin)を指定。
    環境変数の設定はコントロールパネル⇒システム⇒詳細設定⇒環境変数で行う。
  4. runtime/player/winフォルダ内のデバッグ用Flash Playerをインストール。
テキストエディタ
ソースコードの記述にメモ帳では効率悪いので、TeraPadなどのテキストエディタをダウンロード。


Firemata
FunnelからArduinoを制御するには、FiremataというプログラムをArduinoにアップロードしておく必要がある。
  1. サイトからStandard Firemataをダウンロードして解凍し、任意のフォルダに配置。
  2. メニュー「Sketchbook→Open」で「Standard_Firemata.pde」を開き、上記「はじめてのArduinoプログラミング」の解説と同じ方法でArduinoにプログラムをアップロード。
Funnel
  1. サイトからFunnelをダウンロードして解凍し、任意のフォルダに配置。


はじめてのFunnelプログラミング


ActionScriptでArduinoのLEDを点灯させるプログラムを作成する。





ソースコードの記述
「HelloWorld.as」を次のように記述する。文字コードはUTF-8で保存。
package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import funnel.*;

    //HelloWorld
    public class HelloWorld extends Sprite {
        private var aio:Arduino;//Arduinoオブジェクト
        private var led:Port;   //LED
        
        //コンストラクタ
        public function HelloWorld() {
            //コンフィグの生成
            var config:Configuration=Arduino.FIRMATA;
            config.setDigitalPinMode(13,DOUT);

            //Arduinoの生成
            aio=new Arduino(config);
            aio.addEventListener(FunnelEvent.READY,onReady);
            aio.addEventListener(FunnelErrorEvent.REBOOT_ERROR,trace);
            aio.addEventListener(FunnelErrorEvent.CONFIGURATION_ERROR,trace);
            aio.addEventListener(FunnelErrorEvent.ERROR,trace);

            //LEDの取得
            led=aio.digitalPin(13);
        }

        //Funnelサーバと接続成功
        private function onReady(evt:Event):void {
            //ベースの生成
            var base:Sprite=new Sprite();
            base.graphics.beginFill(0xffffff);
            base.graphics.drawRect(0,0,240,240);
            base.graphics.endFill();
            addChild(base);

            //テキストフィールドの生成
            var textField:TextField=new TextField();
            textField.text="マウスクリックでLED点灯";
            textField.autoSize=TextFieldAutoSize.LEFT;
            base.addChild(textField);            

            //イベントリスナーの追加
            base.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
            base.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
        }

        //マウスダウンのイベント処理
        private function onMouseDown(evt:MouseEvent):void {
            led.value=1;
        }

        //マウスアップのイベント処理
        private function onMouseUp(evt:MouseEvent):void {
            led.value=0;
        }
    }
}


実行ファイルの生成
ビルドコマンドは次の通り。
mxmlc -source-path C:\flash\funnel_007\libraries\actionscript3\src -default-size 240 240 -default-frame-rate=30 -default-background-color=0xFFFFFF HelloWorld.as
ソースパスとしてFunnelソフトウェアライブラリのactionscript3フォルダを指定している。
成功するとHelloWorld.swfが生成される。


実行
Flash用のFunnelソフトウェアライブラリはFlashが直接シリアル通信できないので、「Funnelサーバ」と呼ばれるプロ クシサーバを介して、パソコンからArduinoを操作する仕組みになっている。そのため、Arduinoを操作するアプリケーションを実行する前に、Funnelサーバを起動しておく必要がある。
  1. ArduinoとパソコンをUSBケーブルで接続。
  2. Funnelフォルダ内のserverフォルダにある「setting.yaml」を編集。
    typeに「Arduino」、comにUSBケーブルを接続したCOMポートを指定。
    server:
      command port: 9000
      notification port: 9001
    
    io:
      type: Arduino
      com: COM26
      baudrate: 
  3. Funnelフォルダ内のserverフォルダにある「funnel_server.jar」をダブルクリックして起動。
    失敗時には「エラー」と表示される。
  4. HelloWorld.swfをブラウザで開く。


−戻る−