▼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ドライバも含まれている。USBドライバ
- Arduinoのサイトの「Arduino News」からダウンロード。最新版は「Arduino 0011」。
- 解凍して任意のフォルダに配置。
Gainerでドライバインストールした人は必要ない模様。
- パソコンとArduinoをUSBケーブルで接続。
- 「ソフトウェア検索のため、Windows Updateに接続しますか」ダイアログでは「いいえ」を選択。
- 「インストール方法を選んでください」ダイアログでは「一覧または特定の場所からインストールする(詳細)」を選択。
- 「次の場所で最適のドライバを検索する」ダイアログでは「次の場所を含める」をチェックし、「arduino-0011/drivers/FTDI USB Drivers」を指定。
- 3〜4と同様の操作を再び要求されるので行う。
はじめてのArduinoプログラミング
ArduinoのLEDを点滅させるプログラムを作成する。
Arduino IDEの起動
- 「arduino.exe」をダブルクリックで実行。
- メニュー「Tools→Serial Port」でUSBケーブルを接続したシリアルポートを指定。
- メニュー「Tools→Board」で「Arduino Diecimila」を指定。
ソースコードの作成
テキストエディタに以下のソースコードを記述。
int ledPin=13; void setup() { pinMode(ledPin,OUTPUT); } void loop() { digitalWrite(ledPin,HIGH); delay(1000); digitalWrite(ledPin,LOW); delay(1000); }
実行
- 「プログラムの確認(Verify)」ボタンでプログラムの正当性の確認。
「Done Comiling」と表示されたら成功。- 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」とは、低コスト、低消費電力でワイヤレスセンサーネットワーク構築に適した無線通信規格。
特徴は次の通り。
- 伝送速度はBluetoothに比べると遅い
- 1つのネットワークに最大で65535ノード(端末)接続可能
- 複雑な設定をすることなく30ミリ秒程度でアドホックなネットワークを構築
- 15ミリ秒程度でスリープ状態から回復
- ボタン電池1個でおよそ1年間、単三乾電池2本で2年間程度の稼動
はじめての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組み目の設定
- 「Arduino XBEE Shields」の2つのジャンパーピンを「USB」と印字してる方に付ける。
- USBケーブルを接続。
- Arduino IDE付属のサンプルプログラム「arduino-0011/examples/Communication/PhysicalPixel/PhysicalPixel.pde」を1つ目の「Arduino+Arduino XBEE Shields」にアップロード。
プログラム内容はシリアル通信で「H」を受信した時に13ピンのLEDを点灯させ、「L」を受信した時に消灯させるというもの。- Arduino IDEのシリアルモニタを起動し、「H」をタイプすることでLEDが点灯、「L」をタイプすることでLEDが消灯することを確認。
- USBケーブルを抜く。
- 「Arduino XBEE Shields」の2つのジャンパーピンを「XBEE」と印字してる方に付ける。
「Arduino+Arduino XBEE Shields」2組み目の設定
- 「Arduino XBEE Shields」の2つのジャンパーピンを「USB」と印字してる方に付ける。
- USBケーブルを接続。
- 以下のプログラムをアップロード。
void setup() { Serial.begin(9600); } void loop() { Serial.print('H'); delay(1000); Serial.print('L'); delay(1000); }- Arduino IDEのシリアルモニタを起動し、1秒毎に「H」と「L」が表示されることを確認。
- USBケーブルを抜く。
- 「Arduino XBEE Shields」の2つのジャンパーピンを「XBEE」と印字してる方に付ける。
動作テスト
- 2組の「Arduino+Arduino XBEE Shield」にUSBケーブルを接続し、任意のパソコンに接続。このケーブルは電源供給のみ行う。
- 成功時には受信側の「Arduino+Arduino XBEE Shield」の13番ピンが1秒毎に点滅。
Arduino公式サンプルプログラム
「Arduino IDE」のexampleフォルダにサンプルプログラムが用意されている。本家はこちら。
デジタルI/OアナログI/O
- Blink - LEDの点滅
- Button - プッシュボタンによるLEDの点滅制御.
- Debounce - プッシュボタンの状態取得
- Loop - loop()メソッドと配列による複数のLEDの点滅制御
通信
- Analog Input - 可変抵抗器によるLEDの明るさ制御
- Fading - LEDの明るさを徐々に変化させる
- Knock - 振動検出
- Smoothing - アナログ入力値のスムージング
タイミングと時間
- ASCII Table - PCへの標準出力
- Dimmer - マウス動作によるLEDの明るさ制御
- Graph - PCへデータを送りグラフ表示
- Physical Pixel: PCからのLED点滅制御
- Virtual Color Mixer - PCへの複数の変数の送信
その他
- Blinking an LED without using the delay() function - delay()なしのLED点滅
- Stopwatch - ストップウォッチ
センサ
- TwoSwitchesOnePin - 1つのI/Oピンに2つのスイッチ接続
- Read a Tilt Sensor - 傾きセンサ
- Controlling an LED circle with a joystick - ジョイスティックによるLED制御
- 3 LED color mixer with 3 potentiometers - 3つの電圧計によるLEDカラーミキサー
サウンド
- Read an Accelerometer - 加速度センサ
- Read an Ultrasonic Range Finder - 超音波センサ
- Reading the qprox qt401 linear touch sensor - タッチセンサ
ハードウェア接続
- Play Melodies with a Piezo Speaker - ピエゾスピーカーによるメロディ再生
- Play Tones from the Serial Connection - シリアルによるトーン再生
- MIDI Output and from Spooky Arduino - MIDI出力
チュートリアル
- Multiply the Amount of Outputs with an LED Driver - LEDドライバ
- Interfacing an LCD display with 8 bits - LCDディスプレイ
- LCD interface library - LCDインタフェースライブラリ
- Driving a DC Motor with an L293 - DCモータ
- Driving a Unipolar Stepper Motor - ユニポーラステッパモータ
- Build your own DMX Master device - DMXマスターデバイス
- Implement a software serial connection - シリアル接続
- RS-232 computer interface - RS-232
- Interface with a serial EEPROM using SPI - シリアルEEPROM
- Control a digital potentiometer using SPI - 電圧計
- Multiple digital outs with a 595 Shift Register - 595シフトレジスタ
- X10 output - X10を使用する交流電源の制御装置
Funnel
Funnel
パソコンからセンサやアクチュエーターを制御するための言語拡張ライブラリ。
Ganerのライブラリをより汎用化させて、様々なI/Oモジュールに対応できるようにしたもの。
複数のI/Oモジュールの利用および切り替えが容易になる。
無線のI/Oモジュールを利用したい時は、GainerでなくFunnel+FIOを利用することとなりそう。名前の由来はオールレンジ攻撃の「ファンネル」。
- プログラミング言語として以下の言語を利用できる。
- ActionScript
- Processing
- Ruby
- I/Oモジュールとして以下のモジュールを利用できる。
- Funnel I/Oモジュール(USB接続ののドングル+無線モジュール)
- Gainer I/Oモジュール(USB接続)
- Arduino(USB接続)
- MaxStream XBee(USB接続ののドングル+無線モジュール)
- よく利用するユーティリティ関数も持つ。
- フィルタ処理
- スケーリング
- 閾値によるアナログ入力の範囲わけ
- オシレータ
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サーバの実行に必要。Flex 3 SDK
- サイトからJDK 1.4.2をダウンロードしてインストール。
コマンドラインベースのFlashコンテンツ作成ツール。
テキストエディタ
- Adobeの体験版ダウンロードより「Free Flex 3 SDK」をダウンロード。
- ダウンロードした圧縮ファイルを解凍し、任意のフォルダに配置。
- 環境変数のPATHにFlex 3 SDKのbinフォルダ(C:\flex_sdk_3\bin)を指定。
環境変数の設定はコントロールパネル⇒システム⇒詳細設定⇒環境変数で行う。- runtime/player/winフォルダ内のデバッグ用Flash Playerをインストール。
ソースコードの記述にメモ帳では効率悪いので、TeraPadなどのテキストエディタをダウンロード。
Firemata
FunnelからArduinoを制御するには、FiremataというプログラムをArduinoにアップロードしておく必要がある。Funnel
- サイトからStandard Firemataをダウンロードして解凍し、任意のフォルダに配置。
- メニュー「Sketchbook→Open」で「Standard_Firemata.pde」を開き、上記「はじめてのArduinoプログラミング」の解説と同じ方法でArduinoにプログラムをアップロード。
- サイトから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; } } }
実行ファイルの生成
ビルドコマンドは次の通り。
ソースパスとしてFunnelソフトウェアライブラリのactionscript3フォルダを指定している。
mxmlc -source-path C:\flash\funnel_007\libraries\actionscript3\src -default-size 240 240 -default-frame-rate=30 -default-background-color=0xFFFFFF HelloWorld.as
成功するとHelloWorld.swfが生成される。
実行
Flash用のFunnelソフトウェアライブラリはFlashが直接シリアル通信できないので、「Funnelサーバ」と呼ばれるプロ クシサーバを介して、パソコンからArduinoを操作する仕組みになっている。そのため、Arduinoを操作するアプリケーションを実行する前に、Funnelサーバを起動しておく必要がある。
- ArduinoとパソコンをUSBケーブルで接続。
- Funnelフォルダ内のserverフォルダにある「setting.yaml」を編集。
typeに「Arduino」、comにUSBケーブルを接続したCOMポートを指定。
server: command port: 9000 notification port: 9001 io: type: Arduino com: COM26 baudrate:- Funnelフォルダ内のserverフォルダにある「funnel_server.jar」をダブルクリックして起動。
失敗時には「エラー」と表示される。
![]()
- HelloWorld.swfをブラウザで開く。
−戻る−