知識だけでも結構面白いから読んで。
まずArduinoとは・・・
こんな感じの回路基盤!
これにいろいろつないでシリアル通信を行い、取得した情報を元にプログラムに処理を与えようというもの。
PCへのつなぎ方は簡単に見つかるので割愛。
これを利用するにあたって必要なのが、
インストールすると、
このようにProcessingによく似たウィンドウが表示される。
ここにArduinoのメモリに記録する基本的な処理を記述し、メモリに書き込む。
ためしにLEDを光らせるコードを使ってみよう。
ファイル/スケッチの例/01.Basics/Blink
を開くと、テンプレートが読み込まれる。
解説:
整数型の変数ledには13という数字が入っているが、これは上にあるArduinoの画像でいう13番のI/Oピンを使うという感じ。
setup()関数ではpinMode()によって、13番のI/Oピンを出力として使うよ!という書き込みを行う。
loop()はProcessingのdrawと同じくループして呼び出される関数。
ただし、メモリに書き込むので、ここでのコンパイルでループするのではなく、Arduino側でループされるということになる。
digitalWrite()は簡単にいうと電気を通す関数で、指定I/OピンがOUTPUTの時、HIGHでは5V(3.3Vのボードの場合3.3V)を出力し、LOWでは0V、つまり電気を通さない。
指定I/OピンはdigitalWriteの第一引数ledとなる。
delayは一定時間処理が止まる関数。単位はmsのはず。
チェックマークを押してコンパイルし、右向き矢印でメモリに書き込む。
書き込んだ状態でArduinoのGNDと13にLEDを繋ぐと、1秒感覚でLEDが付いたり消えたりする。
といった感じで動かせる。
しかし、これではまだArduinoIDEしか使えていない。
ここからが本番のProcessingとの連携である。
まず必要なこととして、シリアル通信というものがある。
電子通信での伝送において、ビット単位で通信を行うものである。
簡単にいうと、Arduinoが得た情報をPCに送る方法である。
これを行うためにArduino側にあらかじめどのポートを通信に利用するか示す必要がある。
ここで出てくるのがSerial.begin()関数で、引数としてシリアルポートを指定することができる。
書き方としてはこんな感じ。
これでシリアルポート9600を使うという設定ができる。
そしてもう一つ重要なこと。
それはポートを使って何を送る(受けとる)かということ。
これに利用するのはSerial.write()関数で、引数に整数や文字列などを与えることで送ることができる。
書き方としてはこんな感じ。
引数にはもちろん変数が使える。
文字列の場合はダブルクォーテーションを使おう!
もしくはString型の変数を使おう!
これで200という整数を送ることができる。
delayがあるので0.1秒置きに送信(というか書き込み?)するという感じ。
次はこれをProcessingで受け取る方法だ。
Processingはいわずと知れたビジュアライズが得意なソフトウェアである!
iTunesのビジュアライザとして一斉を風靡した「Magnetosphere」もこれでできてたりするのは結構有名。
それはさておき、Processingを起動するとこんな感じ。
ここに実際にPCで動く動作を書き記すのだ。
何を書くかはみんなの自由だが、本題のArduinoから送られた情報を得る方法を書こう。
必要なことを列挙すると、
・Processingのシリアル通信用のライブラリ(processing.serial.*)をインポートする。
・Arduinoが接続されているポートの名前を取得する。
・Serial型の変数にシリアルポートを代入する。
・Arduinoが接続されているされているポートから情報を読み取る。
といった感じ。
これらをまとめるとこんな感じになる。
解説:
importはそのままライブラリをインポートする。
Serial型とint型の変数を用意。
setup()でArduinoが接続されているポート名を取得
なお、*1の部分はArduinoが接続されているポート番号となる。
myPortにはポート名と通信用のシリアルポートとして設定された9600の情報をいれる。
draw()でint型の変数inByteにシリアルポートを通してArduino側の情報を読み取り代入する。
この場合200という整数になる。
println()はログとしてしたの黒い画面に引数を表示する。
inByteとなっているので200が表示されるはず。
といった感じでシリアルポートを通してArduinoとProcessingの連携を行える。
基盤の処理はArduinoIDEで、それらから得られた情報はProcessingで処理をする。といった感じ。
もちろん基盤側で光センサーや感圧センサーを用いて、それらを数値化してやり取りすることもできる。
さぁみんなもはじめよう!
0 件のコメント:
コメントを投稿