2011年4月30日土曜日

通信手段を振り返る



今から10年くらい前に、PIC16F84A というマイコンのちょっとしたブームがありました。
その頃から「今更シリアル通信とか、、、」と思いながら扱っていましたが、まさか2011年にMIDI やシリアルターミナルの紹介をしているとは思いませんでした。

実際、これらの規格はいつ頃から有るのでしょうか?
最近 Arduino で使えるかな?と思った規格を調べてみました。


赤外線リモコン 1977年

MIDI 1982年

シリアル通信 (Dsub 9ピンは 1984年のPC/AT用)

PS/2 (マウス/キーボード) 1987年

IEEE1284 (プリンタポート) 1994年 (大元のセントロニクスパラレルは1970年代)

DMX (DMX512/1990) 1990年、(DMX512–A は2004年)

Ethernet (10Base-T) 1990年

赤外線データ通信 (IrDA) 1993年

USB(1.0) 1996年、(USB1.1, Apple, iMac での採用 1998年)

無線LAN (802.11b) 1999年、(Apple, iBook で採用)

Bluetooth (1.0) 1999年

FeliCa (Suica) 2001年

ZigBee (802.15.4-2003) 2003年


Arduinoプロジェクトの開始は 2005年。
日本で広まったのはArduino Diecimila (2008年) あたりでしょうか。


冒頭の写真は、クロスケーブルを使ったシリアル直結の通信、「ヌルモデム」と言うやつです。2003年頃のUSB シリアル変換(IO-DATA USB-RSAQ2) が、Mac OS X 10.6 で使えました。(Prolific PL2303 のドライバ使用。ProductIDの 書き換えが必要→参考サイト

そうそう、Mac OS X もWindows XP も、正式リリースは2001年ですね。
10年ェ・・・

2011年4月29日金曜日

XBee 入門 (ATコマンド篇)

XBee をもう少し調べてみました。

買ったのはこちらのタイプ(だと思う)。
XBee Series 1(802.15.4)

Series 2(ZigBee) はこちら。

ZNet 2.5 とか DigiMesh などもあって良くわからない。
それぞれの製品カタログをみると、ZigBee 版の方が、シリアルインターフェイスの速度が速い(〜1Mbps)。
しかし、RF のデータレートは同じ(250kbps) なので、実際の転送能力は同じかもしれない。

XBee はシリアルを転送するだけではなく、プルアップレジスタ内蔵の GPIO や、AD コンバータ、PWM 出力までついているようです。


以下は Series 1 について。

設定用の AT コマンドなどがのっている 詳細なマニュアルはこちら
Product Manual: XBee / XBee-PRO 802.15.4 OEM RF Modules (→PDF直リンク)


XBee の AT コマンドについては、こちらのサイトを参考にしました。

通信ソフトはCoolTerm で。
(Raw Mode, Local Echo ON がお勧め。最初は 9600 bpsで接続。)

とりあえず、XBee のアドレス等はそのままに。シリアル通信の速度を 57.6kbps に変更します。


通信の様子はこんな感じです。


(必要なところだけ抜粋)
+++(リターンをおさず 1秒待つ):AT コマンドモードに入る
OK
ATBD(リターン):通信速度の読み出し
3
ATBD6(リターン):56.7kbps を設定
OK
ATWR(リターン):設定を書き込む
OK

AT コマンドは AT ではじまる4文字のコマンドと、データを続けて送ります。
コマンドのみの場合は現在の設定値を読み出します。
(最初のATVR はFirmware のバージョン、ATMY はXBee のID、ATID はネットワークのID です。)
設定値は保存されず、電源を切ると以前の値に戻ります。ATWR を送ると、値が記憶されます。
ATコマンドモードは、10秒間入力が無いとタイムアウトしてしまうので、
反応が無いときは再度 +++ でATコマンドモードにします。

2台のXBee モジュールを変更したら、Firmata との通信を試してみましょう。

このサンプルでは、シリアルの通信速度が57.6kbps になっているので、購入直後の XBee (9600bps) では駄目でしたが、動作するようになりました。

前述のマニュアルによれば、通信速度は 250kbps までの任意の値を設定できるようです。31.25kbps のMIDI などもそのまま送信出来るかもしれません。

2011年4月28日木曜日

Mac OSX シリアルターミナル


先日、良いTerminal ソフトがない、と書いてしまいましたが、ありました!
Roger Meier さんの CoolTerm を紹介します。



このソフトは REAL Basic (→REAL SOFTWARE) で作成されたソフトです。
REAL Basic は本屋さんで売っていた Ver 3 くらいの頃にライセンスを持ってました。
まだ現役なのか、、、と思ったら、今では Win/Linux/Mac のマルチプラットフォームに対応し、Web アプリまで作れる開発環境に進化していました。Basic でWeb アプリ、、、胸熱です。

肝心のCoolTerm ですが、とても Cool です。

基本的な使い方は
1) Options でシリアルポートの選択と通信設定を行う
2) Connect ボタンを押して通信開始
これだけです。

Options の画面



Raw Mode とLine Mode という2つのモードがあって、それぞれ次のような画面です。

Raw Mode:キーボードの入力が即座に送られるモード


Line Mode:リターンキーを押すと、送られるモード(Arduino IDE のシリアルモニタと同じ)


Connection > Send String から文字列や16進数のコードを送る事もできます。


さらに、HEX View モードでは、16進数とASCII を並べた表示ができます。


複数のシリアルポートを同時に開いたり、ログを取ったり、ファイルの中身を送ったり、Line モードの送信履歴があったり、欲しい機能は全て揃っているのではないでしょうか?

なんと言っても、無料ソフトなのが最高に Cool です。


(注)今回の通信画面の例は相手(Arduino)がエコーバック(送られた文字をそのまま返す)しています。通常、送信側が打った文字列は表示されません。送信側の文字列を表示させる場合は、Options のLocal Echo をON にします。


2011年4月27日水曜日

XBee 入門 (購入篇)

Arduino の無線通信手段として、XBee というのが良く使われます。
ずっと気にはなっていたものの、なかなか導入できずにいました。
主な理由はコスト(最低でも親機用、子機用の2台と、それぞれのアダプタが必要)がかかる割に、できることはシリアル通信と大差ない、といったあたりです。
作りたい物が無線でしか出来ないものではなかったため、いままで有線でやり過ごしていました。

いざ XBee を買おうとすると、XBee の種類が沢山(→Switch Science) あることに気づきます。
そして何を買っていいかわからず、悩んでしまいます。
購入前に検討した事項をまとめます。購入前の知識なので、間違いが含まれる可能性が高い事をご了承ください。

XBee の種類
通信プロトコルで分けると 3種類、Series 1, Series 2。そしてZigBee 対応版。
物理的な仕様では XBee とXBee pro それに日本仕様のXBee pro。
さらに、アンテナの種類がチップアンテナ版、ホイップアンテナ版、外部アンテナ用コネクタ版。
実際の製品はそれぞれの組み合わせがあります。

検討
もともと、Xbee 独自プロトコルの「Series 1」と「Series 2」だったものが、
仕様の策定・改訂などを経て、旧Series 1 →「IEEE 802.15.4 対応」、 旧Series 2 →「ZigBee 対応」になったのだと理解しました。
ZigBee は「メッシュネットワーク」が面白そうではありますが、他の ZigBee 機器との連携は不要なので、Series 1 にしました。
Series 1 は XBee 経由で Arduino への無線書き込みもできる(ZigBee版では不可)らしく、それもポイントです。

XBee とXBee pro は無線出力の違いのようです。外形サイズも異なります。
また、日本の技術基準適合証明を受けた XBee pro は出力が抑えられているようです。
アンテナは大きい方が飛びが良いと思われますが、室内での実験程度しか使う予定がないので、チップアンテナの XBee にします。

最終的に「XBee Series 1(802.15.4), チップアンテナ仕様」に決まりました。

購入
この XBee が2つと、USB でPC に接続するアダプタ、5V Arduino 用のシールドをセットにしたパッケージがあるので、それを購入しました。(→千石電商


さんざん悩んでおいて、スターターパックみたいなものを買っただけという、、、
実は、このパッケージを店頭で見つけたのをきっかけに、購入検討をすることになりました。


パッケージ裏のパーツリストに「Instructions」と書いてあったので、説明書が入っているのかと思ったら、URL (→sparkfun) が書かれた紙が入っているだけでした。

パーツは実装済み。Arduino シールド用のコネクタのみ、ハンダ付けが必要です。


1対1の基本的な通信(前回のUSBシリアル通信)であれば、設定しなくてもそのまま使えます。(Firmata との通信はそのままではNG でした。おそらく通信速度の設定が必要です。)
Arduino への無線書き込みなどを行うためには、設定が必要なようです。

注意点など

  • このセットには、USB ケーブルは付属していません。USB 接続ボードの端子はMicro-B端子(メス) です。

  • XBee の端子は2mm ピッチなので、ブレッドボードやユニバーサル基板とはピッチが異なります。ピッチ変換基板も売ってます。

  • XBee の電源は3.3V です。Arduino Uno など、5Vマイコンで使う場合は信号レベル変換が必要です。XBee シールド(純正, sparkfun)または、このアダプタを使うと簡単です。(3.3V 仕様のArduino の場合はピッチ変換のみで可)

  • マイコン同士をXBee で接続するだけであれば、USB 変換は必須ではないのですが、XBee のネットワーク設定などに必要なので、有った方が便利です。


2011年4月25日月曜日

Arduino シリアル通信

Arduino はシリアル通信も簡単に扱えます。Arduino Uno には、ボード上に USB Serial 変換用のIC (ATMega8U2 のソフトウェアでの実装) が付いており、Mac とはUSB で接続します。
既に行っている、IDE での書き込みと全く同じです。

残念なことに、Mac はシリアル通信と相性が悪く、良いTerminal ソフトがありません。(Recotana さんのUARTcom と松田さんのSeriette に期待しているのですが、どちらも公開されていないようです。)

しかたがないので、IDE 付属のシリアルモニターを紹介します。

Arduino IDE のツールバー一番右端のボタンが Serial Monitor です。
(使用するポートは書き込みに使うポートと同じです。)
簡単な通信パラメータの設定と、文字列の送信ができます。



Arduino のサンプルコードと通信してみましょう。

File > Examples > 4.Communication > SerialCallResponseAscii

Arduino に書き込んだら、シリアルモニターを開きます。

最初はArduino から0, 0, 0 が送られてきます。
こちらから何でもいいので文字を送ると、ポートa0, a1, d2 の状態を返してきます。
(ここでは文字 a を送信)

同じような名前のサンプル

File > Examples > 4.Communication > SerialCallResponse



こちらは、値をByte のまま送っています。文字化けしたような状態になりますが、こちらの方が少ないバイト数で送れ、受信プログラムも簡単なので、こちらの方が一般的です。

また、これらのサンプルの下の方には、コメントアウトされた状態でProcessing 用とMax/MSP version 5 用の受信プログラムも書かれています。
それぞれ、コピー&ペーストするなどして、使用します。
Processing は Java ベースでグラフィックに強い、フリーのプログラム開発環境です。IDE は Arduino に非常に良く似ています。
Processing 用のサンプルを実行するとこのような画面になります。

Serial Call Response


Serial Call Response Ascii






送られたデータの a0 がX 座標、a1 がY 座標、d2 が描画色(白か黒)に対応しています。

同じシリアルポートを複数のプログラムから同時に開くことはできないため、Processing のプログラムを動かす前に、Arduino IDE のシリアルモニターを閉じて下さい。

また、Arduino IDE のシリアルモニターは同時に複数のポートを扱えません。Aruduino を複数台扱う時など、複数のシリアルポートを同時に開きたい場合は、Arduino IDE を別の場所にコピーし、複数起動すれば使えるようです。


2011年4月20日水曜日

Arduino でLCD を使う その4

キャラクタ液晶モジュールの使い方、応用編です。
カタカナとカスタムキャラクタの表示を行います。



キャラクタ液晶はROM に入ったビットマップ文字を呼び出して表示しています。
8bit なのでコードエリアは 256文字分あります。日本向けのキャラクタ液晶にはカナ文字が入っています。
カタカナを表示する場合、lcd.print(); はカナ文字に対応していないので、直接コード番号を指定する必要があります。

lcd.write( Code ); を使って、Code 0 - Code 255 を順番に表示してみました。




Code 番号 0-7 はRAM になっていて、自分の好きなパターンを作る事ができます。
(Code 番号 8-15 は0-7 と同じメモリ番地を指しています。)

5 x 8 dot しかないのであまり凝ったものは作れませんが、
顔文字用の記号にしたり、レベルメータにしたり、使い方は様々です。
RAM への書き込みは lcd.createChar(); を使います。

詳しくはFunada さんの Arduino 日本語リファレンス を参照してください。



今回はArduino のプログラムも公開します。テキスト形式(UTF-8) なので、IDE にコピー&ペーストしてください。
lcd-kana-moji.txt
lcd-kana-moji2.txt (Arduino IDE 1.0 対応版)

カナのメッセージは先に配列を作っておいて、配列のアドレスと長さを呼び出しています。
サンプルコードなので、自由に改変してお使いください。



2011年4月19日火曜日

Arduino でLCD を使う その3

引き続き、キャラクタ液晶モジュールの使い方です。

前回までに上手く動作すればよいのですが、駄目だった場合の参考に、良く有るトラブル事例の紹介です。

Case 1: 表示がおかしい
配線ミスの疑いが濃厚です。モジュールによって番号が異なる事があるので、付属の説明書をよく確認して下さい。

Case 2: 表示が見えない
V0ピンにコントラスト調整用の電圧が必要です。通常、10kΩ 程度の半固定抵抗(トリマー)を使います。

正常


コントラスト高すぎ


コントラス低すぎ


Case 3: バックライトが点灯していない



バックライト付きのタイプはLED がついています。これは自分で点灯する必要が有ります。
白抜き表示(反転タイプ)は点灯しないと読めません。通常のLED と同様、A(アノード) -> K(カソード) 間に10mA 程度流れるよう、220〜470Ω程度の制限抵抗を付け、5Vを印加します。

Arduino でLCD を使う その2

前回につづき、Arduino にキャラクタ液晶モジュールを接続します。



4. IDE 付属のサンプルを動かす

File > Examples > LiquidCrystal > HelloWorld

モジュールとArduino の配線方法は冒頭のコメントに書いてあります。

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

簡単に説明すると
・RS, Enable, D4-D7 はDigital Out に接続する
・R/W はGND に接続する
・V0 はトリマー(半固定抵抗器、ボリューム)で5V-GND 間を調整できるようにする

コードの最初の方にある、初期化(initialize) メソッドに注目。
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

ここで、実際に配線したピン番号を指定します。
つまり、自分の好きなピンに配線して良いということです。
初期化メソッドは4通りあり、メソッド名は同じで、引数の数が異なります。

8bit 通信用
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
8bit 通信用 r/w なし
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7);
4bit 通信用
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3);
4bit 通信用 r/w なし
LiquidCrystal(rs, enable, d0, d1, d2, d3);  ←これを使用

r/w は通常の使用では write 固定で良いので、Arduino で制御せず、直接 Low レベル(GND) に接続します。

5. 配線する
最低でも6本の制御線(Digital Out) と2本の電源、さらにコントラスト調整が必要です。
ブレッドボードやジャンプワイヤーを使って接続する事も出来ますが、変換アダプタをつくるのが賢明です。
(使う度に配線すると、面倒で使わなくなります。)

その際に悩むのが、どのピンを何に割り当てるか。
通信機能をもつD0, D1 は除外して、D2-D7 でまとめる案、PWM が使えるポートを避ける案、
A0-A5 をDigital Out に使って、電源も含めて片側だけにする案、いろいろ考えられます。
私はD2-D7 を使用するタイプと、AとD を混ぜて使用するアダプタを使っています。

液晶モジュール接続ボードを自作する場合は、Arduino のリセットスイッチをつけると便利です。




ここまで、すべて上手く行っていれば、冒頭の写真の表示になります。

Arduino でLCD を使う その1

Arduino は書き込みに使うUSBシリアル通信を使って Print デバッグをすることが多いですが、MIDI などの通信機能を実験する際には、液晶モジュールを使うと便利です。

Arduino にLCD(液晶ディスプレイ)モジュールを繋げてみましょう。
キャラクタ液晶という、ROM に入った文字を表示するタイプの液晶です。
秋月で買える SC1602 というのが定番です。

順を追って紹介します。

1. 液晶を選ぶ
私が使っているのは、
秋月:SC1602BS


かなり昔からある定番商品です。値段も随分安くなりました。(現在 500円)
バックライトLED が付いたタイプや20文字×4行タイプもあります。コネクタは14ピン (7x2)

秋月:SD1602VBWB


おしゃれな白抜きタイプ(笑)。(800円)
一回り小さく、コネクタが1列になっています。
(ピンが1列のタイプはブレッドボードで使えるので便利)
金属フレームが無いので、配線のフィルムがむき出しになっているのが難点。

千石電商:ADM1602K


赤文字/黒背景、ちょっとカッコ付けたかったので買ってみた。価格がやや高め。(1495円)
3.3V 用もあるので注意)白文字黒背景もあり。

これらはすべて、Arduino IDE に付属のライブラリで使う事が出来ます。
(Hitachi HD44780 の互換製品)

2. 説明書のピン配置をよく読む
ネットの情報を参考にするときは、手元のパーツの付属資料と良く見比べてみましょう。
電源の+/- が逆だったり、ピン番号が逆向きだったり、そういう罠が良く有ります。
Top View / Bottom View (表/裏)なども要注意です。

3. 通信方式
8bit(データ線を8本使う)と4bit(2回に分けて転送する)の通信があります。
特別な理由がなければ D0-D3 の配線不要な4bit モードを使用します。

(つづきます)

2011年4月17日日曜日

Fritzing を使ってみた

Fritzing はArduino 系のweb ページによくある回路図(実体配線図)が描けます。
今回初めて使ってみました。

ここからMac 版 (Mac OSX 10.5) をダウンロード。すでに日本語化もされています。
配線図だけでなく、回路図、PCB の図面も作成できるようです。
Arduino やブレッドボードが部品として登録されているのが面白いですね。

私の環境(Mac OSX 10.6) では書き出し(エクスポート)がうまく行かず、、、

PNG やPDF、JPG では、点だけになったり、部品が欠けたりしてしまいました。
「SVG 用」というので、上手く書き出しできました。(白い線が消えてしまいましたが)

SVG はSafari で開けるので、Safari からプリントプレビューをしてPNG に変換したのが上の図です。
この程度ならアプリ画面のスクリーンショットで充分ですね。

内容は前回のMIDI Theremin です。


2011年4月16日土曜日

MIDI Shield その4



簡単なセンサーを付けて、MIDI を鳴らす実験です。
よくあるテルミンもどき。
センサーは秋月で売ってるシャープの距離センサー : GP2Y0A21YK

MIDI Shield と言いながら、シールドが無くなってます。
MIDI の送信だけならば、抵抗だけで作れます。
Sparkfun の回路図はコネクタのピン番号が間違ってるので要注意)

MIDI は5pin のコネクタのうち、3pin しか使っておらず、MIDI Mobilizer では2.5mm の3極ミニプラグを使用しています。(正式名称は「2.5mm ステレオ超ミニプラグ」)

Arduino 側もそれに合わせてみました。
折角なので(ギターの)シールドっぽいケーブルにしてみました。



2011年4月12日火曜日

MIDI Shield その3

前回までに、Arduino のMIDI 送受信ができるようになりました。
これで楽器を作るのも良いのですが、当サイトの目的に、iPhone とArduino の通信があります。

実は、iPhone には LINE6 MIDI Mobilizer という、Dock コネクタに差すMIDI インターフェイスがあります。
これを使うと、iPhone でMIDI の送受信ができるようになります。
iPhone, iPod Touch, iPad で使えます。

対応ソフトは App Store からダウンロードします。メーカー(Line 6) 純正のSDK もあるので、頑張ればコマンド主体の通信ソフトを作れるかもしれません。

とりあえず、MIDI Mobilizer 対応ソフトの1つ、bismark さんの bs-16i を使ってみました。
サウンドフォント対応で、音色を変える事が出来るソフトシンセです。
(こちらに紹介記事あり)


Arduino から、Note ON, Note OFF を送り、bs-16i (iOS ソフト) を鳴らしているところです。
有線方式の通信手段として、使えるのではないでしょうか。

MIDI Shield その2

Arduino によるMIDI 通信の紹介です。

前回は送信だったので、今回は受信を行います。
基本的には普通のシリアル通信ですが、MIDI のメッセージを扱うためには、外部ライブラリが必要です。

私はtymm さんの Arduino MIDI Library を使っています。現時点での最新版はver1.2.2 です。
ダウンロード&解凍したフォルダをlibrary に入れます。(→こちらの記事を参考にして下さい)

サンプルをコンパイルすると、こちらもIDE ver 0022 ではエラーになります。


error: 'Serial' was not declared in this scope

こちら(オフィシャルページ)によると、以下のコードを先頭に追加すればよいそうです。

#include "WProgram.h"

(※コピー& ペーストの際にダブルクォーテーション " が別の文字に化けることがあります。)
これで受信もできるようになりました。


このライブラリに付属するサンプルは、メッセージを受信するとLED が点灯するだけなので、LCD を繋げて受信したメッセージを出すようにしました。


基板の向きがおかしいのは気のせいです。

MIDI Shield その1

Arduino のMIDI 通信を紹介します。


MIDI は主に電子楽器を接続するための規格で、演奏情報(何番のキーをどの強さで押した、など)をやりとりします。
MIDI メッセージを受けて音を出す装置(MIDI 音源) や、演奏情報を保存した音楽ファイル(SMF: Standard MIDI File)などもMIDI の仲間ですが、このMIDI Shield でできることはMIDI 信号の送受信だけで、音はでません。

sparkfun のMIDI インターフェースボード はMIDI IN, MIDI OUT, MIDI THRU の3つの端子があります。あとはフォトカプラが付いているだけで、MIDI メッセージの処理はすべてArduino 側で行います。

MIDI の送信は、Arduino IDE に標準でサンプルコードがついています。

File > Examples > 4.Communication > MIDI

低い音から高い音へ半音ずつあがるサンプルです。31.25kbps でシリアル通信を行っているだけなので簡単です。
IDE ver 0022 のサンプルはバグがあり、コンパイルするとエラーになります。


対処法は、エラーが出ている「int note」の間に半角スペースをいれてください。


PC とUSB MIDI インターフェイスで接続します。(写真はRoland UM-1。古い。)

MIDI 入力で音を鳴らすソフトを使用します。Mac なら標準でついているGarageband で鳴らせます。


ソフトウェア音源で音が鳴れば成功です。

2011年4月7日木曜日

Ethernet Shield で OSC

Arduino のEthernet Shield を使ったOSC (Open Sound Control) 通信を紹介します。

Arduino 用のOSC ライブラリは Recotana さん作、ArdOSC というOSC ライブラリがあります。

私は昨年10月ごろまで、旧 ver (OSCClass) をバージョンアップせずに使っていたのですが、Arduino Uno 購入を機に IDE のバージョンをあげたら、使えなくなってしまいました。

IDE ver 0019 でEthernet のライブラリに変更があったのですが、ArdOSC は 2011年4月現在、その対応がされていません。
しかし、上記 ArdOSC のページのコメント欄に、旧Ver をIDE ver 0021 に対応させたものが紹介されています。


こちらをダウンロードして、IDE ver 0022 で使ってみましょう。


Arduino のライブラリは、libraries フォルダに入れて使用します。
libraries フォルダはアプリケーション本体の中か、各自のホームディレクトリに作ります。

Mac 版では、Arduino.app アプリケーション本体を「パッケージの内容を表示」し、以下の場所か、
/Applications/Arduino.app/Contents/Resources/Java/libraries

ホーム > 書類につくられるスケッチの保存場所「Arduino」フォルダの中に、libraries フォルダを作り、
~/Documents/Arduino/libraries

そこにダウンロードしたライブラリをフォルダ丸ごとコピーします。
その後は普通に Arduino IED を起動するだけです。(起動中だった場合は再起動)

File > Examples に、OSCClass 用のサンプルスケッチが増えていることを確認します。



このなかから、「Simple_Send_Arduino」を使ってみましょう。

とりあえず、コンパイル(再生ボタン) します。
エラーになるので、エラーにしたがって、Sketch メニューから SPI ライブラリをインポートします。


Sketch > Import Library... > SPI

実はこれ、ソースコードの先頭に1行追加されるだけです。
#include <SPI.h>

これで、コンパイルが通るようになります。

serverMac[] にEthernet Shield のMAC アドレス、serverIp[] にArduino のIP アドレスを入れます。
destIp[] は宛先(通常はPC)のIP アドレスを入れます。
serverPort、destPort は必要に応じて変更します。
(通信相手となるOSC 受信ポートに合わせます。)

設定が終わったら再度コンパイルし、エラーがなければArduino に転送します。

このサンプルは、OSC のアドレス /ard/test1 にfloat値2つを、1秒毎に送るようになっています。
適当なOSC 受信ソフトで受信してみましょう。


Mac のOSC 受信ソフトは別途、紹介する予定です。
Quartz Composer での受信方法は、こちらを参考にして下さい。


Ethernet Shield

Arduino でEthernet の通信ができる、Ethernet Shield です。(うちにあるのは旧Ver です。)


IDE に標準で Webserver やNTP Client などのサンプルも用意されています。


使い方は簡単
・ハードウェアは、Arduino に重ねて差すだけ
・DHCP には対応していないので、手動でIP アドレスを割り当てる
・MAC アドレス記憶用のEEPROM などはないので、Arduino のスケッチに記述する
 (MAC アドレスはメーカーからの割り当てはなし。販売店が割り当てたものがあれば、それを使う。)

以上を注意して、サンプルを動かしてみましょう。

「WebServer」はアナログポートの値を表示します。
・IP アドレスとMAC アドレスを設定し、コンパイル&転送
・Arduino Ethernet Shield とMac をEthernet で直結(Mac 側のTCP/IP 設定も忘れずに)
・Safari などのWeb ブラウザでArduino にアクセス。




※外部電源を使えば、USB は不要です。(プログラム書き込み時は必要です)

2011年4月6日水曜日

Arduino と PC の連携

Firmata 入門では、Standard Firmata を使ったUSBシリアル通信を紹介した。
次にEthernet シールドを使った通信を紹介するが、その前にメリット・デメリットを簡単に説明する。


i) USB シリアル
メリット:PCから電源がとれる。追加のハードウェア不要。
デメリット:ケーブル長は最大5m

Arduino のシリアルはUSB<>シリアル変換なので、ハードウェア的にはUSB と同等。
USB は規格上 5m が上限だが、10m くらいのケーブルもある。
(USB ハブやリピーターケーブルなどを使って延長することもできるが、手軽さは半減。)
Firmata は常に通信してポートの状態を読むので、PC 側の負荷が気になる。


ii) Ethernet
シールド1
シールド2
メリット:長く延ばせる(規格上は100m)
デメリット:電源が必要、シールドが高価。

OSC ライブラリを使って、直接Quartz Composer やPureData などのプログラムと通信することができる。
小型のWiFi ルーターと組み合わせて無線にすることもできるが、やや大掛かりになってしまう。
WiFi シールドがあると良いのだが、現時点では存在しない。


iii) MIDI
シールド1
シールド2
メリット:MIDI 機器と直接連携できる
デメリット:電源が必要、PC 側にもUSB - MIDI などのインターフェイスが必要

MIDI は古い規格だが、対応ハード・ソフトが多いので現役で使える。ケーブル長は規格上15mまで。


iV) その他
Arduino での無線通信は、XBee を使うのが一般的。
ペアでそろえると結構な値段になるため、いままで避けていたが、今年は挑戦してみたい。

Firmata 入門 2

前回は、Pduino のセットアップまでを行いました。
それでは実際に使ってみましょう。

確認用にLED を繋げましょう。
まずは 5V 出力に繋いで点灯することを確認。


Pduino とArduino を接続します。
図の[1] の部分に、デバイス名が出ていますか?(通常、でていないと思います。)

出ていない場合は、Arduino が接続されているシリアルポートの指定が間違っています。
[2] でポートを切り替えます。■の部分をマウスで適当に押してみてください。
コンソール(起動時に出るウインドウ)の出力を見ながら行うと良いでしょう。

([3] のdevices をクリックすると、コンソールにシリアルポートと番号の対応が出力されます。)

私の環境では、2番がArduino でした。

[comport]: available serial ports:
1 /dev/tty.Bluetooth-PDA-Sync
2 /dev/tty.usbmodem411

接続ができたら、次にArduino のポートの入出力設定をします。
デジタル出力、アナログ (PWM) 出力、デジタル入力、アナログ入力 4つのパターンで解説します。


1) デジタル出力
LED の+ 側(上の写真で、5V に繋いでいた線)をポート3 に接続し、ポート3 をON/OFF する。

[1] のところで、port 3 の■を、output にセットする。(マウスクリックする)
[2] のチェックをON にすると、ON / OFF のパルスがPuredata から生成される。
その結果、ポート3 に接続したLED が点滅する。

2) アナログ (PWM) 出力
LED の+ 側をポート3 に接続し、PWM 出力で明るさを変化させる。

[1] のところで、port 3 の■を、pwm にセットする。(マウスクリックする)
[2] で、port 3 を選択する。
[3] のスライダーをドラッグすると、Puredata からアナログ値が出力される。
その値がポート3 のPWM 出力にセットされ、ポート3 に接続したLED の明るさが変化する。

3) デジタル入力
ポート2 の状態(High/Low) を取得する。

[1] のところで、port 2 の■を、input にセットする。
[2] に状態が出力される。
・High にする(Arduino のポート2 と+5Vをショートする(線でつなぐ))
・Low にする(Arduino のポート2 とGND をショートする(線でつなぐ))


4) アナログ入力
a0〜a5 のポートの状態をアナログ値で読む。
[1] で port 16から21 の■を analog にセットする。(Arduino UNO のa0 がport 16 に対応)
[2] に入力値が表示される。
・可変抵抗器(ボリューム)などがあれば、接続する。
・なければ+5V, +3.3V, GND を繋いでみる。 (5V のとき1.0、3.3V のとき0.66 になる)


以上が、Pduino を使ったFirmata の入門です。

Firmata を使うと、プログラムを書かなくても、PC からArduino をコントロールする事が出来ます。
また、Pduino (Puredata) のパッチを組めば、Arduino の入力(=センサーの出力)によって、音や絵を変化させるプログラムも簡単に作る事ができます。

Puredata の使い方はこのサイトや、この本などを参考にしてください。